Bài 29.5. Hệ Thống Quản Lý Đơn Hàng Giao Hàng - [Độ khó: Khó]
Bài 29.5. Hệ Thống Quản Lý Đơn Hàng Giao Hàng - [Độ khó: Khó]
Bạn được giao nhiệm vụ phát triển một phần của hệ thống quản lý đơn hàng cho một công ty thương mại điện tử lớn. Hệ thống cần lưu trữ thông tin chi tiết về từng đơn hàng, bao gồm các sản phẩm được mua, tổng trọng lượng và tổng giá trị đơn hàng, trạng thái giao hàng, và thời gian đặt hàng chính xác. Đặc biệt, công ty muốn có khả năng lọc và thống kê các đơn hàng dựa trên nhiều tiêu chí khác nhau, cũng như xác định các sản phẩm bán chạy nhất.
Bạn cần định nghĩa các cấu trúc struct
phù hợp để quản lý dữ liệu này và viết chương trình thực hiện các yêu cầu dưới đây:
Định nghĩa Structs:
// Cấu trúc đại diện cho một sản phẩm
struct SanPham {
std::string maSP;
std::string tenSP;
double gia;
double trongLuong; // kg
};
// Cấu trúc đại diện cho thời gian
struct ThoiGian {
int ngay;
int thang;
int nam;
int gio;
int phut;
};
// Cấu trúc đại diện cho một đơn hàng
struct DonHang {
std::string maDH;
std::string maKH; // Mã khách hàng
std::vector<SanPham> danhSachSP; // Danh sách các sản phẩm trong đơn hàng
std::string trangThai; // Ví dụ: "Dadat", "DangGiao", "Dagiao"
ThoiGian thoiGianDatHang;
double tongGiaTri; // Tổng giá trị đơn hàng
double tongTrongLuong; // Tổng trọng lượng đơn hàng
};
INPUT FORMAT
Dòng đầu tiên chứa một số nguyên dương N
(\(1 \le N \le 50\)), là số lượng đơn hàng.
Tiếp theo là thông tin của N
đơn hàng, mỗi đơn hàng bắt đầu bằng một dòng riêng:
MaDH MaKH Trang_Thai Ngay Thang Nam Gio Phut
MaDH
: Chuỗi ký tự, tối đa 10 ký tự.MaKH
: Chuỗi ký tự, tối đa 10 ký tự.Trang_Thai
: Chuỗi ký tự, ví dụ "Dadat", "DangGiao", "Dagiao".Ngay Thang Nam Gio Phut
: Các số nguyên hợp lệ cho thời gian. Năm từ 2023 đến 2024.
Ngay sau dòng thông tin đơn hàng là một số nguyên K
(\(1 \le K \le 10\)), là số lượng sản phẩm trong đơn hàng đó.
Tiếp theo là K
dòng, mỗi dòng chứa thông tin của một sản phẩm trong đơn hàng:
MaSP TenSP Gia Trong_Luong
MaSP
: Chuỗi ký tự, tối đa 10 ký tự.TenSP
: Chuỗi ký tự (có thể có khoảng trắng, nhưng được nhập nguyên dòng), tối đa 30 ký tự.Gia
: Số thực, từ 1.0 đến 1,000,000.0.Trong_Luong
: Số thực, từ 0.01 đến 100.0.
Sau khi nhập hết N
đơn hàng, có một dòng cuối cùng chứa 2 giá trị Ngay_Bat_Dau Thang_Bat_Dau Nam_Bat_Dau Ngay_Ket_Thuc Thang_Ket_Thuc Nam_Ket_Thuc
- Các số nguyên hợp lệ cho thời gian.
OUTPUT FORMAT
In ra 3 phần kết quả:
- Danh sách đơn hàng "ĐangGiao" trong khoảng thời gian cho trước:
- In ra
CAC DON HANG DANG GIAO TRONG KHOANG THOI GIAN:
- Với mỗi đơn hàng thỏa mãn, in ra trên một dòng:
MaDH MaKH Tong_Gia_Tri Tong_Trong_Luong Ngay/Thang/Nam Gio:Phut
(Tong_Gia_Tri và Tong_Trong_Luong được làm tròn đến 2 chữ số thập phân). Nếu không có đơn hàng nào, in "Khong co don hang nao."
- In ra
- Sản phẩm bán chạy nhất:
- In ra
SAN PHAM BAN CHAY NHAT:
- Tìm sản phẩm có tổng số lượng xuất hiện trong tất cả các đơn hàng là cao nhất. In ra:
MaSP TenSP
- Nếu có nhiều sản phẩm cùng số lượng bán chạy nhất, in ra sản phẩm có
MaSP
nhỏ nhất theo thứ tự từ điển.
- In ra
Ví dụ:
Input:
2
DH001 KH001 DangGiao 10 11 2023 10 30
2
SP001 Sach_Lap_Trinh 250000.00 1.20
SP002 Chuot_Gaming 500000.00 0.30
DH002 KH002 Dadat 15 11 2023 14 00
1
SP001 Sach_Lap_Trinh 250000.00 1.20
10 11 2023 20 11 2023
Output:
CAC DON HANG DANG GIAO TRONG KHOANG THOI GIAN:
DH001 KH001 750000.00 1.50 10/11/2023 10:30
SAN PHAM BAN CHAY NHAT:
SP001 Sach_Lap_Trinh
Giải thích:
- Đơn hàng DH001:
- MaDH: DH001, MaKH: KH001, Trang_Thai: DangGiao, ThoiGianDatHang: 10/11/2023 10:30
- Sản phẩm: SP001 (Sach_Lap_Trinh, 250000.00, 1.20), SP002 (Chuot_Gaming, 500000.00, 0.30)
- Tổng giá trị: 250000.00 + 500000.00 = 750000.00
- Tổng trọng lượng: 1.20 + 0.30 = 1.50
- Đơn hàng DH002:
- MaDH: DH002, MaKH: KH002, Trang_Thai: Dadat, ThoiGianDatHang: 15/11/2023 14:00
- Sản phẩm: SP001 (Sach_Lap_Trinh, 250000.00, 1.20)
- Tổng giá trị: 250000.00
- Tổng trọng lượng: 1.20
- Khoảng thời gian lọc: Từ 10/11/2023 đến 20/11/2023.
- Lọc đơn hàng "ĐangGiao" trong khoảng thời gian:
- DH001: Trạng thái "DangGiao", thời gian 10/11/2023 10:30 nằm trong khoảng. -> Được chọn.
- DH002: Trạng thái "Dadat" (không phải "DangGiao"). -> Không được chọn.
- Sản phẩm bán chạy nhất:
- SP001 (Sach_Lap_Trinh) xuất hiện 2 lần (trong DH001 và DH002).
- SP002 (Chuot_Gaming) xuất hiện 1 lần (trong DH001).
- SP001 là sản phẩm bán chạy nhất.
Comments