@ -3,7 +3,6 @@
* @ brief Fonctions li é es à la gestion des clients et de leur panier .
* @ brief Fonctions li é es à la gestion des clients et de leur panier .
*/
*/
# include <stdio.h>
# include "client.h"
# include "client.h"
# define MAX_ARTICLES 100
# define MAX_ARTICLES 100
@ -43,6 +42,69 @@ int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhy
return i ;
return i ;
}
}
/**
* @ brief Sauvegarde les donn é es clients dans un fichier .
*
* Cette fonction permet de sauvegarder les donn é es clients , y compris les num é ros de clients , les cagnottes ,
* et les é tats de suspension , dans un fichier texte .
*
* @ param numeros - Tableau des num é ros de clients .
* @ param cagnottes - Tableau des cagnottes des clients .
* @ param suspendus - Tableau des é tats de suspension des clients .
* @ param nombreClients - Nombre de clients .
*/
void sauvegarde_clients ( int numeros [ ] , float cagnottes [ ] , int suspendus [ ] , int nombreClients ) {
FILE * fe ;
fe = fopen ( " donnee/client.txt " , " w " ) ;
if ( fe = = NULL ) {
perror ( " fopen " ) ;
return ;
}
for ( int i = 0 ; i < nombreClients ; i + + ) {
fprintf ( fe , " %d %.2f %d \n " , numeros [ i ] , cagnottes [ i ] , suspendus [ i ] ) ;
}
fclose ( fe ) ;
}
/**
* @ brief Recherche l ' index de l ' article dans le tableau des r é f é rences .
*
* Cette fonction recherche l ' index de l ' article avec la r é f é rence donn é e dans le tableau des r é f é rences .
*
* @ param reference - R é f é rence de l ' article à rechercher .
* @ param references - Tableau des r é f é rences des articles .
* @ param nombreArticles - Nombre d ' articles disponibles .
* @ return L ' index de l ' article s ' il est trouv é , sinon - 1.
*/
int trouver_index_article ( int reference , int references [ ] , int nombreArticles ) {
for ( int i = 0 ; i < nombreArticles ; i + + ) {
if ( references [ i ] = = reference ) {
return i ;
}
}
return - 1 ;
}
/**
* @ brief Trouve l ' index d ' un client dans le tableau des num é ros de clients .
*
* Cette fonction recherche le num é ro du client dans le tableau des num é ros de clients
* et retourne l ' index du client s ' il est trouv é .
*
* @ param numeroClient - Num é ro du client à rechercher .
* @ param numeros - Tableau des num é ros de clients .
* @ param nombreClients - Nombre de clients dans le tableau .
* @ return L ' index du client s ' il est trouv é , - 1 sinon .
*/
int trouver_index_client ( int numeroClient , int numeros [ ] , int nombreClients ) {
for ( int i = 0 ; i < nombreClients ; i + + ) {
if ( numeros [ i ] = = numeroClient ) {
return i ; // Retourne l'index du client si trouvé
}
}
return - 1 ; // Retourne -1 si le client n'est pas trouvé
}
/**
/**
* @ brief Ajoute un article au panier du client .
* @ brief Ajoute un article au panier du client .
@ -64,12 +126,16 @@ int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhy
* @ param panier - Tableau des r é f é rences des articles dans le panier .
* @ param panier - Tableau des r é f é rences des articles dans le panier .
* @ param quantites - Tableau des quantit é s de chaque article dans le panier .
* @ param quantites - Tableau des quantit é s de chaque article dans le panier .
* @ param taillePanier - Taille du panier .
* @ param taillePanier - Taille du panier .
* @ param budget - Budget du client .
*/
*/
void ajouter_article_au_panier ( int numeroClient , int references [ ] , float poids [ ] , float volume [ ] , float prixUnitaire [ ] ,
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 ,
int numeros [ ] , float cagnottes [ ] , int suspendues [ ] , int nombreArticles , int nombreClients ,
float volumeCoffre , float chargeMaximale , int panier [ ] , int quantites [ ] , int * taillePanier ) {
float volumeCoffre , float chargeMaximale , int panier [ ] , int quantites [ ] , int * taillePanier , float budget ) {
int reference , quantite ;
int reference , quantite , articleIndex ;
float poidsTotal , montantTotal , volumeTotal , depassementCharge = 0 , depassementVolume , depassementBudget = 0 ;
while ( 1 ) {
printf ( " Entrez la référence de l'article : " ) ;
printf ( " Entrez la référence de l'article : " ) ;
while ( scanf ( " %d " , & reference ) ! = 1 ) {
while ( scanf ( " %d " , & reference ) ! = 1 ) {
while ( getchar ( ) ! = ' \n ' ) ;
while ( getchar ( ) ! = ' \n ' ) ;
@ -77,50 +143,54 @@ void ajouter_article_au_panier(int numeroClient, int references[], float poids[]
}
}
while ( getchar ( ) ! = ' \n ' ) ;
while ( getchar ( ) ! = ' \n ' ) ;
articleIndex = trouver_index_article ( reference , references , nombreArticles ) ;
if ( articleIndex = = - 1 ) {
printf ( " ERREUR : Article non trouvé. Veuillez entrer une référence valide. \n " ) ;
} else {
break ;
}
}
printf ( " Entrez la quantité : " ) ;
printf ( " Entrez la quantité : " ) ;
while ( scanf ( " %d " , & quantite ) ! = 1 ) {
while ( scanf ( " %d " , & quantite ) ! = 1 ) {
while ( getchar ( ) ! = ' \n ' ) ;
while ( getchar ( ) ! = ' \n ' ) ;
printf ( " ERREUR : Veurillez entrer une quantité valide (nombre) : " ) ;
printf ( " ERREUR : Veu illez entrer une quantité valide (nombre) : " ) ;
}
}
while ( getchar ( ) ! = ' \n ' ) ;
while ( getchar ( ) ! = ' \n ' ) ;
int articleIndex = - 1 ;
poidsTotal = poids [ articleIndex ] * quantite ;
for ( int i = 0 ; i < nombreArticles ; i + + ) {
volumeTotal = volume [ articleIndex ] * quantite ;
if ( references [ i ] = = reference ) {
montantTotal = prixUnitaire [ articleIndex ] * quantite ;
articleIndex = i ;
break ;
if ( poidsTotal > chargeMaximale ) {
depassementCharge = poidsTotal - chargeMaximale ;
}
}
if ( volumeTotal > volumeCoffre ) {
depassementVolume = volumeTotal - volumeCoffre ;
}
}
if ( articleIndex = = - 1 ) {
if ( budget > 0 & & montantTotal > budget ) {
printf ( " Article non trouvé. Veuillez entrer une référence valide. \n " ) ;
depassementBudget = montantTotal - budget ;
return ;
}
}
for ( int i = 0 ; i < * taillePanier ; i + + ) {
if ( depassementCharge | | depassementVolume | | depassementBudget ) {
if ( panier [ i ] = = reference ) {
printf ( " Attention : " ) ;
printf ( " Cet article est déjà dans le panier. \n " ) ;
if ( depassementCharge ) {
return ;
printf ( " dépassement de la charge autorisée de %.2f kg \n " , depassementCharge ) ;
}
}
if ( depassementVolume ) {
printf ( " dépassement du volume autorisé de %.2f litres \n " , depassementVolume ) ;
}
}
if ( depassementBudget ) {
float poidsTotal = poids [ articleIndex ] * quantite ;
printf ( " dépassement du budget autorisé de %.2f euros \n " , depassementBudget ) ;
float volumeTotal = volume [ articleIndex ] * quantite ;
}
printf ( " \n " ) ;
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 {
} else {
float montantTotal = prixUnitaire [ articleIndex ] * quantite ;
float montantTotal = prixUnitaire [ articleIndex ] * quantite ;
int clientIndex = - 1 ;
int clientIndex = trouver_index_client ( numeroClient , numeros , nombreClients ) ;
for ( int i = 0 ; i < nombreClients ; i + + ) {
if ( numeros [ i ] = = numeroClient ) {
clientIndex = i ;
break ;
}
}
if ( clientIndex ! = - 1 ) {
if ( clientIndex ! = - 1 ) {
cagnottes [ clientIndex ] + = 0.1 * montantTotal ;
cagnottes [ clientIndex ] + = 0.1 * montantTotal ;
@ -171,13 +241,7 @@ void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanie
}
}
while ( getchar ( ) ! = ' \n ' ) ;
while ( getchar ( ) ! = ' \n ' ) ;
int articleIndex = - 1 ;
int articleIndex = trouver_index_article ( reference , panier , * taillePanier ) ;
for ( int i = 0 ; i < * taillePanier ; i + + ) {
if ( panier [ i ] = = reference ) {
articleIndex = i ;
break ;
}
}
if ( articleIndex = = - 1 ) {
if ( articleIndex = = - 1 ) {
printf ( " Article non trouvé dans le panier. Veuillez entrer une référence valide. \n " ) ;
printf ( " Article non trouvé dans le panier. Veuillez entrer une référence valide. \n " ) ;
@ -194,11 +258,11 @@ void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanie
printf ( " Article supprimé du panier avec succès. \n " ) ;
printf ( " Article supprimé du panier avec succès. \n " ) ;
}
}
/**
/**
* @ brief Affiche un r é capitulatif du contenu du panier .
* @ brief Affiche un r é capitulatif du contenu du panier .
*
*
* Cette fonction permet d ' afficher un r é capitulatif du contenu du panier .
* Cette fonction permet d ' afficher un r é capitulatif d é taill é du contenu du panier du client , y compris les r é f é rences des articles ,
* les quantit é s , les poids , les volumes , les prix unitaires , les totaux de poids , de volume , de prix , et la cagnotte du client .
*
*
* @ param panier - Tableau des r é f é rences des articles dans le panier .
* @ param panier - Tableau des r é f é rences des articles dans le panier .
* @ param taillePanier - Taille du panier .
* @ param taillePanier - Taille du panier .
@ -207,25 +271,30 @@ void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanie
* @ param volume - Tableau des volumes des articles .
* @ param volume - Tableau des volumes des articles .
* @ param prixUnitaire - Tableau des prix unitaires des articles .
* @ param prixUnitaire - Tableau des prix unitaires des articles .
* @ param quantites - Tableau des quantit é s de chaque article dans le panier .
* @ param quantites - Tableau des quantit é s de chaque article dans le panier .
* @ param cagnottes - Tableau des cagnottes des clients .
* @ param numeroClient - Num é ro du client .
* @ param numeros - Tableau des num é ros de clients .
* @ param nombreClients - Nombre de clients .
* @ param volumeCoffre - Volume total du coffre .
* @ param chargeMaximale - Charge maximale du coffre .
*/
*/
void affiche_recap_panier ( int panier [ ] , int taillePanier , int references [ ] , float poids [ ] , float volume [ ] ,
void affiche_recap_panier ( int panier [ ] , int taillePanier , int references [ ] , float poids [ ] , float volume [ ] ,
float prixUnitaire [ ] , int quantites [ ] ) {
float prixUnitaire [ ] , int quantites [ ] , float cagnottes [ ] , int numeroClient ,
int numeros [ ] , int nombreClients , float volumeCoffre , float chargeMaximale ) {
printf ( " Contenu du panier : " ) ;
for ( int i = 0 ; i < taillePanier ; i + + ) {
printf ( " %d " , panier [ i ] ) ;
}
printf ( " \n " ) ;
printf ( " Récap : \n " ) ;
printf ( " Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot \n " ) ;
printf ( " Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot \n " ) ;
float poidsTotal = 0 , volumeTotal = 0 , montantTotal = 0 ;
float poidsTotal = 0 , volumeTotal = 0 , montantTotal = 0 ;
for ( int i = 0 ; i < taillePanier ; i + + ) {
for ( int i = 0 ; i < taillePanier ; i + + ) {
int reference = panier [ i ] ;
int reference = panier [ i ] ;
int articleIndex = - 1 ;
int articleIndex = trouver_index_article ( reference , references , MAX_ARTICLES ) ;
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 poidsArticle = poids [ articleIndex ] ;
float volumeArticle = volume [ articleIndex ] ;
float volumeArticle = volume [ articleIndex ] ;
@ -241,9 +310,14 @@ void affiche_recap_panier(int panier[], int taillePanier, int references[], floa
montantTotal + = prixArticle * quantite ;
montantTotal + = prixArticle * quantite ;
}
}
int clientIndex = trouver_index_client ( numeroClient , numeros , nombreClients ) ;
printf ( " Prix total à payer: %.2f euros \n " , montantTotal ) ;
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 utilise : %.2f litres \n " , volumeTotal ) ;
printf ( " Volume restant : %.2f litres \n " , volumeCoffre - volumeTotal ) ;
printf ( " Charge Actuelle: %.2f kg \n " , poidsTotal ) ;
printf ( " Charge Actuelle: %.2f kg \n " , poidsTotal ) ;
printf ( " Charge restante: %.2f kg \n " , chargeMaximale - poidsTotal ) ;
}
}
/**
/**
@ -336,15 +410,4 @@ void deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagn
}
}
cagnottes [ clientIndex ] - = montant ;
cagnottes [ clientIndex ] - = montant ;
FILE * fe ;
fe = fopen ( " donnee/client.txt " , " w " ) ;
if ( fe = = NULL ) {
perror ( " fopen " ) ;
return ;
}
for ( int i = 0 ; i < nombreClients ; i + + ) {
fprintf ( fe , " %d %.2f %d \n " , numeros [ i ] , cagnottes [ i ] , suspendus [ i ] ) ;
}
fclose ( fe ) ;
}
}