From fdc89f93d23cba1a2faa57b306702ba3d869e079 Mon Sep 17 00:00:00 2001 From: "yannis.doumir_fernandes" Date: Mon, 6 Nov 2023 18:34:56 +0100 Subject: [PATCH] many many problems solved and function Reduction is started --- .vscode/settings.json | 3 + app | Bin 53360 -> 43264 bytes donnee/client.txt | 1 + donnee/mdp.txt | 2 +- donnee/promotion.txt | 0 src/app/core_logic/responsable.c | 123 ++++++----------------------- src/app/core_logic/responsable.h | 2 - src/app/interface/interface_resp.c | 113 +++++++++++++++++++------- src/app/interface/interface_resp.h | 11 ++- 9 files changed, 119 insertions(+), 136 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 donnee/promotion.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..70e34ec --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.errorSquiggles": "disabled" +} \ No newline at end of file diff --git a/app b/app index fd5f53a1c02d1138e69dc6abd8346ebb498552e8..12c9f3babfdf0b50921866775da2ffb01f0491ca 100755 GIT binary patch literal 43264 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 literal 53360 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 diff --git a/donnee/client.txt b/donnee/client.txt index a941733..f4ea830 100644 --- a/donnee/client.txt +++ b/donnee/client.txt @@ -1,3 +1,4 @@ 32 0.00 1 660 68.00 0 5079 75.50 0 +53 0.00 0 diff --git a/donnee/mdp.txt b/donnee/mdp.txt index 3d7ac61..83d37f7 100644 --- a/donnee/mdp.txt +++ b/donnee/mdp.txt @@ -1 +1 @@ -yescdsds 10 \ No newline at end of file +flz 17 \ No newline at end of file diff --git a/donnee/promotion.txt b/donnee/promotion.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/app/core_logic/responsable.c b/src/app/core_logic/responsable.c index e2d6cf7..18afcc6 100644 --- a/src/app/core_logic/responsable.c +++ b/src/app/core_logic/responsable.c @@ -9,21 +9,8 @@ #include "responsable.h" #include "../interface/interface_resp.h" -#define MAX_SIZE_MDP 20 +#define MAX_SIZE_MDP 21 -/** - * @brief Charge les informations des articles à partir d'un fichier dans des tableaux. - * - * Cette fonction lit les informations des articles à partir du fichier "donnee/articles.txt" et les stocke - * dans les tableaux tRef, tPoids, tVol, et tPrix. - * - * @param tRef Tableau des références d'articles. - * @param tPoids Tableau des poids des articles. - * @param tVol Tableau des volumes des articles. - * @param tPrix Tableau des prix unitaires des articles. - * @param tPhysique Taille physique des tableaux. - * @return Le nombre d'articles chargés avec succès ou -1 en cas d'erreur. - */ int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique) { int i=0, ref; @@ -50,18 +37,6 @@ int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], return i; } -/** - * @brief Sauvegarde les informations des articles dans un fichier. - * - * Cette fonction sauvegarde les informations des articles depuis les tableaux tRef, tPoids, tVol et tPrix - * dans le fichier "donnee/articles.txt". - * - * @param tRef Tableau des références d'articles. - * @param tPoids Tableau des poids des articles. - * @param tVol Tableau des volumes des articles. - * @param tPrix Tableau des prix unitaires des articles. - * @param tLogique Taille logique des tableaux. - */ void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) { int i; @@ -80,27 +55,10 @@ void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], fclose(fe); } -/** - * @brief Ajoute un nouvel article aux tableaux d'articles. - * - * Cette fonction ajoute un nouvel article aux tableaux tRef, tPoids, tVol, et tPrix et incrémente la taille logique. - * - * @param tRef Tableau des références d'articles. - * @param tPoids Tableau des poids des articles. - * @param tVol Tableau des volumes des articles. - * @param tPrix Tableau des prix unitaires des articles. - * @param tLogique Taille logique des tableaux. - * @param tPhysique Taille physique des tableaux. - * @param ref Référence du nouvel article. - * @param poids Poids du nouvel article. - * @param volume Volume du nouvel article. - * @param prix Prix unitaire du nouvel article. - * @return 0 en cas de succès, -2 si le tableau est plein. - */ int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix) { int i = *tLogique; - affichAjoutArticle(&ref, &poids, &volume, &prix); + affichAjoutArticle(&ref, &poids, &volume, &prix, tRef, *tLogique); if ( *tLogique == tPhysique) { fprintf(stderr,"Tableau plein !"); @@ -122,16 +80,6 @@ int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int return 0; } -/** - * @brief Recherche une référence d'article dans le tableau tRef. - * - * Cette fonction recherche une référence d'article dans le tableau tRef et renvoie l'index si l'article est trouvé. - * - * @param tRef Tableau des références d'articles. - * @param ref Référence de l'article à rechercher. - * @param index Pointeur vers la variable pour stocker l'index de l'article trouvé. - * @param tLogique Taille logique des tableaux. - */ void rechercheRefArticle(int tRef[], int ref, int *index, int tLogique) { for (int i = 0; i - /** * @brief Charge les informations des articles à partir d'un fichier dans des tableaux. * @author Yannis Doumir Fernandes diff --git a/src/app/interface/interface_resp.c b/src/app/interface/interface_resp.c index a5f3ee9..762513d 100644 --- a/src/app/interface/interface_resp.c +++ b/src/app/interface/interface_resp.c @@ -8,7 +8,7 @@ #define MAX_CLIENTS 100 #define MAX_ARTICLES 100 -#define MAX_SIZE_MDP 20 +#define MAX_SIZE_MDP 21 #define MENU_QUIT 12 @@ -51,9 +51,10 @@ void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], in printf("\tEntrez une référence valide\n"); while (getchar() != '\n'); } - printf("\t Ref\t Poids\t Volume\t Prix\n"); + for (int i = 0; i < tLogique; ++i) { if (ref == tRef[i]) { + printf("\t Ref\t Poids\t Volume\t Prix\n"); printf("\t %d\t %.2f\t %.2f\t %.2f\n\n", tRef[i], tPoids[i], tVol[i], tPrix[i]); return; } @@ -69,14 +70,14 @@ void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogiqu printf("\t Veuillez entrez un numéro valide !\n"); while (getchar() != '\n'); } - printf("\t NumClient\t Cagnotte\t Etat\n"); for (int i = 0; i < tLogique; ++i) { if (numC == tNumClient[i]) { - printf("\t %d\t\t %.2f\t %d\n\n", tNumClient[i], tCagnotte[i], tSus[i]); + printf("\t NumClient\t Cagnotte\t Etat\n"); + printf("\t %d\t\t %.2f\t\t %d\n\n", tNumClient[i], tCagnotte[i], tSus[i]); return; } } - printf("Client introuvable\n"); + printf("\t Client introuvable\n"); } void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique) { @@ -88,7 +89,7 @@ void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique printf("\t Fin de la liste !\n"); } -void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) { +void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix, int tRef[], int tLogArticle) { printf("\t Entrez la ref du nouveau produit\n"); while (scanf("%d", ref) != 1 || *ref <= 0) { @@ -96,23 +97,35 @@ void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) { while (getchar() != '\n'); } - printf("\t Entrez le poids du nouveau produit\n"); - while (scanf("%f", poids) != 1 || *poids <= 0) { - printf("\t Veuillez entrer un poids valide.\n"); - while (getchar() != '\n'); + if ( trouver_index_article(*ref, tRef, tLogArticle) != -1) + { + return; } + else + { + printf("\t Entrez le poids du nouveau produit\n"); + while (scanf("%f", poids) != 1 || *poids <= 0) + { + printf("\t Veuillez entrer un poids valide.\n"); + while (getchar() != '\n'); + } printf("\t Entrez le volume du nouveau produit\n"); - while (scanf("%f", volume) != 1 || *volume <= 0) { - printf("\t Veuillez entrer un volume valide.\n"); - while (getchar() != '\n'); - } + while (scanf("%f", volume) != 1 || *volume <= 0) + { + printf("\t Veuillez entrer un volume valide.\n"); + while (getchar() != '\n'); + } printf("\t Entrez le prix du nouveau produit\n"); - while (scanf("%f", prix) != 1 || *prix <= 0) { - printf("\t Veuillez entrer un prix valide.\n"); - while (getchar() != '\n'); + while (scanf("%f", prix) != 1 || *prix <= 0) + { + printf("\t Veuillez entrer un prix valide.\n"); + while (getchar() != '\n'); + } } + + } void affichSupprimerArticle(int *ref) { @@ -194,9 +207,13 @@ void affichModifClient(int tNumClient[], int tSus[], int tLogique) { int choix, numC; printf("\tEntrez le numéro du client : "); - scanf("%d", &numC); + while( scanf("%d", &numC) != 1 || numC <=0 ) + { + printf("\t Entrez une valeur valide ! \n"); + while (getchar() != '\n'); + } - for ( int i = 0; i < tLogique; ++i) + for ( int i = 0; i <= tLogique; i++) { if ( numC == tNumClient[i] ) { @@ -206,6 +223,7 @@ void affichModifClient(int tNumClient[], int tSus[], int tLogique) while(scanf("%d", &choix) != 1 || choix < 0 || choix > 1) { printf("\t Veuillez entrer un choix valide ! \n"); + while (getchar() != '\n'); } if ( choix == 0 ) { @@ -225,6 +243,7 @@ void affichModifClient(int tNumClient[], int tSus[], int tLogique) while(scanf("%d", &choix) != 1 || choix < 0 || choix > 1) { printf("\t Veuillez entrer un choix valide ! \n"); + while (getchar() != '\n'); } if ( choix == 0 ) { @@ -239,9 +258,9 @@ void affichModifClient(int tNumClient[], int tSus[], int tLogique) } } } - printf("\t Le client %d n'a pas été trouvé. \n", numC); - return; } + printf("\t Le client %d n'a pas été trouvé. \n", numC); + return; } @@ -249,7 +268,12 @@ void suppressionClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLo { int choix, numC; printf("\tEntrez le numéro du client : "); - scanf("%d", &numC); + while( scanf("%d", &numC) != 1 || numC <=0 ) + { + printf("\t Entrez une valeur valide ! \n"); + while (getchar() != '\n'); + } + for ( int i = 0; i < *tLogique; ++i) { @@ -262,11 +286,12 @@ void suppressionClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLo } if ( choix == 0 ) { - for ( int j = i; j < *tLogique-1; j++) + while ( i < *tLogique-1 ) { - tNumClient[j] = tNumClient[j+1]; - tCagnotte[j] = tCagnotte[j+1]; - tSus[j] = tSus[j+1]; + tNumClient[i] = tNumClient[i+1]; + tCagnotte[i] = tCagnotte[i+1]; + tSus[i] = tSus[i+1]; + i++; } printf("Le client %d a été supprimé.\n", tNumClient[i]); (*tLogique)--; @@ -283,7 +308,7 @@ void suppressionClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLo return; } -void affichModifMDP() +void affichModifMDP(void) { int choix, decalage; char newMDP[MAX_SIZE_MDP], confirmMDP[MAX_SIZE_MDP]; @@ -292,6 +317,7 @@ void affichModifMDP() while (scanf("%d", &choix) !=1 || choix < 0 || choix > 1) { printf("/!/ Entrez une valeur valide /!/"); + while (getchar() != '\n'); } if ( choix == 1 ) { @@ -300,20 +326,34 @@ void affichModifMDP() } else { - printf("Veuillez entrer le nouveau mot de passe.\n\n\tMAXIXMUM 20 CARACTERES ET SEULEMENT DES LETTRES\n"); + printf("Veuillez entrer le nouveau mot de passe.\n\n\tMAXIXMUM 20 CARACTERES ET SEULEMENT DES LETTRES\n\t"); while (scanf("%s", newMDP) != 1) { printf("Veuillez recommencer la saisie : "); + while (getchar() != '\n'); + } + + for ( int verif = 0; newMDP[verif] != '\0'; verif++) + { + if ( verif > 20 ) + { + printf("\t /!/ Mot de passe trop long /!/ \n"); + return; + } } - printf("Veuillez entrer à nouveau le mot de passe.\n"); + + printf("Veuillez entrer à nouveau le mot de passe.\n\t"); while (scanf("%s", confirmMDP) != 1) { printf("Veuillez recommencer la saisie : "); + while (getchar() != '\n'); } + printf("\t Veuillez entrer le nouveau décalage\n"); while (scanf("%d", &decalage) != 1 || decalage < 0) { printf("\t Veuillez entrer un nombre valide : "); + while (getchar() != '\n'); } int verif = verifModifMDP(newMDP, confirmMDP, decalage); if ( verif == 0 ) @@ -328,6 +368,18 @@ void affichModifMDP() } } } +/* +void appliquerReduc( int tRefProm[], int tReduc[], int *tLogReduc, int tPhysiqueReduc) +{ + int i, ref; + printf("\tA quel article voulez-vous ajouter une promotion ?\n"); + while (scanf("%d", &ref) !=1 || ref < 0) + { + fprintf("\t Entrez une référence correcte !\n"); + } + if () +} +*/ void menu_resp(int *choix) { affiche_resp(); @@ -339,7 +391,7 @@ void menu_resp(int *choix) { } } -void global_resp() { +void global_resp(void) { int choix, ref = 0; float poids = 0, volume = 0, prix = 0; int tRef[MAX_ARTICLES]; @@ -352,6 +404,7 @@ void global_resp() { int tLogArticle = chargementArticles(tRef, tPoids, tVol, tPrix, MAX_ARTICLES); int tLogClient = charger_clients(tNumClient, tCagnotte, tSus, MAX_CLIENTS); + // system("clear"); do { menu_resp(&choix); switch (choix) { diff --git a/src/app/interface/interface_resp.h b/src/app/interface/interface_resp.h index d96c486..05cd078 100644 --- a/src/app/interface/interface_resp.h +++ b/src/app/interface/interface_resp.h @@ -6,6 +6,7 @@ /** * @brief Affiche la liste des articles. * @author Yannis Doumir Fernandes + * * @param tRef - Tableau des références des articles. * @param tPoids - Tableau des poids des articles. * @param tVol - Tableau des volumes des articles. @@ -56,8 +57,10 @@ void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique * @param poids - Poids du nouvel article. * @param volume - Volume du nouvel article. * @param prix - Prix du nouvel article. + * @param tRef - Tableau de référence des articles. + * @param tLogArticle - Taille logique du tableau des références. */ -void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix); +void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix, int tRef[], int tLogArticle); /** * @brief Affiche les informations nécessaires pour supprimer un article. @@ -83,7 +86,7 @@ void affichModifierArticle(int *ref, float *poids, float *volume, float *prix); * @author Yannis Doumir Fernandes * */ -void problemRechercheArticle(); +void problemRechercheArticle(void); /** * @brief Affiche les informations nécessaires pour ajouter un nouveau client. @@ -125,10 +128,10 @@ void affichModifClient(int tNumClient[], int tSus[], int tLogique); * * Cette fonction permet au responsable d'effectuer diverses actions telles que la gestion des articles et des clients. */ -void global_resp(); +void global_resp(void); /** * @brief Affiche le menu principal de l'interface du responsable. * @author Yannis Doumir Fernandes */ -void affiche_resp(); +void affiche_resp(void);