Menu
Coddy logo textTech

Imprimindo o Relatório de Inventário

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 34 de 56.

challenge icon

Desafio

Fácil

Complete seu sistema de rastreamento de inventário implementando um recurso de relatório de inventário abrangente. Esta lição final demonstra como iterar por um mapa inteiro e apresentar todos os dados armazenados em um formato limpo e organizado.

Comece com o seguinte inventário:

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

Seu programa deve:

  1. Gerar um relatório de inventário completo que exiba todos os itens e suas quantidades atuais
  2. Calcular e exibir o número total de itens diferentes no inventário
  3. Calcular e exibir a quantidade total de todos os itens combinados
  4. Identificar e exibir o item com a maior quantidade
  5. Identificar e exibir o item com a menor quantidade

Use exatamente o seguinte formato de saída:

Cabeçalho do relatório de inventário:

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

Todos os itens (em ordem alfabética):

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

Estatísticas de resumo:

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

Use um loop for baseado em intervalo (range-based for loop) para iterar por todo o mapa de inventário. Para cada par chave-valor, acesse o nome do item com pair.first e a quantidade com pair.second. O mapa mantém automaticamente a ordem alfabética ao iterar, portanto, nenhuma ordenação adicional é necessária.

Para encontrar o item com a menor quantidade, inicialize sua variável lowestQuantity como INT_MAX (o maior valor inteiro possível, disponível após incluir <climits> ou <iostream>). Isso garante que a quantidade do primeiríssimo item sempre será menor que o valor inicial, para que a comparação funcione corretamente, independentemente das quantidades reais no inventário.

Experimente você mesmo

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

Todas as lições de Lógica & Fluxo