#include "SAE.h" /* Partie 2 */ /* Afficher les infos d'un candidat Afficher la liste des candidats par departement trié par ordre alphabetique */ int chargerCandidats(Etudiant *tetud[]) { FILE *file; file = fopen("resultats.txt", "r"); int nbCandidats, i = 0; Choix choix; if (file == NULL) { printf("Erreur d'ouverture du fichier !\n"); exit(1); } fscanf(file, "%d", &nbCandidats); while (i < nbCandidats) { tetud[i] = (Etudiant *)malloc(sizeof(Etudiant)); if (tetud[i] == NULL) { printf("Erreur malloc"); exit(2); } fscanf(file, "%d%s%s", &tetud[i]->num, tetud[i]->nom, tetud[i]->prenom); // TODO : Faire un fgets pour le prénom for (int note = 0; note < 4; note++) { fscanf(file, "%f", &tetud[i]->tabNotes[note]); } fscanf(file, "%d", &tetud[i]->nbChoix); tetud[i]->lChoix = listenouvChoix(); for (int n = 0; n < tetud[i]->nbChoix; n++) { fscanf(file, "%s%s%d%d", choix.ville, choix.departement, &choix.decisionAdmission, &choix.decisionCandidat); tetud[i]->lChoix = insererChoix(tetud[i]->lChoix, choix); } i++; } return i; } void sauvegarderCandidats(Etudiant *tetud[], int nbCandidats) { FILE *file; file = fopen("dptInfos.txt", "w"); if (file == NULL) { printf("Erreur d'ouverture du fichier !\n"); exit(1); } fprintf(file, "%d\n", nbCandidats); for (int i = 0; i < nbCandidats; i++) { fprintf(file, "%d\n%s\n%s\n", tetud[i]->num, tetud[i]->nom, tetud[i]->prenom); for (int note = 0; note < 4; note++) { fprintf(file, "%.2f\t", tetud[i]->tabNotes[note]); } fprintf(file, "\n%d\n", tetud[i]->nbChoix); sauvegarderChoix(tetud[i]->lChoix, file); } } int rechercheCandidat(Etudiant *tetud[], int nbCandidats, int numRecherche, bool *trouve) { int i; for (i = 0; i < nbCandidats; i++) { if (numRecherche == tetud[i]->num) { *trouve = true; return i; } } *trouve = false; return i; } void afficherEtudiant(Etudiant mEtudiant) { printf("Numéro : %d\nNom : %s\nPrénom :%s\nNotes : %.2f\t%.2f\t%.2f\t%.2f\nNombre de choix : %d\n", mEtudiant.num, mEtudiant.nom, mEtudiant.prenom, mEtudiant.tabNotes[0], mEtudiant.tabNotes[1], mEtudiant.tabNotes[2], mEtudiant.tabNotes[3], mEtudiant.nbChoix); afficherChoix(mEtudiant.lChoix); printf("\n"); } void afficherCandidat(Etudiant *tetud[], int nbCandidats) { int num, index; bool trouve; printf("Veuillez entrer le numéro de l'étudiant recherché :\n> "); scanf("%d", &num); index = rechercheCandidat(tetud, nbCandidats, num, &trouve); if (trouve == false) { printf("Le numéro de l'étudiant recherché n'existe pas.\n"); return; } afficherEtudiant(*tetud[index]); } void afficherCandidats(Etudiant *tetud[], int nbCandidats) { for (int i = 0; i < nbCandidats; i++) { afficherEtudiant(*tetud[i]); } } void sauvegarderChoix(ListeChoix lChoix, FILE *file) { if (lChoix != NULL) { fprintf(file, "%s\n%s\n%d\n%d\n", lChoix->choix.ville, lChoix->choix.departement, lChoix->choix.decisionAdmission, lChoix->choix.decisionCandidat); sauvegarderChoix(lChoix->suiv, file); } } void afficherCandidatsAdmis(Etudiant *tetud[], int nbCandidats) { Etudiant mEtudiant; for (int i = 0; i < nbCandidats; i++) { mEtudiant = *tetud[i]; if (tetud[i]->lChoix->choix.decisionAdmission == 1) { afficherEtudiant(*tetud[i]); } } } // TODO : Mettre un message d'erreur si aucun void afficherCandidatsRefuses(Etudiant *tetud[], int nbCandidats) { Etudiant mEtudiant; for (int i = 0; i < nbCandidats; i++) { mEtudiant = *tetud[i]; if (mEtudiant.lChoix->choix.decisionAdmission == -1) { afficherEtudiant(mEtudiant); } } } void afficherCandidatsAttente(Etudiant *tetud[], int nbCandidats) { Etudiant mEtudiant; for (int i = 0; i < nbCandidats; i++) { mEtudiant = *tetud[i]; if (tetud[i]->lChoix->choix.decisionAdmission == 2) { afficherEtudiant(*tetud[i]); } } } Etudiant moyenneCandidat(Etudiant mEtudiant) { float moyenne = 0; for (int i = 0; i < 4; i++) { moyenne += mEtudiant.tabNotes[i]; } moyenne /= 4; mEtudiant.tabNotes[moy] = moyenne; return mEtudiant; } Etudiant *moyenneCandidats(Etudiant *tetud[], int nbCandidats) { for (int i = 0; i < nbCandidats; i++) { *tetud[i] = moyenneCandidat(*tetud[i]); } return *tetud; } Etudiant modifStatueCandidat(Etudiant *tetud[], int nbCandidats, float noteMin[], float noteExel[]) { for (int i = 0; i < nbCandidats; i++) { if (tetud[i]->tabNotes[maths] >= noteMin[maths] && tetud[i]->tabNotes[francais] >= noteMin[francais] && tetud[i]->tabNotes[anglais] >= noteMin[anglais] && tetud[i]->tabNotes[spe] >= noteMin[spe] && tetud[i]->tabNotes[moy] >= noteMin[moy]) { tetud[i]->lChoix->choix.decisionAdmission = 2; } else if (tetud[i]->tabNotes[maths] >= noteExel[maths] && tetud[i]->tabNotes[francais] >= noteExel[francais] && tetud[i]->tabNotes[anglais] >= noteExel[anglais] && tetud[i]->tabNotes[spe] >= noteExel[spe] && tetud[i]->tabNotes[moy] >= noteExel[moy]) { tetud[i]->lChoix->choix.decisionAdmission = 1; } else { tetud[i]->lChoix->choix.decisionAdmission = -1; } } return **tetud; } int statueCandidat(Etudiant *tetud[], int nbCandidats) { for (int i = 0; i < nbCandidats; i++) { if (tetud[i]->lChoix->choix.decisionAdmission == 1) { return 1; } else if (tetud[i]->lChoix->choix.decisionAdmission == -1) { return -1; } else { return 2; } } } int nbCandidatsAdmis(Etudiant *tetud[], int nbCandidats) { int nbAdmis = 0; for (int i = 0; i < nbCandidats; i++) { if (tetud[i]->lChoix->choix.decisionAdmission == 1) { nbAdmis++; } } return nbAdmis; } int nbCandidatsRefuses(Etudiant *tetud[], int nbCandidats) { int nbRefuses = 0; for (int i = 0; i < nbCandidats; i++) { if (tetud[i]->lChoix->choix.decisionAdmission == -1) { nbRefuses++; } } return nbRefuses; } int nbCandidatsAttente(Etudiant *tetud[], int nbCandidats) { int nbAttente = 0; for (int i = 0; i < nbCandidats; i++) { if (tetud[i]->lChoix->choix.decisionAdmission == 2) { nbAttente++; } } return nbAttente; } float modifNoteMin(float noteMin[]) { for (int i = 0; i < 5; i++) { printf("Entrez la note minimale pour la matiere %s (0/20, -1 pour sortir) : ", i + 1); // afficher le nom de la matiere du enum scanf("%f", ¬eMin[i]); while (noteMin[i] < 0 || noteMin[i] > 20) { scanf("%f", ¬eMin[i]); if (noteMin[i] == -1) { break; } printf("La note doit être comprise entre 0 et 20 !\n"); } } return *noteMin; } float modifNoteExel(float noteExel[]) { for (int i = 0; i < 5; i++) { printf("Entrez la note minimale pour la matiere %s (0/20, -1 pour sortir) : ", i + 1); // afficher le nom de la matiere du enum scanf("%f", ¬eExel[i]); while (noteExel[i] < 0 || noteExel[i] > 20) { scanf("%f", ¬eExel[i]); if (noteExel[i] == -1) { break; } printf("La note doit être comprise entre 0 et 20 !\n"); } } return *noteExel; } int modifNbPlaces(int nbPlaces) { printf("Entrez le nombre de places disponibles : "); scanf("%d", &nbPlaces); return nbPlaces; } /*int ajouterCandidat(Etudiant *tiut[]) { Etudiant cand; printf("Entrez votre nom et votre prénom :\n> "); scanf("%s%s", cand.nom, cand.prenom); printf("Entrez vos notes en : mathématiques, français, anglais et en spécialité :\n> "); scanf("%f%f%f%f", cand.tabNotes[0], cand.tabNotes[1], cand.tabNotes[2], cand.tabNotes[3]); printf("Entrez votre nombre de choix : "); scanf("%d", cand.nbChoix) }*/ void ajouterCandidature(Etudiant *tetud[], int nbCandidats, VilleIUT *tiut[], int nbVillesIUT) { int num, posCand, posVille; char ville[30], dept[30]; bool trouve; Choix c; //! AUTHENTIFICATION printf("Entrez votre numéro de candidat :\n> "); scanf("%d", &num); posCand = rechercheCandidat(tetud, nbCandidats, num, &trouve); if (!trouve) { printf("Numéro de candidat non trouvé."); return; } printf("Entrez la ville du département que vous souhaitez ajouter :\n> "); scanf("%s", ville); posVille = rechercheVille(tiut, nbVillesIUT, ville, &trouve); if (!trouve) { printf("Ville non trouvée."); return; } printf("Entrez le département que vous souhaitez ajouter :\n> "); scanf("%s", dept); rechercheDept(tiut[posVille]->ldept, dept, &trouve); if (!trouve) { printf("Département non trouvé."); return; } strcpy(c.ville, ville); strcpy(c.departement, dept); c.decisionAdmission = 0; c.decisionCandidat = 0; tetud[posCand]->lChoix = insererChoix(tetud[posCand]->lChoix, c); tetud[posCand]->nbChoix++; } void supprimerCandidature(Etudiant *tetud[], int nbCandidats) { int num, posCand, posVille; char ville[30], dept[30]; bool trouve; Choix c; //! AUTHENTIFICATION printf("Entrez votre numéro de candidat :\n> "); scanf("%d", &num); posCand = rechercheCandidat(tetud, nbCandidats, num, &trouve); if (!trouve) { printf("Numéro de candidat non trouvé."); return; } printf("Entrez la ville du département que vous souhaitez supprimer :\n> "); scanf("%s", c.ville); printf("Entrez le département que vous souhaitez supprimer :\n> "); scanf("%s", c.departement); trouve = rechercheChoix(tetud[posCand]->lChoix, c); if (!trouve) { printf("Choix non trouvé."); return; } tetud[posCand]->lChoix = supprimerChoix(tetud[posCand]->lChoix, c); tetud[posCand]->nbChoix--; } // ? Comment definir la note sur 20 mise lors de l'etude du dossier ? // ? Ajouter une variable dans la structure Admission ? // ? Ou mettre la liste et la note dans un tableau ? // ? Après examen de chaque dossier de candidature, // ? le jury doit regarder ou la note peut etre calculée automatiquement ?