My Project
Loading...
Searching...
No Matches
deux.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 "deux.h"
15#include "../III/trois.c"
16
17
19 Candidat* candidat = (Candidat*) malloc(sizeof(Candidat));
20
21 if(candidat == NULL) {
22 perror("malloc");
23 exit(errno);
24 }
25
26 return candidat;
27}
28
30 Candidature* candid = (Candidature*) malloc(sizeof(Candidature));
31
32 if(candid == NULL) {
33 perror("malloc");
34 exit(errno);
35 }
36
37 candid->decision = 0;
38 candid->validation = 0;
39 return candid;
40}
41
42void ajouterCandidat(ListeCandidats* listePointer, int* nbCandidats, Candidat* candidat) {
43 ListeCandidats listeNew = (ListeCandidats) realloc(*listePointer, (*nbCandidats+1)*sizeof(Candidat*));
44
45 if(listeNew == NULL) {
46 perror("realloc");
47 exit(errno);
48 }
49
50 *listePointer = listeNew;
51
52 *nbCandidats+=1;
53 candidat->id = *nbCandidats;
54 (*listePointer)[*nbCandidats-1] = candidat;
55}
56
57void ajouterCandidature(Candidat* candidat, Candidature* candidature) {
58 candidat->listeCandidatures = (ListeCandidatures) realloc(candidat->listeCandidatures, (candidat->nbCandidatures+1)*sizeof(Candidature*));
59 candidat->listeCandidatures[candidat->nbCandidatures] = candidature;
60 candidat->nbCandidatures+=1;
61}
62
63void menuCandidat_candidater(VilleIUT** tiut, int nbVilles, Candidat* candidat) {
64 int found = 0;
65 ListeDept liste;
66 Candidature* candid = creerCandidature();
67
68 char searchIUT[LEN_MAX], searchDept[LEN_MAX];
69 printf("Entrez la ville dans laquelle vous souhaitez candidater : ");
70 scanf("%s", searchIUT);
71
72 if(strcasecmp(searchIUT, "q") == 0)
73 return;
74
75 int i = rechercherVille(tiut, nbVilles, searchIUT);
76
77 if(i == -1) {
78 fprintf(stderr, "\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT);
79 return;
80 }
81
82 printf("Entrez le département dans lequel vous souhaitez candidater : ");
83 scanf("%*c%[^\n]", searchDept);
84
85 liste = tiut[i]->ldept;
86
87 if(strcmp(liste->departement, searchDept) == 0)
88 found=1;
89
90 while(liste->suiv != NULL) {
91 liste = liste->suiv;
92 if(strcmp(liste->departement, searchDept) == 0)
93 found=1;
94 }
95
96 if(found == 0) {
97 fprintf(stderr, "\e[1;91mErreur: le département '%s' n'existe pas dans l'IUT '%s'.\e[0m\n\n", searchDept, searchIUT);
98 return;
99 }
100
101 strcpy(candid->ville, searchIUT);
102 strcpy(candid->departement, searchDept);
103
104 if(checkCandidature(candidat, *candid) == -1) {
105 fprintf(stderr, "\n\e[1;91mErreur: vous avez déjà candidaté pour le département '%s' dans l'IUT '%s'.\e[0m\n\n", searchDept, searchIUT);
106 return;
107 }
108
109 ajouterCandidature(candidat, candid);
110
111 printf("\n\e[1;32mVotre candidature au département '%s' à l'IUT '%s' a bien été prise en compte !\e[0m\n\n", searchDept, searchIUT);
112}
113
114int checkCandidature(Candidat* candidat, Candidature candid) {
115 int i, nbCandidatures = candidat->nbCandidatures;
116
117 for(i=0; i<nbCandidatures; i++)
118 if(strcmp(candidat->listeCandidatures[i]->ville, candid.ville) == 0)
119 if(strcmp(candidat->listeCandidatures[i]->departement, candid.departement) == 0)
120 return -1;
121
122 return 0;
123}
124
125void afficherListeCandidats(ListeCandidats liste, int nbCandidats) {
126 Candidat* candidat;
127 ListeCandidats liste2 = (ListeCandidats) malloc(nbCandidats*sizeof(Candidat*));
128
129 if(liste2 == NULL) {
130 perror("malloc");
131 exit(errno);
132 }
133
134 for (int i=0; i<nbCandidats; i++) {
135 memcpy(&liste2[i], &liste[i], sizeof(Candidat*));
136 }
137
138 qsort(liste2, nbCandidats, sizeof(Candidat*), compareCandidats);
139
140 for(int i=0; i<nbCandidats; i++) {
141 candidat = liste2[i];
142
143 afficherCandidat(candidat);
144 }
145
146 free(liste2);
147}
148
149void afficherCandidat(Candidat* candidat) {
150 printf("Candidat n°%d, '%s %s' :"
151 "\n - Moyenne en mathématiques : %.2f\n - Moyenne en français : %.2f"
152 "\n - Moyenne en anglais : %.2f\n - Moyenne en spécialité : %.2f"
153 "\n - Nombre de candidatures : %d\n\n",
154 candidat->id, candidat->nom, candidat->prenom,
155 candidat->moyenneMath, candidat->moyenneFrancais,
156 candidat->moyenneAnglais, candidat->moyenneSpecialite,
157 candidat->nbCandidatures);
158}
159
160void afficherCandidatures(ListeCandidatures candidatures, int nbCandidatures) {
161 if(nbCandidatures == 0) return;
162
163 char decision[LEN_MAX], validation[LEN_MAX];
164 Candidature* candidature = candidatures[nbCandidatures-1];
165
166 switch (candidature->decision) {
167 case 0:
168 strcpy(decision, "en cours de traitement");
169 break;
170 case 1:
171 strcpy(decision, "admis");
172 break;
173 case -1:
174 strcpy(decision, "refusé");
175 break;
176 case 2:
177 strcpy(decision, "sur liste d'attente");
178 break;
179 default:
180 break;
181 }
182
183 switch (candidature->validation) {
184 case 0:
185 strcpy(validation, "n'a pas encore décidé");
186 break;
187 case 1:
188 strcpy(validation, "accepte la proposition");
189 break;
190 case -1:
191 strcpy(validation, "refuse la proposition");
192 break;
193 default:
194 break;
195 }
196
197 if(candidature->validation == -1)
198 printf("\n\e[4;37m\e[3mCandidature pour le département '%s' à l'IUT '%s' :\n\e[0m"
199 "\e[3m - Décision du département : %s,\n - Décision du candidat : %s\e[0m\n\n",
200 candidature->departement, candidature->ville, decision, validation);
201 else {
202 if(candidature->validation == 1)
203 printf("\n\e[4;37m\e[1mCandidature pour le département '%s' à l'IUT '%s' :\n\e[0m"
204 "\e[1m - Décision du département : %s,\n - Décision du candidat : %s\n\n\e[0m",
205 candidature->departement, candidature->ville, decision, validation);
206 else
207 printf("\n\e[4;37mCandidature pour le département '%s' à l'IUT '%s' :\n\e[0m"
208 " - Décision du département : %s,\n - Décision du candidat : %s\n\n\e[0m",
209 candidature->departement, candidature->ville, decision, validation);
210 }
211
212 afficherCandidatures(candidatures, nbCandidatures-1);
213}
214
215/* Fonction originale sans récursivité
216void afficherCandidatures_sansRecursif(Candidat* candidat) {
217 int nbCandidatures = candidat->nbCandidatures;
218
219 for(int i=0; i<nbCandidatures; i++) {
220 char decision[LEN_MAX], validation[LEN_MAX];
221 Candidature* candidature = candidat->listeCandidatures[i];
222
223 switch (candidature->decision) {
224 case 0:
225 strcpy(decision, "en cours de traitement");
226 break;
227 case 1:
228 strcpy(decision, "admis");
229 break;
230 case -1:
231 strcpy(decision, "refusé");
232 break;
233 case 2:
234 strcpy(decision, "sur liste d'attente");
235 break;
236 default:
237 break;
238 }
239
240 switch (candidature->validation) {
241 case 0:
242 strcpy(validation, "n'a pas encore décidé");
243 break;
244 case 1:
245 strcpy(validation, "refuse la proposition");
246 break;
247 case -1:
248 strcpy(validation, "accepte");
249 break;
250 default:
251 break;
252 }
253
254 printf("Candidature pour le département '%s' à l'IUT '%s' : \n"
255 " - Décision du département : %s,\n - Décision du candidat : %s\n\n",
256 candidature->departement, candidature->ville, decision, validation);
257 }
258
259 if(nbCandidatures == 0)
260 fprintf(stderr, "\e[0;91mErreur : vous n'avez aucune candidature en cours, merci de réessayer plus tard.\n\e[0m");
261}*/
262
263ListeCandidats readCandidats(int* nbCandidats) {
264 int i, j;
265 Candidat* candidat;
266 Candidature* candidature;
267 ListeCandidats liste;
268 ListeCandidatures listeCandidatures;
269
270 FILE *fe = fopen("donnees/candidats.don", "r");
271
272 if(fe == NULL) {
273 fprintf(stderr, "Erreur: impossible de lire le fichier candidats.don");
274 return NULL;
275 }
276
277 fscanf(fe, "%d", nbCandidats);
278
279 liste = (ListeCandidats) malloc(*nbCandidats*sizeof(Candidat*));
280
281 if(liste == NULL) {
282 perror("malloc");
283 exit(errno);
284 }
285
286 for(i=0; i<*nbCandidats; i++) {
287 candidat = creerCandidat();
288 fscanf(fe, "%d\n%[^\n]\n%[^\n]\n%f\n%f\n%f\n%f\n%d",
289 &candidat->id, candidat->nom, candidat->prenom,
290 &candidat->moyenneMath, &candidat->moyenneFrancais,
291 &candidat->moyenneAnglais, &candidat->moyenneSpecialite,
292 &candidat->nbCandidatures);
293
294 listeCandidatures = (ListeCandidatures) malloc(candidat->nbCandidatures*sizeof(Candidature*));
295
296 if(listeCandidatures == NULL) {
297 perror("malloc");
298 exit(errno);
299 }
300
301 candidat->listeCandidatures = listeCandidatures;
302
303 for(j=0; j<candidat->nbCandidatures; j++) {
304 candidature = (Candidature*) malloc(sizeof(Candidature));
305
306 if(candidature == NULL) {
307 perror("malloc");
308 exit(errno);
309 }
310
311 fscanf(fe, "\n%[^\n]\n%[^\n]\n%d%d",
312 candidature->ville, candidature->departement,
313 &candidature->decision, &candidature->validation);
314 candidat->listeCandidatures[j] = candidature;
315 }
316
317 liste[i] = candidat;
318 }
319
320 return liste;
321}
322
323int compareCandidats(const void* p1, const void* p2) {
324 Candidat* c1 = *(ListeCandidats) p1;
325 Candidat* c2 = *(ListeCandidats) p2;
326
327 char nomComplet1[60], nomComplet2[60];
328 strcpy(nomComplet1, c1->nom);
329 strcat(nomComplet1, c1->prenom);
330
331 strcpy(nomComplet2, c2->nom);
332 strcat(nomComplet2, c2->prenom);
333
334 return strcmp(nomComplet1, nomComplet2);
335}
336
337int saveCandidats(ListeCandidats liste, int nbCandidats) {
338 int i, j;
339 Candidat* candidat;
340 Candidature* candidature;
341 ListeCandidatures listeCandidatures;
342
343 FILE *fe = fopen("donnees/candidats.don", "w");
344
345 if(fe == NULL) {
346 fprintf(stderr, "Erreur: impossible de lire le fichier candidats.don");
347 return -1;
348 }
349
350 fprintf(fe, "%d", nbCandidats);
351
352 for(i=0; i<nbCandidats; i++) {
353 candidat = liste[i];
354
355 fprintf(fe, "\n%d\n%s\n%s\n%f\t%f\t%f\t%f\n%d",
356 candidat->id, candidat->nom, candidat->prenom,
357 candidat->moyenneMath, candidat->moyenneFrancais,
358 candidat->moyenneAnglais, candidat->moyenneSpecialite,
359 candidat->nbCandidatures);
360
361 listeCandidatures = candidat->listeCandidatures;
362
363 for(j=0; j<candidat->nbCandidatures; j++) {
364 candidature = listeCandidatures[j];
365 fprintf(fe, "\n%s\n%s\n%d\n%d",
366 candidature->ville, candidature->departement,
367 candidature->decision, candidature->validation);
368 }
369 }
370
371 fclose(fe);
372
373 return 0;
374}
375
376int readStatus(void) {
377 int status;
378
379 FILE *fe = fopen("donnees/status.don", "r");
380
381 if(fe == NULL) {
382 perror("fopen");
383 exit(errno);
384 }
385
386 fscanf(fe, "%d", &status);
387
388 fclose(fe);
389
390 return status;
391}
392
393void saveStatus(int status) {
394 FILE *fe = fopen("donnees/status.don", "w");
395
396 if(fe == NULL) {
397 perror("fopen");
398 exit(errno);
399 }
400
401 fprintf(fe, "%d", status);
402
403 fclose(fe);
404}
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 afficherCandidatures(ListeCandidatures candidatures, int nbCandidatures)
Affiche récursivement toutes les candidatures d'un seul candidat.
Definition: deux.c:160
void ajouterCandidat(ListeCandidats *listePointer, int *nbCandidats, Candidat *candidat)
Ajoute l'adresse du candidat dans le tableau de pointeur "liste".
Definition: deux.c:42
void ajouterCandidature(Candidat *candidat, Candidature *candidature)
Ajoute une candidature dans la liste des candidatures associées au candidat correspondant dans les pa...
Definition: deux.c:57
int checkCandidature(Candidat *candidat, Candidature candid)
Verifie si la candidature à ajouter n'existe pas déjà
Definition: deux.c:114
void afficherCandidat(Candidat *candidat)
Affiche un candidat précis.
Definition: deux.c:149
Candidature * creerCandidature(void)
Alloue de la mémoire de la taille d'une structure Candidature avec un malloc avec les valeurs par déf...
Definition: deux.c:29
Candidat * creerCandidat(void)
Alloue de la mémoire de la taille d'une structure Candidat avec un malloc.
Definition: deux.c:18
int compareCandidats(const void *p1, const void *p2)
Compare deux candidats suivant l'ordre alphabetique.
Definition: deux.c:323
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
Partie 2 de la SAE 1.02.
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
int nbCandidatures
Definition: structures.h:31
ListeCandidatures listeCandidatures
Definition: structures.h:32
char departement[LEN_MAX]
Definition: structures.h:21
char ville[LEN_MAX]
Definition: structures.h:21
int validation
Definition: structures.h:22
int decision
Definition: structures.h:22
char departement[LEN_MAX]
Definition: structures.h:5
struct MaillonDept * suiv
Definition: structures.h:9
ListeDept ldept
Definition: structures.h:16
#define LEN_MAX
Definition: structures.h:1
Candidature ** ListeCandidatures
Definition: structures.h:25
Candidat ** ListeCandidats
Definition: structures.h:35
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