Exercice : Fournitures#
À faire
2025-2026
Extraire le code dans un fichier pour le compiler.
Une entreprise vend des fournitures de bureau (crayon, gomme, ciseaux, …). Chaque fourniture stockée dans la réserve est identifiée par un code numérique unique (ex : 345), un libellé exprimé sous la forme d’une chaîne de caractères (ex. stylo feutre pointe fine marque Boc), un prix d’achat unitaire au fournisseur (ex. 1,5 euro), le nombre d’items achetés au fournisseur et le nombre d’items déjà vendus.
Chaque fin d’année, l’entreprise effectue son inventaire, i.e. décompte, pour chaque fourniture, le nombre d’items théoriquement en stock (c.à.d. le nombre d’items achetés au fournisseur moins le nombre d’items vendus) puis calcule le montant total du stock (somme des prix d’achat unitaire multipliés par les nombres d’items théoriquement en stock).
Définissez une structure
Fourniture
adaptée à la représentation des informations apparaissant dans l’énoncé ci-dessus.BEGIN SOLUTION
struct Fourniture{ string libelle; float prix; int code, nbAchat, nbVendu; };
END SOLUTION
Définissez la procédure permettant de saisir (lire au clavier) les informations relatives à une fourniture et de les transmettre en résultat.
BEGIN SOLUTION
void litFourniture(Fourniture &f){ cout << "Entrez le code, le libellé et le prix "<< endl; cin >> f.code >> f.libelle >> f.prix ; do { cout << "nb achetés et nb vendus " << endl; cin >> f.nbAchat >> f.nbVendu ; } while ((f.nbAchat < 0) or (f.nbVendu > f.nbAchat) ); }
END SOLUTION
Définissez la procédure permettant d’afficher les informations relatives à une fourniture donnée.
BEGIN SOLUTION
void ecritFourniture(Fourniture f) { cout << "la fourniture " << f.libelle << " de code " << f.code << " commandée " << f.nbAchat << " fois, a ete vendue " << f.nbVendu << " fois" << endl; }
END SOLUTION
Définissez la procédure qui met à jour une fourniture \(f\) donnée, quand une vente de \(n\) unités de cette fourniture vient d’être effectuée.
BEGIN SOLUTION
void maj(Fourniture &f, int n) { f.nbVendu += n; }
END SOLUTION
Définissez la procédure qui pour une fourniture \(f\) donnée, calcule et transmet en résultat le nombre d’items en stock et le montant correspondant.
BEGIN SOLUTION
void stock(Fourniture f, int &n, float &montant) { n = f.nbAchat - f.nbVendu; montant = n * f.prix; }
END SOLUTION
Quel type peut-on utiliser pour représenter l’ensemble des fournitures vendues par l’entreprise? Dans la suite de l’énoncé, on appellera cela un catalogue.
BEGIN SOLUTION
Il faut utiliser une forme de collection. Le plus simple est d’utiliser un vecteur. On peut utiliser aussi un tableau classique du C mais cela impose une taille fixe.
END SOLUTION
Définissez la procédure permettant de rajouter une nouvelle fourniture \(f\) donnée dans un catalogue \(c\) donné.
BEGIN SOLUTION
void ajouteAuCatalogue(vector<Fourniture> &c, Fourniture f) { c.push_back(f); }
END SOLUTION
Définissez la procédure ou fonction
bilan
qui étant donné un catalogue \(c\), affiche pour chaque fourniture, son libellé, le nombre d’éléments en stock et le montant correspondant, puis enfin, affiche la valeur totale du stock.BEGIN SOLUTION
void bilan(vector<Fourniture> c) { // ou (const vector<Fourniture> &c) int n; float m, sum = 0; Fourniture f; for (int i = 0; i < c.size(); i++){ f = c[i]; stock(f, n, m); cout << "il y a " << n << " " << f.libelle << " en euro, ca represente " << m << endl; sum += m; } cout << "le stock total vaut " << sum << endl; }
END SOLUTION
Définissez la procédure permettant de retirer une fourniture de code donné d’un catalogue \(c\) donné.
BEGIN SOLUTION
void retireCatalogue(vector<Fourniture> &c, int code) { int i = 0; while (i < c.size() && c[i].code != code) i++; if (i == c.size()) { cout << "la fourniture de code " << code << " n existe pas "; } else { // on supprime la i-ieme donc on decale le reste du tableau for (int j = i; j + 1 < c.size(); j++) c[j] = c[j + 1]; c.pop_back(); } }
END SOLUTION
Comment faudrait-il faire pour disposer d’un type
Catalogue
?BEGIN SOLUTION
using Catalogue = vector<Fourniture>;
END SOLUTION