Menu
Coddy logo textTech

Imprimir el informe de inventario

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 34 de 56.

challenge icon

Desafío

Fácil

Completa tu sistema de seguimiento de inventario implementando una función de informe de inventario exhaustivo. Esta lección final demuestra cómo iterar a través de un mapa completo y presentar todos los datos almacenados en un formato limpio y organizado.

Comienza con el siguiente inventario:

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

Tu programa debe:

  1. Generar un informe de inventario completo que muestre todos los artículos y sus cantidades actuales
  2. Calcular y mostrar el número total de artículos diferentes en el inventario
  3. Calcular y mostrar la cantidad total de todos los artículos combinados
  4. Identificar y mostrar el artículo con la cantidad más alta
  5. Identificar y mostrar el artículo con la cantidad más baja

Utiliza exactamente el siguiente formato de salida:

Encabezado del informe de inventario:

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

Todos los artículos (en orden alfabético):

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

Estadísticas de resumen:

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

Utiliza un bucle for basado en rangos para iterar a través de todo el mapa inventory. Para cada par clave-valor, accede al nombre del artículo con pair.first y a la cantidad con pair.second. El mapa mantiene automáticamente el orden alfabético al iterar, por lo que no es necesario realizar ninguna ordenación adicional.

Para encontrar el artículo con la cantidad más baja, inicializa tu variable lowestQuantity con INT_MAX (el valor entero más grande posible, disponible tras incluir <climits> o <iostream>). Esto asegura que la cantidad del primer artículo siempre sea menor que el valor inicial, de modo que la comparación funcione correctamente independientemente de las cantidades reales en el inventario.

Pruébalo tú mismo

#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 las lecciones de Lógica y Flujo