My Project
Loading...
Searching...
No Matches
un.c
Go to the documentation of this file.
1
10#include <stdio.h>
11#include <stdlib.h>
12#include <string.h>
13#include <errno.h>
14#include <unistd.h> // sleep
15#include <strings.h> // strcasecmp : insensitive case
16#include "un.h"
17#include "../II/deux.c"
18
19void identificationCandidat(int* id, ListeCandidats* listePointer, int* nbCandidats) {
20 Candidat* candidat;
21 char connexion, poubelle;
22 int verif;
23
24 printf("\nÊtes-vous déjà enregistré (O/N) ? : ");
25 scanf("%*c%c", &connexion);
26
27 char nom[LEN_MAX];
28
29 if(connexion == 'O' || connexion == 'o') {
30 printf("\nTrès bien, merci de saisir votre ID : ");
31
32 if(scanf("%d", id) == 0) {
33 *id = 0;
34 fprintf(stderr, "\e[0;91mErreur : cet ID n'existe pas !\n\n\e[0m");
35 return;
36 }
37
38 if(*id > *nbCandidats) {
39 *id = 0;
40 fprintf(stderr, "\e[0;91mErreur : cet ID n'existe pas !\n\n\e[0m");
41 return;
42 }
43
44 printf("Merci de confirmer votre nom de famille : ");
45 scanf("%s", nom);
46
47 if(strcasecmp(nom, (*listePointer)[*id-1]->nom) != 0) {
48 *id = 0;
49 fprintf(stderr, "\n\e[0;91mErreur : le nom de famille ne correspond pas !\n\n\e[0m");
50 return;
51 } else {
52 printf("\n\e[1;92mBienvenue %s %s !\n\e[1;91m"
53 "N'oubliez pas de revenir au menu principal pour vous déconnecter à la fin de votre session !\n\n\e[0m",
54 (*listePointer)[*id-1]->prenom, (*listePointer)[*id-1]->nom);
55 }
56 } else {
57 if(connexion == 'n' || connexion == 'N') {
58 printf("\nTrès bien, nous allons donc précéder à votre enregistrement.\n\n");
59
60 candidat = creerCandidat(); // malloc
61
62 printf("Nom de famille : ");
63 scanf("%*c%[^\n]", candidat->nom);
64
65 printf("Prénom : ");
66 scanf("%*c%[^\n]", candidat->prenom);
67
68 printf("Moyenne de mathématiques : ");
69 verif = scanf("%f", &candidat->moyenneMath);
70 while((candidat->moyenneMath) < 0 || (candidat->moyenneMath) > 20 || verif == 0) {
71 fprintf(stderr, "\e[0;91mLa moyenne entrée est incorrecte\n\e[0mEntrez votre moyenne de mathématiques de l'année de terminale : ");
72 verif = scanf("%*c%f", &candidat->moyenneMath);
73 }
74
75 printf("Moyenne de français : ");
76 verif = scanf("%f", &candidat->moyenneFrancais);
77 while((candidat->moyenneFrancais) < 0 || (candidat->moyenneFrancais) > 20 || verif == 0) {
78 fprintf(stderr, "\e[0;91mLa moyenne entrée est incorrecte\n\e[0mEntrez votre moyenne de français de l'année de terminale : ");
79 verif = scanf("%*c%f", &candidat->moyenneFrancais);
80 }
81
82 printf("Moyenne de anglais : ");
83 verif = scanf("%f", &candidat->moyenneAnglais);
84 while((candidat->moyenneAnglais) < 0 || (candidat->moyenneAnglais) > 20 || verif == 0) {
85 fprintf(stderr, "\e[0;91mLa moyenne entrée est incorrecte\n\e[0mEntrez votre moyenne de anglais de l'année de terminale : ");
86 verif = scanf("%*c%f", &candidat->moyenneAnglais);
87 }
88
89 printf("Moyenne de spécialité : ");
90 verif = scanf("%f", &candidat->moyenneSpecialite);
91 while((candidat->moyenneSpecialite) < 0 || (candidat->moyenneSpecialite) > 20 || verif == 0) {
92 fprintf(stderr, "\e[0;91mLa moyenne entrée est incorrecte\n\e[0mEntrez votre moyenne de spécialité de l'année de terminale : ");
93 verif = scanf("%*c%f", &candidat->moyenneSpecialite);
94 }
95
96 ajouterCandidat(listePointer, nbCandidats, candidat); // realloc
97 *id = candidat->id;
98
99 printf("\n\n\e[1mParfait ! Votre ID est \e[1;32m%d\e[0m\e[1m, ne le perdez pas, "
100 "il vous suivera tout le long de vos candidatures !\n\e[1;91m"
101 "N'oubliez pas de revenir au menu principal pour vous déconnecter à la fin de votre session !\n\n\e[0m", candidat->id);
102 } else {
103 while ((poubelle = getchar()) != '\n' && poubelle != EOF);
104 fprintf(stderr, "\n\e[0;91mLa valeur entrée est incorrecte. Merci de réessayer plus tard.\e[0m\n");
105 }
106 }
107}
108
110 system("clear");
111 printf("\e[1;35m██████╗ ███████╗ ██████╗██████╗ ██╗ ██╗████████╗███████╗███╗ ███╗███████╗███╗ ██╗████████╗ ██╗██╗ ██╗████████╗\n");
112 printf("██╔══██╗██╔════╝██╔════╝██╔══██╗██║ ██║╚══██╔══╝██╔════╝████╗ ████║██╔════╝████╗ ██║╚══██╔══╝ ██║██║ ██║╚══██╔══╝\n");
113 printf("██████╔╝█████╗ ██║ ██████╔╝██║ ██║ ██║ █████╗ ██╔████╔██║█████╗ ██╔██╗ ██║ ██║ ██║██║ ██║ ██║ \n");
114 printf("██╔══██╗██╔══╝ ██║ ██╔══██╗██║ ██║ ██║ ██╔══╝ ██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██║ ██║ \n");
115 printf("██║ ██║███████╗╚██████╗██║ ██║╚██████╔╝ ██║ ███████╗██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ ██║╚██████╔╝ ██║ \n");
116 printf("╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ \e[0m\n\n");
117}
118
119void menuCandidat(VilleIUT** tiut, ListeCandidats* listePointer, int nbVilles, int* nbCandidats) {
120 // poubelle: Permet de stocker les caractères aspirés en trop sur stdin lors du choix dans le menu
121 char poubelle, searchIUT[LEN_MAX], searchDept[LEN_MAX];
122 Candidat* candidat;
123
124 // choix: Contient le choix de l'utilisateur dans le menu / id: contient id user si login / status: candidatures ouvertes ou fermées
125 int choix, id = 0, status = readStatus();
126 char connexion;
127
128 printf("\n\nSouhaitez-vous vous connecter/enregistrer maintenant ou entrer en mode invité (O/N) ? : ");
129 scanf("%*c%c", &connexion);
130
131 if(connexion == 'O' || connexion == 'o')
132 identificationCandidat(&id, listePointer, nbCandidats);
133 else
134 if(connexion != 'n' && connexion != 'N')
135 while ((poubelle = getchar()) != '\n' && poubelle != EOF);
136
137 if(id != 0) {
138 candidat = (*listePointer)[id-1];
139 printf("\e[1;94mCandidat: %s %s, ID: %d\e[0m\n", candidat->prenom, candidat->nom, id);
140 } else
141 printf("\n\e[1;94mInvité\e[0m\n");
142 printf("-----------------------------------------------------------------------\n");
143 printf("\t1 - Consulter les ville possédant un IUT\n\n");
144 printf("\t2 - Voir les disponibilités des départements dans un IUT\n\n");
145 printf("\t3 - Rechercher un département\n\n");
146 if(id != 0) {
147 if(status == 1)
148 printf("\t4 - Candidater\n\n");
149 printf("\t5 - Suivre sa candidature\n\n");
150 } else {
151 printf("\t4 - S'identifier\n\n");
152 }
153 printf("\t9 - Quitter\n");
154 printf("-----------------------------------------------------------------------\n");
155
156
157 if(scanf("%d", &choix) == 0)
158 choix=0;
159
160 printf("-----------------------------------------------------------------------\n");
161
162 while(choix != 9){
163 switch (choix) {
164 case 1:
165 //system("clear");
166 printf("Consulter les ville possédant un IUT...\n\n");
167 afficherListeVilles(tiut, nbVilles);
168 break;
169 case 2:
170 printf("Voir les disponibilités des départements dans un IUT...\n\n");
171 printf("Saisissez le nom de la ville recherchée (tapez q pour annuler) : ");
172
173 scanf("\n%[^\n]", searchIUT);
174
175 if(strcasecmp(searchIUT, "q") == 0)
176 break;
177
178 afficherListeDepartement(tiut, nbVilles, searchIUT);
179 break;
180 case 3:
181 printf("Rechercher un département...\n\n");
182 printf("Saisissez le nom du département recherché (tapez q pour annuler) : ");
183
184 scanf("\n%[^\n]", searchDept);
185
186 if(strcasecmp(searchDept, "q") == 0)
187 break;
188
189 afficherDepartement(tiut, nbVilles, searchDept);
190 break;
191 case 4:
192 if(id != 0) {
193 printf("Candidater...\n\n");
194 if(status == 1)
195 menuCandidat_candidater(tiut, nbVilles, candidat);
196 else
197 fprintf(stderr, "\e[0;91mErreur : la phase de candidature est arrêtée.\n\e[0m");
198 } else {
199 printf("S'identifier...\n\n");
200 identificationCandidat(&id, listePointer, nbCandidats);
201 if(id != 0)
202 candidat = (*listePointer)[id-1];
203 }
204
205 break;
206 case 5:
207 printf("Suivre sa candidature...\n\n");
208
209 if(id == 0)
210 fprintf(stderr, "\e[0;91mErreur : vous devez d'abord vous authentifier, merci de réessayer plus tard.\n\e[0m");
211 else
212 menuCandidat_suivreCandidature(*listePointer, *nbCandidats, candidat);
213
214 break;
215 default:
216 // Permet d'aspirer les caractères en trop sur stdin (évite de répéter le message d'erreur X fois)
217 while ((poubelle = getchar()) != '\n' && poubelle != EOF);
218 fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\e[0m");
219 break;
220 }
221
222 if(id != 0)
223 printf("\n\e[1;94mCandidat: %s %s, ID: %d\e[0m\n", candidat->prenom, candidat->nom, id);
224 else
225 printf("\n\e[1;94mInvité\e[0m\n");
226 printf("-----------------------------------------------------------------------\n");
227 printf("\t1 - Consulter les ville possédant un IUT\n\n");
228 printf("\t2 - Voir les disponibilités des départements dans un IUT\n\n");
229 printf("\t3 - Rechercher un département\n\n");
230 if(id != 0) {
231 if(status == 1)
232 printf("\t4 - Candidater\n\n");
233 printf("\t5 - Suivre sa candidature\n\n");
234 } else {
235 printf("\t4 - S'identifier\n\n");
236 }
237 printf("\t9 - Quitter\n");
238 printf("-----------------------------------------------------------------------\n");
239
240 if(scanf("%d", &choix) == 0)
241 choix=0;
242 }
243
244 printf("\nRetour au menu principal...\n");
245}
246
247void menuResponsable(VilleIUT** tiut, ListeCandidats liste, int nbVilles, int nbCandidats) {
248 FileAttente* file;
249 // poubelle: permet de stocker les caractères aspirés en trop sur stdin lors du choix dans le menu
250 // pass: contient la valeur entrée par l'utilisateur lors de la saisie du mot de passe
251 char poubelle, pass[LEN_MAX];
252 int choix;
253
254 printf("Merci d'entrer le mot de passe responsable : ");
255 system("stty -echo");
256 scanf("\n%[^\n]", pass);
257 system("stty echo");
258
259 if(strcmp(pass, "resp2023") != 0) {
260 fprintf(stderr, "\n\e[1;91mErreur: mot de passe incorrect !\n\n\e[0m");
261 sleep(2);
262 return;
263 } else
264 printf("\n\n\e[1;32mMot de passe correct !\e[0m\n\n");
265
266 /* RESET LA NOTE MINI DE TOUT DEPT
267 ListeDept ldept;
268 for(int caca=0; caca<*nbVilles; caca++) {
269 ldept = (*tiutPointer)[caca]->ldept;
270
271 while(ldept != NULL) {
272 (*tiutPointer)[caca]->ldept->noteMinimale = -1;
273 ldept = ldept->suiv;
274 }
275
276 }
277 */
278
279 // Met dans le pointeur FileAttente l'adresse de la file d'attente concernant
280 // le département Informatique de Clermont-Ferrand
281 file = lireCandidatsAttente("Informatique", "Clermont-Ferrand");
282
283 printf("\e[1;34mResponsable: M. BOUHOURS, IUT: Clermont-Ferrand, Département: Informatique\e[0m\n");
284 printf("--------------------------------------------------------------------------\n");
285 printf("\t1 - Lister les candidatures\n\n");
286 printf("\t2 - Traiter les candidatures\n\n");
287 printf("\t3 - Voir les candidats admis\n\n");
288 printf("\t4 - Voir les candidats en file d'attente\n\n");
289 printf("\t9 - Quitter\n");
290 printf("--------------------------------------------------------------------------\n");
291
292 if(scanf("%d", &choix) == 0)
293 choix=0;
294
295 printf("--------------------------------------------------------------------------\n");
296
297 while(choix != 9){
298 switch (choix) {
299 case 1:
300 printf("Lister les candidatures...\n");
301
302 calculerNoteGlobale(liste, nbCandidats); // Calcul des notes globales avant affichage
303
304 printf("\n\e[1;32mAffichage des candidatures triées par ordre alphabétique pour le département 'Informatique' de l'IUT 'Clermont-Ferrand'\n\n\e[0m");
305 afficherCandidaturesByDept(liste, nbCandidats, "Clermont-Ferrand", "Informatique");
306 break;
307 case 2:
308 printf("Traiter les candidatures...\n");
309
310 menuResponsable_traiterCandidatures(tiut, nbVilles, liste, nbCandidats);
311 file = lireCandidatsAttente("Informatique", "Clermont-Ferrand");
312 break;
313 case 3:
314 printf("Voir les candidats admis...\n");
315
316 printf("\n\e[1;32mAffichage des candidats admis triés par ordre alphabétique pour le département 'Informatique' de l'IUT 'Clermont-Ferrand'\n\n\e[0m");
317 afficherCandidatsAdmis("Informatique", "Clermont-Ferrand");
318 break;
319 case 4:
320 printf("Voir les candidats en liste d'attente...\n");
321
322 printf("\n\e[1;32mAffichage des candidats en file d'attente pour le département 'Informatique' de l'IUT 'Clermont-Ferrand'\n\n\e[0m");
324 break;
325 default:
326 // Permet d'aspirer les caractères en trop sur stdin (évite de répéter le message d'erreur X fois)
327 while ((poubelle = getchar()) != '\n' && poubelle != EOF);
328 fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\n\e[0m");
329 break;
330 }
331
332 printf("\e[1;34mResponsable: M. BOUHOURS, IUT: Clermont-Ferrand, Département: Informatique\e[0m\n");
333 printf("--------------------------------------------------------------------------\n");
334 printf("\t1 - Lister les candidatures\n\n");
335 printf("\t2 - Traiter les candidatures\n\n");
336 printf("\t3 - Voir les candidats admis\n\n");
337 printf("\t4 - Voir les candidats en file d'attente\n\n");
338 printf("\t9 - Quitter\n");
339 printf("--------------------------------------------------------------------------\n");
340
341 if(scanf("%d", &choix) == 0)
342 choix=0;
343 }
344
345 ecrireCandidatsAttente("Informatique", "Clermont-Ferrand", file);
346 printf("\nRetour au menu principal...\n");
347}
348
349void menuAdmin(VilleIUT*** tiutPointer, ListeCandidats liste, int* nbVilles, int nbCandidats) {
350 // poubelle: Permet de stocker les caractères aspirés en trop sur stdin lors du choix dans le menu
351 // pass: contient la valeur entrée par l'utilisateur lors de la saisie du mot de passe
352 char poubelle, pass[LEN_MAX];
353 // choix: Contient le choix de l'utilisateur dans le menu, status: contient le status actuel des recrutements
354 int choix, status = readStatus();
355
356 printf("Merci d'entrer le mot de passe administrateur : ");
357 system("stty -echo");
358 scanf("\n%[^\n]", pass);
359 system("stty echo");
360
361 if(strcmp(pass, "admin2023") != 0) {
362 fprintf(stderr, "\n\e[1;91mErreur: mot de passe incorrect !\n\n\e[0m");
363 sleep(2);
364 return;
365 } else
366 printf("\n\n\e[1;32mMot de passe correct !\e[0m\n\n");
367
368 printf("--------------------------------------------------------------------\n");
369 printf("\t1 - Modifier le nombre de place d'une formation\n\n");
370 printf("\t2 - Créer un nouvel IUT\n\n");
371 printf("\t3 - Créer un nouveau département\n\n");
372 printf("\t4 - Supprimer un département\n\n");
373 if(status == 1)
374 printf("\t5 - Arrêter la phase de candidature\n\n");
375 else
376 printf("\t5 - Lancer la phase de candidature\n\n");
377 printf("\t6 - Modifier le nom du responsable d'un département\n\n");
378 printf("\t7 - Liste des candidats\n\n");
379 printf("\t9 - Quitter\n");
380 printf("---------------------------------------------------------------------\n");
381
382 if(scanf("%d", &choix) == 0)
383 choix=0;
384
385 printf("---------------------------------------------------------------------\n");
386
387 while(choix != 9){
388 switch (choix) {
389 case 1:
390 printf("Modifier le nombre de place d'une formation...\n\n");
391 menuAdmin_modifierPlaces(*tiutPointer, *nbVilles);
392 break;
393 case 2:
394 printf("Créer un nouvel IUT...\n\n");
395 menuAdmin_creerIUT(tiutPointer, nbVilles);
396 break;
397 case 3:
398 printf("Créer un nouveau département...\n\n");
399 menuAdmin_creerDepartement(*tiutPointer, *nbVilles);
400 break;
401 case 4:
402 printf("Supprimer un département...\n\n");
403 menuAdmin_supprimerDepartement(*tiutPointer, *nbVilles);
404 break;
405 case 5:
406 if(status == 1)
407 printf("Arrêter la phase de candidature...\n\n");
408 else
409 printf("Lancer la phase de candidature...\n\n");
410
411 saveStatus(status ? 0 : 1);
412 status = (status ? 0 : 1);
413
414 printf("\n\e[1;32mLa phase de candidature à bien été %s !\e[0m\n\n", (status ? "lancée" : "arrêtée"));
415 break;
416 case 6:
417 printf("Modifier le nom du responsable d'un département...\n\n");
418 menuAdmin_modifierResponsable(*tiutPointer, *nbVilles);
419 break;
420 case 7:
421 printf("Liste des candidats...\n");
422 printf("\n\e[4;37mListe des candidats (triés par ordre alphabétique) :\e[0m\n\n");
423 afficherListeCandidats(liste, nbCandidats);
424 break;
425 default:
426 // Permet d'aspirer les caractères en trop sur stdin (évite de répéter le message d'erreur X fois)
427 while ((poubelle = getchar()) != '\n' && poubelle != EOF);
428 fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\e[0m");
429 break;
430 }
431
432 printf("\n--------------------------------------------------------------------\n");
433 printf("\t1 - Modifier le nombre de place d'une formation\n\n");
434 printf("\t2 - Créer un nouvel IUT\n\n");
435 printf("\t3 - Créer un nouveau département\n\n");
436 printf("\t4 - Supprimer un département\n\n");
437 if(status == 1)
438 printf("\t5 - Arrêter la phase de candidature\n\n");
439 else
440 printf("\t5 - Lancer la phase de candidature\n\n");
441 printf("\t6 - Modifier le nom du responsable d'un département\n\n");
442 printf("\t7 - Liste des candidats\n\n");
443 printf("\t9 - Quitter\n");
444 printf("---------------------------------------------------------------------\n");
445
446 if(scanf("%d", &choix) == 0)
447 choix=0;
448 }
449
450 printf("\nRetour au menu principal...\n");
451}
452
453void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */) {
454 char poubelle; // Permet de stocker les caractères aspirés en trop sur stdin lors du choix dans le menu
455 // choix: Contient le choix de l'utilisateur dans le menu, status: contient la valeur de l'état d'ouverture des recrutements
456 int choix, status = readStatus();
457
458 // PARTIE 1
459 int nbVilles = 0;
460 VilleIUT** tiut = readVilles(&nbVilles);
461
462 // PARTIE 2
463 int nbCandidats = 0;
464 ListeCandidats liste = readCandidats(&nbCandidats);
465
467 printf("--------------------------------------------\n");
468 printf("Vous êtes : \n");
469 printf("--------------------------------------------\n");
470 printf("\t1 - Candidat\n\n");
471 printf("\t2 - Administrateur\n\n");
472 if(status == 0)
473 printf("\t3 - Responsable\n\n");
474 printf("\t9 - Quitter l'application\n");
475 printf("--------------------------------------------\n");
476
477 if(scanf("%d", &choix) == 0)
478 choix=0;
479
480 printf("-------------------------------------------------\n");
481
482 while(choix != 9){
483 switch (choix) {
484 case 1:
485 system("clear");
486 printf("\e[1;34m ██████╗ █████╗ ███╗ ██╗██████╗ ██╗██████╗ █████╗ ████████╗\n");
487 printf("██╔════╝██╔══██╗████╗ ██║██╔══██╗██║██╔══██╗██╔══██╗╚══██╔══╝\n");
488 printf("██║ ███████║██╔██╗ ██║██║ ██║██║██║ ██║███████║ ██║ \n");
489 printf("██║ ██╔══██║██║╚██╗██║██║ ██║██║██║ ██║██╔══██║ ██║ \n");
490 printf("╚██████╗██║ ██║██║ ╚████║██████╔╝██║██████╔╝██║ ██║ ██║ \n");
491 printf(" ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝ \e[0m\n\n");
492
493 menuCandidat(tiut, &liste, nbVilles, &nbCandidats);
495 break;
496 case 2:
497 system("clear");
498 printf("\e[1;34m █████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗██╗███████╗████████╗██████╗ █████╗ ████████╗███████╗██╗ ██╗██████╗ \n");
499 printf("██╔══██╗██╔══██╗████╗ ████║██║████╗ ██║██║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝██╔════╝██║ ██║██╔══██╗\n");
500 printf("███████║██║ ██║██╔████╔██║██║██╔██╗ ██║██║███████╗ ██║ ██████╔╝███████║ ██║ █████╗ ██║ ██║██████╔╝\n");
501 printf("██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║██║╚════██║ ██║ ██╔══██╗██╔══██║ ██║ ██╔══╝ ██║ ██║██╔══██╗\n");
502 printf("██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║██║███████║ ██║ ██║ ██║██║ ██║ ██║ ███████╗╚██████╔╝██║ ██║\n");
503 printf("╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝\e[0m\n\n");
504
505 menuAdmin(&tiut, liste, &nbVilles, nbCandidats);
506 status=readStatus();
508 break;
509 case 3:
510 if(status == 0) {
511 system("clear");
512 printf("\e[1;34m██████╗ ███████╗███████╗██████╗ ██████╗ ███╗ ██╗███████╗ █████╗ ██████╗ ██╗ ███████╗\n");
513 printf("██╔══██╗██╔════╝██╔════╝██╔══██╗██╔═══██╗████╗ ██║██╔════╝██╔══██╗██╔══██╗██║ ██╔════╝\n");
514 printf("██████╔╝█████╗ ███████╗██████╔╝██║ ██║██╔██╗ ██║███████╗███████║██████╔╝██║ █████╗ \n");
515 printf("██╔══██╗██╔══╝ ╚════██║██╔═══╝ ██║ ██║██║╚██╗██║╚════██║██╔══██║██╔══██╗██║ ██╔══╝ \n");
516 printf("██║ ██║███████╗███████║██║ ╚██████╔╝██║ ╚████║███████║██║ ██║██████╔╝███████╗███████╗\n");
517 printf("╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝\e[0m\n\n");
518
519 menuResponsable(tiut, liste, nbVilles, nbCandidats);
521 } else
522 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");
523 break;
524 default:
525 // Permet d'aspirer les caractères en trop sur stdin (évite de répéter le message d'erreur X fois)
526 while ((poubelle = getchar()) != '\n' && poubelle != EOF);
527 fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\n\e[0m");
528 break;
529 }
530
531 printf("--------------------------------------------\n");
532 printf("Vous êtes : \n");
533 printf("--------------------------------------------\n");
534 printf("\t1 - Candidat\n\n");
535 printf("\t2 - Administrateur\n\n");
536 if(status == 0)
537 printf("\t3 - Responsable\n\n");
538 printf("\t9 - Quitter l'application\n");
539 printf("--------------------------------------------\n");
540
541 if(scanf("%d", &choix) == 0)
542 choix=0;
543 }
544
545 printf("\nSauvegarde des IUT...\n");
546 saveVilles(tiut, nbVilles);
547 printf("Sauvegarde des Candidats...\n");
548 saveCandidats(liste, nbCandidats);
549 printf("\nFermeture de l'application...\n");
550
551 free(tiut);
552 free(liste);
553}
554
555
556
557// FONCTIONS MENU ADMIN
558
559void menuAdmin_modifierPlaces(VilleIUT** tiut, int nbVilles) {
560 int nbPlaces, code;
561 char searchIUT[LEN_MAX], searchDept[LEN_MAX];
562 printf("Entrez une ville (tapez q pour annuler) : ");
563 scanf("\n%[^\n]", searchIUT);
564
565 if(strcasecmp(searchIUT, "q") == 0)
566 return;
567
568 code = afficherListeDepartement(tiut, nbVilles, searchIUT);
569
570 if(code != -1) {
571 printf("Quel département souhaitez-vous modifier ? : ");
572 scanf("\n%[^\n]", searchDept);
573 printf("Entrez le nouveau nombre de places pour le département '%s' : ", searchDept);
574 scanf("%d", &nbPlaces);
575
576 modifierNbPlaces(tiut, nbVilles, searchIUT, searchDept, nbPlaces);
577 }
578}
579
580void menuAdmin_creerIUT(VilleIUT*** tiutPointer, int* nbVilles) {
581 VilleIUT* ville;
582 char nameIUT[LEN_MAX];
583 printf("Entrez le nom de la ville (tapez q pour annuler) : ");
584 scanf("\n%[^\n]", nameIUT);
585
586 if(strcasecmp(nameIUT, "q") == 0)
587 return;
588
589 ville = creerVille();
590 strcpy(ville->ville, nameIUT);
591
592 ajouterVille(tiutPointer, ville, nbVilles);
593
594 printf("\n\e[1;32mL'IUT '%s' a bien été créé !\e[0m\n\n", nameIUT);
595}
596
597void menuAdmin_creerDepartement(VilleIUT** tiut, int nbVilles) {
598 int i, nbP;
599 char searchIUT[LEN_MAX], addDept[LEN_MAX], responsable[LEN_MAX];
600
601 VilleIUT* ville;
602 ListeDept ldept;
603 MaillonDept* dept;
604
605 printf("Entrez la ville dans laquelle vous souhaitez ajouter un département (tapez q pour annuler) : ");
606 scanf("\n%[^\n]", searchIUT);
607
608 if(strcasecmp(searchIUT, "q") == 0)
609 return;
610
611 i = rechercherVille(tiut, nbVilles, searchIUT);
612
613 if(i == -1)
614 fprintf(stderr, "\n\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT);
615 else {
616 ville = tiut[i];
617
618 printf("Entrez le nom du nouveau département : ");
619 scanf("%*c%[^\n]", addDept);
620
621 ldept = ville->ldept;
622
623 if(ldept != NULL) {
624 if(strcasecmp(ldept->departement, addDept) == 0) {
625 fprintf(stderr, "\n\e[1;91mErreur: le département '%s' existe déjà dans l'IUT '%s'.\e[0m\n\n", addDept, searchIUT);
626 return;
627 }
628
629 while(ldept->suiv != NULL) {
630 if(strcasecmp(ldept->suiv->departement, addDept) == 0) return;
631 ldept = ldept->suiv;
632 }
633
634 if(ldept->suiv != NULL && strcasecmp(ldept->suiv->departement, addDept) == 0) {
635 fprintf(stderr, "\n\e[1;91mErreur: le département '%s' existe déjà dans l'IUT '%s'.\e[0m\n\n", addDept, searchIUT);
636 return;
637 }
638 }
639
640
641 printf("Entrez le nombre de place disponibles en 1ère année : ");
642 scanf("%d", &nbP);
643 printf("Entrez le nom du responsable de ce département : ");
644 scanf("%*c%[^\n]", responsable);
645
646 dept = creerDepartement(addDept, nbP, responsable);
647 ville->ldept = ajouterDepartement(ville->ldept, dept);
648
649 printf("\n\e[1;32mLe département '%s' a bien été ajouté à l'IUT '%s' !\e[0m\n\n", addDept, searchIUT);
650 }
651}
652
653void menuAdmin_supprimerDepartement(VilleIUT** tiut, int nbVilles) {
654 if(readStatus() == 0) {
655 int i;
656 char searchIUT[LEN_MAX], searchDept[LEN_MAX];
657
658 VilleIUT* ville;
659
660 printf("Entrez la ville dans laquelle vous souhaitez supprimer un département (tapez q pour annuler) : ");
661 scanf("\n%[^\n]", searchIUT);
662
663 if(strcasecmp(searchIUT, "q") == 0)
664 return;
665
666 i = rechercherVille(tiut, nbVilles, searchIUT);
667
668 if(i == -1)
669 fprintf(stderr, "\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT);
670 else {
671 ville = tiut[i];
672
673 afficherListeDepartement(tiut, nbVilles, searchIUT);
674
675 printf("Quel département souhaitez-vous supprimer ? : ");
676 scanf("%*c%[^\n]", searchDept);
677
678 ville->ldept = supprimerDepartement(ville->ldept, searchDept);
679 }
680 } else {
681 fprintf(stderr, "\e[1;91mErreur: vous ne pouvez pas supprimer de département pendant le recrutement/le traitement des candidatures.\e[0m\n\n");
682 }
683}
684
685void menuAdmin_modifierResponsable(VilleIUT** tiut, int nbVilles) {
686 int code;
687 char searchIUT[LEN_MAX], searchDept[LEN_MAX], nom[LEN_MAX];
688
689 printf("Dans quel IUT souhaitez-vous faire une modification ? (tapez q pour annuler) : ");
690 scanf("\n%[^\n]", searchIUT);
691
692 if(strcasecmp(searchIUT, "q") == 0)
693 return;
694
695 code = afficherListeDepartement(tiut, nbVilles, searchIUT);
696
697 if(code != -1) {
698 printf("Quel département souhaitez-vous modifier ? : ");
699 scanf("\n%[^\n]", searchDept);
700
701 printf("Quel est le nom du nouveau responsable : ");
702 scanf("\n%[^\n]", nom);
703
704 modifierNomResponsable(tiut, nbVilles, searchIUT, searchDept, nom);
705 }
706}
707
709 VilleIUT* ville = (VilleIUT*) malloc(sizeof(VilleIUT));
710
711 if(ville == NULL) {
712 perror("malloc");
713 exit(errno);
714 }
715
716 ville->ldept = creerListeDepartement();
717
718 return ville;
719}
720
721void ajouterVille(VilleIUT*** tiutPointer, VilleIUT* ville, int* nbVilles) {
722 VilleIUT** tiutNew = (VilleIUT**) realloc(*tiutPointer, (*nbVilles+1)*sizeof(VilleIUT*));
723
724 if(tiutNew == NULL) {
725 perror("realloc");
726 exit(errno);
727 }
728
729 *tiutPointer = tiutNew;
730
731 (*tiutPointer)[*nbVilles] = ville;
732 *nbVilles += 1;
733}
734
735int rechercherVille(VilleIUT** tiut, int nbVilles, char* searchIUT) {
736 int i=0;
737 for(i=0; i<nbVilles; i++)
738 if(strcasecmp(tiut[i]->ville, searchIUT) == 0)
739 return i;
740
741 return -1;
742}
743
744void afficherListeVilles(VilleIUT** tiut, int nbVilles) {
745 printf("\e[4;37mListe des villes ayant un IUT disponibles :\e[0m\n\n");
746
747 int i;
748 for(i=0; i<nbVilles; i++)
749 printf(" - %s\n", tiut[i]->ville);
750
751 printf("\n\n");
752}
753
755 return NULL;
756}
757
758int afficherListeDepartement(VilleIUT** tiut, int nbVilles, char* searchIUT) {
759 ListeDept ldept;
760 int i = rechercherVille(tiut, nbVilles, searchIUT);
761
762 if(i == -1) {
763 fprintf(stderr, "\n\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT);
764 return -1;
765 }
766
767 ldept = tiut[i]->ldept;
768
769 if(ldept == NULL)
770 fprintf(stderr, "\n\e[1;91mErreur: la ville '%s' ne contient aucun département\e[0m\n\n", tiut[i]->ville);
771 else {
772 printf("\n\e[4;37mDépartements disponibles dans la ville '%s' :\e[0m\n\n", tiut[i]->ville);
773
774 while (ldept != NULL) {
775 printf(" - %s, \e[0;32m%d places disponibles\e[0m, Reponsable : %s\n", ldept->departement, ldept->nbP, ldept->responsable);
776 ldept = ldept->suiv;
777 }
778
779 printf("\n");
780 }
781
782 return 1;
783}
784
785void afficherDepartement(VilleIUT** tiut, int nbVilles, char* searchDept) {
786 int i, nb=0;
787 ListeDept ldept, search;
788
789 printf("\n\e[4;37mListe des IUT contenant le département '%s':\e[0m\n\n", searchDept);
790
791 for(i=0; i<nbVilles; i++) {
792 ldept = tiut[i]->ldept;
793
794 if(ldept != NULL) {
795 if(strcasecmp(ldept->departement, searchDept) == 0) {
796 printf(" - %s\n", tiut[i]->ville);
797 nb++;
798 } else {
799 search = ldept;
800
801 while(search->suiv != NULL) {
802 search = search->suiv;
803 if(strcasecmp(search->departement, searchDept) == 0) {
804 printf(" - %s\n", tiut[i]->ville);
805 nb++;
806 }
807 }
808 }
809 }
810 }
811
812 if(nb == 0)
813 fprintf(stderr, " \e[1;91mAucun IUT ne contient ce département !\e[0m\n");
814
815 printf("\n");
816}
817
818MaillonDept* creerDepartement(char* departement, int nbP, char* responsable) {
819 MaillonDept* newDept = (MaillonDept*) malloc(sizeof(MaillonDept));
820
821 if(newDept == NULL) {
822 perror("malloc");
823 exit(errno);
824 }
825
826 strcpy(newDept->departement, departement);
827 newDept->nbP = nbP;
828 strcpy(newDept->responsable, responsable);
829 newDept->noteMinimale = -1; // Ajout Partie III
830
831 return newDept;
832}
833
835 ListeDept search = ldept;
836
837 if(ldept == NULL)
838 ldept = dept;
839 else {
840 while(search->suiv != NULL)
841 search = search->suiv;
842
843 search->suiv = dept;
844 }
845
846 return ldept;
847}
848
849ListeDept supprimerDepartement(ListeDept ldept, char* searchDept) {
850 int foundDept=0;
851 ListeDept search, tmp;
852
853 if(strcasecmp(ldept->departement, searchDept) == 0) {
854 ldept = ldept->suiv;
855 foundDept = 1;
856 } else {
857 search = ldept;
858
859 while(search->suiv != NULL && strcasecmp(search->departement, searchDept) != 0) {
860 tmp = search;
861 search = search->suiv;
862 }
863
864 if(strcasecmp(search->departement, searchDept) == 0) {
865 tmp->suiv = search->suiv;
866 foundDept=1;
867 }
868 }
869
870 if(foundDept)
871 printf("\n\e[1;32mLe département '%s' a bien été supprimé !\e[0m\n\n", searchDept);
872 else
873 fprintf(stderr, "\n\e[1;91mErreur: la département '%s' n'existe pas.\e[0m\n\n", searchDept);
874
875 return ldept;
876}
877
878void modifierNbPlaces(VilleIUT** tiut, int nbVilles, char* searchIUT, char* searchDept, int nb) {
879 int foundDept=0, i = rechercherVille(tiut, nbVilles, searchIUT);
880 ListeDept ldept, search;
881
882 if(i == -1) {
883 fprintf(stderr, "\n\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT);
884 return;
885 }
886
887 ldept = tiut[i]->ldept;
888
889 if(ldept != NULL) {
890 if(strcasecmp(ldept->departement, searchDept) == 0) {
891 printf("\n\e[1;32mLe nombre de places de la formation '%s' à l'IUT '%s' est passé de %d à %d\e[0m\n\n", searchDept, searchIUT, ldept->nbP, nb);
892 ldept->nbP = nb;
893 foundDept = 1;
894 } else {
895 search = ldept;
896
897 while(search->suiv != NULL) {
898 search = search->suiv;
899 if(strcasecmp(search->departement, searchDept) == 0) {
900 printf("\n\e[1;32mLe nombre de places de la formation '%s' à l'IUT '%s' est passé de %d à %d\e[0m\n\n", searchDept, searchIUT, search->nbP, nb);
901 search->nbP = nb;
902 foundDept = 1;
903 }
904 }
905 }
906 }
907
908 if(!foundDept)
909 fprintf(stderr, "\n\e[1;91mErreur: le département '%s' n'a pas été trouvé dans l'IUT '%s'\e[0m\n\n", searchDept, searchIUT);
910}
911
912void modifierNomResponsable(VilleIUT** tiut, int nbVilles, char* searchIUT, char* searchDept, char* nom) {
913 ListeDept ldept, search;
914 int foundDept=0, i = rechercherVille(tiut, nbVilles, searchIUT);
915
916 if(i == -1) {
917 fprintf(stderr, "\n\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT);
918 return;
919 }
920
921 ldept = tiut[i]->ldept;
922
923 if(ldept != NULL) {
924 if(strcasecmp(ldept->departement, searchDept) == 0) {
925 strcpy(ldept->responsable, nom);
926 printf("\n\e[1;32mLe responsable de la formation '%s' à l'IUT '%s' est désormais '%s'.\e[0m\n\n", searchDept, searchIUT, ldept->responsable);
927 foundDept = 1;
928 } else {
929 search = ldept;
930
931 while(search->suiv != NULL) {
932 search = search->suiv;
933 if(strcasecmp(search->departement, searchDept) == 0) {
934 strcpy(search->responsable, nom);
935 printf("\n\e[1;32mLe responsable de la formation '%s' à l'IUT '%s' est désormais '%s'.\e[0m\n\n", searchDept, searchIUT, search->responsable);
936 foundDept = 1;
937 }
938 }
939 }
940 }
941
942 if(foundDept == 0)
943 fprintf(stderr, "\n\e[1;91mErreur: le département '%s' n'a pas été trouvé dans l'IUT '%s'.\e[0m\n\n", searchDept, searchIUT);
944}
945
946void saveVilles(VilleIUT* tiut[], int nbVilles) {
947 int i, longueurNomVille, nbDepartements, lenDepartement, lenNomResponsable;
948 VilleIUT ville;
949 MaillonDept* maillon;
950
951 FILE *fe = fopen("donnees/villes.bin", "wb");
952
953 if(fe == NULL) {
954 fprintf(stderr, "\e[1;91mErreur: impossible d'écrire dans le fichier villes.don\e[0m");
955 return;
956 }
957
958 fwrite(&nbVilles, sizeof(int), 1, fe);
959
960 for (i=0; i<nbVilles; i++) {
961 ville = *tiut[i];
962
963 longueurNomVille = strlen(ville.ville)+1;
964 fwrite(&longueurNomVille, sizeof(int), 1, fe);
965 fwrite(ville.ville, sizeof(char), longueurNomVille, fe);
966
967 nbDepartements = 0;
968 maillon = ville.ldept;
969 while (maillon != NULL) {
970 nbDepartements++;
971 maillon = maillon->suiv;
972 }
973 fwrite(&nbDepartements, sizeof(int), 1, fe);
974
975 maillon = ville.ldept;
976 while (maillon != NULL) {
977 lenDepartement = strlen(maillon->departement)+1;
978 fwrite(&lenDepartement, sizeof(int), 1, fe);
979 fwrite(maillon->departement, sizeof(char), lenDepartement, fe);
980
981 fwrite(&maillon->nbP, sizeof(int), 1, fe);
982
983 lenNomResponsable = strlen(maillon->responsable)+1;
984 fwrite(&lenNomResponsable, sizeof(int), 1, fe);
985 fwrite(maillon->responsable, sizeof(char), lenNomResponsable, fe);
986
987 fwrite(&maillon->noteMinimale, sizeof(int), 1, fe);
988
989 maillon = maillon->suiv;
990 }
991 }
992
993 fclose(fe);
994}
995
996VilleIUT** readVilles(int* nbVilles) {
997 VilleIUT** tiut;
998 VilleIUT* ville;
999 MaillonDept* maillon, *maillonPrecedent;
1000 int i, lenNomVille, nbDepartements, lenDepartement, lenNomResponsable;
1001
1002 FILE *fe = fopen("donnees/villes.bin", "rb");
1003
1004 if(fe == NULL) {
1005 fprintf(stderr, "\e[1;91mErreur: impossible de lire le fichier villes.bin\e[0m");
1006 exit(1);
1007 }
1008
1009 fread(nbVilles, sizeof(int), 1, fe);
1010
1011 tiut = (VilleIUT**) malloc(*nbVilles*sizeof(VilleIUT*));
1012
1013 if(tiut == NULL) {
1014 perror("malloc");
1015 exit(errno);
1016 }
1017
1018 for (i=0; i<*nbVilles; i++) {
1019 ville = (VilleIUT*) malloc(sizeof(VilleIUT));
1020
1021 if(ville == NULL) {
1022 perror("malloc");
1023 exit(errno);
1024 }
1025
1026 fread(&lenNomVille, sizeof(int), 1, fe);
1027 fread(ville->ville, sizeof(char), lenNomVille, fe);
1028
1029 fread(&nbDepartements, sizeof(int), 1, fe);
1030
1031 ville->ldept = creerListeDepartement();
1032 maillonPrecedent = NULL;
1033
1034 int j;
1035 for (j=0; j<nbDepartements; j++) {
1036 maillon = (MaillonDept*) malloc(sizeof(MaillonDept));
1037
1038 if(maillon == NULL) {
1039 perror("malloc");
1040 exit(errno);
1041 }
1042
1043 if(maillonPrecedent != NULL)
1044 maillonPrecedent->suiv = maillon;
1045
1046 fread(&lenDepartement, sizeof(int), 1, fe);
1047 fread(maillon->departement, sizeof(char), lenDepartement, fe);
1048
1049 fread(&maillon->nbP, sizeof(int), 1, fe);
1050
1051 fread(&lenNomResponsable, sizeof(int), 1, fe);
1052 fread(maillon->responsable, sizeof(char), lenNomResponsable, fe);
1053
1054 fread(&maillon->noteMinimale, sizeof(int), 1, fe);
1055
1056 if(maillonPrecedent == NULL)
1057 ville->ldept = maillon;
1058
1059 maillonPrecedent = maillon;
1060 }
1061
1062 tiut[i] = ville;
1063 }
1064
1065 fclose(fe);
1066
1067 return tiut;
1068}
int saveCandidats(ListeCandidats liste, int nbCandidats)
Enregistre la liste des candidats dans le fichier texte candidats.don.
Definition: deux.c:337
void menuCandidat_candidater(VilleIUT **tiut, int nbVilles, Candidat *candidat)
Permet au candidat de déposer une candidature.
Definition: deux.c:63
void saveStatus(int status)
Enregistre sur le fichier texte status.don le status actuel de la phase de candidature (0 si la phase...
Definition: deux.c:393
void ajouterCandidat(ListeCandidats *listePointer, int *nbCandidats, Candidat *candidat)
Ajoute l'adresse du candidat dans le tableau de pointeur "liste".
Definition: deux.c:42
Candidat * creerCandidat(void)
Alloue de la mémoire de la taille d'une structure Candidat avec un malloc.
Definition: deux.c:18
ListeCandidats readCandidats(int *nbCandidats)
Lit la liste des candidats dans le fichier texte candidats.don puis les met dans la structure ListeCa...
Definition: deux.c:263
int readStatus(void)
Lis le status actuel de la phase de candidature (0 si la phase est arrêtée et 1 si elle est lancée)
Definition: deux.c:376
void afficherListeCandidats(ListeCandidats liste, int nbCandidats)
Affiche tous les candidats triés par nom.
Definition: deux.c:125
FileAttente * lireCandidatsAttente(char *dept, char *ville)
Definition: quatre.c:227
void menuCandidat_suivreCandidature(ListeCandidats liste, int nbCandidats, Candidat *candidat)
Permet de voir les candidatures et les décisions prises.
Definition: quatre.c:20
void menuResponsable_traiterCandidatures(VilleIUT **tiut, int nbVilles, ListeCandidats liste, int nbCandidats)
Permet d'accepter un certain nombre de candidat ayant une note minimale.
Definition: quatre.c:124
void afficherCandidatsAttente(FileAttente *file)
Definition: quatre.c:436
void afficherCandidatsAdmis(char *dept, char *ville)
Definition: quatre.c:376
void ecrireCandidatsAttente(char *dept, char *ville, FileAttente *file)
Definition: quatre.c:264
float moyenneAnglais
Definition: structures.h:30
int id
Definition: structures.h:28
float moyenneFrancais
Definition: structures.h:30
float moyenneSpecialite
Definition: structures.h:30
char nom[LEN_MAX]
Definition: structures.h:29
float moyenneMath
Definition: structures.h:30
char prenom[LEN_MAX]
Definition: structures.h:29
char departement[LEN_MAX]
Definition: structures.h:5
char responsable[LEN_MAX]
Definition: structures.h:7
struct MaillonDept * suiv
Definition: structures.h:9
float noteMinimale
Definition: structures.h:8
char ville[LEN_MAX]
Definition: structures.h:15
ListeDept ldept
Definition: structures.h:16
#define LEN_MAX
Definition: structures.h:1
void afficherCandidaturesByDept(ListeCandidats liste, int nbCandidats, char *searchIUT, char *searchDept)
Affiche les candidatures pour un seul département dans un IUT.
Definition: trois.c:22
void calculerNoteGlobale(ListeCandidats liste, int nbCandidats)
Calcul la note globale en fonction des coéfficients prédéfinis.
Definition: trois.c:9
void modifierNomResponsable(VilleIUT **tiut, int nbVilles, char *searchIUT, char *searchDept, char *nom)
Modifie le nom du responsable d'une formation.
Definition: un.c:912
ListeDept creerListeDepartement(void)
Créer une liste vide.
Definition: un.c:754
void menuAdmin_creerIUT(VilleIUT ***tiutPointer, int *nbVilles)
BONUS: Fonction permettant à l'utilisateur administrateur de créer un nouvel IUT.
Definition: un.c:580
ListeDept supprimerDepartement(ListeDept ldept, char *searchDept)
Supprime le département dans une ville choisie par l'utilisateur.
Definition: un.c:849
int rechercherVille(VilleIUT **tiut, int nbVilles, char *searchIUT)
Fonction de recherche pour trouver la position de la ville recherchée dans le tableau tiut.
Definition: un.c:735
void identificationCandidat(int *id, ListeCandidats *listePointer, int *nbCandidats)
Propose à l'utilisateur de se connecter avec son id ou de créer son compte étudiant....
Definition: un.c:19
void menuResponsable(VilleIUT **tiut, ListeCandidats liste, int nbVilles, int nbCandidats)
Affiche le menu des responsables et permet l'appel des fonctions suivant le choix de l'utilisateur.
Definition: un.c:247
void menuAdmin_modifierPlaces(VilleIUT **tiut, int nbVilles)
Fonction permettant à l'administrateur de changer le nombre de places disponibles dans une formation.
Definition: un.c:559
MaillonDept * creerDepartement(char *departement, int nbP, char *responsable)
Alloue de la memoire de la taille d'une structure MaillonDept avec un malloc.
Definition: un.c:818
void menuAdmin(VilleIUT ***tiutPointer, ListeCandidats liste, int *nbVilles, int nbCandidats)
Affiche le menu des administrateurs et permet l'appel des fonctions suivant le choix de l'utilisateur...
Definition: un.c:349
void saveVilles(VilleIUT *tiut[], int nbVilles)
Enregistre les modifications apportées aux structures de données dans le fichier binaire ville....
Definition: un.c:946
void modifierNbPlaces(VilleIUT **tiut, int nbVilles, char *searchIUT, char *searchDept, int nb)
Modifie le nombre de place d'une formation.
Definition: un.c:878
void titreMenuPrincipal(void)
Affiche le titre "RECRUTEMENT IUT".
Definition: un.c:109
void ajouterVille(VilleIUT ***tiutPointer, VilleIUT *ville, int *nbVilles)
BONUS: ajoute l'adresse d'une ville dans le tableau tiut contenue à l'adresse tiutPointer....
Definition: un.c:721
VilleIUT * creerVille(void)
BONUS: Alloue de la memoire de la taille d'une structure VilleIUT avec un malloc.
Definition: un.c:708
ListeDept ajouterDepartement(ListeDept ldept, MaillonDept *dept)
Ajoute un département dans la liste chaînée des départements d'une ville.
Definition: un.c:834
void afficherDepartement(VilleIUT **tiut, int nbVilles, char *searchDept)
Affiche la liste des IUT comprenant un département recherché par l'utilisateur.
Definition: un.c:785
void menuAdmin_supprimerDepartement(VilleIUT **tiut, int nbVilles)
Fonction permettant à l'utilisateur administrateur de supprimer un département existant.
Definition: un.c:653
void menuPrincipal()
Affiche le menu principal et permet l'appel des menus candidats/administrateurs/responsables suivant ...
Definition: un.c:453
void menuAdmin_creerDepartement(VilleIUT **tiut, int nbVilles)
Fonction permettant à l'utilisateur administrateur de créer un nouveau département.
Definition: un.c:597
int afficherListeDepartement(VilleIUT **tiut, int nbVilles, char *searchIUT)
Affiche la liste des différents départements disponible dans une ville recherchée et le nombre de pla...
Definition: un.c:758
VilleIUT ** readVilles(int *nbVilles)
Lit le fichier binaire ville.bin et retourne le tableau tiut avec les structures de données et les do...
Definition: un.c:996
void menuAdmin_modifierResponsable(VilleIUT **tiut, int nbVilles)
Fonction permettant à l'utilisateur administrateur de modifier le nom d'un responsable d'un départeme...
Definition: un.c:685
void menuCandidat(VilleIUT **tiut, ListeCandidats *listePointer, int nbVilles, int *nbCandidats)
Affiche le menu des candidats et permet l'appel des fonctions suivant le choix de l'utilisateur.
Definition: un.c:119
void afficherListeVilles(VilleIUT **tiut, int nbVilles)
Affiche la liste des villes ayant un IUT.
Definition: un.c:744
Partie 1 de la SAE 1.02.