You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

309 lines
8.2 KiB

#include "SAE.h"
/* Partie 2 */
/*
Afficher les infos d'un candidat
Afficher la liste des candidats par departement trié par ordre alphabetique
*/
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)
{
// TODO : Changer l'affichage
int i;
printf("%d\n%s\n%s\n%.2f\t%.2f\t%.2f\t%.2f\n%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]);
}
}
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("resultats.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);
}
}
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)
{
for (int i = 0; i < nbCandidats; i++)
{
if (tetud[i]->lChoix->choix.decisionAdmission == 1)
{
afficherEtudiant(*tetud[i]);
}
tetud[i]->lChoix = tetud[i]->lChoix->suiv;
}
}
void afficherCandidatsRefuses(Etudiant *tetud[], int nbCandidats)
{
for (int i = 0; i < nbCandidats; i++)
{
if (tetud[i]->lChoix->choix.decisionAdmission == -1)
{
afficherEtudiant(*tetud[i]);
}
tetud[i]->lChoix = tetud[i]->lChoix->suiv;
}
}
void afficherCandidatsAttente(Etudiant *tetud[], int nbCandidats)
{
for (int i = 0; i < nbCandidats; i++)
{
if (tetud[i]->lChoix->choix.decisionAdmission == 2)
{
afficherEtudiant(*tetud[i]);
}
tetud[i]->lChoix = tetud[i]->lChoix->suiv;
}
}
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", &noteMin[i]);
while (tabNotes[i] < 0 || tabNotes[i] > 20)
{
scanf("%f", &tabNotes[i]);
if (noteMaths == -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", &noteExel[i]);
while (tabNotes[i] < 0 || tabNotes[i] > 20)
{
scanf("%f", &tabNotes[i]);
if (noteMaths == -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;
}
// ? 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 ?