Menu
CoddyTech

在庫レポートの出力

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部。レッスン 34/56。

challenge icon

チャレンジ

簡単

包括的な在庫レポート機能を実装して、在庫管理システムを完成させましょう。この最後のレッスンでは、マップ全体を反復処理し、保存されているすべてのデータを整理された見やすい形式で表示する方法を説明します。

次の在庫データから始めましょう。

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ループを使って、在庫マップ全体を反復処理してください。各キーと値のペアについて、pair.firstで品目名に、pair.secondで数量にアクセスします。マップは反復処理時に自動的にアルファベット順を維持するため、追加の並べ替えは必要ありません。

数量が最も少ない品目を見つけるには、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++オンラインコンパイラ