#include "../header/sae.h" /* ================================================ Partie 1 ================================================ */ /** * @brief Fonction globale qui : * - Charge les fichiers dans les structures adaptées * - Appel la fonction du menu général (visiteur) avec les données enregistrées * - Sauvegarde toutes les données dans les fichiers correspondants avant de terminer le logiciel */ void Globale(void) { //printf(" \n ---> lancement de la fonction globale.... \n\n"); Log * tLog; VilleIut ** tIut; Candidat *tCand[50]; int nbCand = 0; int nbLog; int nbIut, nbIutMax; //Chargement des fichiers tLog = chargementLog("../donnees/log.don", &nbLog); tIut = chargeIutDon("../donnees/iut.don", &nbIut, &nbIutMax); //nbVilles = chargIutDon(tIut, 50, "../donnees/iut.don"); //Appel du menu visiteur //menuVisiteur(tLog, nbLog, tIut, nbIut); afficherDeptIutDonne(tIut, nbIut); //TEST menu candidat en attendant la conexion et tout la //nbCand = creerCandidat(tCand, nbCand); //menuCandidat(tLog, nbLog, tIut, nbIut, tCand[0]); //Sauvegarde dans les fichiers } /** * @brief Charge un fichier de logs dans un tableau de structures Log * @param nomFichier [CHAINE DE CARACTERE] Le nom du fichier à charger * @return Log* [TABLEAU DYNAMIQUE DE STRUCTURE] Le tableau de structures Log contenant les logs du fichier */ Log * chargementLog(char * nomFichier, int * nbLog) { FILE * fichier; Log * tLog; Log * tAnnexe; int nbLogMax; int i; fichier = fopen(nomFichier, "r"); if (fichier == NULL) { printf("Erreur de fichier\n"); exit(1); } tLog = (Log *) malloc(sizeof(Log)*5); nbLogMax = 5; i = 0; while (!feof(fichier)) { // Taille physique insuffisante if (i == nbLogMax) { tAnnexe = realloc(tLog, sizeof(Log)*(nbLogMax + 5)); // Test si le realloc n'a pas fonctionné if (tAnnexe == NULL) { printf("Problème de realloc\n"); exit(1); } tLog = tAnnexe; nbLogMax+= 5; } fscanf(fichier, "%s %s %s", tLog[i].utilisateur, tLog[i].mdp, tLog[i].status); i++; } *nbLog = i; return tLog; } void test(VilleIut * tIut[], int nbVilles) { for (int i = 0 ; i nom); } } /** * @brief Cette fonction affiche le menu des options disponibles pour un visiteur * et demande à l'utilisateur de faire son choix en appelant la fonction * choixMenuVisiteur. Selon le choix de l'utilisateur, la fonction appelle la fonction correspondante * ou met fin à l'exécution de la fonction. */ void menuVisiteur(Log * tLog, int nbLog, VilleIut *tIut[], int nbIut) //void menuVisiteur(VilleIut *villeIut, int nbVilles) { int choix; int actif = 1; clean while(actif) { choix = choixMenuVisiteur(); clean switch(choix) { case 1: afficheVillesIUT(tIut, nbIut); printf("\nAppuyez sur entree pour continuer..."); scanf("%*c"); clean break; case 2: printf("Affiche le nombre de place dans un departement (En attente de Guillaume)\n"); break; case 3 : printf("Afficher departement d'un Iut\n"); //afficherDeptIutDonne(tIut, nbIut); break; case 4 : printf("Affiche les IUT possedant un departement donne (En attente de Jean)\n"); break; case 5 : seConnecter(tLog, nbLog); clean break; case 0 : actif = 0; break; } } } /** * @brief Cette fonction affiche le menu des options disponibles pour un candidat * et demande à l'utilisateur de faire son choix en appelant la fonction * choixMenuCandidat. Selon le choix de l'utilisateur, la fonction appelle la fonction correspondante * ou met fin à l'exécution de la fonction. */ void menuCandidat(Log * tLog, int nbLog, VilleIut *tIut[], int nbVilles, Candidat *c) { int choix; int actif = 1; int decision = 0, validation = 0; char ville[30], dep[30]; clean while(actif) { choix = choixMenuCandidat(); clean switch(choix) { case 1: afficherUnCandidat(*c); getchar(); clean break; case 2: afficheVillesIUT(tIut, nbVilles - 1); saisirCandidature(ville, dep, tIut, nbVilles); c->lchoix = creerCandidature(c->lchoix, ville, dep, decision, validation, &c->nbChoix); c->nbChoix += 1; printf("%s\n", c->lchoix->ville); printf("Operation validee\n"); getchar(); clean break; case 3 : c->lchoix = supprimerCandidature(c->lchoix, &c->nbChoix); break; case 4 : //Supprimer une candidature break; case 0 : actif = 0; break; } } } /** @brief Cette fonction permet à l'utilisateur de saisir les informations sur une candidature. Il doit d'abord saisir le nom de la ville, puis le nom du département correspondant. Si les informations saisies ne sont pas valides, l'utilisateur est invité à les resaisir. @param ville Nom de la ville saisie @param dep Nom du département saisi @param tiut Liste des villes et départements @param nbVille Nombre de villes dans la liste @return void */ void saisirCandidature(char ville[], char dep[], VilleIut *tiut[], int nbVille) { int pos, res; printf("Veuillez saisir le nom de la ville\n"); scanf("%s", ville); pos = existeVille(tiut, ville, nbVille); while ( pos == -1) { printf("Veuillez saisir le nom de la ville\n"); scanf("%s", ville); pos = existeVille(tiut, ville, nbVille); } afficherListe(tiut[pos]->lDept); printf("Veuilllez saisir le nom de departement\n"); scanf("%s", dep); res = existeDept(tiut[pos]->lDept, dep); while (res == 0) { afficherListe(tiut[pos]->lDept); printf("Veuilllez saisir le nom de departement\n"); scanf("%s", dep); res = existeDept(tiut[pos]->lDept, dep); } } /** @brief affiche le menu des candidats et renvoie le choix de l'utilisateur @return int : le choix de l'utilisateur */ int choixMenuCandidat(void) { int choix; choix = afficherMenuCandidat(); while (choix < 0 || choix > 3) { clean printf("\nChoix incorrect.\n\n"); choix = afficherMenuCandidat(); } return choix; } /** @brief affiche le menu pour les visiteurs et renvoie le choix de l'utilisateur @return int : le choix de l'utilisateur */ int afficherMenuCandidat(void) { int choix; printf("============================================================\n\t\t\tMENU CANDIDAT\n============================================================\n\n"); printf("\t1. Afficher son profil\n"); printf("\t2. Ajouter une candidature\n"); printf("\t3. Supprimer une candidature\n"); printf("\t0. Quitter\n"); printf("\nChoix : "); scanf("%d%*c", &choix); return choix; } /** * @brief Affiche le menu des options disponibles pour un visiteur. * * Cette fonction affiche à l'écran un menu proposant plusieurs options * pour un visiteur du site. Le menu est présenté sous la forme d'une liste * numérotée, avec un numéro associé à chaque option. Le visiteur peut * faire son choix en saisissant le numéro correspondant à l'option souhaitée. * * Voici les options proposées dans le menu : * * - Afficher toutes les villes possédant un IUT * - Afficher le nombre de places dans un département donné * - Afficher les départements d'un IUT donné * - Afficher les IUT possédant un département donné * - Se connecter * - Quitter * * @return Le choix de l'utilisateur, sous forme d'un entier */ int afficherMenuVisiteur(void) { int choix; printf("============================================================\n\t\t\tMENU VISITEUR\n============================================================\n\n"); printf("\t1. Afficher toutes les villes possedant un IUT\n"); printf("\t2. Afficher le nombre de places dans un departement donne\n"); printf("\t3. Afficher les departements d'un IUT donne\n"); printf("\t4. Afficher les IUT possedant un departement donne\n"); printf("\t5. Se connecter\n"); printf("\t0. Quitter\n"); printf("\nChoix : "); scanf("%d%*c", &choix); return choix; } /** * @brief Demande à l'utilisateur de faire un choix parmi les options du menu visiteur * * Cette fonction affiche le menu des options disponibles pour un visiteur * et demande à l'utilisateur de faire son choix en saisissant un nombre compris * entre 0 et 5. Si l'utilisateur saisit un nombre incorrect, il sera invité à * resaisir son choix jusqu'à ce qu'il saisisse un nombre valide. * * @return int Le choix de l'utilisateur compris entre 0 et 5 */ int choixMenuVisiteur(void) { int choix; choix = afficherMenuVisiteur(); while (choix < 0 || choix > 5) { clean printf("\nChoix incorrect.\n\n"); choix = afficherMenuVisiteur(); } return choix; } /** * @brief Fonction de test pour la connection * */ void seConnecterTest(void) { Log * tLog; char mdp[30], utilisateur[30]; int indice, existe, nbLog, valide; nbLog = 0; tLog = chargementLog("../donnees/log.don", &nbLog); //TEMP banniereConnection(); // Affichage saisieNomUtilisateur(utilisateur); // Récupération du nom d'utilisateur existe = existeUtilisateur(utilisateur, &indice, tLog, nbLog); saisieMdp(mdp); // Récupération du mot de passe valide = mdpValide(mdp, indice, tLog); } void seConnecter(Log * tLog, int nbLog) { char mdp[30], utilisateur[30]; int existe, indice, valide; banniereConnection(); // Affichage saisieNomUtilisateur(utilisateur); // Récupération du nom d'utilisateur existe = existeUtilisateur(utilisateur, &indice, tLog, nbLog); if(!existe) { printf("Utilisateur inexistant !\nAppuyez sur [entrée] pour continuer..."); scanf("%*c"); return; } saisieMdp(mdp); valide = mdpValide(mdp, indice, tLog); if(valide) { printf("Connection valide en tant que %s\n", tLog[indice].status); printf("En attente de la fonction chargement\n"); scanf("%*c"); } else { printf("Mot de passe invalide\nAppuyez sur [entrée] pour continuer..."); scanf("%*c"); } } /** * @brief Vérifie si un utilisateur existe dans le tableau de structures de log. * * @param utilisateur [CHAINE DE CARACTERES] Le nom de l'utilisateur à rechercher. * @param indice [POINTEUR] Pointeur vers un entier qui sera modifié pour stocker l'indice de l'utilisateur s'il est trouvé. * @param tLog [TABLEAU] Tableau de structures de log. * @param nbLog [Taille Logique] Nombre d'éléments dans le tableau de structures de log. * * @return int 1 --> l'utilisateur existe | 0 --> l'utilisateur n'existe pas */ int existeUtilisateur(char * utilisateur, int * indice, Log * tLog, int nbLog) { for (int i = 0 ; i < nbLog ; i++) { if (strcmp(tLog[i].utilisateur,utilisateur) == 0) { *indice = i; return 1; } } return 0; } /** * @brief Valide si le mot de passe donné correspond au mot de passe enregistré dans la structure de log. * * @param mdp [CHAINE DE CARACTERES] Le mot de passe à valider. * @param indice L'indice de la structure de log à utiliser pour la vérification. * @param tLog [TABLEAU] Le tableau de structures de log. * * @return int 1 --> le mot de passe correspond | 0 --> le mot de passe ne correspond pas */ int mdpValide(char * mdp, int indice, Log * tLog) { if (strcmp(tLog[indice].mdp, mdp) == 0) return 1; else return 0; } /** * @brief Affichage de la bannière de connexion. */ void banniereConnection(void) { clean printf("------------------------------------------------------------\n\t\t\tSE CONNECTER\n------------------------------------------------------------\n\n"); } /** * @brief Saisie du nom d'utilisateur par l'utilisateur. * * Affiche une invite à l'écran et enregistre la saisie de l'utilisateur * dans la chaîne de caractères passée en paramètre. * * @param utilisateur [POINTEUR] Pointeur vers la chaîne de caractères où enregistrer * la saisie de l'utilisateur. */ void saisieNomUtilisateur(char * utilisateur) { printf("\tNom d'utilisateur : "); scanf("%s%*c", utilisateur); printf("\n"); } /** * @brief Saisie du mot de passe par l'utilisateur. * * Affiche une invite à l'écran et enregistre la saisie de l'utilisateur * dans la chaîne de caractères passée en paramètre. * * @param mdp [POINTEUR] Pointeur vers la chaîne de caractères où enregistrer * la saisie de l'utilisateur. */ void saisieMdp(char * mdp) { printf("\tMot de passe : "); scanf("%s%*c", mdp); printf("\n"); } /** * Modifie le nombre de places d'un département dans un IUT. * * @param villeIut tableau de pointeurs sur les structures VilleIut * @param nbVilles nombre de villes dans le tableau villeIut * @param ville nom de la ville où se trouve l'IUT * @param nomDept nom du département à modifier * @param nbP nouveau nombre de places * * @return 1 si le département a été trouvé et modifié, 0 sinon */ int modifiePlacesDept(VilleIut *tiut[], int nbVilles, char *ville, char *nomDept, int nbP) { // Recherche de la ville et du département int i; for (i = 0; i < nbVilles; i++) { if (strcmp(tiut[i] -> nom, ville) == 0) { // Ville trouvée, recherche du département MaillonDept *dept = tiut[i] -> lDept; while ( dept != NULL && strcmp( dept -> nomDept, nomDept) != 0) { dept = dept ->suiv; } if (dept != NULL) { // Département trouvé, modification du nombre de places dept->nbP = nbP; return 1; } else { // Département non trouvé return 0; } } } // Ville non trouvée return 0; } /** * @brief Modifie le nom du responsable d'un département dans un IUT * * @param tVilleIut tableau de pointeurs sur les structures VilleIut * @param nbVilles nombre de villes dans le tableau villeIut * @param ville nom de la ville où se trouve l'IUT * @param nomDept Nom du département où l'on modifie le nom du responsable * @param nvNomResp nouveau nom de responsable * * @return 1 si le nom du responsable a été trouvé et modifié, 0 sinon */ int modifieRespDept(VilleIut *tiut[], int nbVilles, char ville[], char nomDept[], char nvNomResp[]) { // Recherche de la ville et du département int i; for (i = 0; i < nbVilles; i++) { if (strcmp(tiut[i] -> nom, ville) == 0) { // Ville trouvée, recherche du département MaillonDept *dept = tiut[i] -> lDept; while ( dept != NULL && strcmp( dept -> nomDept, nomDept) != 0) { dept = dept ->suiv; } if (dept != NULL) { // Département trouvé, modification du nom du responsable du département strcpy(dept->resp, nvNomResp); return 1; } else { // Département non trouvé return 0; } } } // Ville non trouvée return 0; } /** *@brief Affiche les départements d'un IUT donné *@param tiut tableau des villes d'IUT *@param nbVille nombre de villes d'IUT dans le tableau *@return void */ void afficherDeptIutDonne(VilleIut *tiut[], int nbVille) { int res; char nom[30]; afficheVillesIUT(tiut, nbVille); printf("Veuillez saisir le nom de l'iut que vous voulez afficher.\n"); scanf("%s", nom); res = existeVille(tiut, nom, nbVille); if (res == -1) { printf("Cet IUT n'existe pas\n"); return ; } afficherListe(tiut[res]->lDept); } /** * @brief Affiche les IUT possédant un département spécifique. * * @param tiut tableau de pointeurs sur les structures VilleIut * @param nbVilles nombre de villes dans le tableau villeIut * @param nomDept nom du département à rechercher */ void afficheIUTDept(VilleIut *tiut[], int nbVilles, char *nomDept) { clean; printf("==========================================================================\n"); printf(" Affiche les IUT possédant un departement specifique \n"); printf("==========================================================================\n"); int i, e = 0 ; for (i = 0; i < nbVilles; i++) { // Parcours de la liste chaînée de départements de la ville MaillonDept *dept = tiut[i] -> lDept; while (dept != NULL) { if (strcmp(dept->nomDept, nomDept) == 0) { // Département trouvé, affichage de la ville printf(" -> IUT de %s\n", tiut[i] -> nom); e = 1; } dept = dept->suiv; } } if ( e == 0 ) printf(" \n ---> Departement inexistant...\n"); printf("\n\n\n"); } /** * @brief Affiche les villes qui ont des IUT. * @param villeIut tableau de pointeurs sur les structures VilleIut * @param nbVilles nombre de villes dans le tableau villeIut */ void afficheVillesIUT(VilleIut *tiut[], int nbVilles) { clean printf("==============================================================\n"); printf(" Villes possedant un IUT \n "); printf("==============================================================\n"); for (int i = 0; i < nbVilles; i++) { // Affichage du nom de la ville printf(" -> %s\n", tiut[i]-> nom); } } /** * @brief Affiche les IUT et le nombre de places associé pour un département donné * * @param tVilleIut tableau de pointeurs sur les structures VilleIut * @param nbVilles nombre de villes dans le tableau villeIut * @param nomDept nom du département à rechercher */ void afficheNbPlacesDep(VilleIut *tiut[], int nbVilles, char nomDept[]) { int i; for (i = 0; i < nbVilles; i++) { // Parcours de la liste chaînée de départements de la ville MaillonDept *dept = tiut[i] -> lDept; while (dept != NULL) { if (strcmp(dept->nomDept, nomDept) == 0) { // Département trouvé, affichage de la ville et de son nombre de places printf("IUT de %s avec %d places.\n", tiut[i] -> nom, tiut[i] -> lDept -> nbP); break; } dept = dept->suiv; } } } int existeVille(VilleIut *tIut[], char ville[], int nbvilles ) { int i = 0; //recherche de la ville for( i = 0; i < nbvilles; i ++ ) { if ( strcmp( tIut[i] -> nom, ville ) == 0 ) return i; // ville trouvée... } return -1; } /** * Affiche et gère le menu administrateur. * * @param villeIut tableau de pointeurs sur les structures VilleIut * @param nbVilles nombre de villes dans le tableau villeIut */ void menuAdmin(VilleIut **villeIut, int nbVilles) { int choix; do { // Affichage du menu printf("\nMenu administrateur:\n"); printf("1. Modifier le nombre de places d'un département\n"); printf("2. Créer un département dans un IUT\n"); printf("3. Supprimer un département d'un IUT\n"); printf("4. Lancer la phase de candidature\n"); printf("5. Arrêter la phase de candidature\n"); printf("6. Modifier le nom du responsable d'un département\n"); printf("7. Quitter\n"); printf("\nVotre choix: "); // Saisie du choix de l'utilisateur scanf("%d%*c", &choix); // Traitement du choix de l'utilisateur switch (choix) { case 1: // Modification du nombre de places d'un département //modifiePlacesDept(villeIut, nbVilles); break; case 2: // Création d'un département dans un IUT //creeDeptIUT(villeIut, nbVilles); break; case 3: // Suppression d'un département d'un IUT //supprimeDeptIUT(villeIut, nbVilles); break; case 4: // Lancement de la phase de candidature //lanceCandidature(); break; case 5: // Arrêt de la phase de candidature //arreteCandidature(); break; case 6: // Modification du nom du responsable d'un département //modifieRespDept(villeIut, nbVilles); break; case 7: // Quitter //printf("Au revoir!\n"); break; default: // Choix non valide //printf("Choix non valide.\n"); break; } } while (choix != 7); } /* ================================================ Partie 2 ================================================ */ /** * @brief Affiche les informations d'un candidat * @param candidat Le candidat à afficher */ void afficherUnCandidat(Candidat candidat) { int c = 1; printf("Candidat numero %7d ", candidat.numero); printf(" | Nom : %10s | ", candidat.nom); printf(" Prenom : %10s ", candidat.prenom); printf(" | Notes : %.2f %.2f %.2f %.2f | ", candidat.notes[0], candidat.notes[1], candidat.notes[2], candidat.notes[3]); printf(" Nombre de choix : %d\n\n", candidat.nbChoix); printf(" \n Choix du candidat :\n"); printf( " -------------------\n\n"); while ( candidat.lchoix != NULL ) { printf(" %d.) Iut : %10s ; departement : %10s ; decision Departement : %d ; validation candidat : %d\n",c, candidat.lchoix -> ville, candidat.lchoix -> departement, candidat.lchoix -> decisionDepartement, candidat.lchoix -> validationCandidat); candidat.lchoix=candidat.lchoix->suiv; c=c+1; } printf(" \n\n"); } /** * @brief Affiche la liste des candidats * * @param candidats Le tableau de candidats à afficher * @param nbCandidats Le nombre de candidats dans le tableau */ void afficherCandidats(Candidat **candidats, int nbCandidats) { for (int i = 0; i < nbCandidats; i++) { printf("\nCandidat numero %8d | Nom : %10s | Prenom : %10s \n", candidats[i] -> numero, candidats[i] -> nom, candidats[i] -> prenom); } } /** * @brief Permet de créer un candidat * * @param tCand Tableau de pointeur sur une structure de candidat * @param nbCandidats nombre de candidats créés * * @return Retourne le nombre de candidats */ int creerCandidat(Candidat *tCand[], int nbCandidats) { int i=0; Candidat *c; c = (Candidat *) malloc (sizeof(Candidat)); if(c==NULL) { printf("Probleme malloc\n"); exit(1); } c->numero = nbCandidats+1; printf("Le numero du candidat entrain d'etre cree est : %d\n", c->numero); printf("Nom du candidat (peut contenir des espaces): "); fgets(c->nom, 50, stdin); c->nom[strlen(c->nom) - 1] = '\0'; printf("Prenom du candidat (peut contenir des espaces): "); fgets(c->prenom, 50, stdin); c->prenom[strlen(c->prenom) - 1] = '\0'; i=0; while(i<4) { printf("Rentrez la note numero %d : ", i+1); scanf("%f", &c->notes[i]); while(c->notes[i] < 0 || c->notes[i] > 20) { printf("Erreur, la note doit etre comprise entre 0 et 20.\nRessaisir la note numero %d : ", i+1); scanf("%f", &c->notes[i]); } i = i + 1; } c->nbChoix = 0; c->lchoix = listenouvC(); tCand[nbCandidats] = c; return nbCandidats + 1; } /** * @brief Supprime un choix de la liste de choix d'un candidat * * @param lchoix la liste de choix à modifier * @param nbchoix le nombre de choix dans la liste de choix * * @return la liste avec le choix en moins */ lChoix supprimerCandidature( lChoix l, int *nbchoix) { lChoix temp = l; if ( l == NULL ) { printf(" \n --> Le candidat ne possede aucun choix...\n\n"); return l; } printf("\n Voici les choix du candidat : \n"); printf( " -----------------------------\n\n"); int rep = 0, c = 0; for( int i = 0; i < *nbchoix; i ++ ) { printf(" %d.) Ville : %10s ; Departement : %10s \n",i + 1, l -> ville, l -> departement); l = l -> suiv; } printf(" \n\n --> Quel choix supprimer ? : "); scanf("%d%*c", &rep); temp = supprmRecru( temp, rep ); *nbchoix -= 1; return temp; } lChoix supprmRecru( lChoix l, int rep ) { if ( rep == 1 ) { l = supprimerEnTeteC( l ); return l; } l -> suiv = supprmRecru( l -> suiv, rep -1 ); return l; } /** * @brief Permet de créer une candidature à un candidat * * @param choixCandid Liste de candidature * @param ville nom de la ville de la candidature * @param departement nom du departement de la candidature * @param decision 0 par defaut * @param validation 0 par defaut * @return Liste mis à jour */ lChoix creerCandidature(lChoix choixCandid, char ville[], char departement[], int decision, int validation, int *nbchoix) { if(choixCandid == NULL) return ajouterEnTeteC(choixCandid, ville, departement, decision, validation); if(strcmp(ville, choixCandid->ville) < 0) return ajouterEnTeteC(choixCandid, ville, departement, decision, validation); if(strcmp(ville, choixCandid->ville) == 0 && strcmp(departement, choixCandid->departement) < 0) return ajouterEnTeteC(choixCandid, ville, departement, decision, validation); choixCandid->suiv = creerCandidature(choixCandid->suiv, ville, departement, 0, 0, nbchoix); *nbchoix += 1; return choixCandid; } /* ================================================ Partie 3 ================================================ */ /** * \brief Permet de convertir la liste de departement des VilleIut de la partie 1 dans la nouvelle version pour correspondre à la partie 3. Et la fonction définie au passage le nombre maximal d'admis pour le département et sa moyenne minimale à obtenir pour y accéder. * \param ldept La liste de départements de la partie 1 pour une villeIut * \return La nouvelle liste de départements adaptée à la partie 3. * */ ListeDeptV2 configurationDeptV2( ListeDept ldept ) { ListeDeptV2 lDeptV2 = NULL; if ( ldept == NULL ) return lDeptV2; while ( ldept != NULL ) { MaillonDept * aux = ( MaillonDept * ) malloc ( sizeof( MaillonDept )); if ( aux == NULL ) { printf(" \n ---> Erreur d'allocation memoire... \n"); exit(1); } MaillonDeptV2 * mV2 = ( MaillonDeptV2 * ) malloc ( sizeof( MaillonDeptV2 )); if ( mV2 == NULL) { printf("\n --> Erreur d'allocation memoire...\n"); exit(1); } printf(" \n Quelle est la moyenne minimale a avoir pour le departement %10s ? : ", ldept -> nomDept); scanf("%d", mV2 -> moyMin); printf(" \n Quel est le nombre maximal d'admis pour le departement %10s ", ldept -> nomDept); scanf("%d", mV2 -> admisMax); strcpy( ldept -> nomDept, mV2 -> nomDept ); strcpy( ldept -> resp, mV2 -> resp ); mV2 -> nbP = ldept -> nbP; lDeptV2 -> lAdmis = NULL; lDeptV2 -> lAttente = NULL; mV2 -> suiv = lDeptV2; lDeptV2 = mV2; aux = ldept; ldept = ldept -> suiv; free(aux); } return lDeptV2; }