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

Conclua seu sistema de acompanhamento de inventory implementando um recurso abrangente de relatório de inventory. Esta lição final demonstra como iterar por um map inteiro e apresentar todos os dados armazenados em um formato limpo e organizado.

Comece com o seguinte inventory:

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

Seu programa deve:

  1. Gerar um relatório completo de inventory que exiba todos os items e suas quantities atuais
  2. Calcular e exibir o número Total de items diferentes no inventory
  3. Calcular e exibir a quantity Total de todos os items combinados
  4. Identificar e exibir o item com a maior quantity
  5. Identificar e exibir o item com a menor quantity

Use o seguinte formato exato de saída:

Cabeçalho do relatório de inventory:

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

Todos os items (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 para iterar por todo o map de inventory. Para cada par de chave-valor, acesse o nome do item com pair.first e a quantity com pair.second. O map mantém automaticamente a ordem alfabética durante a iteração, portanto nenhuma classificação adicional é necessária.

Para encontrar o item com a menor quantity, inicialize sua variável lowestQuantity com INT_MAX (o maior valor inteiro possível, disponível após incluir <climits>). Isso garante que a quantity do primeiro item será sempre menor que o valor inicial, fazendo com que a comparação funcione corretamente independentemente das quantities reais no inventory.

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

Pratique por conta própria: Compilador de C++ online