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.
Desafio
FácilComplete 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:
- Gerar um relatório de inventário completo que exiba todos os itens e suas quantidades atuais
- Calcular e exibir o número total de itens diferentes no inventário
- Calcular e exibir a quantidade total de todos os itens combinados
- Identificar e exibir o item com a maior quantidade
- 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: 15Estatí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
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores5Projeto: Ferramenta de Inventário
Configuração do ProjetoAdicionando e Atualizando Itens3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa