From 81e9f85a9028d00ceb69f3fab272aab15677f681 Mon Sep 17 00:00:00 2001 From: "antoine.perederii" Date: Thu, 22 Dec 2022 21:41:23 +0100 Subject: [PATCH] =?UTF-8?q?continuit=C3=A9=20de=20la=20partie=203=20ainsi?= =?UTF-8?q?=20que=20du=20systeme=20de=20connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Partie_3/partie_3.c | 103 ++++++++++++++++++-- SAE.h | 34 ++++++- connexions.c | 232 ++++++++++++++++++++++++++++++++++++++++++++ global/global.c | 36 ------- 4 files changed, 357 insertions(+), 48 deletions(-) create mode 100644 connexions.c diff --git a/Partie_3/partie_3.c b/Partie_3/partie_3.c index b135f7f..a23ca9c 100755 --- a/Partie_3/partie_3.c +++ b/Partie_3/partie_3.c @@ -46,17 +46,18 @@ 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++) { - afficherDpt(candidat.ldept[i]); + afficherDpt(candidat.ldept->v); + ldept = ldept->suiv; } printf("\n"); } -Admission chargerCandidats(FILE *ficAdmission, char dptResAdmi[30]) +// Regarder si le nombre de choix est = à 0 Que se passe-t-il ? + +ListeAdmission chargerCandidats(char *ficAdmission, char dptResAdmi[30]) { - Admission candidat = listeNouvCandidat(); - char departement[30]; - int decisionAdmission, decisionCandidat; - int i, nbCandidats = 0; + ListeAdmission listeCandidats = listeNouvCand(); + Admission candidat; FILE *flot; flot=fopen(ficAdmission, "r"); if(flot == NULL) @@ -64,18 +65,100 @@ Admission chargerCandidats(FILE *ficAdmission, char dptResAdmi[30]) printf("Erreur d'ouverture du fichier !\n"); exit(1); } - fscanf(flot, "%d\n", &nbCandidats); candidat = lireCandidat(flot); while(!feof(flot)) { + listeCandidats = insererCand(listeCandidats, candidat); candidat = lireCandidat(flot); } - return candidat; + fclose(flot); + return listeCandidats; } -// REGARDER QUE CA TRIE LE BON DEPARTEMENT !!!! +void sauvegarderCandidats(ListeAdmission listeCandidats, char dptResAdmi[30]) +{ + FILE *flot; + flot=fopen("admissionInfo.txt", "w"); + if(flot == NULL) + { + printf("Erreur d'ouverture du fichier !\n"); + exit(1); + } + while(! videCand(listeCandidats)) + { + fprintf(flot, "%d\n%s\n%s\n%d\t%d\t%d\t%d\n%d\n%s\n", listeCandidats->v.num, listeCandidats->v.nom, listeCandidats->v.prenom, listeCandidats->v.tabMatiere[0], listeCandidats->v.tabMatiere[1], listeCandidats->v.tabMatiere[2], listeCandidats->v.tabMatiere[3], listeCandidats->v.nbChoix, listeCandidats->v.ville); + while(! videDpt(listeCandidats->v.ldept)) + { + fprintf(flot, "%s\n%d\n%d\n", listeCandidats->v.ldept->v.departement, listeCandidats->v.ldept->v.decisionAdmission, listeCandidats->v.ldept->v.decisionCandidat); + listeCandidats->v.ldept = listeCandidats->v.ldept->suiv; + } + listeCandidats = listeCandidats->suiv; + } + fclose(flot); +} +void afficherCandidatsAdmis(ListeAdmission listeCandidats) +{ + while(! videCand(listeCandidats)) + { + if(listeCandidats->v.admis == 1) + { + afficherCandidats(listeCandidats->v); + } + listeCandidats = listeCandidats->suiv; + } +} + +void afficherCandidatsNonAdmis(ListeAdmission listeCandidats) +{ + while(! videCand(listeCandidats)) + { + if(listeCandidats->v.admis == 0) + { + afficherCandidats(listeCandidats->v); + } + listeCandidats = listeCandidats->suiv; + } +} + +void afficherCandidatsAttente(ListeAdmission listeCandidats) +{ + while(! videCand(listeCandidats)) + { + if(listeCandidats->v.admis == 2) + { + afficherCandidats(listeCandidats->v); + } + listeCandidats = listeCandidats->suiv; + } +} + +void afficherCandidatsDpt(ListeAdmission listeCandidats) +{ + while(! videCand(listeCandidats)) + { + afficherCandidats(listeCandidats->v); + listeCandidats = listeCandidats->suiv; + } +} + +ListeAdmission MoyenneCandidats(ListeAdmission listeCandidats) +{ + ListeAdmission listeMoyenne = listeNouvCand(); + while(! videCand(listeCandidats)) + { + listeCandidats->v.moyenne = (listeCandidats->v.noteMaths + listeCandidats->v.noteFrançais + listeCandidats->v.noteAnglais + listeCandidats->v.noteSpe) / 4; + listeMoyenne = insererCand(listeMoyenne, listeCandidats->v); + listeCandidats = listeCandidats->suiv; + } + return listeMoyenne; +} +// Comment definir la note sur 20 mise lors de l'etude du dossier ? +// Ajouter une variable dans la structure Admission ? +// Ou mettre la liste et la note dans un tableau ? +// Après examen de chaque dossier de candidature, +// le jury doit regarder ou la note peut etre calculée automatiquement ? @@ -137,7 +220,7 @@ int modifNoteMinAdmis() } } -modifNbAdmisMax() +int modifNbAdmisMax() { int nbAdmisMax; printf("Entrez le nouveau nombre d'admis maximum : "); diff --git a/SAE.h b/SAE.h index 10898da..5eb4017 100755 --- a/SAE.h +++ b/SAE.h @@ -46,7 +46,21 @@ typedef struct { typedef struct maillonAdmission { Admission v; struct maillonAdmission *suiv; -} MaillonAdmission, *FileAdmission; +} MaillonAdmission, *ListeAdmission; + +Departement lireDpt(FILE *flot); +void afficherDpt(Departement dpt); +Admission lireCandidat(FILE *flot); +void afficherCandidat(Admission candidat); +ListeAdmission chargerCandidats(char *ficAdmission, char dptResAdmi[30]); +void sauvegarderCandidats(ListeAdmission lAdmission, char dptResAdmi[30]); +void afficherCandidatsAdmis(ListeAdmission listeCandidats); +void afficherCandidatsNonAdmis(ListeAdmission listeCandidats); +void afficherCandidatsAttente(ListeAdmission listeCandidats); +void afficherCandidatsDpt(ListeAdmission listeCandidats); +ListeAdmission MoyenneCandidats(ListeAdmission listeCandidats); +int modifNoteMinAdmis(); +int modifNbAdmisMax(); /* V1 @@ -83,4 +97,20 @@ typedef struct maillonAdmission { Admission v; struct maillonAdmission *suiv; } MaillonAdmission, *FileAdmission; -*/ \ No newline at end of file +*/ + +// Authentification + +int ConnexionUtilisateur(char *login, char *mdp); +ListeUtilisateurs chargerUtilisateurs(char *ficUtilisateurs, ListeUtilisateurs Utilisateurs); +Utilisateur lireUtilisateur(FILE *flot); +void afficherUtilisateur(Utilisateur utilisateur); +void afficherUtilisateurs(ListeUtilisateurs listeUtilisateurs); +ListeUtilisateurs insererUtilisateur(ListeUtilisateurs listeUtilisateurs, Utilisateur utilisateur); +ListeUtilisateurs supprimerUtilisateur(ListeUtilisateurs listeUtilisateurs, char *nomUtilisateur); +int videUtilisateurs(ListeUtilisateurs listeUtilisateurs); +void sauveUtilisateurs(char *ficUtilisateurs, ListeUtilisateurs listeUtilisateurs); +int rechercherUtilisateur(ListeUtilisateurs listeUtilisateurs, char *nomUtilisateur); +int supprimerUtilisateur(ListeUtilisateurs listeUtilisateurs, char *nomUtilisateur); +int menuUtilisateur(ListeUtilisateurs listeUtilisateurs); +void global(void); \ No newline at end of file diff --git a/connexions.c b/connexions.c new file mode 100644 index 0000000..545b5c2 --- /dev/null +++ b/connexions.c @@ -0,0 +1,232 @@ +#include "SAE.h" + +int ConnexionUtilisateur(void) +{ + char nomUtilisateur[9], motDePasse[11], typeUtilisateur[9]; + printf("Veuillez entrer votre nom d'utilisateur : "); + scanf("%s", &nomUtilisateur); + while(strlen(nomUtilisateur) != 8) + { + printf("Nom d'utilisateur incorrect. Veuillez recommencer : "); + scanf("%s", &nomUtilisateur); + } + printf("Veuillez entrer votre mot de passe : "); + system("stty -echo"); + scanf("%s", &motDePasse); + system("stty echo"); + while(strlen(motDePasse) != 10) + { + printf("Mot de passe incorrect. Veuillez recommencer : "); + system("stty -echo"); + scanf("%s", &motDePasse); + system("stty echo"); + } + printf("Connexion réussie en tant qu%s!\n", typeUtilisateur); + if(typeUtilisateur == "Admin") + { + return 1; + } + else if(typeUtilisateur == "RespAdm") + { + return 2; + } + else if(typeUtilisateur == "RespDept") + { + return 3; + } +} + +ListeUtilisateurs chargeUtilisateurs(char *ficUtilisateurs, ListeUtilisateurs Utilisateurs) +{ + FILE *flot; + Utilisateur utilisateur; + flot = fopen(ficUtilisateurs, "rb"); + if(flot == NULL) + { + printf("Erreur lors de l'ouverture du fichier %s\n", ficUtilisateurs); + return 0; + } + utilisateur = lireUtilisateur(flot); + while(!feof(flot)) + { + Utilisateurs = insererUtilisateur(Utilisateurs, utilisateur); + utilisateur = lireUtilisateur(flot); + } + fclose(flot); + return Utilisateur; +} + +Utilisateur lireUtilisateur(FILE *flot) +{ + Utilisateur utilisateur; + fread(&utilisateur, sizeof(Utilisateur), 1, flot); + return utilisateur; +} + +void afficherUtilisateur(Utilisateur utilisateur) +{ + printf("%s\t%s\n", utilisateur.nomUtilisateur, utilisateur.motDePasse); +} + +void afficherUtilisateurs(ListeUtilisateurs Utilisateurs) +{ + while(! videUtilisateurs(Utilisateurs)) + { + afficherUtilisateur(Utilisateurs->utilisateur); + Utilisateurs = Utilisateurs->suiv; + } + printf("\n"); +} + +ListeUtilisateurs insererUtilisateur(ListeUtilisateurs Utilisateurs, Utilisateur utilisateur) +{ + ListeUtilisateurs p; + p = (ListeUtilisateurs)malloc(sizeof(MaillonUtilisateur)); + if(p == NULL) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + p->utilisateur = utilisateur; + p->suiv = Utilisateurs; + return p; +} + +ListeUtilisateurs supprimerUtilisateur(ListeUtilisateurs Utilisateurs, char *nomUtilisateur) +{ + ListeUtilisateurs p, q; + if(videUtilisateurs(Utilisateurs)) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + if(strcmp(Utilisateurs->utilisateur.nomUtilisateur, nomUtilisateur) == 0) + { + p = Utilisateurs; + Utilisateurs = Utilisateurs->suiv; + free(p); + return Utilisateurs; + } + q = Utilisateurs; + p = Utilisateurs->suiv; + while(p != NULL && strcmp(p->utilisateur.nomUtilisateur, nomUtilisateur) != 0) + { + q = p; + p = p->suiv; + } + if(p == NULL) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + q->suiv = p->suiv; + free(p); + return Utilisateurs; +} + +int videUtilisateurs(ListeUtilisateurs Utilisateurs) +{ + return Utilisateurs == NULL; +} + +void sauveUtilisateurs(char *ficUtilisateurs, ListeUtilisateurs Utilisateurs) +{ + FILE *flot; + flot = fopen(ficUtilisateurs, "wb"); + if(flot == NULL) + { + printf("Erreur lors de l'ouverture du fichier %s\n", ficUtilisateurs); + return; + } + fprintf(flot, "%d\n", nbUtilisateurs); + while(! videUtilisateurs(Utilisateurs)) + { + fwrite(&Utilisateurs->utilisateur, sizeof(Utilisateur), 1, flot); + Utilisateurs = Utilisateurs->suiv; + } + fclose(flot); +} + +int rechercheUtilisateur(ListeUtilisateurs Utilisateurs, char *nomUtilisateur) +{ + while(! videUtilisateurs(Utilisateurs)) + { + if(strcmp(Utilisateurs->utilisateur.nomUtilisateur, nomUtilisateur) == 0) + { + return 1; + } + Utilisateurs = Utilisateurs->suiv; + } + return 0; +} + +int supprimerUtilisateur(ListeUtilisateurs Utilisateurs, char *nomUtilisateur) +{ + ListeUtilisateurs p, q; + if(videUtilisateurs(Utilisateurs)) + { + printf("Opérations interdites !!!!\n"); + exit(1); + } + if(strcmp(Utilisateurs->utilisateur.nomUtilisateur, nomUtilisateur) == 0) + { + p = Utilisateurs; + Utilisateurs = Utilisateurs->suiv; + free(p); + return 1; + } + q = Utilisateurs; + p = Utilisateurs->suiv; + while(p != NULL && strcmp(p->utilisateur.nomUtilisateur, nomUtilisateur) != 0) + { + q = p; + p = p->suiv; + } + if(p == NULL) + { + return 0; + } + q->suiv = p->suiv; + free(p); + return 1; +} + +int menuUtilisateurs(ListeUtilisateurs Utilisateurs) +{ + int choix; + printf("1. Ajouter un utilisateur\n"); + printf("2. Supprimer un utilisateur\n"); + printf("3. Afficher la liste des utilisateurs\n"); + printf("4. Quitter\n"); + printf("Votre choix : "); + scanf("%d", &choix); + return choix; +} + +void global() +{ + ListeUtilisateurs Utilisateurs; + Utilisateurs = chargerUtilisateurs("utilisateurs.bin"); + menuUtilisateurs(Utilisateurs); + while(choix != 4) + { + if(choix == 1) + { + ajouterUtilisateur(Utilisateurs); + } + elseif(choix == 2) + { + supprimerUtilisateur(Utilisateurs); + } + elseif(choix == 3) + { + afficherUtilisateurs(Utilisateurs); + } + else + { + printf("choix impossible\n"); + } + menuUtilisateurs(Utilisateurs); + } + sauveUtilisateurs("utilisateurs.bin", Utilisateurs); +} \ No newline at end of file diff --git a/global/global.c b/global/global.c index f0a2595..7129f87 100755 --- a/global/global.c +++ b/global/global.c @@ -2,41 +2,5 @@ void global(void) { - } -int ConnexionUtilisateur(void) -{ - char nomUtilisateur[9], motDePasse[11], typeUtilisateur[9]; - printf("Veuillez entrer votre nom d'utilisateur : "); - scanf("%s", &nomUtilisateur); - while(strlen(nomUtilisateur) != 8) - { - printf("Nom d'utilisateur incorrect. Veuillez recommencer : "); - scanf("%s", &nomUtilisateur); - } - printf("Veuillez entrer votre mot de passe : "); - system("stty -echo"); - scanf("%s", &motDePasse); - system("stty echo"); - while(strlen(motDePasse) != 10) - { - printf("Mot de passe incorrect. Veuillez recommencer : "); - system("stty -echo"); - scanf("%s", &motDePasse); - system("stty echo"); - } - printf("Connexion réussie en tant qu%s!\n", typeUtilisateur); - if(typeUtilisateur == "Admin") - { - return 1; - } - else if(typeUtilisateur == "RespAdm") - { - return 2; - } - else if(typeUtilisateur == "RespDept") - { - return 3; - } -} \ No newline at end of file