Menu
Coddy logo textTech

Stampa del rapporto di inventario

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 34 di 56.

challenge icon

Sfida

Facile

Completa il tuo sistema di monitoraggio dell'inventario implementando una funzionalità completa per generare report sull'inventario. Questa lezione finale mostra come scorrere un'intera mappa e presentare tutti i dati memorizzati in un formato chiaro e organizzato.

Inizia con il seguente inventario:

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

Il tuo programma dovrebbe:

  1. Generare un report completo dell'inventario che mostri tutti gli articoli e le relative quantità attuali
  2. Calcolare e mostrare il numero totale di articoli diversi presenti nell'inventario
  3. Calcolare e mostrare la quantità totale di tutti gli articoli
  4. Individuare e mostrare l'articolo con la quantità più alta
  5. Individuare e mostrare l'articolo con la quantità più bassa

Usa il seguente formato di output esatto:

Intestazione del report dell'inventario:

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

Tutti gli articoli (in ordine alfabetico):

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

Statistiche riepilogative:

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

Usa un ciclo for basato su intervallo per scorrere l'intera mappa dell'inventario. Per ogni coppia chiave-valore, accedi al nome dell'articolo con pair.first e alla quantità con pair.second. Durante l'iterazione, la mappa mantiene automaticamente l'ordine alfabetico, quindi non è necessario alcun ordinamento aggiuntivo.

Per trovare l'articolo con la quantità più bassa, inizializza la variabile lowestQuantity a INT_MAX (il valore intero più grande possibile, disponibile dopo aver incluso <climits>). In questo modo, la quantità del primissimo articolo sarà sempre inferiore al valore iniziale e il confronto funzionerà correttamente, indipendentemente dalle quantità effettive presenti nell'inventario.

Provalo tu

#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;
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online