From 19aae20518bfe0bdc60b1b2e837149f2708a5ea0 Mon Sep 17 00:00:00 2001 From: Roxane ROSSETTO Date: Fri, 30 Dec 2022 13:05:44 +0100 Subject: [PATCH] partie 2 finie --- part2.c | 39 ++++++++++++++----- part2.h | 3 ++ part3.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++++------- part3.h | 12 ++++-- test | Bin 22208 -> 22320 bytes 5 files changed, 139 insertions(+), 28 deletions(-) diff --git a/part2.c b/part2.c index d512b2b..fa648f5 100644 --- a/part2.c +++ b/part2.c @@ -107,6 +107,10 @@ void AffC(Candidat c) printf("%d\n", c.nbchx); } +void affnomcand (Candidat c){ + printf("%s\n%s\n", c.nom, c.prenom); +} + void AffCh(Choix c) { printf("%s \n", c.ville); @@ -128,6 +132,11 @@ void AffListeCandidat (Listecand l){ AffListeCandidat(l->suivcand); } +void AffCandid (Listecand l){ + if ( l == NULL ) { printf("Pas de candidat\n"); return;} + affnomcand( l->cand); + AffCandid ( l->suivcand); +} void AffListChoix(Listechx l) { @@ -155,6 +164,12 @@ Listechx recherchechx (Listechx l, char *nom )//recherche du nom de département return recherchechx (l->suivchx, nom ); } +Listecand recherchevilledpt ( Listecand l, char *ville, char *dpt){ + if ( l == NULL ) return l; + if ( strcmp( l->cand.lchx->chx.ville , ville ) == 0 && strcmp( l->cand.lchx->chx.dptmt, dpt) == 0) return l; + return recherchevilledpt ( l->suivcand, ville, dpt); +} + Listechx majchoix (Listechx chx, Choix c){//Mise à jour du de la liste choix en modifiant un maillon strcpy(chx->chx.ville, c.ville); @@ -328,7 +343,6 @@ void test (void){ printf("Entrer le nom du departement de l candidature concernée\n"); scanf("%s", nomdpt); - //PROBLEME SUR L'ASSIGNATION DU RESULTAT DE RECHERCHE... J'ARRIVE PAS l2cand->cand.lchx = recherchechx(l2cand->cand.lchx, nomdpt); while ( l2cand->cand.lchx->chx.dptmt == NULL){ printf("departement inconnu veuillez saisir à nouveau\n"); @@ -356,19 +370,24 @@ void test (void){ } else if (menu1 == 2){ - printf("Entrer le nom du departement dont vous souhaitez afficher les candidats"); - scanf("%s", nomdpt); - printf("Entrer le nom de la ville dans laquelle se trouve le departement en question\n"); + + printf("Entrer le nom de la ville dans laquelle se trouve le departement d'étude\n"); scanf("%s", nomville); - //FAIRE UNE FONCTION DE RECHERCHE RECURSIVE - /*FONCTION AFFICHE (CANDIDATS , VILLE, DEPARTEMENT) - EX : SI L->CHX.VILLE == VILLE && L->CHX.DEPARTEMENT == DEPARTEMENT - ALORS AFFICHE MAILLON CANDIDAT - RETURN AFFICHE CANDIDAT->SUIVANT, VILLE, DEPARTEMENT) - } + printf("Entrer le nom du departement dont vous souhaitez afficher les candidats\n"); + scanf("%s", nomdpt); + + + + l2cand = recherchevilledpt ( lcand, nomville, nomdpt); + + + AffCandid (l2cand); +} +Save(lcand, nbC); +fclose(fe); } diff --git a/part2.h b/part2.h index 9103b8a..991cd54 100644 --- a/part2.h +++ b/part2.h @@ -56,11 +56,14 @@ Listechx InsertC(Listechx list, Choix m);//insertion globale d'un maillon de typ void AffC(Candidat c);//affichage simple d'un candidat void AffCh(Choix c);//affichage simple d'un choix +void affnomcand (Candidat c); void AffListeCandidat (Listecand l);//affiche complet de la liste de candidats +void AffCandid (Listecand l);//affiche que le nom void AffListChoix(Listechx l);//affichage complet de la liste de choix Listecand recherchenom (Listecand l, char *nom );//recherche par un nom dans une liste de candidats Listecand recherchenum (Listecand l, int num);//recherche par le numéro dans une liste de candidats Listechx recherchechx (Listechx l, char *nom );// recherche par le nom d'un depratement dans une listedederpartement +Listecand recherchevilledpt ( Listecand l, char *ville, char *dpt);//recherche et retour de la liste des candidats ayant postuler a un certain departement Listechx majchoix (Listechx chx, Choix c);// mise jour d'un choix Listecand Chargementlistecandidat(FILE *fe, Listecand lC, int *nbC);//chargement du fichier dans une liste de candidats Listechx suppressionchxT (Listechx l);//Fonction suppression d'un maillon diff --git a/part3.c b/part3.c index d471174..b343e46 100644 --- a/part3.c +++ b/part3.c @@ -80,7 +80,7 @@ Listecand Chargementlistecandidat(FILE *fe, Listecand lC, int *nbC)// fonction d { Candidat Ca; fscanf(fe, "%d %s%*c", &Ca.nEtu, Ca.nom); - fgets(Ca.prenom, 31, fe); + fgets(Ca.prenom, 26, fe); Ca.prenom[strlen(Ca.prenom)-1]= '\0'; fscanf(fe,"%f %f %f %f %f %d%*c", &Ca.moymat, &Ca.moyfr, &Ca.moyen, &Ca.moyspe, &Ca.noteDoss, &Ca.nbchx); Ca.lchx=NULL; @@ -93,7 +93,6 @@ Listecand Chargementlistecandidat(FILE *fe, Listecand lC, int *nbC)// fonction d } lC = Insert(lC, Ca); } - fclose(fe); return lC; } @@ -198,27 +197,99 @@ void MajDecJury(Listecand lC, int nbC, int nbAcc) } +Listecand searchCand(Listecand lC, char *nom, char *prenom) +{ + if (lC == NULL)return lC; + if (strcmp(lC->cand.nom, nom)==0 && strcmp(lC->cand.prenom, prenom)==0)return lC; + return searchCand(lC, nom, prenom); +} + + +Listecand MajNote(Listecand lC, char *nom, char *prenom, float newNote) +{ + Listecand c; + c = searchCand(lC, nom, prenom);//recherche du candidat + if (c == NULL) + { + printf("Aucun candidat n'a été trouvé...\n"); + } + else + { + c->cand.noteDoss = newNote; + } + return lC; +} + + +Listecand splitAccepted(Listecand origin) +{ + Listecand lCAcc=NULL; + while (origin != NULL) + { + Listechx iutclinf; + iutclinf = searchChx(origin->cand.lchx, "Clermont-Ferrand", "Informatique"); + if (iutclinf->chx.dec == 1 && iutclinf !=NULL) + { + lCAcc = Insert(lCAcc, origin->cand); + } + origin = origin->suivcand; + } + return lCAcc; +} + +Listecand splitWait(Listecand origin) +{ + Listecand lCW=NULL; + Listechx iutclinf; + iutclinf = searchChx(origin->cand.lchx, "Clermont-Ferrand", "Informatique"); + while (iutclinf->chx.dec == 1 && iutclinf != NULL) + { + origin = origin->suivcand; + if (origin == NULL)break;//on évite le tour de search inutile + iutclinf = searchChx(origin->cand.lchx, "Clermont-Ferrand", "Informatique");//tant qu'ils sont acceptés, on relis le candidat + } + while (iutclinf->chx.dec == 2 && iutclinf != NULL)//si en liste d'attente + { + lCW = Insert(lCW, origin->cand);//insertion dans la liste pour liste d'attente + origin = origin->suivcand; + if (origin == NULL)break;//on évite le tour de search inutile + iutclinf = searchChx(origin->cand.lchx, "Clermont-Ferrand", "Informatique"); + } + return lCW; +} + + void RespAdmin(void)//fonction dédiée au responsable d'admission { int nbC = 0, nbP; - float noteMin; + float noteMin, note; + char nom[26], prenom[26]; Listecand lC=NULL; + Listecand lCAcc=NULL, lCW=NULL;//ce qui servira pour les 2 listes, l'une des acceptés et l'autre des attentes char rep; FILE *fe; fe=fopen("part3.don", "r");//ouverture fichier if (fe == NULL){printf("pb ouv file"); return;} lC = Chargementlistecandidat(fe, lC, &nbC); + fclose(fe); printf("Souhaitez vous modifier les notes de dossier déjà renseignées ?(O/N)\nATTENTION \nCe sera la seule fois où vous pourrez modifier ces notes\n"); scanf("%c", &rep);//on récupère la réponse de la volonté du responsable des adimissions - if (rep == 'O') + while (rep == 'O') { - //fonction de modifs de notes à faire - return; + printf("Quel est le nom du candidat ?\nNom : \t"); + scanf("%s%*c", nom); + printf("Quel est le prénom du candidat ?\nPrénom : \t"); + fgets(prenom, 26, stdin); + prenom[strlen(prenom)-1]='\0'; + printf("Quelle sera la nouvelle note ?\nNote : \t"); + scanf("%f%*c", ¬e); + lC = MajNote(lC, nom, prenom, note); + printf("Souhaitez-vous changer/renseigner une autre note ?\n"); + scanf("%c", &rep); } - //faire le tri des candidats en fonction de leurs noteDoss - //lC=nouveau + maj nbC + printf("Quelle est la note minimale d'admission souhaitée ?\nNote :\t"); scanf("%f", ¬eMin);//on récupère le note minimale requise pour être accepté ou en liste d'attente @@ -227,11 +298,26 @@ void RespAdmin(void)//fonction dédiée au responsable d'admission printf("Quel est le nombre de places disponibles ?\n"); scanf("%d", &nbP);//on récupère le nombre qu'il peut y avoir d'acceptés pour savoir qui sera accepté et qui sera en attente - //appeler fonction qui maj dec du jury - MajDecJury(lC, nbC, nbP); + MajDecJury(lC, nbC, nbP);//fonction qui maj dec du jury + lCAcc = splitAccepted(lC);//la liste des acceptés + + lCW = splitWait(lC);//la liste d'attente + + + FILE *fA; + FILE *fW; + + fA = fopen("partAcc.don", "w");//ouverture du fichier de sauvegarde des acceptés + if (fA == NULL){printf("pb ouv fichier acc\n"); exit(-1);} + + fW = fopen("partWait.don", "w");//ouverture du fichier de sauvegarde de l'attente + if (fW == NULL){printf("pb ouv fichier wait\n"); exit(-1);} + + saveC(lCAcc, fA);//sauvegarde des acceptés + saveC(lCW, fW);//sauvegarde de l'attente - //appeler fonction qui split en deux - //save séparément + fclose(fA); + fclose(fW); } ////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -241,7 +327,7 @@ void AffC(Candidat c) { printf("%d\n", c.nEtu); printf("%s\n%s\n", c.nom, c.prenom); - printf("%.2f\t%.2f\t%.2f\t%.2f\n", c.moymat,c.moyfr, c.moyen, c.moyspe); + printf("%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", c.moymat,c.moyfr, c.moyen, c.moyspe, c.noteDoss); printf("%d\n", c.nbchx); } @@ -258,7 +344,6 @@ void AffListeCandidat (Listecand l){ if (l == NULL) return; AffC(l->cand); - if (l->cand.lchx == NULL){printf("whybitch");} AffListChoix(l->cand.lchx); AffListeCandidat(l->suivcand); } diff --git a/part3.h b/part3.h index ccfbcbc..43484fb 100644 --- a/part3.h +++ b/part3.h @@ -1,6 +1,6 @@ typedef struct { - char ville[20];//ville choisie - char dptmt[20];//département choisi + char ville[26];//ville choisie + char dptmt[26];//département choisi int dec;//décision du choix int valid;//validation du candidat }Choix; @@ -16,8 +16,8 @@ typedef Maillonchx * Listechx; typedef struct { int nEtu;//numéro d'étudiant - char nom[20];//nom de l'étudiant - char prenom[20];//prénom de l'étudiant + char nom[26];//nom de l'étudiant + char prenom[26];//prénom de l'étudiant float moymat;//moyenne en maths float moyfr;//moyenne en français float moyen;//moyenne en anglais @@ -53,3 +53,7 @@ void AffCh(Choix c); void AffListeCandidat (Listecand l); void AffListChoix(Listechx l); void MajDecJury(Listecand lC, int nbC, int nbAcc);//mise à jour de la décision du jury +Listecand searchCand(Listecand lC, char *nom, char *prenom);//recherche d'un candidat par son nom et prénom +Listecand MajNote(Listecand lC, char *nom, char *prénom, float newNote);//mise à jour de la note de dossier du candidat +Listecand splitAccepted(Listecand origin);//fonction qui retourne la liste des admis +Listecand splitWait(Listecand origin);//fonction qui retourne la liste d'attente diff --git a/test b/test index 268402d87527e64385dbbd59214e7767518106f4..279c833aa043ef4db35aa1aa1300f717fccfc585 100644 GIT binary patch delta 4021 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 DgbB00 delta 3685 zcmai1e^6A{6@Krn=!(ehBCssr?t%d{Cb*gaV!*J-;sYVB3Rr8bl2JPyt5QY#V@$Uh zy0+Wxj?i19Nt_AOMyHzCtZr>gn;J4=)V7lnr(=v_z(ULt6&FDviT3ro_uYLi$sfHl zyzlP!opbKF=bro64gOK=I4ZWz6wBIX^~Bev3T)J-k|Z%dUO!p=sGm%##Z%eIPpTik zjw329j0ogW=}7W{@1GtvZrr)JX5AP4sUuKA2TsIkWxTf*2q8hd~wTS~+Z zvdm)6DA3qa8rkm}ll^67vhQp-g|t{^k@)m9@eY}hUL&3&P3bR-Gw@6%whRk-JHupY zzRP_A?&N4zzK_Cd?vlQYeCyw+>O;hq=f{K{Cghug3Z7*9XuM12WLl-65wbKhMY=pf zHfFw~|MiHXcsqVNmt4urBg>}mGHj%^@SRm%nukgE^hXTdSk5_24A$vM+lES`#P$~wW`kl}lY`s&m;59oaK7K=F<>4a~nb2FXyuz57T=a3d^rMf`NnAohxLM>y` zjz2II4c;Uj+f*M7{HhwPSIg{_8u5~valICBA`5s40S(?)SaC{eal+qG?K`NwCs3L) zHM*ILOsMZbt;4eKBJJ?Dd#r-Ja=>dx8&c{F-K5{uOE0i;LZ;n$qKrM~v!{bSXR>G1 zr*-G4x(TmTlj8&YToUyhpy3V~vme7rv;9_ZB&sV_)kPuy5JFS5Lv`rL~ZKdud^0zt^a0 zX{ttR28|Xln$iC)CsA^2o{vz>f#2akSzKyJCI4-XH7 zUeBx7hl2Wc@wnp`VrbvofaDP~bWcSPW;*^7x)r4aeR3bT9++@dQ4)Ydz+J$-pD0Q@ z@Yx!&C!wVF6^gpmeuRYPHC=TFNpc~lIuP9BxK42?w{ili&1Reo)0mbWzM~PtK zx~?cjT*U)G2XFxB1|I(m0f4*12mm~Uq6C3mz%JlZs9*&6CeVm?X&9~L0KSAqb^}k~ z<=zbZC-Aqx$L=UfHxU1V*bsk0E*GSVV`Qjcj(Cn_73QV4UQrZ1mnqos_bmQ4ca!G| zv&CD)TR1~%y-JQ0W=o5E$OnLzddVF~Uy+m|o8-Ml3X80sDJaQ0xCzcg<8Eou)QQsS zgh_~-391PtTLS%sar!PzZ-xE_^vZF%Q`3XcFF;>8PG7F+U7|2Un2a;1h&Avqoh1-K zfXDmDJ>LU-#TjwUm^sMD#f#$J!AuTi zEjXvcZJQ~Qfzl$WA~%%1FmVEq%q!0qlSyN_S=5JqT;3x}6N<^VD|UkWup&?TQX*eg zSkoV*BRB@DJ}@4eND>l-GWfd|ir*zaaM`4OEBTFUTZ&1r2<>iWE<~I6buzcoY&p)o zUZ$yHu(JUEoitY3Ocl9|)E-xf(`B~M_Mj^@;p-P2S7`Y#UL@}!;sdVUw=+^;wZk-y z3{{$|rlRE3_b|R?(Q#G5|hto4BhT-xukat%5KO4Mxkhiigz7$@%yAPo3S|einEmnq>diwphUJ&+`nhDK-`` zULgCbOqLpM^CNzA?6m}|RWwVKnLb;{P?b4u4=nA(DNPd(ldNjTxZPo2!sHCPLL#YZf*) zes4=?taelkMV7A9Nm(gm`HKAbXp`gO{c1&}m_$BYF~{_cUwLGi+eRF9Mw7lkT_lP^ fXj$FUlGsYx8j9lG)v9=1M=mrJiiKqI%Dn#p!B)87