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 - Fournitureadapté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 - bilanqui é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