Candidat**chargementCandidats(int*tMax)/* Permet de charger le contenu du fichier Candidats.don dans un tableau de pointeur vers */
{/* des structures Candidats qui contiennent un tableau de pointeurs vers des structures choix*/
FILE*flot;/* La fonction renvoie ensuite le tableau de Candidats si tout se passe bien */
@ -1261,73 +1257,73 @@ int miseAJourChoixCand(Choix *tChoix[], int nombreChoix) /* Fontcion permettant
}
/*void miseAJourChoixResp(Choix *tChoix[], int pos) Fontcion permettant de mettre à jour la décision d'un responsable d'admission concernant un candidat
// void miseAJourChoixResp(Choix *tChoix[], int pos) /* Fontcion permettant de mettre à jour la décision d'un responsable d'admission concernant un candidat */
// {
// int saisie;
// system("clear");
// if(tChoix[pos]->decisionCand == 0) /* Affichage d'un menu adapté pour chaque cas ; le candidat peut choisir entre deux option ou bien ne rien faire */
// {
// printf("Votre décision est actuellement en attente\n\n");
// if(tChoix[pos]->decisionCand == 2) /* Affichage d'un menu adapté pour chaque cas ; le candidat peut choisir entre deux option ou bien ne rien faire */
// {
// printf("Votre décision est actuellement en attente\n\n");
ListeDept listeDeptNouv(void)/*Permet de créer un liste vide puis la retourne à la fonction appelante.*/
ListeCand listeCandNouv(void)/*Permet de créer un liste vide puis la retourne à la fonction appelante.*/
{
ListeDept lDept;
lDept=NULL;
returnlDept;
ListeCand lCand;
lCand=NULL;
returnlCand;
}
ListeDept insererEntete(ListeDeptlDept,Departementd)/*Permet d'insérer un MaillonDept en début d'une liste passée en paramètre puis renvoie cette même liste*/
ListeCand insererCandEntete(ListeCandlCand,Candidat*c)/*Permet d'insérer un MaillonCand en début d'une liste passée en paramètre puis renvoie cette même liste*/
{
MaillonDept *m;/* Création d'un pointeur vers une structure MaillonDept */
m=(MaillonDept *)malloc(sizeof(MaillonDept));/* Allocation d'un espace mémoire pour le nouveau maillon */
MaillonCandidat *m;/* Création d'un pointeur vers une structure MaillonCand */
m=(MaillonCandidat *)malloc(sizeof(MaillonCandidat));/* Allocation d'un espace mémoire pour le nouveau maillon */
if(m==NULL)
{
printf("Problème d'allocation mémoire lors de l'insertion\n");/* Message d'erreur en cas de problème de malloc */
printf("Problème d'allocation mémoire lors de l'insertion d'un candidat dans la liste d'admission\n");/* Message d'erreur en cas de problème de malloc */
exit(1);
}
m->d =d;/* Affecte le département passé en paramètre à l'attribut d du nouveau maillon */
m->suiv=lDept;
m->c =c;/* Affecte le département passé en paramètre à l'attribut d du nouveau maillon */
m->suiv=lCand;
returnm;
}
ListeDept insererDept(ListeDeptlDept,Departementd)/* Permet d'insérer un maillon dans une liste donnée en paramètre dans l'ordre alpĥabétique/croissant et retourne cette liste */
ListeCand insererCand(ListeCandlCand,Candidat*c)/* Permet d'insérer un maillon dans une liste donnée en paramètre dans l'ordre alphabétique/croissant et retourne cette liste */
{
if(lDept==NULL)/* Si la liste est vide, insère le nouveau maillon en tête */
if(lCand==NULL)/* Si la liste est vide, insère le nouveau maillon en tête */
{
returninsererEntete(lDept,d);
returninsererCandEntete(lCand,c);
}
if(strcmp(d.dept,lDept->d.dept)<0)/* Si le nom du département est inférieur à celui de la liste testé, le maillon est inséré en tête*/
if(c->numeroC<lCand->c->numeroC)/* Si le numéro de candidat est inférieur à celui de la liste testé, le maillon est inséré en tête*/
{
returninsererEntete(lDept,d);
returninsererCandEntete(lCand,c);
}
if(strcmp(d.dept,lDept->d.dept)==0)/* Si le maillon existe déjà, retourne la liste sans changement */
if(c->numeroC==lCand->c->numeroC)/* Si le maillon existe déjà, retourne la liste sans changement */
{
printf("Département déjà présent dans cet IUT\n");
returnlDept;
printf("Candidat déjà présent dans la liste\n");
returnlCand;
}
lDept->suiv=insererDept(lDept->suiv,d);/* Si aucun cas précédent n'est respecté, recommence avec le maillon suivant de la liste */
returnlDept;
lCand->suiv=insererCand(lCand->suiv,c);/* Si aucun cas précédent n'est respecté, recommence avec le maillon suivant de la liste */
returnlCand;
}
ListeDept supprimerEntete(ListeDeptlDept)/* Permet de supprimer un maillon en tête de la liste donnée en paramètre et retourne cette liste */
ListeCand supprimerCandEntete(ListeCandlCand)/* Permet de supprimer un maillon en tête de la liste donnée en paramètre et retourne cette liste */
{
ListeDeptaux;
if(lDept==NULL)/* Si la liste est vide, quitte le programme car cela provoquerait une erreur */
ListeCandaux;
if(lCand==NULL)/* Si la liste est vide, quitte le programme car cela provoquerait une erreur */
{
printf("Opération interdite\n");
exit(1);
}
aux=lDept;/* On affecte l'adresse de la liste actuelle à une variable temporaire */
lDept =lDept->suiv;/* On supprime le maillon */
aux=lCand;/* On affecte l'adresse de la liste actuelle à une variable temporaire */
lCand =lCand->suiv;/* On supprime le maillon */
free(aux);/* On libère l'espace mémoire du maillon supprimer*/
returnlDept;
returnlCand;
}
ListeDept supprimerDept(ListeDeptlDept,char*dep)/* Permet de supprimer un maillon d'une liste lDept passée en paramètre à partir de son attribut nom de département (dept) et retourne cette liste */
ListeCand supprimerCand(ListeCandlCand,Candidat*c)/* Permet de supprimer un maillon d'une liste lDept passée en paramètre à partir de son attribut nom de département (dept) et retourne cette liste */
{
if(lDept==NULL)/* La liste est vide, on la retourne sans changements */
if(lCand==NULL)/* La liste est vide, on la retourne sans changements */
{
returnlDept;
returnlCand;
}
if(strcmp(dep,lDept->d.dept)<0)/* Le maillon à supprimer n'existe pas, on retourne la liste sans changement */
if(c->numeroC<lCand->c->numeroC)/* Le maillon à supprimer n'existe pas, on retourne la liste sans changement */
{
returnlDept;
returnlCand;
}
if(strcmp(dep,lDept->d.dept)==0)/* Le maillon à supprimer est trouvé, on le supprime */
if(c->numeroC==lCand->c->numeroC)/* Le maillon à supprimer est trouvé, on le supprime */
{
returnsupprimerEntete(lDept);
returnsupprimerCandEntete(lCand);
}
lDept->suiv=supprimerDept(lDept->suiv,dep);/* Aucune des conditions précédentes n'a été respectée, on recommence avec le maillon suivant */
returnlDept;
lCand->suiv=supprimerCand(lCand->suiv,c);/* Aucune des conditions précédentes n'a été respectée, on recommence avec le maillon suivant */
returnlCand;
}
intlongueur(ListeDept lDept)/* Permet d'obtenir la longueur d'une liste passée en paramètre et retourne le nombre de maillons */
intlongueur(ListeCand lCand)/* Permet d'obtenir la longueur d'une liste passée en paramètre et retourne le nombre de maillons */
{
intcompt=0;/* On déclare un compteur pour compter le nombre de maillons */
while(lDept!=NULL)/* Tant que la liste n'est pas vide, on incrémente le compteur de 1 et on passe au maillon suivant */
while(lCand!=NULL)/* Tant que la liste n'est pas vide, on incrémente le compteur de 1 et on passe au maillon suivant */
{
compt=compt+1;
lDept =lDept->suiv;
lCand =lCand->suiv;
}
returncompt;
}
boolvide(ListeDeptlDept)/* Permet de savoir si une liste est vide et retourne un booléen */
boolvideListe(ListeCandlCand)/* Permet de savoir si une liste est vide et retourne un booléen */
{
if(lDept==NULL)
if(lCand==NULL)
returntrue;
returnfalse;
}
ListeCandrechercherCandListe(ListeCandlCand,intnumeroC,int*trouve)/* Permet de recherche un maillon dans une liste de départements passée en paramètre pour ensuite renvoyer son adresse*/
{
if(videListe(lCand))/* Si la liste est vide, la variable trouve passée en pointeur prend la valeur 0 et on retourne la liste */
{
*trouve=0;
returnlCand;
}
if(numeroC<lCand->c->numeroC)/* Même procédé que la condition précédente si le département recherché n'est pas trouvé*/
{
*trouve=0;
returnlCand;
}
if(numeroC==lCand->c->numeroC)/* Si le département recherché est trouvé, trouve prend la valeur 1 et on retourne la liste */
{
*trouve=1;
returnlCand;
}
returnrechercherCandListe(lCand->suiv,numeroC,trouve);/* Si aucune condition n'est respectée, renvoie la même recherche pour le maillon suivant */
}
/********************************** Fonction globale et menus ***********************************************/
@ -404,73 +404,73 @@ int miseAJourChoixCand(Choix *tChoix[], int nombreChoix) /* Fontcion permettant
}
/*void miseAJourChoixResp(Choix *tChoix[], int pos) Fontcion permettant de mettre à jour la décision d'un responsable d'admission concernant un candidat
// void miseAJourChoixResp(Choix *tChoix[], int pos) /* Fontcion permettant de mettre à jour la décision d'un responsable d'admission concernant un candidat */
// {
// int saisie;
// system("clear");
// if(tChoix[pos]->decisionCand == 0) /* Affichage d'un menu adapté pour chaque cas ; le candidat peut choisir entre deux option ou bien ne rien faire */
// {
// printf("Votre décision est actuellement en attente\n\n");
// if(tChoix[pos]->decisionCand == 2) /* Affichage d'un menu adapté pour chaque cas ; le candidat peut choisir entre deux option ou bien ne rien faire */
// {
// printf("Votre décision est actuellement en attente\n\n");
ListeDept listeDeptNouv(void)/*Permet de créer un liste vide puis la retourne à la fonction appelante.*/
ListeCand listeCandNouv(void)/*Permet de créer un liste vide puis la retourne à la fonction appelante.*/
{
ListeDept lDept;
lDept=NULL;
returnlDept;
ListeCand lCand;
lCand=NULL;
returnlCand;
}
ListeDept insererEntete(ListeDeptlDept,Departementd)/*Permet d'insérer un MaillonDept en début d'une liste passée en paramètre puis renvoie cette même liste*/
ListeCand insererCandEntete(ListeCandlCand,Candidat*c)/*Permet d'insérer un MaillonCand en début d'une liste passée en paramètre puis renvoie cette même liste*/
{
MaillonDept *m;/* Création d'un pointeur vers une structure MaillonDept */
m=(MaillonDept *)malloc(sizeof(MaillonDept));/* Allocation d'un espace mémoire pour le nouveau maillon */
MaillonCandidat *m;/* Création d'un pointeur vers une structure MaillonCand */
m=(MaillonCandidat *)malloc(sizeof(MaillonCandidat));/* Allocation d'un espace mémoire pour le nouveau maillon */
if(m==NULL)
{
printf("Problème d'allocation mémoire lors de l'insertion\n");/* Message d'erreur en cas de problème de malloc */
printf("Problème d'allocation mémoire lors de l'insertion d'un candidat dans la liste d'admission\n");/* Message d'erreur en cas de problème de malloc */
exit(1);
}
m->d =d;/* Affecte le département passé en paramètre à l'attribut d du nouveau maillon */
m->suiv=lDept;
m->c =c;/* Affecte le département passé en paramètre à l'attribut d du nouveau maillon */
m->suiv=lCand;
returnm;
}
ListeDept insererDept(ListeDeptlDept,Departementd)/* Permet d'insérer un maillon dans une liste donnée en paramètre dans l'ordre alpĥabétique/croissant et retourne cette liste */
ListeCand insererCand(ListeCandlCand,Candidat*c)/* Permet d'insérer un maillon dans une liste donnée en paramètre dans l'ordre alphabétique/croissant et retourne cette liste */
{
if(lDept==NULL)/* Si la liste est vide, insère le nouveau maillon en tête */
if(lCand==NULL)/* Si la liste est vide, insère le nouveau maillon en tête */
{
returninsererEntete(lDept,d);
returninsererCandEntete(lCand,c);
}
if(strcmp(d.dept,lDept->d.dept)<0)/* Si le nom du département est inférieur à celui de la liste testé, le maillon est inséré en tête*/
if(c->numeroC<lCand->c->numeroC)/* Si le numéro de candidat est inférieur à celui de la liste testé, le maillon est inséré en tête*/
{
returninsererEntete(lDept,d);
returninsererCandEntete(lCand,c);
}
if(strcmp(d.dept,lDept->d.dept)==0)/* Si le maillon existe déjà, retourne la liste sans changement */
if(c->numeroC==lCand->c->numeroC)/* Si le maillon existe déjà, retourne la liste sans changement */
{
printf("Département déjà présent dans cet IUT\n");
returnlDept;
printf("Candidat déjà présent dans la liste\n");
returnlCand;
}
lDept->suiv=insererDept(lDept->suiv,d);/* Si aucun cas précédent n'est respecté, recommence avec le maillon suivant de la liste */
returnlDept;
lCand->suiv=insererCand(lCand->suiv,c);/* Si aucun cas précédent n'est respecté, recommence avec le maillon suivant de la liste */
returnlCand;
}
ListeDept supprimerEntete(ListeDeptlDept)/* Permet de supprimer un maillon en tête de la liste donnée en paramètre et retourne cette liste */
ListeCand supprimerCandEntete(ListeCandlCand)/* Permet de supprimer un maillon en tête de la liste donnée en paramètre et retourne cette liste */
{
ListeDeptaux;
if(lDept==NULL)/* Si la liste est vide, quitte le programme car cela provoquerait une erreur */
ListeCandaux;
if(lCand==NULL)/* Si la liste est vide, quitte le programme car cela provoquerait une erreur */
{
printf("Opération interdite\n");
exit(1);
}
aux=lDept;/* On affecte l'adresse de la liste actuelle à une variable temporaire */
lDept =lDept->suiv;/* On supprime le maillon */
aux=lCand;/* On affecte l'adresse de la liste actuelle à une variable temporaire */
lCand =lCand->suiv;/* On supprime le maillon */
free(aux);/* On libère l'espace mémoire du maillon supprimer*/
returnlDept;
returnlCand;
}
ListeDept supprimerDept(ListeDeptlDept,char*dep)/* Permet de supprimer un maillon d'une liste lDept passée en paramètre à partir de son attribut nom de département (dept) et retourne cette liste */
ListeCand supprimerCand(ListeCandlCand,Candidat*c)/* Permet de supprimer un maillon d'une liste lDept passée en paramètre à partir de son attribut nom de département (dept) et retourne cette liste */
{
if(lDept==NULL)/* La liste est vide, on la retourne sans changements */
if(lCand==NULL)/* La liste est vide, on la retourne sans changements */
{
returnlDept;
returnlCand;
}
if(strcmp(dep,lDept->d.dept)<0)/* Le maillon à supprimer n'existe pas, on retourne la liste sans changement */
if(c->numeroC<lCand->c->numeroC)/* Le maillon à supprimer n'existe pas, on retourne la liste sans changement */
{
returnlDept;
returnlCand;
}
if(strcmp(dep,lDept->d.dept)==0)/* Le maillon à supprimer est trouvé, on le supprime */
if(c->numeroC==lCand->c->numeroC)/* Le maillon à supprimer est trouvé, on le supprime */
{
returnsupprimerEntete(lDept);
returnsupprimerCandEntete(lCand);
}
lDept->suiv=supprimerDept(lDept->suiv,dep);/* Aucune des conditions précédentes n'a été respectée, on recommence avec le maillon suivant */
returnlDept;
lCand->suiv=supprimerCand(lCand->suiv,c);/* Aucune des conditions précédentes n'a été respectée, on recommence avec le maillon suivant */
returnlCand;
}
intlongueur(ListeDept lDept)/* Permet d'obtenir la longueur d'une liste passée en paramètre et retourne le nombre de maillons */
intlongueur(ListeCand lCand)/* Permet d'obtenir la longueur d'une liste passée en paramètre et retourne le nombre de maillons */
{
intcompt=0;/* On déclare un compteur pour compter le nombre de maillons */
while(lDept!=NULL)/* Tant que la liste n'est pas vide, on incrémente le compteur de 1 et on passe au maillon suivant */
while(lCand!=NULL)/* Tant que la liste n'est pas vide, on incrémente le compteur de 1 et on passe au maillon suivant */
{
compt=compt+1;
lDept =lDept->suiv;
lCand =lCand->suiv;
}
returncompt;
}
boolvide(ListeDeptlDept)/* Permet de savoir si une liste est vide et retourne un booléen */
boolvideListe(ListeCandlCand)/* Permet de savoir si une liste est vide et retourne un booléen */
{
if(lDept==NULL)
if(lCand==NULL)
returntrue;
returnfalse;
}
ListeCandrechercherCandListe(ListeCandlCand,intnumeroC,int*trouve)/* Permet de recherche un maillon dans une liste de départements passée en paramètre pour ensuite renvoyer son adresse*/
{
if(videListe(lCand))/* Si la liste est vide, la variable trouve passée en pointeur prend la valeur 0 et on retourne la liste */
{
*trouve=0;
returnlCand;
}
if(numeroC<lCand->c->numeroC)/* Même procédé que la condition précédente si le département recherché n'est pas trouvé*/
{
*trouve=0;
returnlCand;
}
if(numeroC==lCand->c->numeroC)/* Si le département recherché est trouvé, trouve prend la valeur 1 et on retourne la liste */
{
*trouve=1;
returnlCand;
}
returnrechercherCandListe(lCand->suiv,numeroC,trouve);/* Si aucune condition n'est respectée, renvoie la même recherche pour le maillon suivant */
}
/********************************** Fonction globale et menus ***********************************************/