From caacc9891c422568c7c8180d6287ac87941bf6e5 Mon Sep 17 00:00:00 2001 From: "antoine.perederii" Date: Thu, 22 Dec 2022 20:10:19 +0100 Subject: [PATCH] modif de la partie 3 --- Partie_3/partie_3.c | 193 ++++++++++++++++++---------------------- SAE.h | 51 ++++++++++- structures/structures.c | 94 +++++++++++++++++++ 3 files changed, 228 insertions(+), 110 deletions(-) diff --git a/Partie_3/partie_3.c b/Partie_3/partie_3.c index 8f7262c..b135f7f 100755 --- a/Partie_3/partie_3.c +++ b/Partie_3/partie_3.c @@ -1,24 +1,44 @@ #include "../SAE.h" -Admission lire(FILE *ficAdmission) +Departement lireDpt(FILE *flot) +{ + Departement dpt; + fscanf(flot, "%s\n%d\n%d\n", dpt.departement, &dpt.decisionAdmission, &dpt.decisionCandidat); +} + +void afficherDpt(Departement dpt) +{ + printf("\t%s\t%d\t%d", dpt.departement, dpt.decisionAdmission, dpt.decisionCandidat); +} + +Admission lireCandidat(FILE *flot) { Admission candidat; - int i; - int nbCandidats = 0; - fscanf(ficAdmission, "%d\n%d\t", &nbCandidats, &candidat.num); - fgets(candidat.nom, 22, ficAdmission); + Departement dpt; + int i = 0; + fscanf(flot, "%d\n", &candidat.num); + fgets(candidat.nom, 22, flot); candidat.nom[strlen(candidat.nom) - 1] = '\0'; - fgets(candidat.prenom, 22, ficAdmission); + fgets(candidat.prenom, 22, flot); candidat.prenom[strlen(candidat.prenom) - 1] = '\0'; - fscanf(ficAdmission, "%d\t%d\t%d\t%d\t%d\t%s\t", &candidat.noteMaths, &candidat.noteFrançais, &candidat.noteAnglais, &candidat.noteSpe, &candidat.nbChoix, candidat.ville); - if(candidat.nbChoix == 1) - for(i = 0; i < candidat.nbChoix; i++) + fscanf(flot, "%d\t%d\t%d\t%d\n%d\n%s\n", &candidat.noteMaths, &candidat.noteFrançais, &candidat.noteAnglais, &candidat.noteSpe, &candidat.nbChoix, candidat.ville); + if(candidat.nbChoix == 0) + { + listeNouvDpt(); + return candidat; + } + dpt = lireDpt(flot); + while(!feof(flot) && i < candidat.nbChoix) { - fscanf(ficAdmission, "%s\t%d\t%d\t", candidat.departement, &candidat.decisionAdmission, &candidat.decisionCandidat); + if(strcmp(dpt.departement, dptResAdmi) == 0) + { + candidat.ldept = insererDpt(candidat, dpt); + } + dpt = lireDpt(flot); + i++; } return candidat; } -// REGARDER QUE CA TRIE LE BON DEPARTEMENT !!!! void afficherCandidats(Admission candidat) { @@ -26,105 +46,35 @@ void afficherCandidats(Admission candidat) printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%s\t%s\t%d\t%d", candidat.num, candidat.nom, candidat.prenom, candidat.noteMaths, candidat.noteFrançais, candidat.noteAnglais, candidat.noteSpe, candidat.nbChoix, candidat.ville); for(i = 0; i < candidat.nbChoix; i++) { - printf("\t%s\t%d\t%d", candidat.departement, candidat.decisionAdmission, candidat.decisionCandidat); + afficherDpt(candidat.ldept[i]); } printf("\n"); } -FileAdmission filenouv(void) -{ - FileAdmission f; - f = NULL; - return f; -} - -FileAdmission adjq(FileAdmission f, Admission candidat) +Admission chargerCandidats(FILE *ficAdmission, char dptResAdmi[30]) { - MaillonAdmission *p; - p = (MaillonAdmission *)malloc(sizeof(MaillonAdmission)); - if(p == NULL) + Admission candidat = listeNouvCandidat(); + char departement[30]; + int decisionAdmission, decisionCandidat; + int i, nbCandidats = 0; + FILE *flot; + flot=fopen(ficAdmission, "r"); + if(flot == NULL) { - printf("Opérations interdites !!!!\n"); + printf("Erreur d'ouverture du fichier !\n"); exit(1); } - p->v = candidat; - if(vide(f)) + fscanf(flot, "%d\n", &nbCandidats); + candidat = lireCandidat(flot); + while(!feof(flot)) { - p->suiv = p; - return p; + candidat = lireCandidat(flot); } - p->suiv = f->suiv; - f->suiv = p; - return p; -} - -FileAdmission supt(FileAdmission f) -{ - MaillonAdmission *aux; - if(vide(f)) - { - printf("Opérations interdites !!!!\n"); - exit(1); - } - if(f->suiv == f) - { - free(f); - return filenouv(); - } - aux = f->suiv; - f->suiv = aux->suiv; - free(aux); - return f; -} - -bool vide(FileAdmission f) -{ - return f == NULL; -} - -Admission tete(FileAdmission f) -{ - if(vide(f)) - { - printf("Opérations interdites !!!!\n"); - exit(1); - } - return f->suiv->v; + return candidat; } +// REGARDER QUE CA TRIE LE BON DEPARTEMENT !!!! -int longueur(FileAdmission f) -{ - int cpt = 1; - MaillonAdmission *aux; - if(vide(f)) - { - return 0; - } - aux = f->suiv; - while(aux != f) - { - cpt++; - aux = aux->suiv; - } - return cpt; -} -void afficher(FileAdmission f) -{ - MaillonAdmission *p=f; - if(vide(f)) - { - printf("Opérations interdites !!!!\n"); - exit(1); - } - afficherCandidats(f->v); - while(f->suiv != p) - { - f = f->suiv; - afficherCandidats(f->v); - } - printf("\n"); -} @@ -145,15 +95,46 @@ void afficher(FileAdmission f) int modifNoteMinAdmis() { int noteMaths, noteFrançais, noteAnglais, noteSpe; - printf("Entrez la nouvelle note minimale d'admission en maths : "); - scanf("%d", ¬eMaths); - printf("Entrez la nouvelle note minimale d'admission en français : "); - scanf("%d", ¬eFrançais); - printf("Entrez la nouvelle note minimale d'admission en anglais : "); - scanf("%d", ¬eAnglais); - printf("Entrez la nouvelle note minimale d'admission en spécialité : "); - scanf("%d", ¬eSpe); - + printf("Entrez la nouvelle note minimale d'admission en maths (-1 pour quitter) : "); + while(noteMaths < 0 || noteMaths > 20) + { + scanf("%d", ¬eMaths); + if(noteMaths == -1) + { + break; + } + printf("La note doit être comprise entre 0 et 20 !\n"); + } + printf("Entrez la nouvelle note minimale d'admission en français (-1 pour quitter) : "); + while(noteFrançais < 0 || noteFrançais > 20) + { + scanf("%d", ¬eFrançais); + if(noteFrançais == -1) + { + break; + } + printf("La note doit être comprise entre 0 et 20 !\n"); + } + printf("Entrez la nouvelle note minimale d'admission en anglais (-1 pour quitter) : "); + while(noteAnglais < 0 || noteAnglais > 20) + { + scanf("%d", ¬eAnglais); + if(noteAnglais == -1) + { + break; + } + printf("La note doit être comprise entre 0 et 20 !\n"); + } + printf("Entrez la nouvelle note minimale d'admission en spécialité (-1 pour quitter) : "); + while(noteSpe < 0 || noteSpe > 20) + { + scanf("%d", ¬eSpe); + if(noteSpe == -1) + { + break; + } + printf("La note doit être comprise entre 0 et 20 !\n"); + } } modifNbAdmisMax() diff --git a/SAE.h b/SAE.h index 5cfd3e5..10898da 100755 --- a/SAE.h +++ b/SAE.h @@ -19,6 +19,37 @@ typedef struct } VilleIUT; */ /* Partie 3 */ + +/* V2 */ + +typedef struct { + char departement[30]; + int decisionAdmission; + int decisionCandidat; +} Departement; + +typedef struct maillonDepartement { + Departement v; + struct maillonDepartement *suiv; +} MaillonDepartement, *ListeDepartement; + +typedef struct { + int num; + char nom[22]; // 20 caractere + 1 espace + 1 caractere de fin de chaine + char prenom[22]; // 20 caractere + 1 espace + 1 caractere de fin de chaine + int tabMatiere[4]; + int nbChoix; + char ville[30]; + ListeDepartement ldept; +} Admission; + +typedef struct maillonAdmission { + Admission v; + struct maillonAdmission *suiv; +} MaillonAdmission, *FileAdmission; + + +/* V1 typedef struct { int num; char nom[22]; // 20 caractere + 1 espace + 1 caractere de fin de chaine @@ -29,9 +60,21 @@ typedef struct { int noteSpe; int nbChoix; char ville[30]; - char departement[20]; - int decisionAdmission; - int decisionCandidat; + char departement1[20]; + int decisionAdmission1; + int decisionCandidat1; + char departement2[20]; + int decisionAdmission2; + int decisionCandidat2; + char departement3[20]; + int decisionAdmission3; + int decisionCandidat3; + char departement4[20]; + int decisionAdmission4; + int decisionCandidat4; + char departement5[20]; + int decisionAdmission5; + int decisionCandidat5; } Admission; // Utilisation d'une file car on a pas besoins de modifier les candidats, les mettre au milieu de la file, // on a juste besoin de les ajouter et de les supprimer, on cherche à les parcourir dans l'ordre d'arrivée @@ -40,4 +83,4 @@ typedef struct maillonAdmission { Admission v; struct maillonAdmission *suiv; } MaillonAdmission, *FileAdmission; - +*/ \ No newline at end of file diff --git a/structures/structures.c b/structures/structures.c index 4ef751f..bc19379 100755 --- a/structures/structures.c +++ b/structures/structures.c @@ -1,2 +1,96 @@ #include "../SAE.h" +FileAdmission filenouvListeDpt(void) +{ + FileAdmission f; + f = NULL; + return f; +} + +FileAdmission adjq(FileAdmission f, Admission candidat) +{ + MaillonAdmission *p; + p = (MaillonAdmission *)malloc(sizeof(MaillonAdmission)); + if(p == NULL) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + p->v = candidat; + if(vide(f)) + { + p->suiv = p; + return p; + } + p->suiv = f->suiv; + f->suiv = p; + return p; +} + +FileAdmission supt(FileAdmission f) +{ + MaillonAdmission *aux; + if(vide(f)) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + if(f->suiv == f) + { + free(f); + return filenouv(); + } + aux = f->suiv; + f->suiv = aux->suiv; + free(aux); + return f; +} + +bool vide(FileAdmission f) +{ + return f == NULL; +} + +Admission tete(FileAdmission f) +{ + if(vide(f)) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + return f->suiv->v; +} + +int longueur(FileAdmission f) +{ + int cpt = 1; + MaillonAdmission *aux; + if(vide(f)) + { + return 0; + } + aux = f->suiv; + while(aux != f) + { + cpt++; + aux = aux->suiv; + } + return cpt; +} + +void afficher(FileAdmission f) +{ + MaillonAdmission *p=f; + if(vide(f)) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + afficherCandidats(f->v); + while(f->suiv != p) + { + f = f->suiv; + afficherCandidats(f->v); + } + printf("\n"); +} \ No newline at end of file