diff --git a/compteRendu.md b/compteRendu.md index 542e297..f4d7a56 100644 --- a/compteRendu.md +++ b/compteRendu.md @@ -79,4 +79,9 @@ Lorsqu'un utilisateur décide de quitter l'application, plusieurs scénarios son - Si l'utilisateur n'a pas déduit suffisamment de sa cagnotte pour couvrir le montant dû, l'application lui indiquera le montant minimum à déduire pour effectuer le paiement complet. -Ces fonctionnalités garantissent que l'application aide les utilisateurs à gérer leur budget et à utiliser leur cagnotte de manière efficace pour éviter les problèmes financiers. \ No newline at end of file +Ces fonctionnalités garantissent que l'application aide les utilisateurs à gérer leur budget et à utiliser leur cagnotte de manière efficace pour éviter les problèmes financiers. + +## Traces d'exécution : +Voici les traces d'execution pour la partie **client** : +Tout d'abord les cas ou le client n'a pas de carte suspendu et choisis un budget: + diff --git a/donnee/client.txt b/donnee/client.txt index eb0da48..8f5b29f 100644 --- a/donnee/client.txt +++ b/donnee/client.txt @@ -1,4 +1,4 @@ -32 0.00 1 -660 61.00 0 +32 69.00 1 +660 5351.40 0 5079 75.50 0 -53 0.00 0 +53 0.00 0 \ No newline at end of file diff --git a/src/app/core_logic/client.c b/src/app/core_logic/client.c index 4d65be1..e9c7f63 100644 --- a/src/app/core_logic/client.c +++ b/src/app/core_logic/client.c @@ -81,3 +81,19 @@ void supprimer_article(int tPanier[], int tQuantite[], int *tLogPanier, int refe tCagnotte[clientIndex] -= 0.1 * montantTotal; } } + +void verifInt(int *var) { + while (scanf("%d", var) != 1 || *var < 0) { + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer une valeur valide (entier positif) :\x1B[0m "); + while (getchar() != '\n'); + } + while (getchar() != '\n'); +} + + +void verifFloat(float *var) { + while (scanf("%f", var) != 1 || *var < 0) { + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer une valeur valide (valeur positive) :\x1B[0m "); + while (getchar() != '\n'); + } +} \ No newline at end of file diff --git a/src/app/core_logic/client.h b/src/app/core_logic/client.h index 5c06c04..8481f59 100644 --- a/src/app/core_logic/client.h +++ b/src/app/core_logic/client.h @@ -74,5 +74,18 @@ int trouver_index_client(int numClient, int tNumClient[], int tLogClient); */ void supprimer_article(int tPanier[], int tQuantite[], int *tLogPanier, int reference, int numClient, int tNumClient[], int tLogClient, int tRef[], float tPrixUnitaire[], float tCagnotte[]); +/** + * @brief Vérifie l'entrée utilisateur pour un entier. + * + * @param var une variable de type int + */ +void verifInt(int *var); + +/** + * @brief Vérifie l'entrée utilisateur pour un float. + * + * @param var une variable de type float + */ +void verifFloat(float *var); -#endif // CLIENT_H +#endif // CLIENT_H \ No newline at end of file diff --git a/src/app/core_logic/responsable.c b/src/app/core_logic/responsable.c index a1e2ad8..8c91598 100644 --- a/src/app/core_logic/responsable.c +++ b/src/app/core_logic/responsable.c @@ -47,7 +47,7 @@ void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], fprintf(stderr, "\n Problème ouverture ficher\n"); return; } - + for ( i = 0; i < tLogique; i++) { fprintf(fe,"\t %d\t %.2f\t %.2f\t %.2f\n", tRef[i], tPoids[i], tVol[i], tPrix[i]); @@ -180,11 +180,11 @@ int decodageMDP(char *mdpEnter) void chiffrementCesar(char *mdp, int decalage) { int i; int longueur = strlen(mdp); - for (i = 0; i < longueur; ++i) - { + for (i = 0; i < longueur; ++i) + { if (mdp[i] >= 'a' && mdp[i] <= 'z') { mdp[i] = 'a' + (mdp[i] - 'a' + decalage) % 26; - } else if (mdp[i] >= 'A' && mdp[i] <= 'Z') + } else if (mdp[i] >= 'A' && mdp[i] <= 'Z') { mdp[i] = 'A' + (mdp[i] - 'A' + decalage) % 26; } @@ -200,14 +200,14 @@ int verifModifMDP(char *mdp, char *confirmMDP, int decalage) } fprintf(stderr, "\tLes mot de passe ne sont pas identiques !\n"); return -1; - + } -int enregistrerMotDePasse(char *mdp, int decalage) +int enregistrerMotDePasse(char *mdp, int decalage) { FILE *fe; fe = fopen("donnee/mdp.txt", "w"); - if (fe == NULL) + if (fe == NULL) { fprintf(stderr,"Erreur lors de l'ouverture du fichier.\n"); return -1; @@ -277,6 +277,6 @@ void suppressionReduc(int tRefReduc[], int tReduc[], int *tLogReduc, int tRef[], --(*tLogReduc); indexPrix = trouver_index_article(ref, tRef, tLogArticle); - tPrix[indexPrix] = retrouvePrix(tPrix[indexPrix], tReduc[indexReduc]); + tPrix[indexPrix] = retrouvePrix(tPrix[indexPrix], tReduc[indexReduc]); } \ No newline at end of file diff --git a/src/app/core_logic/responsable.h b/src/app/core_logic/responsable.h index 787f1d1..6de26e5 100644 --- a/src/app/core_logic/responsable.h +++ b/src/app/core_logic/responsable.h @@ -112,7 +112,7 @@ void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogiqu /** * @brief Décode le mot de passe du fichier mdp.txt pour le comparer avec le mdp entré. * @author Yannis Doumir Fernandes - * + * * @param mdpEnter Mot de passe entrer par l'utilisateur. */ int decodageMDP(char *mdpEnter); @@ -120,7 +120,7 @@ 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 * @author Yannis Doumir Fernandes - * + * * @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. */ diff --git a/src/app/interface/interface_client.c b/src/app/interface/interface_client.c index 9df5505..fe36ce3 100644 --- a/src/app/interface/interface_client.c +++ b/src/app/interface/interface_client.c @@ -20,9 +20,8 @@ void affiche_client(void) { printf("+----------------------------------------------------------------+\n"); } - void ajouter_article_au_panier(int numClient, int tRef[], float tPoids[], float tVol[], float tPrixUnitaire[], - int tNumClient[], float tCagnotte[], int tSus[], int tLogArticle, int tLogClient, + int tNumClient[], float tCagnotte[], int tLogArticle, int tLogClient, float volumeCoffre, float chargeMaximale, int tPanier[], int tQuantite[], int *tLogPanier, float budget) { int reference, quantite, articleIndex, clientIndex; @@ -30,33 +29,24 @@ void ajouter_article_au_panier(int numClient, int tRef[], float tPoids[], float printf("Entrez la référence de l'article : "); - while (scanf("%d", &reference) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une référence valide (nombre) : "); - } - while (getchar() != '\n'); + verifInt(&reference); + articleIndex = trouver_index_article(reference, tRef, tLogArticle); while (articleIndex == -1) { - printf("ERREUR : Article non trouvé. Veuillez entrer une référence valide : "); - while(scanf("%d", &reference) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une référence valide (nombre) : "); - } + fprintf(stderr, "\x1B[31mERREUR : Article non trouvé. Veuillez entrer une référence valide :\x1B[0m "); + verifInt(&reference); articleIndex = trouver_index_article(reference, tRef, tLogArticle); } printf("Entrez la quantité : "); - while (scanf("%d", &quantite) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une quantité valide (nombre) : "); - } - while (getchar() != '\n'); + verifInt(&quantite); + - poidsTotal = tPoids[articleIndex] * quantite; - volumeTotal = tVol[articleIndex] * quantite; - montantTotal = tPrixUnitaire[articleIndex] * quantite; + poidsTotal = tPoids[articleIndex] * (float)quantite; + volumeTotal = tVol[articleIndex] * (float)quantite; + montantTotal = tPrixUnitaire[articleIndex] * (float)quantite; if (poidsTotal > chargeMaximale) { depassementCharge = poidsTotal - chargeMaximale; @@ -70,21 +60,7 @@ void ajouter_article_au_panier(int numClient, int tRef[], float tPoids[], float depassementBudget = montantTotal - budget; } - if (depassementCharge || depassementVolume || depassementBudget) { - printf("Attention : \n"); - if (depassementCharge) { - printf("\tDépassement de la charge autorisée de %.2f kg \n", depassementCharge); - } - if (depassementVolume) { - printf("\tDépassement du volume autorisé de %.2f litres \n", depassementVolume); - } - if (depassementBudget) { - printf("\tDépassement du budget autorisé de %.2f euros \n", depassementBudget); - } - printf("\n"); - } - - montantTotal = tPrixUnitaire[articleIndex] * quantite; + montantTotal = tPrixUnitaire[articleIndex] * (float)quantite; clientIndex = trouver_index_client(numClient, tNumClient, tLogClient); @@ -102,46 +78,44 @@ void ajouter_article_au_panier(int numClient, int tRef[], float tPoids[], float } printf("\n"); - printf("Référence : %d\nQuantité : %d\n", reference, quantite); - printf("Récap :\n"); - printf("Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot Cagnotte\n"); - printf("%d %d %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n", - reference, quantite, tPoids[articleIndex], tVol[articleIndex], - tPrixUnitaire[articleIndex], poidsTotal, volumeTotal, montantTotal, - tCagnotte[clientIndex]); - printf("Prix total à payer: %.2f euros\n", montantTotal); - printf("Cagnotte totale : %.2f euros\n", tCagnotte[clientIndex]); - printf("Volume utilise : %.2f litres\n", volumeTotal); - printf("Volume restant : %.2f litres\n", volumeCoffre - volumeTotal); - printf("Charge Actuelle: %.2f kg\n", poidsTotal); - printf("Charge restante: %.2f kg\n", chargeMaximale - poidsTotal); + if(depassementBudget < 0 || depassementCharge < 0 || depassementVolume < 0) { + printf("Référence : %d\nQuantité : %d\n", reference, quantite); + printf("Récap :\n"); + printf("Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot Cagnotte\n"); + printf("%d %d %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n", + reference, quantite, tPoids[articleIndex], tVol[articleIndex], + tPrixUnitaire[articleIndex], poidsTotal, volumeTotal, montantTotal, + tCagnotte[clientIndex]); + printf("Prix total à payer: %.2f euros\n", montantTotal); + printf("Cagnotte totale : %.2f euros\n", tCagnotte[clientIndex]); + printf("Volume utilise : %.2f litres\n", volumeTotal); + printf("Volume restant : %.2f litres\n", volumeCoffre - volumeTotal); + printf("Charge Actuelle: %.2f kg\n", poidsTotal); + printf("Charge restante: %.2f kg\n", chargeMaximale - poidsTotal); + } else { + affiche_recap_panier(tPanier, *tLogPanier, tRef, tPoids, tVol, tPrixUnitaire, tQuantite, tCagnotte, numClient, tNumClient, tLogClient, volumeCoffre, chargeMaximale, budget); + } } void supprimer_article_du_panier(int tPanier[], int tQuantite[], int *tLogPanier, float tCagnotte[], int numClient, int tNumClient[], int tLogClient, int tRef[], float tPrixUnitaire[]) { int reference, articleIndex; + printf("Entrez la référence de l'article à supprimer : "); - while (scanf("%d", &reference) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une référence valide (nombre) : "); - } - while (getchar() != '\n'); + verifInt(&reference); - articleIndex = trouver_index_article(reference, tRef, MAX_ARTICLES); + articleIndex = trouver_index_article(reference, tPanier, *tLogPanier); while (articleIndex == -1) { - printf("Article non trouvé dans le panier. Veuillez entrer une référence valide : "); - while(scanf("%d", &reference) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une référence valide (nombre) : "); - } - articleIndex = trouver_index_article(reference, tRef, MAX_ARTICLES); + fprintf(stderr, "\x1B[31mERREUR : Article non trouvé dans le panier. Veuillez entrer une référence valide :\x1B[0m "); + verifInt(&reference); + articleIndex = trouver_index_article(reference, tPanier, *tLogPanier); } supprimer_article(tPanier, tQuantite, tLogPanier, reference, numClient, tNumClient, tLogClient, tRef, tPrixUnitaire, tCagnotte); - printf("Article supprimé du panier avec succès.\n"); + printf("\033[32mArticle supprimé du panier avec succès.\033[0m\n"); } @@ -153,12 +127,6 @@ void affiche_recap_panier(int tPanier[], int tLogPanier, int tRef[], float tPoid float poidsTotal = 0, volumeTotal = 0, montantTotal = 0, prixArticle = 0, poidsArticle = 0, volumeArticle = 0; char attentionDepassement[200] = ""; - printf("Contenu du panier : "); - for (int i = 0; i < tLogPanier; i++) { - printf("%d ", tPanier[i]); - } - printf("\n"); - printf("Récap :\n"); printf("Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot\n"); @@ -173,11 +141,11 @@ void affiche_recap_panier(int tPanier[], int tLogPanier, int tRef[], float tPoid printf("%d\t %d\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f\t %.2f\n", reference, quantite, poidsArticle, volumeArticle, - prixArticle, poidsArticle * quantite, volumeArticle * quantite, prixArticle * quantite); + prixArticle, poidsArticle * (float)quantite, volumeArticle * (float)quantite, prixArticle * (float)quantite); - poidsTotal += poidsArticle * quantite; - volumeTotal += volumeArticle * quantite; - montantTotal += prixArticle * quantite; + poidsTotal += poidsArticle * (float)quantite; + volumeTotal += volumeArticle * (float)quantite; + montantTotal += prixArticle * (float)quantite; if (poidsTotal > chargeMaximale) { float depassement = poidsTotal - chargeMaximale; @@ -207,7 +175,8 @@ void affiche_recap_panier(int tPanier[], int tLogPanier, int tRef[], float tPoid printf("Charge Actuelle: %.2f kg\n", poidsTotal); if (strlen(attentionDepassement) > 0) { - printf("Attention : %s", attentionDepassement); + printf("Attention : \n"); + printf("%s", attentionDepassement); } } @@ -215,19 +184,14 @@ void configurer_session_client(int tNumClient[], int tLogClient, double *budget, int indexClient, choixBudget = 0; printf("Veuillez saisir votre numéro de client : "); - while (scanf("%d", numClient) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un numéro de client valide : "); - } + verifInt(numClient); + indexClient = trouver_index_client(*numClient, tNumClient, tLogClient); while (indexClient == -1) { - printf("ERREUR : Veuillez entrer un numéro de client valide : "); - while (scanf("%d", numClient) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un numéro de client valide : "); - } + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer un numéro de client valide :\x1B[0m "); + verifInt(numClient); indexClient = trouver_index_client(*numClient, tNumClient, tLogClient); } @@ -235,28 +199,22 @@ void configurer_session_client(int tNumClient[], int tLogClient, double *budget, printf("Voulez-vous définir un budget à ne pas dépasser ? (1 pour Oui, 0 pour Non) : "); while (scanf("%d", &choixBudget) != 1 || (choixBudget != 0 && choixBudget != 1)) { while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer 1 pour Oui ou 0 pour Non : "); + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer 1 pour Oui ou 0 pour Non :\x1B[0m "); } if (choixBudget == 1) { printf("Entrez le budget à ne pas dépasser : "); while (scanf("%lf", budget) != 1 || *budget <= 0) { while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un budget valide (nombre positif) : "); + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer un budget valide (nombre positif) :\x1B[0m "); } } printf("Veuillez saisir la taille disponible du véhicule (en litres) : "); - while (scanf("%f", volumeCoffre) != 1 || *volumeCoffre <= 0) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une taille de coffre valide (en litres) : "); - } + verifFloat(volumeCoffre); printf("Veuillez saisir la charge maximale autorisée (en kg) : "); - while (scanf("%f", chargeMaximale) != 1 || *chargeMaximale <= 0) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une charge maximale valide (en kg) : "); - } + verifFloat(chargeMaximale); } void modifier_quantite_article_panier(int tPanier[], int tQuantite[], int *tLogPanier, float tCagnotte[], int numClient, float tPrixUnitaire[], int tRef[], int tLogClient, int tNumClient[]) { @@ -265,30 +223,18 @@ void modifier_quantite_article_panier(int tPanier[], int tQuantite[], int *tLogP float prixArticle = 0, ancienneQuantite = 0; printf("Entrez la référence de l'article : "); - while (scanf("%d", &reference) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une référence valide (nombre) : "); - } - while (getchar() != '\n'); + verifInt(&reference); articleIndex = trouver_index_article(reference, tPanier, *tLogPanier); while (articleIndex == -1) { - printf("Article non trouvé dans le panier. Veuillez entrer une référence valide : "); - while (scanf("%d", &reference) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une référence valide (nombre) : "); - } - + fprintf(stderr, "\x1B[31mERREUR : Article non trouvé dans le panier. Veuillez entrer une référence valide :\x1B[0m "); + verifInt(&reference); articleIndex = trouver_index_article(reference, tPanier, *tLogPanier); } printf("Entrez la quantité : "); - while (scanf("%d", &quantite) != 1 || quantite <= 0) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer une quantité valide (nombre) : "); - } - while (getchar() != '\n'); + verifInt(&quantite); // Mettre à jour la cagnotte en fonction du changement de quantité prixArticle = tPrixUnitaire[trouver_index_article(reference, tRef, MAX_ARTICLES)]; @@ -298,7 +244,7 @@ void modifier_quantite_article_panier(int tPanier[], int tQuantite[], int *tLogP tQuantite[articleIndex] = quantite; - printf("Quantité modifiée avec succès.\n"); + printf("\033[32mQuantité modifiée avec succès.\033[0m\n"); } void reinitialiser_panier(int tPanier[], int tQuantite[], int *tLogPanier, float tCagnotte[], int numClient, int tNumClient[], int tLogClient, int tRef[], float tPrixUnitaire[]) { @@ -306,48 +252,63 @@ void reinitialiser_panier(int tPanier[], int tQuantite[], int *tLogPanier, float supprimer_article(tPanier, tQuantite, tLogPanier, tPanier[i], numClient, tNumClient, tLogClient, tRef, tPrixUnitaire, tCagnotte); } *tLogPanier = 0; + printf("\033[32mLe panier a été réinitialisé avec succès.\033[0m\n"); } -void deduire_cagnotte(int numClient, float montant, int tNumClient[], float tCagnotte[], int tLogClient, int tSus[]) { - int clientIndex = -1; - for (int i = 0; i < tLogClient; i++) { - if (tNumClient[i] == numClient) { - clientIndex = i; - break; - } - } +void deduire_cagnotte(int numClient, float montant, int tNumClient[], float tCagnotte[], int tLogClient) { + int clientIndex; + + clientIndex = trouver_index_client(numClient, tNumClient, tLogClient); if (clientIndex == -1) { - printf("Client non trouvé. Impossible de déduire la cagnotte.\n"); + fprintf(stderr, "\x1B[31mERREUR : Client non trouvé. Impossible de déduire la cagnotte.\x1B[0m\n "); return; } if (tCagnotte[clientIndex] < montant) { - printf("Cagnotte insuffisante. Impossible de déduire la cagnotte.\n"); + fprintf(stderr, "\x1B[31mERREUR : Cagnotte insuffisante. Impossible de déduire la cagnotte.\x1B[0m\n "); return; } tCagnotte[clientIndex] -= montant; - printf("Montant déduit de la cagnotte avec succès.\n"); + printf("\033[32mMontant déduit de la cagnotte avec succès.\033[0m\n"); + printf("Il vous reste %.2f euros dans votre cagnotte.\n", tCagnotte[clientIndex]); } void quitter_application(int tPanier[], int tLogPanier, int tRef[], float tPoid[], float tVol[], - float tPrixUnitaire[], int tQuantite[], float tCagnotte[], int numClient, - int tNumClient[], int tLogClient, float budget, int tSus[]) { + float tPrixUnitaire[], int tQuantite[], float tCagnotte[], int numClient, + int tNumClient[], int tLogClient, float budget, int tSus[], float volumeCoffre, float chargeMaximale) { int reference, articleIndex, quantite, clientIndex, choixCagnotte = 0; - float montantTotal = 0, prixArticle = 0, montantDeduction = 0, depassement = 0; + float montantTotal = 0, prixArticle = 0, montantDeduction = 0, depassement = 0 , poidsTotal = 0, volumeTotal = 0, poidsArticle = 0, volumeArticle = 0; char attentionDepassement[200] = ""; for (int i = 0; i < tLogPanier; i++) { reference = tPanier[i]; articleIndex = trouver_index_article(reference, tRef, MAX_ARTICLES); + poidsArticle = tPoid[articleIndex]; + volumeArticle = tVol[articleIndex]; prixArticle = tPrixUnitaire[articleIndex]; quantite = tQuantite[i]; - montantTotal += prixArticle * quantite; + poidsTotal += poidsArticle * (float)quantite; + volumeTotal += volumeArticle * (float)quantite; + montantTotal += prixArticle * (float)quantite; + + if (poidsTotal > chargeMaximale) { + depassement = poidsTotal - chargeMaximale; + char message[100]; + sprintf(message, "Dépassement de la charge autorisée de %.2f kg.\n", depassement); + strcat(attentionDepassement, message); + } + if (volumeTotal > volumeCoffre) { + depassement = volumeTotal - volumeCoffre; + char message[100]; + sprintf(message, "Dépassement du volume autorisé de %.2f litres.\n", depassement); + strcat(attentionDepassement, message); + } if (budget > 0 && montantTotal > budget) { depassement = montantTotal - budget; @@ -359,71 +320,97 @@ void quitter_application(int tPanier[], int tLogPanier, int tRef[], float tPoid[ clientIndex = trouver_index_client(numClient, tNumClient, tLogClient); - if (tSus[clientIndex] == 1) { - printf("Vous ne pourrez pas utiliser votre cagnotte car votre carte est suspendu.\n"); - } - printf("Prix total à payer: %.2f euros\n", montantTotal); if (budget > 0) { printf("Budget : %.2f euros\n", budget); } + printf("Volume utilise : %.2f litres\n", volumeTotal); + printf("Charge Actuelle: %.2f kg\n", poidsTotal); + + if(volumeTotal > volumeCoffre) { + printf("Attention : %s", attentionDepassement); + printf("Vous ne pourrez pas payer. De plus vous ne pourrez pas utiliser votre cagnotte car votre coffre est plein.\n"); + printf("Payement non effectué.\n"); + return; + } + + if(poidsTotal > chargeMaximale) { + printf("Attention : %s", attentionDepassement); + printf("Vous ne pourrez pas payer. De plus vous ne pourrez pas utiliser votre cagnotte car votre coffre est plein.\n"); + printf("Payement non effectué.\n"); + return; + } + + if(tSus[clientIndex] == 1 && budget > 0 && montantTotal > budget) { + printf("Attention : %s", attentionDepassement); + printf("Vous ne pourrez pas payer. De plus vous ne pourrez pas utiliser votre cagnotte car votre carte est suspendu.\n"); + printf("Payement non effectué.\n"); + return; + } + + if(tSus[clientIndex] == 1 && budget > 0 && montantTotal < budget) { + printf("Vous ne pourrez pas utiliser votre cagnotte car votre carte est suspendu.\n"); + printf("Payement effectué.\n"); + return; + } + + if(tSus[clientIndex] == 1) { + printf("Vous ne pourrez pas utiliser votre cagnotte car votre carte est suspendu.\n"); + printf("Payement effectué.\n"); + return; + } + + if(tSus[clientIndex] == 0) { + printf("Cagnotte totale : %.2f euros\n", tCagnotte[clientIndex]); + } + if (budget > 0 && montantTotal > budget && tCagnotte[clientIndex] < (montantTotal - budget)) { printf("Attention : %s", attentionDepassement); printf("Vous ne pourrez pas payer. De plus vous n'avez pas assez dans votre cagnotte pour la déduire et payer\n"); - printf("Montant de votre cagnotte %.2f\n", tCagnotte[clientIndex]); } if (budget > 0 && montantTotal > budget && montantTotal < budget + tCagnotte[clientIndex]) { printf("Attention : %s", attentionDepassement); - printf("Vous ne pourrez pas payer, mais vous avez suffisamment dans votre cagnotte pour payer.\n"); - printf("Montant de votre cagnotte %.2f\n", tCagnotte[clientIndex]); + printf("Vous ne pourrez pas payer, mais vous avez suffisamment dans votre cagnotte pour déduire le prix.\n"); printf("Voulez-vous déduire de votre cagnotte avant de quitter ? (1 pour Oui, 0 pour Non) : "); while (scanf("%d", &choixCagnotte) != 1 || (choixCagnotte != 0 && choixCagnotte != 1)) { while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer 1 pour Oui ou 0 pour Non : "); + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer 1 pour Oui ou 0 pour Non :\x1B[0m "); } if (choixCagnotte == 1) { printf("Entrez le montant à déduire de votre cagnotte : "); - while (scanf("%f", &montantDeduction) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un montant valide (nombre) : "); - } - while (getchar() != '\n'); + verifFloat(&montantDeduction); while (montantDeduction < (montantTotal - budget)) { - printf("ERREUR : Vous devez déduire suffisamment pour payer l'intégralité du montant dû.\n"); + fprintf(stderr, "\x1B[31mERREUR : Vous devez déduire suffisamment pour payer l'intégralité du montant dû.\x1B[0m\n"); printf("Montant minimum à déduire pour payer : %.2f\n", montantTotal - budget); printf("Entrez le montant à déduire de votre cagnotte : "); - while (scanf("%f", &montantDeduction) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un montant valide (nombre) : "); - } - while (getchar() != '\n'); + verifFloat(&montantDeduction); } - - deduire_cagnotte(numClient, montantDeduction, tNumClient, tCagnotte, tLogClient, tSus); - printf("Il vous reste %.2f euros dans votre cagnotte.\n", tCagnotte[clientIndex]); + deduire_cagnotte(numClient, montantDeduction, tNumClient, tCagnotte, tLogClient); + printf("Payement effectué.\n"); + return; + } else { + printf("Payement non effectué.\n"); + return; } } printf("Voulez-vous déduire de votre cagnotte avant de quitter ? (1 pour Oui, 0 pour Non) : "); while (scanf("%d", &choixCagnotte) != 1 || (choixCagnotte != 0 && choixCagnotte != 1)) { while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer 1 pour Oui ou 0 pour Non : "); + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer 1 pour Oui ou 0 pour Non :\x1B[0m "); } if (choixCagnotte == 1) { printf("Entrez le montant à déduire de votre cagnotte : "); - while (scanf("%f", &montantDeduction) != 1) { - while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un montant valide (nombre) : "); - } - while (getchar() != '\n'); - - deduire_cagnotte(numClient, montantDeduction, tNumClient, tCagnotte, tLogClient, tSus); - printf("Il vous reste %.2f euros dans votre cagnotte.\n", tCagnotte[clientIndex]); + verifFloat(&montantDeduction); + deduire_cagnotte(numClient, montantDeduction, tNumClient, tCagnotte, tLogClient); + printf("Payement effectué.\n"); + } else { + printf("Payement effectué.\n"); } } @@ -432,16 +419,16 @@ void menu_client(int *choix) { printf("Vous choisissez: "); while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 9 || (*choix > 6 && *choix < 9)) { while (getchar() != '\n'); - printf("ERREUR : Veuillez entrer un choix valide : "); + fprintf(stderr, "\x1B[31mERREUR : Veuillez entrer un choix valide :\x1B[0m "); } } void global_client(void) { int choix, tRef[MAX_ARTICLES], tNumClient[MAX_CLIENTS], tSus[MAX_CLIENTS], tLogArticle, tLogClient, - numClient, tQuantite[MAX_ARTICLES], tPanier[MAX_ARTICLES], tLogPanier = 0; + numClient, tQuantite[MAX_ARTICLES], tPanier[MAX_ARTICLES], tLogPanier = 0; float tPoids[MAX_ARTICLES], tVol[MAX_ARTICLES], tPrixUnitaire[MAX_ARTICLES], tCagnotte[MAX_CLIENTS], - volumeCoffre, chargeMaximale; + volumeCoffre, chargeMaximale; double budget = -1.0; @@ -462,7 +449,7 @@ void global_client(void) { break; case 3: ajouter_article_au_panier(numClient, tRef, tPoids, tVol, tPrixUnitaire, tNumClient, tCagnotte, - tSus, tLogArticle, tLogClient, volumeCoffre, chargeMaximale, tPanier, tQuantite, &tLogPanier, budget); + tLogArticle, tLogClient, volumeCoffre, chargeMaximale, tPanier, tQuantite, &tLogPanier, budget); break; case 4: supprimer_article_du_panier(tPanier, tQuantite, &tLogPanier, tCagnotte, numClient, tNumClient, tLogClient, tRef, tPrixUnitaire); @@ -474,13 +461,12 @@ void global_client(void) { break; case 6: reinitialiser_panier(tPanier, tQuantite, &tLogPanier, tCagnotte, numClient, tNumClient, tLogClient, tRef, tPrixUnitaire); - printf("Le panier a été réinitialisé.\n"); break; case 9: - quitter_application(tPanier, tLogPanier, tRef, tPoids, tVol, tPrixUnitaire, tQuantite, tCagnotte, numClient, tNumClient, tLogClient, budget, tSus); + quitter_application(tPanier, tLogPanier, tRef, tPoids, tVol, tPrixUnitaire, tQuantite, tCagnotte, numClient, tNumClient, tLogClient, budget, tSus, volumeCoffre, chargeMaximale); sauvegarde_clients(tNumClient, tCagnotte, tSus, tLogClient); printf("Au revoir !\n"); return; } } while (choix != 9); -} +} \ No newline at end of file diff --git a/src/app/interface/interface_client.h b/src/app/interface/interface_client.h index e1ee5aa..9508aa2 100644 --- a/src/app/interface/interface_client.h +++ b/src/app/interface/interface_client.h @@ -32,7 +32,6 @@ void affiche_client(void); * @param tPrixUnitaire - Un tableau de prix unitaires d'articles. * @param tNumClient - Un tableau de numéros d'articles. * @param tCagnotte - Un tableau de cagnottes. - * @param tSus - Un tableau d'articles suspendus. * @param tLogArticle - Le nombre total d'articles disponibles. * @param tLogClient - Le nombre total de clients. * @param volumeCoffre - La limite de volume pour le panier du client. @@ -43,7 +42,7 @@ void affiche_client(void); * @param budget - Le budget du client. */ void ajouter_article_au_panier(int numClient, int tRef[], float tPoids[], float tVol[], float tPrixUnitaire[], - int tNumClient[], float tCagnotte[], int tSus[], int tLogArticle, int tLogClient, + int tNumClient[], float tCagnotte[], int tLogArticle, int tLogClient, float volumeCoffre, float chargeMaximale, int tPanier[], int tQuantite[], int *tLogPanier, float budget); /** @@ -135,7 +134,7 @@ void reinitialiser_panier(int tPanier[], int tQuantite[], int *tLogPanier, float * @param tLogClient - Le nombre total de clients. * @param tSus - Un tableau d'état des clients suspendus. */ -void deduire_cagnotte(int numClient, float montant, int tNumClient[], float tCagnotte[], int tLogClient, int tSus[]); +void deduire_cagnotte(int numClient, float montant, int tNumClient[], float tCagnotte[], int tLogClient); /** * @brief Quitter l'application client. @@ -153,10 +152,12 @@ void deduire_cagnotte(int numClient, float montant, int tNumClient[], float tCag * @param tLogClient - Le nombre total de clients. * @param budget - Le budget du client. * @param tSus - Un tableau d'état des clients suspendus. + * @param volumeCoffre - La limite de volume pour le véhicul du client. + * @param chargeMaximale - La limite de poids pour le véhicul du client. */ void quitter_application(int tPanier[], int tLogPanier, int tRef[], float tPoid[], float tVol[], float tPrixUnitaire[], int tQuantite[], float tCagnotte[], int numClient, - int tNumClient[], int tLogClient, float budget, int tSus[]); + int tNumClient[], int tLogClient, float budget, int tSus[], float volumeCoffre, float chargeMaximale); /** * @brief Afficher le menu du client et enregistrer le choix de l'utilisateur. @@ -170,4 +171,4 @@ void menu_client(int *choix); */ void global_client(void); -#endif // INTERFACE_CLIENT_H +#endif // INTERFACE_CLIENT_H \ No newline at end of file diff --git a/src/app/interface/interface_resp.c b/src/app/interface/interface_resp.c index bb58e45..52eb37f 100644 --- a/src/app/interface/interface_resp.c +++ b/src/app/interface/interface_resp.c @@ -1,5 +1,3 @@ - - #include #include #include "interface_resp.h" @@ -66,7 +64,7 @@ void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], in printf("\tEntrez une référence valide\n"); while (getchar() != '\n'); } - + for (int i = 0; i < tLogique; ++i) { if (ref == tRef[i]) { printf("\t Ref\t Poids\t Volume\t Prix\n"); @@ -107,7 +105,7 @@ void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique 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) { - + printf("\t Veuillez entrer une référence valide.\n"); while (getchar() != '\n'); } @@ -120,28 +118,28 @@ void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix, int else { printf("\t Entrez le poids du nouveau produit\n"); - while (scanf("%f", poids) != 1 || *poids <= 0) + 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 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'); } - printf("\t Entrez le prix du nouveau produit\n"); - while (scanf("%f", prix) != 1 || *prix <= 0) + 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'); } } - + } void affichSupprimerArticle(int *ref) { @@ -200,7 +198,7 @@ int affichageConnexion(void) scanf("%s", mdpEnter); int verif = decodageMDP(mdpEnter); - + if ( verif == 0 ) { printf("+--------------------------------------------+\n"); @@ -228,7 +226,7 @@ void affichModifClient(int tNumClient[], int tSus[], int tLogique) printf("\t Entrez une valeur valide ! \n"); while (getchar() != '\n'); } - + for ( int i = 0; i <= tLogique; i++) { if ( numC == tNumClient[i] ) @@ -289,8 +287,8 @@ void suppressionClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLo printf("\t Entrez une valeur valide ! \n"); while (getchar() != '\n'); } - - + + for ( int i = 0; i < *tLogique; ++i) { if ( numC == tNumClient[i] ) @@ -364,14 +362,14 @@ void affichModifMDP(void) 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); + int verif = verifModifMDP(newMDP, confirmMDP, decalage); if ( verif == 0 ) { printf("\t Mot de passe modifié !\n"); @@ -395,7 +393,7 @@ void creerReduc( int tRefReduc[], int tReduc[], int *tLogReduc, int tPhysiqueRed fprintf(stderr, "\tTableau pleins !\n"); return; } - + printf("\tA quel article voulez-vous ajouter une promotion ?\n"); while (scanf("%d", &ref) !=1 || ref < 0) { @@ -405,16 +403,16 @@ void creerReduc( int tRefReduc[], int tReduc[], int *tLogReduc, int tPhysiqueRed int verif = trouver_index_article(ref, tRef, tLogArticle); - while ( (verif = trouver_index_article(ref, tRef, tLogArticle)) == -1 ) + while ( (verif = trouver_index_article(ref, tRef, tLogArticle)) == -1 ) { printf("\t Entrez une référence existante !\n"); while (scanf("%d", &ref) !=1 || ref < 0) { printf("\t Entrez une référence correcte !\n"); while (getchar() != '\n'); - } + } } - + printf("\tQuel pourcentage ?\n"); while (scanf("%f", &reduc) !=1 || reduc < 0 || reduc > 100) { @@ -439,7 +437,7 @@ int affichSuprReduc(int tRefReduc[], int tLogReduc, int *indexReduc) fprintf(stderr, "\t Entrez une référence correcte !\n"); while (getchar() != '\n'); } - + while( ( *indexReduc = trouver_index_article(ref, tRefReduc, tLogReduc) )== -1 ) { printf("\t Entrez une référence qui a une réduction !\n"); @@ -447,7 +445,7 @@ int affichSuprReduc(int tRefReduc[], int tLogReduc, int *indexReduc) { printf("\t Entrez une référence correcte !\n"); while (getchar() != '\n'); - } + } } printf("\t Suppression réussi !\n"); return ref; @@ -483,8 +481,8 @@ void global_resp(void) { do { menu_resp(&choix); switch (choix) { - - + + case 1: affichUnClient(tNumClient, tCagnotte, tSus, tLogClient); break; @@ -496,10 +494,10 @@ void global_resp(void) { break; case 4: suppressionClient(tNumClient, tCagnotte ,tSus , &tLogClient); - break; + break; case 5: affichModifClient(tNumClient, tSus, tLogClient); - break; + break; case 6: affichUnArticle(tRef, tPoids, tVol, tPrix, tLogArticle); break; @@ -538,5 +536,5 @@ void global_resp(void) { break; } } while (choix != MENU_QUIT); - -} + +} \ No newline at end of file