diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app b/app index 1406654..0458afb 100755 Binary files a/app and b/app differ diff --git a/donnee/articles.txt b/donnee/articles.txt index fb09fbd..6231299 100644 --- a/donnee/articles.txt +++ b/donnee/articles.txt @@ -3,4 +3,3 @@ 272 6.500 10.00 29.99 464 50.0 25.50 60.00 958 4.75 60.00 32.00 - diff --git a/src/app/core_logic/client.c b/src/app/core_logic/client.c index 04040fd..92a8936 100644 --- a/src/app/core_logic/client.c +++ b/src/app/core_logic/client.c @@ -1,24 +1,174 @@ -// -// Created by Mathéo Hersan on 16/10/2023. -// +#include #include "client.h" -void afficherDonneesClient() { - FILE *fichier = fopen("donnee/client.txt", "r"); - int numeroClient; +#define MAX_ARTICLES 100 +#define MAX_CLIENTS 100 + +int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique) { + int i = 0, numero, suspendue; float cagnotte; - int suspendu; + FILE *fe; + fe = fopen("donnee/client.txt", "r"); + if (fe == NULL) { + perror("fopen"); + return -1; + } + while (fscanf(fe, "%d %f %d", &numero, &cagnotte, &suspendue) == 3) { + if (i == tPhysique) { + fprintf(stderr, "Tableau plein"); + break; + } + numeros[i] = numero; + cagnottes[i] = cagnotte; + suspendues[i] = suspendue; + i++; + } + fclose(fe); + return i; +} + + + +void ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], + int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, + float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier) { + int reference, quantite; + printf("Entrez la référence de l'article : "); + scanf("%d", &reference); + printf("Entrez la quantité : "); + scanf("%d", &quantite); + + int articleIndex = -1; + for (int i = 0; i < nombreArticles; i++) { + if (references[i] == reference) { + articleIndex = i; + break; + } + } + + if (articleIndex == -1) { + printf("Article non trouvé. Veuillez entrer une référence valide.\n"); + return; + } + + for (int i = 0; i < *taillePanier; i++) { + if (panier[i] == reference) { + printf("Cet article est déjà dans le panier.\n"); + return; + } + } + + float poidsTotal = poids[articleIndex] * quantite; + float volumeTotal = volume[articleIndex] * quantite; + + if (poidsTotal > chargeMaximale) { + printf("Désolé, dépassement de la charge autorisée.\n"); + } else if (volumeTotal > volumeCoffre) { + printf("Désolé, dépassement du volume autorisé.\n"); + } else { + float montantTotal = prixUnitaire[articleIndex] * quantite; + + int clientIndex = -1; + for (int i = 0; i < nombreClients; i++) { + if (numeros[i] == numeroClient) { + clientIndex = i; + break; + } + } + + if (clientIndex != -1) { + cagnottes[clientIndex] += 0.1 * montantTotal; + } - if (fichier == NULL) { - fprintf(stderr, "Erreur lors de l'ouverture du fichier"); - exit(EXIT_FAILURE); + panier[*taillePanier] = reference; + quantites[*taillePanier] = quantite; + (*taillePanier)++; + + printf("Contenu du panier : "); + for (int i = 0; i < *taillePanier; i++) { + printf("%d ", panier[i]); + } + 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, poids[articleIndex], volume[articleIndex], + prixUnitaire[articleIndex], poidsTotal, volumeTotal, montantTotal, + cagnottes[clientIndex]); + printf("Prix total à payer: %.2f euros\n", montantTotal); + printf("Cagnotte totale : %.2f euros\n", cagnottes[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); + } +} + +void supprimer_article_du_panier(int panier[], int *taillePanier) { + int reference; + printf("Entrez la référence de l'article à supprimer : "); + scanf("%d", &reference); + + int articleIndex = -1; + for (int i = 0; i < *taillePanier; i++) { + if (panier[i] == reference) { + articleIndex = i; + break; + } + } + + if (articleIndex == -1) { + printf("Article non trouvé dans le panier. Veuillez entrer une référence valide.\n"); + return; + } + + for (int i = articleIndex; i < (*taillePanier - 1); i++) { + panier[i] = panier[i + 1]; } - while (fscanf(fichier, "%d%f%d", &numeroClient, &cagnotte, &suspendu) == 3) { - printf("Client %d, Cagnotte %.2f, Suspendu: %s\n", - numeroClient, cagnotte, (suspendu == 0) ? "Non" : "Oui"); + (*taillePanier)--; + + printf("Article supprimé du panier avec succès.\n"); +} + +void affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], + float prixUnitaire[], int quantites[]) { + printf("Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot\n"); + float poidsTotal = 0, volumeTotal = 0, montantTotal = 0; + for (int i = 0; i < taillePanier; i++) { + int reference = panier[i]; + int articleIndex = -1; + for (int j = 0; j < MAX_ARTICLES; j++) { + if (references[j] == reference) { + articleIndex = j; + break; + } + } + + if (articleIndex == -1) { + printf("Article non trouvé. Veuillez entrer une référence valide.\n"); + return; + } + + float poidsArticle = poids[articleIndex]; + float volumeArticle = volume[articleIndex]; + float prixArticle = prixUnitaire[articleIndex]; + int quantite = quantites[i]; + + 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); + + poidsTotal += poidsArticle * quantite; + volumeTotal += volumeArticle * quantite; + montantTotal += prixArticle * quantite; } - fclose(fichier); -} \ No newline at end of file + printf("Prix total à payer: %.2f euros\n", montantTotal); + printf("Volume utilise : %.2f litres\n", volumeTotal); + printf("Charge Actuelle: %.2f kg\n", poidsTotal); +} + diff --git a/src/app/core_logic/client.h b/src/app/core_logic/client.h index aff2be5..aabe5c8 100644 --- a/src/app/core_logic/client.h +++ b/src/app/core_logic/client.h @@ -8,6 +8,11 @@ #include #include -void afficherDonneesClient(); - +int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique); +void ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], + int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, + float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier); +void supprimer_article_du_panier(int panier[], int *taillePanier); +void affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], + float prixUnitaire[], int quantites[]); #endif //SAE_101_CLIENT_H diff --git a/src/app/core_logic/responsable.c b/src/app/core_logic/responsable.c index e708e59..e106afa 100644 --- a/src/app/core_logic/responsable.c +++ b/src/app/core_logic/responsable.c @@ -57,14 +57,14 @@ int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int fprintf(stderr,"Tableau plein !"); return -2; } - + // SI on trie pas par ref c'est ca tRef[i] = ref; tPoids[i] = poids; tVol[i] = volume; tPrix[i] = prix; return 0; - + } void rechercheRefArticle(int tRef[], int ref, int *index, int tLogique) @@ -88,15 +88,15 @@ void supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], i int ref, index; affichSupprimerArticle(&ref); rechercheRefArticle(tRef, ref, &index, *tLogique); - - for( int i = index; i< *tLogique-1; ++i) - { - tRef[i] = tRef[i+1]; - tPoids[i] = tPoids[i+1]; - tVol[i] = tVol[i+1]; - tPrix[i] = tPrix[i+1]; - } - *tLogique -= 1; + + for( int i = index; i< *tLogique-1; ++i) + { + tRef[i] = tRef[i+1]; + tPoids[i] = tPoids[i+1]; + tVol[i] = tVol[i+1]; + tPrix[i] = tPrix[i+1]; + } + *tLogique -= 1; } void modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) diff --git a/src/app/core_logic/testResponsable.c b/src/app/core_logic/testResponsable.c deleted file mode 100644 index 18edf39..0000000 --- a/src/app/core_logic/testResponsable.c +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "responsable.h" -#include "../interface/interface_resp.h" -#include "../interface/interface_client.h" - - -int main(void) -{ - global_resp(); - return 0; -} \ No newline at end of file diff --git a/src/app/interface/interface_client.c b/src/app/interface/interface_client.c index 4d14f45..0e23ffa 100644 --- a/src/app/interface/interface_client.c +++ b/src/app/interface/interface_client.c @@ -1,10 +1,14 @@ #include "interface_client.h" #include "app/core_logic/client.h" +#include "app/core_logic/responsable.h" -void affiche_client(int a){ +#define MAX_ARTICLES 100 +#define MAX_CLIENTS 100 + +void affiche_client(int a) { printf("\n"); printf("+-------------+ \n"); - printf("|| Bonjour ! ||\n") ; + printf("|| Bonjour ! ||\n"); printf("+-------------+ \n"); printf("\n"); printf("+-----------------------------------------------------------------+\n"); @@ -14,6 +18,7 @@ void affiche_client(int a){ printf("||\t3 : Supprimer un article du panier. \t \t \t || \n"); printf("||\t4 : Modifier la quantité d'un article du panier. \t || \n"); printf("||\t5 : Réinitialiser le panier. \t \t \t \t || \n"); + printf("||\t9 : Quitter. \t \t \t \t \t \t || \n"); printf("+-----------------------------------------------------------------+\n"); } @@ -23,22 +28,79 @@ void affiche_client(int a){ void menu_client(int *choix, int jour) { affiche_client(jour); printf("Vous choisissez: "); - while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 5) { - while (getchar() != '\n'); // Nettoie le tampon d'entrée en cas de saisie invalide + while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 9) { + while (getchar() != '\n'); affiche_client(jour); printf("Veuillez entrer un choix valide : "); } } void global_client() { - int choix, jour; - menu_client(&choix, jour); - switch (choix) { - case 1: - afficherDonneesClient(); - break; - default: - printf("Veuillez entrer un choix valide !\n"); + int choix, jour = 0; + int references[MAX_ARTICLES]; + float poids[MAX_ARTICLES]; + float volume[MAX_ARTICLES]; + float prixUnitaire[MAX_ARTICLES]; + int numeros[MAX_CLIENTS]; + float cagnottes[MAX_CLIENTS]; + int suspendus[MAX_CLIENTS]; + int nombreArticles, nombreClients; + float volumeCoffre, chargeMaximale; + int numeroClient; + int quantites[MAX_ARTICLES]; + int panier[MAX_ARTICLES]; + int taillePanier = 0; + + nombreArticles = chargementArticles(references, poids, volume, prixUnitaire, MAX_ARTICLES); + nombreClients = charger_clients(numeros, cagnottes, suspendus, MAX_CLIENTS); + + printf("Veuillez saisir la taille disponible du véhicule (en litres) : "); + scanf("%f", &volumeCoffre); + + printf("Veuillez saisir la charge maximale autorisée (en kg) : "); + scanf("%f", &chargeMaximale); + + printf("Veuillez saisir votre numéro de client : "); + scanf("%d", &numeroClient); + + int indexClient = -1; + for (int i = 0; i < nombreClients; i++) { + if (numeros[i] == numeroClient) { + indexClient = i; break; + } } + + if (indexClient == -1) { + printf("Client non trouvé. Impossible d'utiliser l'application.\n"); + return; + } + + if (suspendus[indexClient] == 1) { + printf("Le client est suspendu et ne peut pas utiliser l'application.\n"); + return; + } + + do{ + menu_client(&choix, jour); + + switch (choix) { + case 1: + affiche_recap_panier(panier, taillePanier, references, poids, volume, prixUnitaire, quantites); + break; + case 2: + ajouter_article_au_panier(numeroClient, references, poids, volume, prixUnitaire, numeros, cagnottes, + suspendus, nombreArticles, nombreClients, volumeCoffre, chargeMaximale, panier, quantites, &taillePanier); + break; + case 3: + supprimer_article_du_panier(panier, &taillePanier); + break; + case 9: + printf("Au revoir !\n"); + return; + default: + printf("Veuillez entrer un choix valide !\n"); + break; + } + }while(choix != 9); } \ No newline at end of file diff --git a/src/app/interface/interface_resp.c b/src/app/interface/interface_resp.c index 4bea215..f316d78 100644 --- a/src/app/interface/interface_resp.c +++ b/src/app/interface/interface_resp.c @@ -1,4 +1,3 @@ - #include #include #include "interface_resp.h" @@ -50,7 +49,7 @@ void affichArticles( int tRef[], float tPoids[], float tVol[], float tPrix[], in for ( int i = 0; i < tLogique; ++i) { printf("\t %d %.2f %.2f %.2f\n\n", tRef[i], tPoids[i], tVol[i], tPrix[i]); - } + } } void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) @@ -117,7 +116,7 @@ void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) } printf("Entrez le poids du nouveaux produit\n"); scanf("%f", poids); - if ( *poids < 0 ) + if ( *poids < 0 ) { while ( *poids < 0 ) { @@ -127,7 +126,7 @@ void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) } printf("Entrez le volume du nouveaux produit\n"); scanf("%f", volume); - if ( *volume < 0 ) + if ( *volume < 0 ) { while ( *volume < 0 ) { @@ -137,7 +136,7 @@ void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) } printf("Entrez le prix du nouveaux produit\n"); scanf("%f", prix); - if ( *prix < 0 ) + if ( *prix < 0 ) { while ( *prix < 0 ) { @@ -169,7 +168,7 @@ void affichModifierArticle(int *ref, float *poids, float *volume, float *prix) printf("\tVeuillez entrer une référence correcte !\n"); while (getchar() != '\n'); } - + printf("\t Quel est le nouveau poids à entrer ?\n"); while(scanf("%f", poids) != 1 || *poids <= 0) { @@ -198,7 +197,7 @@ void menu_resp(int *choix, int jour) { //affiche_resp(jour); printf("Vous choisissez: "); while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 5) { - while (getchar() != '\n'); + while (getchar() != '\n'); affiche_resp(jour); printf("Veuillez entrer un choix valide : "); } @@ -210,14 +209,14 @@ void menu_resp(int *choix) { //affiche_resp(jour); printf("Vous choisissez: "); while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 5) { - while (getchar() != '\n'); + while (getchar() != '\n'); affiche_resp(); printf("Veuillez entrer un choix valide : "); } } void global_resp(){ - int choix, a; + int choix, a; int tRef[MAX_ARTICLES]; float tPoids[MAX_ARTICLES]; float tVol[MAX_ARTICLES]; diff --git a/src/app/interface/interface_resp.h b/src/app/interface/interface_resp.h index 598244b..707d010 100644 --- a/src/app/interface/interface_resp.h +++ b/src/app/interface/interface_resp.h @@ -7,4 +7,4 @@ void affichSupprimerArticle(int *ref); void affichModifierArticle(int *ref, float *poids, float *volume, float *prix); void menu_resp(int *choix, int jour); void global_resp(); -void affiche_resp(void); +void affiche_resp(void); \ No newline at end of file diff --git a/src/main.c b/src/main.c index aa376f5..3ec03e6 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,7 @@ #include "app/interface/interface_client.h" #include "app/interface/interface_resp.h" #include "app/core_logic/client.h" +#include "app/core_logic/responsable.h" int choixInterface(void) { int choix; @@ -26,5 +27,6 @@ int main(){ case 1: global_resp(); case 2: global_client(); } + return 0; }