Menu
CoddyTech

打印库存报告

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 34 课,共 56 课。

challenge icon

挑战

简单

通过实现全面的库存报告功能,完成你的库存跟踪系统。这最后一课将演示如何遍历整个 map,并以清晰、有条理的格式展示所有存储的数据。

从以下库存开始:

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

你的程序应该:

  1. 生成完整的库存报告,显示所有商品及其当前数量
  2. 计算并显示库存中不同商品的总数
  3. 计算并显示所有商品的总数量
  4. 找出并显示数量最多的商品
  5. 找出并显示数量最少的商品

使用以下确切的输出格式:

库存报告标题:

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

所有商品(按字母顺序排列):

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

汇总统计:

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

使用基于范围的 for 循环遍历整个库存 map。对于每个键值对,使用 pair.first 获取商品名称,使用 pair.second 获取数量。遍历时,map 会自动按字母顺序排列,因此不需要额外排序。

要找出数量最少的商品,请将 lowestQuantity 变量初始化为 INT_MAX(可表示的最大整数值,包含 <climits> 后即可使用)。这样,第一个商品的数量一定小于初始值,无论库存中的实际数量是多少,比较都能正确进行。

亲手试试

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

逻辑与流程中的所有课

自己练习: C++ 在线编译器