在庫レポートの出力
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 34/56。
チャレンジ
簡単包括的な在庫レポート機能を実装して、在庫追跡システムを完成させましょう。この最終レッスンでは、マップ全体を反復処理し、保存されているすべてのデータをクリーンで整理された形式で表示する方法を学びます。
次の在庫データから始めてください:
map<string, int> inventory = {
{"apples", 50},
{"bananas", 30},
{"oranges", 25},
{"grapes", 40},
{"strawberries", 15}
};プログラムで以下のことを行います:
- すべてのアイテムとその現在の数量を表示する完全な在庫レポートを生成する
- 在庫内の異なるアイテムの総数を計算して表示する
- すべてのアイテムを合計した総数量を計算して表示する
- 最も数量が多いアイテムを特定して表示する
- 最も数量が少ないアイテムを特定して表示する
以下の正確な出力形式を使用してください:
在庫レポートのヘッダー:
===== 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 ループを使用して、在庫マップ全体を反復処理します。各キーと値のペアについて、pair.first でアイテム名に、pair.second で数量にアクセスします。マップは反復処理時に自動的にアルファベット順を維持するため、追加のソートは不要です。
最も数量が少ないアイテムを見つけるには、lowestQuantity 変数を INT_MAX(<climits> または <iostream> をインクルードした後に使用可能な、整数として取り得る最大値)で初期化します。これにより、最初のアイテムの数量が常に開始値よりも小さくなることが保証され、在庫の実際の数量に関係なく比較が正しく機能します。
自分で試してみよう
#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;
}