diff --git a/app b/app index 4ad0d03..e92ef0a 100755 Binary files a/app and b/app differ diff --git a/donnee/mdp.txt b/donnee/mdp.txt new file mode 100644 index 0000000..af51f1e --- /dev/null +++ b/donnee/mdp.txt @@ -0,0 +1 @@ +qtqnqtq 5 \ No newline at end of file diff --git a/src/app/core_logic/responsable.c b/src/app/core_logic/responsable.c index 5efb4cb..ffec50b 100644 --- a/src/app/core_logic/responsable.c +++ b/src/app/core_logic/responsable.c @@ -5,6 +5,7 @@ #include #include +#include #include "responsable.h" #include "../interface/interface_resp.h" @@ -103,6 +104,14 @@ int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int fprintf(stderr,"Tableau plein !"); return -2; } + for ( int j = 0; j < *tLogique; ++j ) + { + if ( ref == tRef[j] ) + { + fprintf(stderr, "\t /!/ Article déjà existant. /!/ \n"); + return -1; + } + } tRef[i] = ref; tPoids[i] = poids; tVol[i] = volume; @@ -209,4 +218,44 @@ void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogiqu (*tLogique)++; return; +} + +void dechiffrerCesar(char *texte, int decalage) { + int i; + int longueur = strlen(texte); + for (i = 0; i < longueur; ++i) { + if (texte[i] >= 'a' && texte[i] <= 'z') { + texte[i] = 'a' + (texte[i] - 'a' + decalage) % 26; + } else if (texte[i] >= 'A' && texte[i] <= 'Z') { + texte[i] = 'A' + (texte[i] - 'A' + decalage) % 26; + } + } +} + + +int decodageMDP(char *mdpEnter) +{ + int decalage; + char mdpRead[20]; + FILE *fe; + fe = fopen("donnee/mdp.txt","r"); + if ( fe == NULL ) + { + return -1; + } + + fscanf(fe, "%s %d", mdpRead, &decalage); + printf("%s", mdpRead); + fclose(fe); + + dechiffrerCesar(mdpEnter, decalage); + + if ( strcmp(mdpRead, mdpEnter) == 0 ) + { + return 0; + } + else + { + return -2; + } } \ No newline at end of file diff --git a/src/app/core_logic/responsable.h b/src/app/core_logic/responsable.h index bf0b8f8..24cadc4 100644 --- a/src/app/core_logic/responsable.h +++ b/src/app/core_logic/responsable.h @@ -103,3 +103,18 @@ void modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], in * @param tPhysique Taille physique des tableaux. */ void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique); + +/** + * @brief Décode le mot de passe du fichier mdp.txt pour le comparer avec le mdp entré. + * + * @param mdpEnter Mot de passe entrer par l'utilisateur. +*/ +int decodageMDP(char *mdpEnter); + +/** + * @brief Lis le mot de passe codé dans le fichier mdp.txt, le compare au mot de passe entré à laide de decodageMDP + * + * @param texte chaine de caractère comparé avec le mot de passe du fichier. + * @param decalage entier qui sert de clé pour déchiffrer le mot de passe. +*/ +void dechiffrerCesar(char *texte, int decalage); \ No newline at end of file diff --git a/src/app/interface/interface_resp.c b/src/app/interface/interface_resp.c index ddfb9c0..01d4e10 100644 --- a/src/app/interface/interface_resp.c +++ b/src/app/interface/interface_resp.c @@ -22,16 +22,16 @@ void affiche_resp(void) { printf("+-------------+\n"); printf("\n"); printf("+-----------------------------------------------------------------+\n"); - printf("|| Que voulez-vous faire ?\t\t\t\t\t\t\t||\n"); - printf("||\t1 : Afficher les articles\t\t\t\t\t\t||\n"); - printf("||\t2 : Afficher un article\t\t\t\t\t\t\t||\n"); - printf("||\t3 : Afficher un client\t\t\t\t\t\t\t||\n"); - printf("||\t4 : Afficher les clients\t\t\t\t\t\t||\n"); - printf("||\t5 : Ajouter un article\t\t\t\t\t\t\t||\n"); - printf("||\t6 : Supprimer un article\t\t\t\t\t\t||\n"); - printf("||\t7 : Modifier un article\t\t\t\t\t\t\t||\n"); - printf("||\t8 : Ajouter un client\t\t\t\t\t\t\t||\n"); - printf("||\t9 : Quittez.\t\t\t\t\t\t\t\t\t||\n"); + printf("|| Que voulez-vous faire ?\t\t\t\t\t||\n"); + printf("||\t1 : Afficher les articles\t\t\t\t||\n"); + printf("||\t2 : Afficher un article\t\t\t\t\t||\n"); + printf("||\t3 : Afficher un client\t\t\t\t\t||\n"); + printf("||\t4 : Afficher les clients\t\t\t\t||\n"); + printf("||\t5 : Ajouter un article\t\t\t\t\t||\n"); + printf("||\t6 : Supprimer un article\t\t\t\t||\n"); + printf("||\t7 : Modifier un article\t\t\t\t\t||\n"); + printf("||\t8 : Ajouter un client\t\t\t\t\t||\n"); + printf("||\t9 : Quittez.\t\t\t\t\t\t||\n"); printf("+-----------------------------------------------------------------+\n"); } @@ -131,6 +131,7 @@ void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) { printf("\t Entrez la ref du nouveau produit\n"); while (scanf("%d", ref) != 1 || *ref <= 0) { + printf("\t Veuillez entrer une référence valide.\n"); while (getchar() != '\n'); } @@ -216,12 +217,40 @@ void affichAjoutClient(int tNumClient[], int tLogique, int *numC) { } for (int i = 0; i < tLogique; ++i) { if (*numC == tNumClient[i]) { - fprintf(stderr, "\t Client déjà existant.\n"); + fprintf(stderr, "\t /!/ Client déjà existant. /!/\n"); return; } } } + + +int affichageConnexion(void) +{ + char mdpEnter[20]; + printf("Entrer le mot de passe responsable : "); + scanf("%s", mdpEnter); + + int verif = decodageMDP(mdpEnter); + + if ( verif == 0 ) + { + printf("+---------------------------------------------+\n"); + printf("|| \tMot de passe correct, bienvenue patron ! ||\n"); + printf("+---------------------------------------------+\n"); + return 0; + } + else if ( verif == -1) + { + printf("\t Problème ouverture fichier !\n"); + return -1; + } + printf("+--------------------------------------------------+\n"); + printf("|| \tMot de passe incorrect, Au revoir ! \t||\n"); + printf("+--------------------------------------------------+\n"); + return -2; +} + /** * @brief Fonction de menu pour le responsable. * diff --git a/src/app/interface/interface_resp.h b/src/app/interface/interface_resp.h index 1abee65..2d3f23f 100644 --- a/src/app/interface/interface_resp.h +++ b/src/app/interface/interface_resp.h @@ -93,6 +93,14 @@ void affichAjoutClient(int tNumClient[], int tLogique, int *numC); */ void menu_resp(int *choix); + +/** + * @brief Affiche les informations nécessaires pour entrer le mod de passe responsable. + * + * Cette fonction permet au responsable de confirmer son identité +*/ +int affichageConnexion(void); + /** * @brief Fonction principale de l'interface du responsable. * diff --git a/src/main.c b/src/main.c index 35e1659..4a9ac4a 100644 --- a/src/main.c +++ b/src/main.c @@ -51,9 +51,15 @@ int choixInterface(void) { * @return 0 si le programme s'est exécuté avec succès. */ int main() { + switch (choixInterface()) { case 1: - global_resp(); + int verif = affichageConnexion(); + if ( verif == 0) + { + global_resp(); + break; + } break; case 2: global_client();