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.
212 lines
8.1 KiB
212 lines
8.1 KiB
#include "main.h"
|
|
|
|
void clientConstraint(float *weight, float *volume, float *price)
|
|
{
|
|
/*
|
|
Saisie des contraintes du client.
|
|
*/
|
|
printf("Entrez la charge maximale de votre véhicule en kilogrammes: ");
|
|
scanf("%f", weight);
|
|
while (*weight < 0)
|
|
{
|
|
printf("Erreur, le poids doit être positif, entrez la charge maximale de votre véhicule en kilogrammes: ");
|
|
scanf("%f", weight);
|
|
}
|
|
|
|
printf("Entrez le volume du coffre de votre véhicule en mètres cubes: ");
|
|
scanf("%f", volume);
|
|
while (*volume < 0)
|
|
{
|
|
printf("Erreur: le volume doit être positif, entrez le volume du coffre de votre véhicule en mètres cubes: ");
|
|
scanf("%f", volume);
|
|
}
|
|
|
|
printf("Entrez votre budget maximum ou -1 si vous n'en avait pas: ");
|
|
scanf("%f", price);
|
|
while (*price < 0 || *price != -1)
|
|
{
|
|
printf("Erreur: le prix doit être positif, entrez votre budget maximum ou -1 si vous n'en avait pas: ");
|
|
scanf("%f", price);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The function checks if the weight, volume, and price constraints are exceeded and allows the user to
|
|
* use their cagnotte (a type of credit) to stay within the price constraint.
|
|
*
|
|
* @param weightConstraint The weight constraint for the vehicle `float`.
|
|
* @param volumeConstraint The volume constraint is the maximum volume that the vehicle can hold. It is
|
|
* a float value.
|
|
* @param priceConstraint A pointer to a float variable representing the maximum budget constraint.
|
|
* @param tabWeight An array containing the weights of each item in the inventory.
|
|
* @param tabVolume tabVolume is an array that stores the volume of each item in the inventory.
|
|
* @param tabUnitPrice tabUnitPrice is an array that stores the unit price of each item in the
|
|
* inventory.
|
|
* @param tabQuantity tabQuantity is an array that stores the quantity of each item in the shopping
|
|
* cart.
|
|
* @param tlog The parameter "tlog" represents the number of items in the inventory or the number of
|
|
* items in the transaction log.
|
|
* @param cagnotte A pointer to a float variable representing the amount of money available for use.
|
|
*
|
|
* @return an integer value.
|
|
*/
|
|
// TODO réécrire cette documentation
|
|
int constraintExceeded(float weightConstraint, float volumeConstraint, float *priceConstraint, float tabWeight[], float tabVolume[], float tabUnitPrice[], int tabQuantity[], int tlog, float *cagnotte)
|
|
{
|
|
float totalWeight = 0, totalVolume = 0, totalPrice = 0, cagnotteUse;
|
|
int i;
|
|
for (i=0; i<tlog; i++)
|
|
{
|
|
totalWeight += tabWeight[i] * tabQuantity[i];
|
|
totalVolume += tabVolume[i] * tabQuantity[i];
|
|
if (*priceConstraint != -1)
|
|
totalPrice += tabUnitPrice[i] * tabQuantity[i];
|
|
|
|
if (totalWeight > weightConstraint)
|
|
{
|
|
printf("Attention, la contrainte de charge maximale du véhicule a été dépassée de %.2f, veuillez retirer un article\n", totalWeight - weightConstraint);
|
|
return -1;
|
|
}
|
|
if (totalVolume > volumeConstraint)
|
|
{
|
|
printf("Attention, la contrainte de volume maximum a été dépassé de %.2f, veuillez retirer un article\n", totalVolume - volumeConstraint);
|
|
return -1;
|
|
}
|
|
if (*priceConstraint != -1 && totalPrice > *priceConstraint)
|
|
{
|
|
printf("Attention, la contrainte de budget maximum a été dépassé de %.2f\n", totalPrice - *priceConstraint);
|
|
if (*cagnotte < totalPrice)
|
|
{
|
|
printf("Le prix total excédant votre cagnotte, veuillez retirer un article\n");
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
printf("Vous pouvez utiliser votre cagnotte, dont le montant est de %.2f, entrez le montant à utiliser ou -1 si vous voulez retirer un article: ", *cagnotte);
|
|
scanf("%f", &cagnotteUse);
|
|
if (cagnotteUse == -1)
|
|
return -1;
|
|
while (cagnotteUse > *cagnotte || totalPrice-cagnotteUse > *priceConstraint)
|
|
{
|
|
if (cagnotteUse > *cagnotte)
|
|
printf("Erreur: vous ne pouvez pas utiliser plus que vous n'avez, réessayez ou entrer -1 si vous souhaitez retirer un article: ");
|
|
if (totalPrice-cagnotteUse > *priceConstraint)
|
|
printf("Erreur: vous n'avez pas utilisé assez de votre cagnotte, vous devez utiliser au moins %.2f, veuillez rentrer le montant à utiliser ou -1 si vous voulez retirer un article: ", totalPrice - *priceConstraint);
|
|
scanf("%f", &cagnotteUse);
|
|
if (cagnotteUse == -1)
|
|
return -1;
|
|
*cagnotte -= cagnotteUse;
|
|
*priceConstraint += cagnotteUse;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @brief Ajoute un article au panier et calcule les différents attributs pour la fonction `display_basket`
|
|
* @param tab_reference: tableau des références des articles
|
|
* @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 basket_tab_ref: tableau des références du panier
|
|
* @param basket_tab_qte: tableau de la quantité de l'article du panier
|
|
* @param tlog: taille logique du tableau `tab_reference`
|
|
* @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)
|
|
{
|
|
int ref_to_add, qte_to_add, trouve, index_ajout, i;
|
|
float total_weight[], total_volume[], total_price[], total_cagnotte[];
|
|
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);
|
|
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);
|
|
}
|
|
basket_tab_ref[index_ajout] = ref_to_add;
|
|
printf("Quelle quantité de cet article souhaitez-vous ajouter au panier?");
|
|
scanf("%d", &qte_to_add);
|
|
while (qte_to_add <= 0)
|
|
{
|
|
printf("Vous ne pouvez pas ajouter une quantité nulle ou négative ressayez");
|
|
scanf("%d", &qte_to_add);
|
|
}
|
|
basket_tab_qte[index_ajout] = ref_to_add;
|
|
|
|
|
|
index_ajout = basket_tab_ref[i];
|
|
|
|
total_weight[i] = total_weight + weight[index_ajout]*qte_to_add;
|
|
total_volume[i] = total_volume + volume[index_ajout]*qte_to_add;
|
|
total_price[i] = total_price + 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, weight_constraint, volume_constraint, tlog, tlog_basket);
|
|
|
|
return tlog_basket;
|
|
}
|
|
|
|
int reinit_basket(int tlog_basket)
|
|
{
|
|
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
|
|
return tlog_basket;
|
|
}
|
|
|
|
int 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);
|
|
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);
|
|
}
|
|
if (basket_tab_qte[index_to_del]>1)
|
|
{
|
|
printf("Combien d'articles e ce type voulez-vous supprimer?");
|
|
scanf("%d",&qte_to_del);
|
|
while(qte_to_del<=0)
|
|
{
|
|
printf("Erreur, vous ne pouvez pas supprimer un nombre nul ou négatif d'articles, réssayez");
|
|
//on pourrait supprimer un nombre nul d'articles,
|
|
//mais ça n'a pas de sens car cette fonction à pour but de supprimer des articles
|
|
scanf("%d",&qte_to_del);
|
|
}
|
|
while(basket_tab_qte[index_to_del]-qte_to_del>=0)
|
|
{
|
|
printf("Erreur, vous ne pouvez pas supprimer plus d'articles que vous n'en avez dans votre panier, ressayez");
|
|
scanf("%d",&qte_to_del);
|
|
}
|
|
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--)
|
|
{
|
|
basket_tab_ref[i]=basket_tab_ref[i+1];
|
|
basket_tab_qte[i]=basket_tab_qte[i+1];
|
|
}
|
|
return tlog_basket-1;
|
|
}
|
|
|
|
}
|
|
|
|
} |