You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
9.5 KiB
248 lines
9.5 KiB
/**
|
|
* @file modif.c
|
|
* @brief Fonctions de modification des données (ajout, suppression, modification)
|
|
*/
|
|
|
|
#include "main.h"
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
void inputClient(int id, int passwd, int index, int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
|
|
{
|
|
// Vérification du dépassement de la taille physique du tableau
|
|
if (*tlog == tmaxClients)
|
|
{
|
|
errorHandling(-2);
|
|
return;
|
|
}
|
|
|
|
// Décalage
|
|
decalageADroiteInt(clientID, index, *tlog);
|
|
decalageADroiteFloat(cagnotte, index, *tlog);
|
|
decalageADroiteInt(suspended, index, *tlog);
|
|
decalageADroiteInt(isAdmin, index, *tlog);
|
|
|
|
clientID[index] = id;
|
|
clientPassword[index] = passwd;
|
|
cagnotte[index] = 0;
|
|
suspended[index] = 0;
|
|
isAdmin[index] = 0;
|
|
|
|
*tlog++;
|
|
}
|
|
|
|
/**
|
|
* @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)
|
|
{
|
|
int index, numClient, found;
|
|
float montant;
|
|
char modif;
|
|
printf("Entrez le numéro du client dont vous voulez modifier les données: ");
|
|
scanf("%d%*c", &numClient);
|
|
while (numClient < 0)
|
|
{
|
|
printf("Erreur, le numéro du client doit être positif, entrez le numéro du client ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d%*c", &numClient);
|
|
}
|
|
index = searchTab(clientID, numClient, tlog, &found);
|
|
while (index == -1)
|
|
{
|
|
printf("Cet identifiant client n'existe pas, réessayer ou tapez 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d%*c", &numClient);
|
|
index = searchTab(clientID, numClient, tlog, &found);
|
|
}
|
|
printf("Entrez la modification voulue (s pour suspendre ou réactiver, c pour ajouter à la cagnotte, a pour activer ou désactiver les droits administrateurs): ");
|
|
scanf("%c%*c", &modif);
|
|
while (modif != 's' && modif != 'c' && modif != 'a')
|
|
{
|
|
printf("Erreur, le choix doit être 'c' ou 's', entrez la modification voulue (s pour suspendre ou réactiver, c pour ajouter à la cagnotte, a pour activer ou désactiver les droits administrateurs): ");
|
|
scanf("%c%*c", &modif);
|
|
}
|
|
if (modif == 's')
|
|
if (suspended[index] == 0)
|
|
suspended[index] = 1;
|
|
else if (suspended[index] == 1)
|
|
suspended[index] = 0;
|
|
else if (modif == 'c')
|
|
{
|
|
printf("Entrez le montant à ajouter à la cagnotte: ");
|
|
scanf("%f", &montant);
|
|
cagnotte[index] += montant;
|
|
}
|
|
else if (modif == 'a')
|
|
if (isAdmin[index] == 0)
|
|
isAdmin[index] = 1;
|
|
else if (isAdmin[index] == 1)
|
|
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)
|
|
{
|
|
int reference = -1, index, found;
|
|
float weight, volume, price;
|
|
while(reference != 0)
|
|
{
|
|
printf("Entrez la référence du produit ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &reference);
|
|
while (reference < 0)
|
|
{
|
|
printf("Erreur: la référence doit être positive, entrez la référence du produit ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &reference);
|
|
}
|
|
|
|
index = searchTab(tabReference, reference, *tlog, &found);
|
|
|
|
while(found == 1 && reference != 0)
|
|
{
|
|
printf("Cette référence existe déjà, réessayer ou tapez 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &reference);
|
|
index = searchTab(tabReference, reference, *tlog, &found);
|
|
}
|
|
|
|
if (reference != 0)
|
|
{
|
|
printf("Entrez le poids du produit: ");
|
|
scanf("%f", &weight);
|
|
while (weight < 0)
|
|
{
|
|
printf("Erreur: le poids doit être positif, entrez le poids du produit: ");
|
|
scanf("%f", &weight);
|
|
}
|
|
printf("Entrez le volume du produit: ");
|
|
scanf("%f", &volume);
|
|
while (volume < 0)
|
|
{
|
|
printf("Erreur: le volume doit être positif, entrez le volume du produit: ");
|
|
scanf("%f", &volume);
|
|
}
|
|
printf("Entrez le prix du produit: ");
|
|
scanf("%f", &price);
|
|
while (price < 0)
|
|
{
|
|
printf("Erreur: le prix doit être positif, entrez le prix du produit: ");
|
|
scanf("%f", &price);
|
|
}
|
|
|
|
//Décalage
|
|
decalageADroiteInt(tabReference, index, *tlog);
|
|
decalageADroiteFloat(tabWeight, index, *tlog);
|
|
decalageADroiteFloat(tabVolume, index, *tlog);
|
|
decalageADroiteFloat(unitPrice, index, *tlog);
|
|
|
|
tabReference[index] = reference;
|
|
tabWeight[index] = weight;
|
|
tabVolume[index] = volume;
|
|
unitPrice[index] = price;
|
|
|
|
*tlog++;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @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;
|
|
while (reference != 0)
|
|
{
|
|
printf("Entrez la référence du produit à supprimer ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &reference);
|
|
while (reference < 0)
|
|
{
|
|
printf("Erreur: la référence doit être positive, entrez la référence du produit ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &reference);
|
|
}
|
|
index = searchTab(tabReference, reference, *tlog, &found);
|
|
while (index == -1)
|
|
{
|
|
printf("Cette référence n'existe pas, réessayer ou tapez 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &reference);
|
|
index = searchTab(tabReference, reference, *tlog, &found);
|
|
}
|
|
|
|
decalageAGaucheInt(tabReference, index, *tlog);
|
|
decalageAGaucheFloat(tabWeight, index, *tlog);
|
|
decalageAGaucheFloat(tabVolume, index, *tlog);
|
|
decalageAGaucheFloat(unitPrice, index, *tlog);
|
|
|
|
*tlog--;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @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
|
|
*/
|
|
void deleteClient(int clientID[], int clientPassword[], float cagnotte[], int suspended[], int isAdmin[], int *tlog)
|
|
{
|
|
int numClient = -1, index, i, found;
|
|
while (numClient != 0)
|
|
{
|
|
printf("Entrez l'identifiant du client à supprimer ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &numClient);
|
|
while (numClient < 0)
|
|
{
|
|
printf("Erreur, le numéro du client doit être positif, entrez le numéro du client ou 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &numClient);
|
|
}
|
|
index = searchTab(clientID, numClient, *tlog, &found);
|
|
while (index == -1)
|
|
{
|
|
printf("Cet identifiant client n'existe pas, réessayer ou tapez 0 si vous souhaitez arrêter la saisie: ");
|
|
scanf("%d", &numClient);
|
|
index = searchTab(clientID, numClient, *tlog, &found);
|
|
}
|
|
|
|
decalageAGaucheInt(clientID, index, *tlog);
|
|
decalageAGaucheInt(clientPassword, index, *tlog);
|
|
decalageAGaucheFloat(cagnotte, index, *tlog);
|
|
decalageAGaucheInt(suspended, index, *tlog);
|
|
decalageAGaucheInt(isAdmin, index, *tlog);
|
|
|
|
*tlog--;
|
|
}
|
|
} |