Menu
CoddyTech

In báo cáo hàng tồn kho

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 34 trên 56.

challenge icon

Thử thách

Dễ

Hoàn thiện hệ thống theo dõi kho hàng bằng cách triển khai tính năng báo cáo kho toàn diện. Bài học cuối này hướng dẫn cách lặp qua toàn bộ map và trình bày tất cả dữ liệu đã lưu theo định dạng rõ ràng, có tổ chức.

Bắt đầu với kho hàng sau:

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

Chương trình của bạn cần:

  1. Tạo báo cáo kho hàng đầy đủ, hiển thị tất cả mặt hàng và số lượng hiện tại của chúng
  2. Tính và hiển thị tổng số mặt hàng khác nhau trong kho
  3. Tính và hiển thị tổng số lượng của tất cả mặt hàng
  4. Xác định và hiển thị mặt hàng có số lượng cao nhất
  5. Xác định và hiển thị mặt hàng có số lượng thấp nhất

Sử dụng chính xác định dạng đầu ra sau:

Dòng tiêu đề báo cáo kho hàng:

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

Tất cả mặt hàng (theo thứ tự bảng chữ cái):

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

Các số liệu thống kê tổng hợp:

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

Dùng vòng lặp for dựa trên phạm vi (range-based for loop) để lặp qua toàn bộ map kho hàng. Với mỗi cặp khóa-giá trị, truy cập tên mặt hàng bằng pair.first và số lượng bằng pair.second. Map tự động duy trì thứ tự bảng chữ cái khi lặp qua các phần tử, nên bạn không cần sắp xếp thêm.

Để tìm mặt hàng có số lượng thấp nhất, hãy khởi tạo biến lowestQuantity bằng INT_MAX (giá trị số nguyên lớn nhất có thể, có sẵn sau khi thêm <climits>). Nhờ vậy, số lượng của mặt hàng đầu tiên luôn nhỏ hơn giá trị ban đầu, nên phép so sánh hoạt động chính xác bất kể số lượng thực tế trong kho.

Tự làm thử

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

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C++ online