Menu
Coddy logo textTech

재고 보고서 출력

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 34번째.

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> 또는 <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;
}

로직과 흐름의 모든 레슨