Julien ABADIE 1 year ago
commit cb18f174a2

@ -1,7 +1,45 @@
# SAE 1.01 - Implémentation d'un besoin client
=====================================
SAÉ 1.01 - Implémentation d'un besoin client
=====================================
__1A - Groupe 7/8:__
- Rémi LAVERGNE
- Julien ABADIE
- Louis GERMAIN
Par:
Rémi LAVERGNE - Julien ABADIE - Louis GERMAIN
Groupe 7/8 - 1A 2023-2024
**Répartition du Travail**
-----------------------
Rémi LAVERGNE : /
Louis GERMAIN : /
Julien ABADIE : /
**Composition des fichiers sources**
--------------------------------
- *main.c* >> Juste la fonction main, se lançant lors de l'exécution du programme.
- *main.h* >> Tous les prototypes des fonctions réalisées, ainsi que les inclusions de module et déclaration de constantes.
- *articles.txt* >> Fichier texte composé de x colonnes,
- *clients.txt* >> Fichier texte composé de x colonnes dans l'ordre qui suit :
identifiant | mot de passe | cagnotte | suspendu (0=actif ; 1=suspendu) | rôle (0=client ; 1=administrateur)
**Fonctionnement**
------------
Jeu de données
==============
articles.txt
```
/
```
clients.txt
```
/
```

@ -1,2 +1,2 @@
1313 12.1 0 0
2010 12.1 0 0
1313 11 12.1 0 0
2010 22 12.1 0 0

@ -0,0 +1,33 @@
/**
* @file decalage.c
* @brief Fonctions de décalage d'un tableau
*
* Contient les fonctions de décalage de tableau vers la droite (pour l'insertion)
* et vers la gauche (pour la suppression).
*/
#include "main.h"
void decalageADroiteInt(int tab[], int index, int tlog)
{
for (int i = tlog; i > index; i--)
tab[i] = tab[i-1];
}
void decalageAGaucheInt(int tab[], int index, int tlog)
{
for (int i = index; i < tlog; i++)
tab[i] = tab[i+1];
}
void decalageADroiteFloat(float tab[], int index, int tlog)
{
for (int i = tlog; i > index; i--)
tab[i] = tab[i-1];
}
void decalageAGaucheFloat(float tab[], int index, int tlog)
{
for (int i = index; i < tlog; i++)
tab[i] = tab[i+1];
}

@ -1,5 +1,19 @@
/**
* @file display.c
* @brief Fonctions d'affichage des articles et des clients
*/
#include "main.h"
/**
* @brief Affichage d'un seul article
* @param tabReference: tableau des références des articles
* @param weight: tableau des poids des articles
* @param volume: tableau des volumes des articles
* @param unitPrice: tableau des prix à l'unité des articles
* @param tlog: taille logique des tableaux des articles
* @return void
*/
void displayItem(int tabReference[], float weight[], float volume[], float unitPrice[], int tlog)
{
int reference, index, found;
@ -20,21 +34,17 @@ void displayItem(int tabReference[], float weight[], float volume[], float unitP
printf("%d\t%f\t%f\t%f", tabReference[index], weight[index], volume[index], unitPrice[index]);
}
/**
* @brief Affichage de la liste des articles
* @param tabReference: tableau des références des articles
* @param weight: tableau des poids des articles
* @param volume: tableau des volumes des articles
* @param unitPrice: tableau des prix à l'unité des articles
* @param tlog: taille logique des tableaux des articles
* @return void
*/
void displayItemList(int reference[], float weight[], float volume[], float unitPrice[], int tlog)
{
/*
Affichage de la liste des articles, un article par ligne, sous forme:
référence poids volume prix
Avec la référence unique du produit, le poids du produit, le volume du produit et son prix à l'unité.
+param reference: tableau des références des articles
+param weight: tableau des poids des articles
+param volume: tableau des volumes des articles
+param unitPrice: tableau des prix à l'unité des articles
+param tlog: taille logique des tableaux des articles
+var i: compteur servant à parcourir les données des tableaux jusqu'à leur taille logique
*/
int i;
printf("reference\tpoids\tvolume\tprix à l'unité");
for (i=0; i<tlog; i++)
@ -43,21 +53,17 @@ void displayItemList(int reference[], float weight[], float volume[], float unit
}
}
/**
* @brief Affichage d'un seul client
* @param clientID: tableau des identifiants des clients
* @param cagnotte: tableau des cagnottes des clients
* @param suspended: tableau de l'état du compte des clients
* @param isAdmin: tableau de l'état d'administrateur des clients
* @param tlog: taille logique des tableaux des clients
* @return void
*/
void displayClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tlog)
{
/*
Affichage des données d'un client choisi par son identifiant sous forme:
identifiant cagnotte suspended
avec l'identifiant du client cherché, le montant de sa cagnotte et l'état de son compte
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
+param tlog: taille logique des tableaux des clients
+var id: identifiant du client recherché
+var index: index de l'article recherché dans le tableau
*/
int id, index, found;
printf("Entrez le numéro du client cherché: ");
scanf("%d", &id);
@ -76,20 +82,17 @@ void displayClient(int clientID[], float cagnotte[], int suspended[], int isAdmi
printf("%d\t%f\t%d\t%d", clientID[index], cagnotte[index], suspended[index], isAdmin[index]);
}
/**
* @brief Affichage de la liste des clients
* @param clientID: tableau des identifiants des clients
* @param cagnotte: tableau des cagnottes des clients
* @param suspended: tableau de l'état du compte des clients
* @param isAdmin: tableau de l'état d'administrateur des clients
* @param tlog: taille logique des tableaux des clients
* @return void
*/
void displayClientList(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tlog)
{
/*
Affichage de la liste des clients, un client par ligne, sous forme:
identifiant cagnotte suspended
avec l'identifiant du client cherché, le montant de sa cagnotte et l'état de son compte
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
+param tlog: taille logique des tableaux des clients
+var i: compteur servant à parcourir les données des tableaux jusqu'à leur taille logique
*/
int i;
printf("num Client\tcagnotte\tsuspended\tisAdmin");
for (i=0; i<tlog; i++)
@ -105,57 +108,41 @@ void displayClientList(int clientID[], float cagnotte[], int suspended[], int is
* @param weight: tableau des poids des articles
* @param volume: tableau du volume des articles
* @param unitPrice: tableau du prix unitaire des articles
* @param cagnotte: pointeur indiquant la valeur de la cagnotte
* @param cagnotte: valeur de la cagnotte
* @param tlog: taille logique du tableau `tab_reference`
* @param tlog_basket: taille logique du panier
* @return Rien
* @return void
*/
void display_basket(int basket_tab_ref[], int basket_qte[], float weight[], float volume[], float unitPrice[], float *cagnotte, int tlog, int tlog_basket)
void display_basket(int basket_tab_ref[], int tabItemRef[], int basket_qte[], float tabWeight[], float tabVolume[], float cagnotte, float tabUnitPrice[], int tlogItem, int tlog_basket)
{
float total_weight_line[tlog_basket], total_volume_line[tlog_basket], total_price_line[tlog_basket], cagnotte_line[tlog_basket], total_weight, total_volume, total_price;
int i;
float total_weight_line[tlog_basket], total_volume_line[tlog_basket], total_price_line[tlog_basket];
float totalWeight = 0, totalVol = 0, total_price = 0, weight[tmaxArticles], volume[tmaxArticles], unitPrice[tmaxArticles];
int i, found, index;
printf("Récapitulatif de votre panier:\n");
printf("Référence\tQuantité\tPoids\tVolume\tPrix unitaire\tPoids Total\tVol Total\tPrix Total\n");
for (i=0; i<tlog_basket; i++)
{
index = searchTab(tabItemRef, basket_tab_ref[i], tlogItem, &found);
if (found == 1)
{
weight[i] = tabWeight[index];
volume[i] = tabVolume[index];
unitPrice[i] = tabUnitPrice[index];
}
total_weight_line[i] = basket_qte[i]*weight[i];
total_volume_line[i] = basket_qte[i]*volume[i];
total_price_line[i] = basket_qte[i]*unitPrice[i];
cagnotte_line[i] = total_price_line[i] * 0.10;
totalWeight += total_weight_line[i];
totalVol += total_volume_line [i];
total_price += total_price_line[i];
printf("%d\t%d\t%f\t%f\t%f\t%f\t%f\t%f\n", basket_tab_ref[i], basket_qte[i], weight[i], volume[i], unitPrice[i], total_weight_line[i], total_volume_line[i], total_price_line[i]);
}
for (i=0; i<tlog_basket; i++)
{
total_price = total_price + total_price_line[i];
}
printf("Récapitulatif de votre panier:\n");
printf("Référence\tQuantité\tPoids\tVolume\tPrixU\tPoidsTot\tVolTot\tPrixTot\tCagnotte\n");
for (i=0; i<tlog_basket; i++)
printf("%d\t%d\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", basket_tab_ref[i], basket_qte[i], weight[i], volume[i], unitPrice[i], total_weight_line[i], total_volume_line[i], total_price_line[i],cagnotte_line[i]);
printf("\t\t\t\t\tPrix total à payer: %f\t euros\n", total_price);
printf("\t\t\t\t\tCagnotte totale: %f\t euros\n", *cagnotte);
//constraintExceeded( weightConstraint, volumeConstraint, *priceConstraint, *cagnotte, tabWeight[], tabVolume[], tabPrice[], tabItemRef[], tabBasketRef[], tabBasketQuantity[], tlogItem, int tlogBasket)
// if (volume_constraint<total_volume)
// {
// printf("Volume actuel:%.2f\n", total_volume);
// printf("Volume restant: Attention, dépasssement du volume autorisé de %2.f, veuillez suprimer des articles",total_volume - volume_constraint);
// }
// else
// {
// printf("Volume actuel:%.2f\n", total_volume);
// printf("Volume restant:%2.f\n", volume_constraint - total_volume);
// }
// if (weight_constraint<total_weight)
// {
// printf("Charge actuelle:\t%2.f",total_weight);
// printf("Attention, dépasssement de la charge autorisée de %2.f, veuillez suprimer des articles", total_weight - weight_constraint);
// }
// else
// {
// printf("Charge actuelle:\t%2.f",total_weight);
// printf("Charge restante:\t%2.f", volume_constraint - total_volume);
// }
printf("Prix total: %f€\n", total_price);
printf("Poids total: %fkg\n", totalWeight);
printf("Volume total: %fm³\n", totalVol);
printf("Cagnotte:%.2f€", cagnotte);
}

@ -25,20 +25,26 @@ void errorHandling(int error)
printf("[ERREUR] - La taille physique du tableau est dépassée.\n");
break;
case -3:
print("ERREUR] - Problème lors de la lecture d'un fichier.\n");
printf("[ERREUR] - L'espace disponible du tableau est insuffisant.\n");
break;
case -4:
printf("[ERREUR] - Problème lors de l'écriture d'un fichier.\n");
break;
printf("ERREUR] - Problème lors de la lecture d'un fichier.\n");
exit(1);
case -5:
printf("[ERREUR] - Problème lors de l'écriture d'un fichier.\n");
exit(2);
case -6:
printf("[ERREUR] - Le champ renseigné doit être positif.\n");
break;
case -6:
case -7:
printf("[ERREUR] - L'identifiant n'existe pas.\n");
break;
case -7:
case -8:
printf("[ERREUR] - La référence existe déjà.\n");
break;
case -9:
printf("[ERREUR] - Le mot de passe est incorrect.\n");
break;
default:
printf("[ERREUR] - Une erreur s'est produite.\n");
break;

Binary file not shown.

@ -1,3 +1,8 @@
/**
* @file login.c
* @brief Fonctions de connexion et d'inscription
*/
#include "main.h"
/**
@ -7,9 +12,9 @@
* @param tlog: Taille logique des Tableaux
* @return Est Admin ? (1 > Oui, 0 > Non, -1 > Quitter)
*/
int login(int clientID[], int isAdmin[], int tlog)
int login(int clientID[], int clientPassword[], int isAdmin[], int tlog, int *index)
{
int id, index, found, tentative=3;
int id, password, found, tentative=3;
printf("Entrez votre identifiant: ");
scanf("%d%*c", &id);
while (id < 0)
@ -17,16 +22,14 @@ int login(int clientID[], int isAdmin[], int tlog)
printf("Erreur, l'identifiant doit être positif, entrez votre identifiant: ");
scanf("%d%*c", &id);
}
index = searchTab(clientID, id, tlog, &found);
printf("%d",found);
*index = searchTab(clientID, id, tlog, &found);
while(found == 0)
{
printf("Erreur, l'identifiant n'existe pas, entrez votre identifiant: ");
scanf("%d%*c", &id);
if (id == 0)
{
return -1;
}
// Nombre de tentatives restantes
tentative--;
if (tentative == 0)
@ -34,9 +37,22 @@ int login(int clientID[], int isAdmin[], int tlog)
printf("Nombre de tentatives dépassé, retour au menu principal.\n");
return -1;
}
index = searchTab(clientID, id, tlog, &found);
printf("Il vous reste %d tentatives.\n", tentative);
*index = searchTab(clientID, id, tlog, &found);
}
printf("Entrez votre mot de passe: ");
scanf("%d%*c", &password);
while (password < 0)
{
printf("Erreur, le mot de passe doit être positif, entrez votre mot de passe: ");
scanf("%d%*c", &password);
}
if (isAdmin[index] == 1)
if (password == decrypt(clientPassword[*index]))
{
if (isAdmin[*index] == 1)
{
return 1;
}
@ -45,21 +61,37 @@ int login(int clientID[], int isAdmin[], int tlog)
return 0;
}
}
else
{
errorHandling(-9);
return -9;
}
}
int signup(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
/**
* @brief Fonction d'inscription
* @param clientID: Tableau des identifiants client
* @param clientPassword: Tableau des mots de passe client
* @param cagnotte: Tableau des cagnottes client
* @param suspended: Tableau des états de compte client
* @param isAdmin: Tableau des statuts Administrateur des clients
* @param tlog: Taille logique des Tableaux
* @return 0 > Tout s'est bien passé, -1 > L'utilisateur a quitté, -2 > La taille physique du tableau est dépassée
*/
int signup(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
{
int id, index, found;
printf("Entrez votre identifiant: ");
int id, password, index, found;
printf("Entrez votre identifiant ou 0 si vous souhaitez quitter: ");
scanf("%d%*c", &id);
while (id < 0)
{
printf("Erreur, l'identifiant doit être positif, entrez votre identifiant: ");
printf("Erreur, l'identifiant doit être positif, entrez votre identifiant ou 0 si vous souhaitez quitter: ");
scanf("%d%*c", &id);
}
index = searchTab(clientID, id, *tlog, &found);
while(found == 1)
{
printf("Erreur, l'identifiant existe déjà, entrez votre identifiant: ");
printf("Erreur, l'identifiant existe déjà, entrez votre identifiant ou 0 si vous souhaitez quitter: ");
scanf("%d%*c", &id);
if (id == 0)
{
@ -67,10 +99,16 @@ int signup(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int
}
index = searchTab(clientID, id, *tlog, &found);
}
clientID[*tlog] = id;
cagnotte[*tlog] = 0;
suspended[*tlog] = 0;
isAdmin[*tlog] = 0;
*tlog ++;
printf("Entrez votre mot de passe: ");
scanf("%d%*c", &password);
while (password < 0)
{
errorHandling(-6);
printf("Erreur, le mot de passe doit être positif, entrez votre mot de passe: ");
scanf("%d%*c", &password);
}
inputClient(id, password, index, clientID, clientPassword, cagnotte, suspended, isAdmin, tlog);
return 0;
}

@ -1,21 +1,26 @@
/**
* @file main.c
* @brief Fonctions principales du programme
*
* Contient les fonctions principales du programme, notamment le menu principal.
* La fonction main() se trouve dans ce fichier et est executée au lancement.
* La fonction global() est la fonction principale du programme.
*/
#include "main.h"
/**
* @brief Affichage du menu principal
* @return Choix de l'utilisateur
*/
int displayMenu(void)
{
/*
Choix de l'action à réaliser
+return: choix de l'action
+var choice: choix de l'action
*/
int choice;
printf("\nTapez sur Entrée pour continuer...");
//TODO Clear le buffer pour éviter les problèmes
if (getchar() == '\n') // getchar() pour récupérer le caractère entré par l'utilisateur
{
printf("\e[1;1H\e[2J"); // Clear le terminal
system("clear"); // Clear le terminal
}
printf("\n=================================\n");
@ -27,36 +32,29 @@ int displayMenu(void)
printf("4. \u274C Quitter\n");
printf("9. \u26A0 Débug\n");
printf("=================================\n");
printf("\u00A9 2023 - Pascal Inc.\n\n");
printf("Votre choix : ");
scanf("%d%*c", &choice);
printf("\e[1;1H\e[2J");
system("clear");
return choice;
}
/**
* @brief Fonction globale du programme
* Crée les variables et les tableaux nécessaires au programme,
* charge les données depuis les fichiers, affiche le menu principal
* et appelle les fonctions nécessaires en fonction du choix de l'utilisateur.
*/
void global(void)
{
/*
Fonction global: Exécute les autres fonctions selon les choix de l'utilisateur
+var tLogArticle: taille logique des tableaux contenant les données des articles
+var tLogClient: taille logique des tableaux contenant les données des clients
+var choice: choix de l'action à réaliser
+var reference: tableau des références des articles
+var clientID: tableau des identifiants des clients
+var suspended: tableau de l'état du compte des clients
+var weight: tableau du poids des articles
+var volume: tableau du volume des articles
+var unitPrice: tableau du prix unitaire des actions
+var cagnotte: tableau des cagnottes des clients
*/
// Déclaration des variables
int tLogArticle, tLogClient, choice, status, currentUser;
int reference[tmaxArticles], clientID[tmaxClients], suspended[tmaxClients], isAdmin[tmaxClients];
int tLogItem, tLogClient, tlogBasket, choice, status, currentUser, index;
int reference[tmaxArticles], clientID[tmaxClients], clientPassword[tmaxClients], suspended[tmaxClients], isAdmin[tmaxClients], basket_tab_ref[tmaxArticles], basket_tab_qte[tmaxArticles];
float weight[tmaxArticles], volume[tmaxArticles], unitPrice[tmaxArticles], cagnotte[tmaxClients];
// Chargement de toute les données
chargeDonnees(&tLogArticle, &tLogClient, reference, weight, volume, unitPrice, clientID, cagnotte, suspended, isAdmin);
chargeDonnees(&tLogItem, &tLogClient, reference, weight, volume, unitPrice, clientID, clientPassword, cagnotte, suspended, isAdmin);
// Affichage du menu
choice = displayMenu();
@ -65,16 +63,14 @@ void global(void)
switch(choice)
{
case 1:
status = login(clientID, isAdmin, tLogClient);
status = login(clientID, clientPassword, isAdmin, tLogClient, &index);
if(status == 1)
{
//TODO > Menu Admin
//adminMenu();
adminMenu(clientID, clientPassword, cagnotte, suspended, isAdmin, reference, weight, volume, unitPrice, &tLogItem, &tLogClient);
}
else if(status == 0)
{
//TODO > Menu Client
//clientMenu();
clientMenu(&weight[index], &volume[index], &unitPrice[index], reference, unitPrice, &cagnotte[index], basket_tab_ref, basket_tab_qte, weight, volume, tLogItem, &tlogBasket);
}
else
{
@ -83,16 +79,16 @@ void global(void)
}
break;
case 2:
status = signup(clientID, cagnotte, suspended, isAdmin, &tLogClient);
status = signup(clientID, clientPassword, cagnotte, suspended, isAdmin, &tLogClient);
if(status == 0)
{
printf("Inscription réussie.\nRetour au menu principal...\n");
sleep(3);
printf("Inscription réussie, vous pouvez vous connecter.\nRetour au menu principal...\n");
sleep(2);
}
else
{
printf("Inscription échouée.\nRetour au menu principal...\n");
sleep(3);
sleep(2);
}
break;
case 3:
@ -100,9 +96,10 @@ void global(void)
//opposition();
break;
case 4:
sauvegardeDonnees(tLogItem, tLogClient, reference, weight, volume, unitPrice, clientID, clientPassword, cagnotte, isAdmin, suspended);
return;
case 9:
debugMenu(reference, weight, volume, unitPrice, clientID, cagnotte, suspended, isAdmin, tLogArticle, tLogClient);
debugMenu(reference, weight, volume, unitPrice, clientID, cagnotte, suspended, isAdmin, tLogItem, tLogClient);
break;
default:
printf("Erreur, veuillez entrer un choix valide.\n");
@ -113,6 +110,10 @@ void global(void)
}
}
/**
* @brief Fonction principale du programme
* @return 0 si tout s'est bien passé et que le programme s'est terminé correctement
*/
int main(void)
{
global();

@ -19,16 +19,22 @@ void debugHandling(int code);
void debugMenu(int tabReference[], float tabWeight[], float tabVolume[], float unitPrice[], int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tlogArticle, int tlogClient);
//! TRAITEMENT DES FICHIERS
void chargeDonnees(int *tLogArticle, int *tLogClient,int reference[], float weight[], float volume[], float unitPrice[], int clientID[], float cagnotte[], int suspended[], int isAdmin[]);
void chargeDonnees(int *tLogArticle, int *tLogClient,int reference[], float weight[], float volume[], float unitPrice[], int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[]);
int chargeArticles(int reference[], float weight[], float volume[], float unitPrice[]);
int chargeClients(int clientID[], float cagnotte[], int suspended[], int isAdmin[]);
int chargeClients(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[]);
void sauvegardeDonnees(int tLogArticle, int tLogClient, int reference[], float weight[], float volume[], float unitPrice[], int clientID[], float cagnotte[], int isAdmin[], int suspended[]);
void sauvegardeDonnees(int tLogArticle, int tLogClient, int reference[], float weight[], float volume[], float unitPrice[], int clientID[], int clientPassword[], float cagnotte[], int isAdmin[], int suspended[]);
void sauvegardeArticles(int reference[], float weight[], float volume[], float unitPrice[], int tLogArticle);
void sauvegardeClients(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tLogClient);
void sauvegardeClients(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int tLogClient);
//! DECALAGES TABLEAUX
void decalageADroiteInt(int tab[], int index, int tlog);
void decalageAGaucheInt(int tab[], int index, int tlog);
void decalageADroiteFloat(float tab[], int index, int tlog);
void decalageAGaucheFloat(float tab[], int index, int tlog);
//! GESTION CLIENTS
int inputClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int *tlog);
void inputClient(int id, int passwd, int index, int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int *tlog);
void modifyClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tlog);
void deleteClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int *tlog);
@ -48,11 +54,19 @@ int searchTab(int targetTab[], int valSearched, int tLog, int *found);
//! PANIER
void clientConstraint(float *weight, float *volume, float *price);
int constraintExceeded(float weightConstraint, float volumeConstraint, float *priceConstraint, float *cagnotte, float tabWeight[], float tabVolume[], float tabPrice[], int tabItemRef[], int tabBasketRef[], int tabBasketQuantity[], int tlogItem, int tlogBasket);
int basket_add (int tab_reference[], float weight[], float volume[], float unitPrice[], float *cagnotte, int basket_tab_ref[], int basket_tab_qte[],int tlog, int tlog_basket);
void display_basket(int basket_tab_ref[], int basket_qte[], float weight[], float volume[], float unitPrice[], float *cagnotte, int tlog, int tlog_basket);
int reinit_basket(int tlog_basket);
int basket_del_article( int basket_tab_ref[], int basket_tab_qte[], int tlog_basket);
void basket_add(int tab_reference[], float unitPrice[], float *cagnotte, int basket_tab_ref[], int basket_tab_qte[], int tlogItem, int *tlog_basket);
void display_basket(int basket_tab_ref[], int tabItemRef[], int basket_qte[], float tabWeight[], float tabVolume[], float cagnotte, float tabUnitPrice[], int tlogItem, int tlog_basket);
void reinit_basket(int *tlog_basket);
void basket_del_article(int basket_tab_ref[], int basket_tab_qte[], int *tlog_basket);
//! LOGIN
int login(int clientID[], int isAdmin[], int tlog);
int signup(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int *tlog);
int login(int clientID[], int clientPassword[], int isAdmin[], int tlog, int *index);
int signup(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int *tlog);
//! MOT DE PASSE
int encrypt(int password);
int decrypt(int password);
//! MENUS
void adminMenu(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int tabReference[], float tabWeight[], float tabVolume[], float unitPrice[], int *tlogItem, int *tlogClient);
void clientMenu(float *weight, float *volume, float *price, int tabItemRef[], float unitPrice[], float *cagnotte, int basket_tab_ref[], int basket_tab_qte[], float tabWeight[], float tabVolume[], int tlogItem, int *tlogBasket);

@ -0,0 +1,111 @@
/**
* @file menu.c
* @brief Menu client et administrateur
*/
#include "main.h"
void clientMenu(float *weight, float *volume, float *price, int tabItemRef[], float unitPrice[], float *cagnotte, int basket_tab_ref[], int basket_tab_qte[], float tabWeight[], float tabVolume[], int tlogItem, int *tlogBasket)
{
int choice = 0, constraint;
while (choice != 6)
{
printf("\n=================================\n");
printf(" Menu Client\n");
printf("=================================\n");
printf("1\u2022 Entrer ses contraintes\n");
printf("2\u2022 Ajouter un article au panier\n");
printf("3\u2022 Afficher le panier\n");
printf("4\u2022 Réinitialiser le panier\n");
printf("5\u2022 Retirer un article du panier\n");
printf("6\u2022 Quitter\n");
printf("=================================\n");
printf("Votre choix: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
clientConstraint(weight, volume, price);
break;
case 2:
basket_add(tabItemRef, unitPrice, cagnotte, basket_tab_ref, basket_tab_qte, tlogItem, tlogBasket);
constraint = constraintExceeded(*weight, *volume, price, cagnotte, tabWeight, tabVolume, unitPrice, tabItemRef, basket_tab_ref, basket_tab_qte, tlogItem, *tlogBasket);
if (constraint == -1)
basket_del_article(basket_tab_ref, basket_tab_qte, tlogBasket);
break;
case 3:
display_basket(basket_tab_ref, tabItemRef, basket_tab_qte, tabWeight, tabVolume, *cagnotte, unitPrice, tlogItem, *tlogBasket);
break;
case 4:
reinit_basket(tlogBasket);
break;
case 5:
basket_del_article(basket_tab_ref, basket_tab_qte, tlogBasket);
break;
case 6:
return;
default:
printf("Erreur, veuillez entrer un choix valide.\n");
break;
}
}
}
void adminMenu(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int tabReference[], float tabWeight[], float tabVolume[], float unitPrice[], int *tlogItem, int *tlogClient)
{
int choice = 0;
while (choice != 10)
{
printf("\n=================================\n");
printf(" Menu Client\n");
printf("=================================\n");
printf("1\u2022 Ajouter un client\n");
printf("2\u2022 Modifier les données d'un client\n");
printf("3\u2022 Supprimer un client\n");
printf("4\u2022 Ajouter un article\n");
printf("5\u2022 Supprimer un article\n");
printf("6\u2022 Afficher les données d'un article\n");
printf("7\u2022 Afficher la liste des articles\n");
printf("8\u2022 Afficher les données d'un client\n");
printf("9\u2022 Afficher la liste des clients\n");
printf("10\u2022 Quitter\n");
printf("=================================\n");
printf("Votre choix: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
signup(clientID, clientPassword, cagnotte, suspended, isAdmin, tlogClient);
break;
case 2:
modifyClient(clientID, cagnotte, suspended, isAdmin, *tlogClient);
break;
case 3:
deleteClient(clientID, cagnotte, suspended, isAdmin, tlogClient);
break;
case 4:
inputItem(tabReference, tabWeight, tabVolume, unitPrice, tlogItem);
break;
case 5:
deleteItem(tabReference, tabWeight, tabVolume, unitPrice, tlogItem);
break;
case 6:
displayItem(tabReference, tabWeight, tabVolume, unitPrice, *tlogItem);
break;
case 7:
displayItemList(tabReference, tabWeight, tabVolume, unitPrice, *tlogItem);
break;
case 8:
displayClient(clientID, cagnotte, suspended, isAdmin, *tlogClient);
break;
case 9:
displayClientList(clientID, cagnotte, suspended, isAdmin, *tlogClient);
break;
case 10:
return;
default:
printf("Erreur, veuillez entrer un choix valide.\n");
break;
}
}
}

@ -1,70 +1,58 @@
/**
* @file modif.c
* @brief Fonctions de modification des données (ajout, suppression, modification)
*/
#include "main.h"
/**
* @brief Fonction d'inserion d'un client
* @param clientID: Tableau des identifiants client
* @param cagnotte: Tableau des cagnottes client
* @param suspended: Tableau des états de compte client
* @param isAdmin: Tableau des statuts Administrateur des clients
* @param tlog: Taille logique de ces tableaux
* @return 0 > Tout s'est bien passé, -1 > L'utilisateur a quitté, -2 > La taille physique du tableau est dépassée
* @brief Ajout d'un client dans les tableaux
* @param id: Tableau des identifiants des clients
* @param passwd: Tableau des mots de passe des clients
* @param index: Index du client à ajouter
* @param clientID: Tableau des identifiants des clients
* @param clientPassword: Tableau des mots de passe des clients
* @param cagnotte: Tableau des cagnottes des clients
* @param suspended: Tableau de l'état du compte des clients
* @param isAdmin: Tableau de l'état d'administrateur des clients
* @param tlog: Taille logique des tableaux
* @return 0 si tout s'est bien passé, -2 si la taille physique du tableau est dépassée
*/
int inputClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
void inputClient(int id, int passwd, int index, int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
{
int index, found, id = -1;
float cagnotteClient;
// Vérification du dépassement de la taille physique du tableau
if (*tlog == tmaxClients)
{
printf("[ERREUR] - La taille physique du tableau est dépassée, impossible d'ajouter un nouveau client.\n");
return -2;
return;
}
while(id != 0)
{
printf("Entrez l'identifiant du client ou 0 si vous souhaitez arrêter la saisie: ");
scanf("%d%*c", &id);
while(id < 0)
{
printf("[ERREUR] - L'identifiant doit être positif, entrez l'identifiant du client ou 0 si vous souhaitez arrêter la saisie: ");
scanf("%d%*c", &id);
}
index = searchTab(clientID, id, *tlog, &found);
while(found == 1)
{
printf("Cet identifiant existe déjà, réessayer ou tapez 0 si vous souhaitez arrêter la saisie: ");
scanf("%d%*c", &id);
index = searchTab(clientID, id, *tlog, &found);
}
if(id != 0)
{
// Décalage
decalageADroiteInt(clientID, index, *tlog);
decalageADroiteFloat(cagnotte, index, *tlog);
decalageADroiteInt(suspended, index, *tlog);
decalageADroiteInt(isAdmin, index, *tlog);
clientID[index] = id;
clientPassword[index] = encrypt(passwd);
cagnotte[index] = 0;
suspended[index] = 0;
isAdmin[index] = 0;
*tlog++;
return 0; // Tout s'est bien passé
}
}
return -1; // L'utilisateur a quitté
}
/**
* @brief Modification des données d'un client
* @param clientID: Tableau des identifiants des clients
* @param cagnotte: Tableau des cagnottes des clients
* @param suspended: Tableau de l'état du compte des clients
* @param isAdmin: Tableau de l'état d'administrateur des clients
* @param tlog: Taille logique des tableaux
* @return void
*/
void modifyClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tlog)
{
/*
Modification des données d'un client dans les tableaux
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
+param tlog: taille logique des tableaux des clients
+var numClient: identifiant du client à modifier
+var index: index de l'article recherché dans le tableau pour le modifier
+var montant: montant à ajouter à la cagnotte
+var modif: modification à exécuter sur le client
*/
int index, numClient, found;
float montant;
char modif;
@ -107,22 +95,18 @@ void modifyClient(int clientID[], float cagnotte[], int suspended[], int isAdmin
isAdmin[index] = 0;
}
/**
* @brief Ajout d'un ou plusieurs articles dans les tableaux d'articles (reference, poids, volume et prix)
* @param tabReference: tableau des références des articles
* @param weight: tableau des poids des articles
* @param volume: tableau des volumes des articles
* @param unitPrice: tableau des prix à l'unité des articles
* @param tlog: taille logique des tableaux des articles
* @return void
* @warning La saisie s'arrête lorsque l'utilisateur entre 0
*/
void inputItem(int tabReference[], float tabWeight[], float tabVolume[], float unitPrice[], int *tlog)
{
/*
Ajout d'un ou plusieurs articles dans les tableaux d'articles (reference, poids, volume et prix)
+param tabReference: tableau des références des articles
+param weight: tableau des poids des articles
+param volume: tableau des volumes des articles
+param unitPrice: tableau des prix à l'unité des articles
+param tlog: taille logique des tableaux des articles
+var reference: reference de l'article à ajouter
+var weight: poids de l'article à ajouter
+var volume: volume de l'article à ajoueter
+var price: prix de l'article à ajouter
*/
int reference = -1;
float weight, volume, price;
while (reference != 0)
@ -167,6 +151,16 @@ void inputItem(int tabReference[], float tabWeight[], float tabVolume[], float u
}
}
/**
* @brief Suppression d'un ou plusieurs articles dans les tableaux d'articles (reference, poids, volume et prix)
* @param tabReference: tableau des références des articles
* @param weight: tableau des poids des articles
* @param volume: tableau des volumes des articles
* @param unitPrice: tableau des prix à l'unité des articles
* @param tlog: taille logique des tableaux des articles
* @return void
* @warning La saisie s'arrête lorsque l'utilisateur entre 0
*/
void deleteItem(int tabReference[], float tabWeight[], float tabVolume[], float unitPrice[], int *tlog)
{
int reference = -1, index, i, found;
@ -197,6 +191,18 @@ void deleteItem(int tabReference[], float tabWeight[], float tabVolume[], float
}
}
/**
* @brief Suppression d'un ou plusieurs clients dans les tableaux des clients (clientID, clientPassword, cagnotte, suspended et isAdmin)
* @param clientID: tableau des identifiants des clients
* @param cagnotte: tableau des cagnottes des clients
* @param suspended: tableau de l'état du compte des clients
* @param isAdmin: tableau de l'état d'administrateur des clients
* @param tlog: taille logique des tableaux des clients
* @return void
* @warning La saisie s'arrête lorsque l'utilisateur entre 0
*/
//! Ajouter la suppression de la colonne mot de passe.
//! Utiliser la fonction décalaageAGauche
void deleteClient(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
{
int numClient = -1, index, i, found;

@ -1,10 +1,13 @@
/**
* @file panier.c
* @brief Fonctions de gestion du panier client et des contraintes
*/
#include "main.h"
void clientConstraint(float *weight, float *volume, float *price)
{
/*
Saisie des contraintes du client.
*/
// Saisie des contraintes du client.
printf("Entrez la charge maximale de votre véhicule en kilogrammes: ");
scanf("%f", weight);
while (*weight < 0)
@ -30,29 +33,6 @@ void clientConstraint(float *weight, float *volume, float *price)
}
}
// TODO réécrire cette documentation
/**
* The function checks if the weight, volume, and price constraints are exceeded based on the items in
* the basket and the given constraints.
*
* @param weightConstraint The maximum weight constraint for the vehicle.
* @param volumeConstraint The volume constraint is the maximum volume that the vehicle can hold.
* @param priceConstraint A pointer to a float variable representing the maximum budget constraint.
* @param cagnotte A pointer to a float variable representing the amount of money in the user's
* account.
* @param tabWeight An array containing the weights of each item in the log.
* @param tabVolume tabVolume is an array that stores the volume of each item in the shopping basket.
* @param tabPrice tabPrice is an array that stores the prices of items in a shopping basket.
* @param tabItemRef An array containing the reference numbers of the items in the inventory.
* @param tabBasketRef tabBasketRef is an array that contains the references of the items in the
* basket.
* @param tabBasketQuantity An array that stores the quantity of each item in the basket.
* @param tlogItem The parameter "tlogItem" represents the number of items in the log.
* @param tlogBasket The parameter "tlogBasket" represents the number of items in the shopping basket.
* @return an integer value. If the constraints for weight, volume, or price are exceeded, the function
* returns -1. Otherwise, it returns 0.
*/
int constraintExceeded(float weightConstraint, float volumeConstraint, float *priceConstraint, float *cagnotte, float tabWeight[], float tabVolume[], float tabPrice[], int tabItemRef[], int tabBasketRef[], int tabBasketQuantity[], int tlogItem, int tlogBasket)
{
int index, found, i;
@ -123,18 +103,18 @@ int constraintExceeded(float weightConstraint, float volumeConstraint, float *pr
* @param tlog_basket: taille logique du panier
* @return taille logique du panier
*/
int basket_add (int tab_reference[], float weight[], float volume[], float unitPrice[], float *cagnotte, int basket_tab_ref[], int basket_tab_qte[],int tlog, int tlog_basket)
void basket_add(int tab_reference[], float unitPrice[], float *cagnotte, int basket_tab_ref[], int basket_tab_qte[], int tlogItem, int *tlog_basket)
{
int ref_to_add, qte_to_add, trouve, index_ajout, i;
float total_weight[tlog_basket], total_volume[tlog_basket], total_price[tlog_basket], total_cagnotte[tlog_basket];
int ref_to_add, qte_to_add, trouve, index_ajout;
float total_weight[tmaxArticles], total_volume[tmaxArticles], total_price[tmaxArticles], total_cagnotte[tmaxArticles];
printf("Quelle référence souhaitez-vous ajouter au panier?");
scanf("%d", &ref_to_add);
index_ajout = searchTab(tab_reference, ref_to_add, tlog, &trouve);
index_ajout = searchTab(tab_reference, ref_to_add, tlogItem, &trouve);
while (trouve == 0)
{
printf("L'élément que vous souhaitez ajouter n'existe pas, ressayez s'il vous plaît");
scanf("%d", &ref_to_add);
index_ajout = searchTab(tab_reference, ref_to_add, tlog, &trouve);
index_ajout = searchTab(tab_reference, ref_to_add, tlogItem, &trouve);
}
basket_tab_ref[index_ajout] = ref_to_add;
printf("Quelle quantité de cet article souhaitez-vous ajouter au panier?");
@ -146,19 +126,8 @@ int basket_add (int tab_reference[], float weight[], float volume[], float unitP
}
basket_tab_qte[index_ajout] = ref_to_add;
index_ajout = basket_tab_ref[i];
total_weight[i] += weight[index_ajout]*qte_to_add;
total_volume[i] += volume[index_ajout]*qte_to_add;
total_price[i] += unitPrice[index_ajout]*qte_to_add;
*cagnotte = *cagnotte + *cagnotte*0.10;
tlog_basket = tlog_basket+1;
display_basket( basket_tab_ref, basket_tab_qte, weight, volume, unitPrice, *cagnotte, tlog, tlog_basket);
// si jamais, mettre le display basket ailleurs
return tlog_basket;
*cagnotte += (unitPrice[index_ajout]*qte_to_add) *0.1;
*tlog_basket += 1;
}
/**
@ -166,9 +135,9 @@ int basket_add (int tab_reference[], float weight[], float volume[], float unitP
* @param tlog_basket: taille logique du panier
* @return taille logique du panier
*/
int reinit_basket(int tlog_basket)
void reinit_basket(int *tlog_basket)
{
tlog_basket=0;
*tlog_basket=0;
// En mettant tlog_basket à 0,
// on fait comme si la taille logique était à 0, faisant que l'on ne considère plus aucun élément des tableaux,
//et donc qu'il est désormais vide.
@ -182,18 +151,18 @@ int reinit_basket(int tlog_basket)
* @param tlog_basket: taille logique du panier
* @return taille logique du panier
*/
int basket_del_article( int basket_tab_ref[], int basket_tab_qte[], int tlog_basket)
void basket_del_article(int basket_tab_ref[], int basket_tab_qte[], int *tlog_basket)
{
int ref_to_del, trouve, index_to_del, qte_to_del, i;
printf("Quelle référence voulez vous supprimer de votre panier?\n");
scanf("%d",&ref_to_del);
index_to_del = searchTab(basket_tab_ref, ref_to_del, tlog_basket, &trouve);
index_to_del = searchTab(basket_tab_ref, ref_to_del, *tlog_basket, &trouve);
while (trouve == 0)
{
printf("Erreur, la valeur que vous voulez supprimer n'existe pas, réssayez");
scanf("%d",&ref_to_del);
index_to_del = searchTab(basket_tab_ref, ref_to_del, tlog_basket, &trouve);
index_to_del = searchTab(basket_tab_ref, ref_to_del, *tlog_basket, &trouve);
}
if (basket_tab_qte[index_to_del]>1)
{
@ -214,16 +183,15 @@ int basket_del_article( int basket_tab_ref[], int basket_tab_qte[], int tlog_bas
if (qte_to_del<basket_tab_qte[index_to_del])
{
basket_tab_qte[index_to_del]=basket_tab_qte[index_to_del]-qte_to_del;
return tlog_basket;
}
else if (qte_to_del==basket_tab_qte[index_to_del])
{
for (i=tlog_basket; i>index_to_del; i--)
for (i=*tlog_basket; i>index_to_del; i--)
{
basket_tab_ref[i]=basket_tab_ref[i+1];
basket_tab_qte[i]=basket_tab_qte[i+1];
}
return tlog_basket-1;
*tlog_basket -= 1;
}
}

@ -0,0 +1,28 @@
/**
* @file passwd.c
* @brief Gestion des mots de passe
*/
#include "main.h"
/**
* @brief Encryption d'un mot de passe avec la méthode de César
* @param password: Mot de passe à encrypter
* @return int: Mot de passe encrypté
*/
int encrypt(int password)
{
password = password;
return password;
}
/**
* @brief Décryption d'un mot de passe
* @param password: Mot de passe à décrypter
* @return int: Mot de passe décrypté
*/
int decrypt(int password)
{
password = password;
return password;
}

@ -5,50 +5,42 @@
#include "main.h"
void chargeDonnees(int *tLogArticle, int *tLogClient,int reference[], float weight[], float volume[], float unitPrice[], int clientID[], float cagnotte[], int suspended[], int isAdmin[])
{
/*
Chargement des données des articles et clients de fichiers vers des tableaux
+param tLogArticle: taille logique des tableaux des articles
+param tLogClient: taille logique des tableaux des clients
+param reference: tableau des références des articles
+param weight: tableau des poids des articles
+param volume: tableau des volumes des articles
+param unitPrice: tableau des prix à l'unité des articles
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
/**
* @brief Chargement des données depuis les 2 fichiers vers les tableaux
* @param tLogArticle: Taille logique du tableau des articles
* @param tLogClient: Taille logique du tableau des clients
* @param reference: Tableau des références des articles
* @param weight: Tableau des poids des articles
* @param volume: Tableau des volumes des articles
* @param unitPrice: Tableau des prix à l'unité des articles
* @param clientID: Tableau des identifiants des clients
* @param clientPassword: Tableau des mots de passe des clients
* @param cagnotte: Tableau des cagnottes des clients
* @param suspended: Tableau de l'état du compte des clients
* @param isAdmin: Tableau de l'état d'administrateur des clients
* @return void
*/
void chargeDonnees(int *tLogArticle, int *tLogClient,int reference[], float weight[], float volume[], float unitPrice[], int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[])
{
*tLogArticle = chargeArticles(reference, weight, volume, unitPrice);
*tLogClient = chargeClients(clientID, cagnotte, suspended, isAdmin);
*tLogClient = chargeClients(clientID, clientPassword, cagnotte, suspended, isAdmin);
}
/**
* @brief Chargement des données du fichier des articles vers les tableaux
* @param reference: Tableau des références des articles
* @param weight: Tableau des poids des articles
* @param volume: Tableau des volumes des articles
* @param unitPrice: Tableau des prix à l'unité des articles
* @return Taille logique des tableaux d'articles
*/
int chargeArticles(int reference[], float weight[], float volume[], float unitPrice[])
{
/*
Chargement des données des articles d'un fichier vers des tableaux
+param reference: tableau des références des articles
+param weight: tableau des poids des articles
+param volume: tableau des volumes des articles
+param unitPrice: tableau des prix à l'unité des articles
+return: taille logique des tableaux
+var article: fichier 'articles.txt' ouvert en lecture
+var ref: reference de l'article
+var tL: taille logique des tableaux
+var w: poids de l'article
+var v: volume de l'article
+var up: prix de l'article à l'unité
*/
FILE *article;
article = fopen("articles.txt","r");
if(article==NULL)
{
printf("ERREUR: Echec de l'ouverture en lecture de 'articles.txt'.\n");
exit(1);
errorHandling(-4);
}
int ref, tL=0;
@ -59,7 +51,7 @@ int chargeArticles(int reference[], float weight[], float volume[], float unitPr
{
if(tL == tmaxArticles)
{
printf("Tableau trop petit.\n");
errorHandling(-3);
return tL;
}
@ -77,96 +69,88 @@ int chargeArticles(int reference[], float weight[], float volume[], float unitPr
return tL;
}
int chargeClients(int clientID[], float cagnotte[], int suspended[], int isAdmin[])
{
/*
Chargement des données des clients d'un fichier vers des tableaux
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
+return: taille logique des tableaux
+var client: fichier 'clients.txt' ouvert en lecture
+var id: identifiant du client
+var sus: état du compte du client
+var tL: taille logique des tableaux
+var cag: montant de la cagnotte du client
/**
* @brief Chargement des données du fichier des clients vers les tableaux
* @param clientID: Tableau des identifiants des clients
* @param clientPassword: Tableau des mots de passe des clients
* @param cagnotte: Tableau des cagnottes des clients
* @param suspended: Tableau de l'état du compte des clients
* @param isAdmin: Tableau de l'état d'administrateur des clients
* @return Taille logique des tableaux des clients
*/
int chargeClients(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[])
{
FILE *client;
client = fopen("clients.txt","r");
if(client==NULL)
{
printf("ERREUR: Echec de l'ouverture en lecture de 'clients.txt'.\n");
exit(1);
errorHandling(-4);
}
int id, sus, tL=0, adm;
int id, passwd, sus, tL=0, adm;
float cag;
fscanf(client, "%d %f %d %d", &id, &cag, &sus, &adm);
fscanf(client, "%d %d %f %d %d", &id, &passwd, &cag, &sus, &adm);
while(!feof(client))
{
if(tL == tmaxArticles)
{
printf("Tableau trop petit.\n");
errorHandling(-3);
return tL;
}
clientID[tL] = id;
clientPassword[tL] = passwd;
cagnotte[tL] = cag;
suspended[tL] = sus;
isAdmin[tL] = adm;
tL++;
fscanf(client, "%d %f %d", &id, &cag, &sus, &adm);
fscanf(client, "%d %d %f %d %d", &id, &passwd, &cag, &sus, &adm);
}
fclose(client);
return tL;
}
void sauvegardeDonnees(int tLogArticle, int tLogClient, int reference[], float weight[], float volume[], float unitPrice[], int clientID[], float cagnotte[], int suspended[], int isAdmin[])
{
/*
Sauvegarde des données des articles et clients de tableaux vers des fichiers
+param tLogArticle: taille logique des tableaux des articles
+param tLogClient: taille logique des tableaux des clients
+param reference: tableau des références des articles
+param weight: tableau des poids des articles
+param volume: tableau des volumes des articles
+param unitPrice: tableau des prix à l'unité des articles
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
/**
* @brief Sauvegarde des données des tableaux vers les 2 fichiers correspondants
* @param tLogArticle: Taille logique du tableau des articles
* @param tLogClient: Taille logique du tableau des clients
* @param reference: Tableau des références des articles
* @param weight: Tableau des poids des articles
* @param volume: Tableau des volumes des articles
* @param unitPrice: Tableau des prix à l'unité des articles
* @param clientID: Tableau des identifiants des clients
* @param clientPassword: Tableau des mots de passe des clients
* @param cagnotte: Tableau des cagnottes des clients
* @param suspended: Tableau de l'état du compte des clients
* @param isAdmin: Tableau de l'état d'administrateur des clients
* @return void
*/
void sauvegardeDonnees(int tLogArticle, int tLogClient, int reference[], float weight[], float volume[], float unitPrice[], int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[])
{
sauvegardeArticles(reference, weight, volume, unitPrice, tLogArticle);
sauvegardeClients(clientID, cagnotte, suspended, isAdmin, tLogClient);
sauvegardeClients(clientID, clientPassword, cagnotte, suspended, isAdmin, tLogClient);
}
/**
* @brief Sauvegarde des données des articles de tableaux vers le fichier des articles
* @param reference: Tableau des références des articles
* @param weight: Tableau des poids des articles
* @param volume: Tableau des volumes des articles
* @param unitPrice: Tableau des prix à l'unité des articles
* @param tLogArticle: Taille logique des tableaux des articles
* @return void
*/
void sauvegardeArticles(int reference[], float weight[], float volume[], float unitPrice[], int tLogArticle)
{
/*
Sauvegarde des données des articles de tableaux vers le fichier des articles
+param reference: tableau des références des articles
+param weight: tableau des poids des articles
+param volume: tableau des volumes des articles
+param unitPrice: tableau des prix à l'unité des articles
+param tLogArticle: taille logique des tableaux des articles
+var article: fichier 'articles.txt' ouvert en écriture
+var i: compteur permettant de parcourir les tableaux
*/
FILE *article;
article = fopen("articles.txt","w");
if(article==NULL)
{
printf("ERREUR: Echec de l'ouverture en écriture de 'articles.txt'.\n");
exit(1);
errorHandling(-5);
}
int i;
@ -178,31 +162,29 @@ void sauvegardeArticles(int reference[], float weight[], float volume[], float u
fclose(article);
}
void sauvegardeClients(int clientID[], float cagnotte[], int suspended[], int isAdmin[], int tLogClient)
{
/*
Sauvegarde des données des articles de tableaux vers le fichier des articles
+param clientID: tableau des identifiants des clients
+param cagnotte: tableau des cagnottes des clients
+param suspended: tableau de l'état du compte des clients
+param tLogClient: taille logique des tableaux des clients
+var client: fichier 'clients.txt' ouvert en lecture
+var i: compteur permettant de parcourir les tableaux
/**
* @brief Sauvegarde des données des clients de tableaux vers le fichier des clients
* @param clientID: Tableau des identifiants des clients
* @param clientPassword: Tableau des mots de passe des clients
* @param cagnotte: Tableau des cagnottes des clients
* @param suspended: Tableau de l'état du compte des clients
* @param isAdmin: Tableau de l'état d'administrateur des clients
* @param tLogClient: Taille logique des tableaux des clients
* @return void
*/
void sauvegardeClients(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int tLogClient)
{
FILE *client;
client = fopen("clients.txt","w");
if(client==NULL)
{
printf("ERREUR: Echec de l'ouverture en écriture de 'clients.txt'.\n");
exit(1);
errorHandling(-5);
}
int i;
for(i=0; i<tLogClient; i++)
{
fprintf(client, "%d %f %d %d\n", clientID[i], cagnotte[i], suspended[i], isAdmin[i]);
fprintf(client, "%d %d %f %d %d\n", clientID[i], clientPassword[i], cagnotte[i], suspended[i], isAdmin[i]);
}
fclose(client);

Loading…
Cancel
Save