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.
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:
- 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
- Tính và hiển thị tổng số mặt hàng khác nhau trong kho
- Tính và hiển thị tổng số lượng của tất cả mặt hàng
- Xác định và hiển thị mặt hàng có số lượng cao nhất
- 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: 15Cá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
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online