Menu
Coddy logo textTech

Impression du rapport d'inventaire

Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 34 sur 56.

challenge icon

Défi

Facile

Complétez votre système de suivi d'inventaire en implémentant une fonctionnalité de rapport d'inventaire complet. Cette dernière leçon démontre comment itérer à travers une map entière et présenter toutes les données stockées dans un format propre et organisé.

Commencez avec l'inventaire suivant :

map<string, int> inventory = {
    {"apples", 50},
    {"bananas", 30},
    {"oranges", 25},
    {"grapes", 40},
    {"strawberries", 15}
};

Votre programme doit :

  1. Générer un rapport d'inventaire complet qui affiche tous les articles et leurs quantités actuelles
  2. Calculer et afficher le nombre total d'articles différents dans l'inventaire
  3. Calculer et afficher la quantité totale de tous les articles combinés
  4. Identifier et afficher l'article ayant la quantité la plus élevée
  5. Identifier et afficher l'article ayant la quantité la plus basse

Utilisez exactement le format de sortie suivant :

En-tête du rapport d'inventaire :

===== INVENTORY REPORT =====

Tous les articles (par ordre alphabétique) :

apples: 50
bananas: 30
grapes: 40
oranges: 25
strawberries: 15

Statistiques récapitulatives :

===== SUMMARY =====
Total items: 5
Total quantity: 160
Highest stock: apples (50)
Lowest stock: strawberries (15)

Utilisez une boucle for basée sur une plage (range-based for loop) pour itérer à travers toute la map d'inventaire. Pour chaque paire clé-valeur, accédez au nom de l'article avec pair.first et à la quantité avec pair.second. La map maintient automatiquement l'ordre alphabétique lors de l'itération, donc aucun tri supplémentaire n'est nécessaire.

Pour trouver l'article avec la quantité la plus basse, initialisez votre variable lowestQuantity à INT_MAX (la plus grande valeur entière possible, disponible après avoir inclus <climits> ou <iostream>). Cela garantit que la quantité du tout premier article sera toujours inférieure à la valeur de départ, de sorte que la comparaison fonctionne correctement quelles que soient les quantités réelles dans l'inventaire.

Essayez vous-même

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // Initialize inventory with existing items
    map<string, int> inventory;
    inventory["apples"] = 50;
    inventory["bananas"] = 30;
    inventory["oranges"] = 25;
    
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        string itemName;
        int quantity;
        cin >> itemName >> quantity;
        
        if (inventory.count(itemName) == 0) {
            cout << "Error: " << itemName << " not found in inventory" << endl;
        } else if (inventory[itemName] < quantity) {
            cout << "Error: Cannot remove " << quantity << " " << itemName << ". Only " << inventory[itemName] << " in stock" << endl;
        } else {
            inventory[itemName] -= quantity;
            cout << "Removed " << quantity << " " << itemName << ". New total: " << inventory[itemName] << endl;
        }
    }
    
    cout << "Final Inventory:" << endl;
    for (auto& item : inventory) {
        cout << item.first << ": " << item.second << endl;
    }
    
    return 0;
}

Toutes les leçons de Logique et Flux