From ed0217af64704bf7997a1848b62cb3c032935b5a Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Fri, 13 Jan 2023 03:12:03 +0100 Subject: [PATCH] =?UTF-8?q?Modification=20lecture=20&=20=C3=A9criture=20fi?= =?UTF-8?q?chier=20binaire=20pour=20noteMinimale,=20ajout=20menuCandidat?= =?UTF-8?q?=5FsuivreCandidature,=20correction=20des=20%[^\n],=20ajout=20sa?= =?UTF-8?q?isie=20control=C3=A9e=20sur=20menuResponsable=5FtraiterCandidat?= =?UTF-8?q?ures,=20corrections=20globale=20des=20messages=20d'erreur,=20aj?= =?UTF-8?q?out=20ent=C3=AAte=20menuResp,=20appel=20calculerNoteGlobale=20p?= =?UTF-8?q?our=20Lister=20les=20candidatures,=20modification=20connexion?= =?UTF-8?q?=20candidat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/I/un.c | 162 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 133 insertions(+), 29 deletions(-) diff --git a/src/I/un.c b/src/I/un.c index 95b54dc..6ba4f36 100644 --- a/src/I/un.c +++ b/src/I/un.c @@ -125,7 +125,7 @@ void menuCandidat(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* nb printf("\n\nSouhaitez-vous vous connecter/enregistrer maintenant ou entrer en mode invité (O/N) ? : "); scanf("%*c%c", &connexion); - if(connexion == 'O') + if(connexion == 'O' || connexion == 'o') identificationCandidat(&id, listePointer, nbCandidats); else if(connexion != 'n' && connexion != 'N') @@ -204,13 +204,11 @@ void menuCandidat(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* nb break; case 5: printf("Suivre sa candidature...\n\n"); + if(id == 0) fprintf(stderr, "\e[0;91mErreur : vous devez d'abord vous authentifier, merci de réessayer plus tard.\n\e[0m"); - - if(candidat->nbCandidatures == 0) - fprintf(stderr, "\e[0;91mErreur : vous n'avez aucune candidature en cours, merci de réessayer plus tard.\n\e[0m"); else - afficherCandidatures(candidat->listeCandidatures, candidat->nbCandidatures); + menuCandidat_suivreCandidature(*listePointer, *nbCandidats, candidat); break; default: @@ -253,7 +251,7 @@ void menuResponsable(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* printf("Merci d'entrer le mot de passe administrateur : "); system("stty -echo"); - scanf("%[^\n]", pass); + scanf("\n%[^\n]", pass); system("stty echo"); if(strcmp(pass, "resp2023") != 0) { @@ -263,16 +261,30 @@ void menuResponsable(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* } else printf("\n\n\e[1;32mMot de passe correct !\e[0m\n\n"); - printf("--------------------------------------------------------------------\n"); + /* RESET LA NOTE MINI DE TOUT DEPT + ListeDept ldept; + for(int caca=0; caca<*nbVilles; caca++) { + ldept = (*tiutPointer)[caca]->ldept; + + while(ldept != NULL) { + (*tiutPointer)[caca]->ldept->noteMinimale = -1; + ldept = ldept->suiv; + } + + } + */ + + printf("\e[1;34mResponsable: M. BOUHOURS, IUT: Clermont-Ferrand, Département: Informatique\e[0m\n"); + printf("--------------------------------------------------------------------------\n"); printf("\t1 - Lister les candidatures\n\n"); printf("\t2 - Traiter les candidatures\n\n"); printf("\t9 - Quitter\n"); - printf("---------------------------------------------------------------------\n"); + printf("--------------------------------------------------------------------------\n"); if(scanf("%d", &choix) == 0) choix=0; - printf("-----------------------------------------------------------------------\n"); + printf("--------------------------------------------------------------------------\n"); while(choix != 9){ switch (choix) { @@ -283,6 +295,8 @@ void menuResponsable(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* printf("Entrez le nom de la ville que vous souhaitez traiter : Clermont-Ferrand\n"); printf("Quel département souhaitez-vous modifier ? : Informatique\n"); + calculerNoteGlobale(*listePointer, *nbCandidats); // Calcul des notes globales avant affichage + printf("\n\e[1;32mAffichage des candidatures pour le département 'Informatique' de l'IUT 'Clermont-Ferrand'\n\n\e[0m"); afficherCandidaturesByDept(*listePointer, *nbCandidats, "Clermont-Ferrand", "Informatique"); break; @@ -294,15 +308,16 @@ void menuResponsable(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* default: // Permet d'aspirer les caractères en trop sur stdin (évite de répéter le message d'erreur X fois) while ((poubelle = getchar()) != '\n' && poubelle != EOF); - fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\e[0m"); + fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\n\e[0m"); break; } - printf("\n--------------------------------------------------------------------\n"); + printf("\e[1;34mResponsable: M. BOUHOURS, IUT: Clermont-Ferrand, Département: Informatique\e[0m\n"); + printf("--------------------------------------------------------------------------\n"); printf("\t1 - Lister les candidatures\n\n"); printf("\t2 - Traiter les candidatures\n\n"); printf("\t9 - Quitter\n"); - printf("---------------------------------------------------------------------\n"); + printf("--------------------------------------------------------------------------\n"); if(scanf("%d", &choix) == 0) choix=0; @@ -320,7 +335,7 @@ void menuAdmin(VilleIUT*** tiutPointer, ListeCandidats* listePointer, int* nbVil printf("Merci d'entrer le mot de passe administrateur : "); system("stty -echo"); - scanf("%[^\n]", pass); + scanf("\n%[^\n]", pass); system("stty echo"); if(strcmp(pass, "admin2023") != 0) { @@ -484,12 +499,12 @@ void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */ menuResponsable(&tiut, &liste, &nbVilles, &nbCandidats); titreMenuPrincipal(); } else - fprintf(stderr, "\e[0;91mErreur : les recrutements sont en cours, impossible d'accéder au menu responsable. Merci de réessayer plus tard.\n\e[0m"); + fprintf(stderr, "\e[0;91mErreur : les recrutements sont en cours, impossible d'accéder au menu responsable. Merci de réessayer plus tard.\n\n\e[0m"); break; default: // Permet d'aspirer les caractères en trop sur stdin (évite de répéter le message d'erreur X fois) while ((poubelle = getchar()) != '\n' && poubelle != EOF); - fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\e[0m"); + fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\n\e[0m"); break; } @@ -521,7 +536,7 @@ void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */ // FONCTIONS MENU RESP void menuResponsable_traiterCandidatures(VilleIUT** tiut, int nbVilles, ListeCandidats liste, int nbCandidats) { - char dept[LEN_MAX], ville[LEN_MAX], choix; + char dept[LEN_MAX], ville[LEN_MAX], choix, poubelle; int nbCandidatsAccept, pos, verif; ListeDept ldept; @@ -535,7 +550,11 @@ void menuResponsable_traiterCandidatures(VilleIUT** tiut, int nbVilles, ListeCan printf("\n\e[1;32mTraitement des candidatures pour le département '%s' de l'IUT '%s'\n\n\e[0m", dept, ville); printf("Combien de candidats souhaitez-vous accepter ? : "); - scanf("%d", &nbCandidatsAccept); + if(scanf("%d", &nbCandidatsAccept) == 0) { + while ((poubelle = getchar()) != '\n' && poubelle != EOF); + fprintf(stderr, "\n\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer plus tard.\n\n\e[0m"); + return; + } pos = rechercherVille(tiut, nbVilles, ville); @@ -544,8 +563,8 @@ void menuResponsable_traiterCandidatures(VilleIUT** tiut, int nbVilles, ListeCan while(ldept != NULL && strcmp(ldept->departement, dept) != 0) ldept = ldept->suiv; - if(ldept->noteMinimale != -1) { - printf("\nQuelle est la note minimale pour l'acception du candidat ? : "); + if(ldept->noteMinimale == -1) { + printf("\n\e[1;91mAttention, après avoir entré cette valeur, elle ne sera plus modifiable !\e[0m\n\nQuelle est la note minimale pour l'acception du candidat ? : "); verif = scanf("%f", &ldept->noteMinimale); while((ldept->noteMinimale) < 0 || (ldept->noteMinimale) > 20 || verif == 0) { fprintf(stderr, "\e[0;91mLa note entrée est incorrecte\n\e[0mEntrez une note minimale entre 0 et 20 : "); @@ -558,9 +577,15 @@ void menuResponsable_traiterCandidatures(VilleIUT** tiut, int nbVilles, ListeCan scanf("%*c%c", &choix); if(choix == 'n' || choix == 'N') - menuResponsable_traiterCandidatures(tiut, nbVilles, liste, nbCandidats); + printf("\n\e[1mAnnulation de l'opération.\e[0m\n\n"); + else + if(choix == 'o' || choix == 'O') + traiterCandidatures(tiut, nbVilles, liste, nbCandidats, nbCandidatsAccept, ldept->noteMinimale); + else { + while ((poubelle = getchar()) != '\n' && poubelle != EOF); + fprintf(stderr, "\n\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer plus tard.\n\n\e[0m"); + } - traiterCandidatures(tiut, nbVilles, liste, nbCandidats, nbCandidatsAccept, ldept->noteMinimale); } // FONCTIONS MENU ADMIN @@ -569,7 +594,7 @@ void menuAdmin_modifierPlaces(VilleIUT** tiut, int nbVilles) { int nbPlaces; char searchIUT[LEN_MAX], searchDept[LEN_MAX]; printf("Entrez une ville (tapez q pour annuler) : "); - scanf("%[^\n]", searchIUT); + scanf("\n%[^\n]", searchIUT); if(strcasecmp(searchIUT, "q") == 0) return; @@ -578,7 +603,7 @@ void menuAdmin_modifierPlaces(VilleIUT** tiut, int nbVilles) { if(code != -1) { printf("Quel département souhaitez-vous modifier ? : "); - scanf("%[^\n]", searchDept); + scanf("\n%[^\n]", searchDept); printf("Entrez le nouveau nombre de places pour le département '%s' : ", searchDept); scanf("%d", &nbPlaces); @@ -589,7 +614,7 @@ void menuAdmin_modifierPlaces(VilleIUT** tiut, int nbVilles) { void menuAdmin_creerIUT(VilleIUT*** tiutPointer, int* nbVilles) { char nameIUT[LEN_MAX]; printf("Entrez le nom de la ville (tapez q pour annuler) : "); - scanf("%[^\n]", nameIUT); + scanf("\n%[^\n]", nameIUT); if(strcasecmp(nameIUT, "q") == 0) return; @@ -611,7 +636,7 @@ void menuAdmin_creerDepartement(VilleIUT** tiut, int nbVilles) { MaillonDept* dept; printf("Entrez la ville dans laquelle vous souhaitez ajouter un département (tapez q pour annuler) : "); - scanf("%[^\n]", searchIUT); + scanf("\n%[^\n]", searchIUT); if(strcasecmp(searchIUT, "q") == 0) return; @@ -665,7 +690,7 @@ void menuAdmin_supprimerDepartement(VilleIUT** tiut, int nbVilles) { VilleIUT* ville; printf("Entrez la ville dans laquelle vous souhaitez supprimer un département (tapez q pour annuler) : "); - scanf("%[^\n]", searchIUT); + scanf("\n%[^\n]", searchIUT); if(strcasecmp(searchIUT, "q") == 0) return; @@ -694,7 +719,7 @@ void menuAdmin_modifierResponsable(VilleIUT** tiut, int nbVilles) { char searchIUT[LEN_MAX], searchDept[LEN_MAX], nom[LEN_MAX]; printf("Dans quel IUT souhaitez-vous faire une modification ? (tapez q pour annuler) : "); - scanf("%[^\n]", searchIUT); + scanf("\n%[^\n]", searchIUT); if(strcasecmp(searchIUT, "q") == 0) return; @@ -703,15 +728,90 @@ void menuAdmin_modifierResponsable(VilleIUT** tiut, int nbVilles) { if(code != -1) { printf("Quel département souhaitez-vous modifier ? : "); - scanf("%[^\n]", searchDept); + scanf("\n%[^\n]", searchDept); printf("Quel est le nom du nouveau responsable : "); - scanf("%*c%[^\n]", nom); + scanf("\n%[^\n]", nom); modifierNomResponsable(tiut, nbVilles, searchIUT, searchDept, nom); } } +// FONCTION MENU CANDIDAT + +void menuCandidat_suivreCandidature(ListeCandidats liste, int nbCandidats, Candidat* candidat) { + int i, j, mustReply = 0, nbPropositions = 0; + char reponse1, reponse2, poubelle; + + // Création d'une liste qui va contenir les candidatures pour lesquelles le candidat a été accepté + // (pour le moment, seul une proposition peut être faite étant donné que seul le département Informatique de Clermont-Ferrand est habilité à donner une réponse) + ListeCandidatures propositions = (ListeCandidatures) malloc(candidat->nbCandidatures*sizeof(Candidature*)); + + if(propositions == NULL) { + perror("malloc"); + exit(errno); + } + + if(candidat->nbCandidatures == 0) + fprintf(stderr, "\e[0;91mErreur : vous n'avez aucune candidature en cours, merci de réessayer plus tard.\n\e[0m"); + else + afficherCandidatures(candidat->listeCandidatures, candidat->nbCandidatures); + + for(i=0; inbCandidatures; i++) + if(candidat->listeCandidatures[i]->decision == 1 && candidat->listeCandidatures[i]->validation == 0) { + mustReply = 1; + propositions[nbPropositions++] = candidat->listeCandidatures[i]; + } + + if(mustReply == 1) { + printf("Vous avez %d candidature(s) contenant une proposition d'admission, souhaitez-vous y répondre ? (O/N) : ", nbPropositions); + scanf("%*c%c", &reponse1); + + for(i=0; idepartement, propositions[i]->ville); + + for(j=0; jnbCandidatures; j++) { + candidat->listeCandidatures[j]->decision = -1; + candidat->listeCandidatures[j]->validation = -1; + } + + propositions[i]->decision = 1; + propositions[i]->validation = 1; + + break; + } else { + if(reponse2 == 'r' || reponse2 == 'R') + printf("\n\e[1;32mProposition pour le département '%s' à l'IUT '%s' refusée !\e[0m\n", + propositions[i]->departement, propositions[i]->ville); + else { + while ((poubelle = getchar()) != '\n' && poubelle != EOF); + fprintf(stderr, "\n\e[0;91mErreur : la réponse saisie est incorrecte. Merci de réessayer plus tard.\n\e[0m"); + break; + } + } + } else { + if(reponse1 == 'n' || reponse1 == 'N') + printf("\n\t\e[1mTrès bien. Vous pouvez toujours donner votre réponse ultérieurement.\e[0m\n"); + else { + while ((poubelle = getchar()) != '\n' && poubelle != EOF); + fprintf(stderr, "\n\e[0;91mErreur : la réponse saisie est incorrecte. Merci de réessayer plus tard.\n\e[0m"); + break; + } + } + } + } + + free(propositions); +} + VilleIUT* creerVille(void) { VilleIUT* ville = (VilleIUT*) malloc(sizeof(VilleIUT)); @@ -981,6 +1081,8 @@ void saveVilles(VilleIUT* tiut[], int nbVilles) { fwrite(&lenNomResponsable, sizeof(int), 1, fe); fwrite(maillon->responsable, sizeof(char), lenNomResponsable, fe); + fwrite(&maillon->noteMinimale, sizeof(int), 1, fe); + maillon = maillon->suiv; } } @@ -1044,6 +1146,8 @@ VilleIUT** readVilles(int* nbVilles) { int lenNomResponsable; fread(&lenNomResponsable, sizeof(int), 1, fe); fread(maillon->responsable, sizeof(char), lenNomResponsable, fe); + + fread(&maillon->noteMinimale, sizeof(int), 1, fe); if(maillonPrecedent == NULL) ville->ldept = maillon;