Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution
    Đăng nhập
    Đăng nhập

    Đề bài: Quản lý đơn hàng đa hình OnlineOrder và StoreOrder

    📖Cần ôn lý thuyết? Đọc bài giảng Buổi 5: Lập trình hướng đối tượng (1): lớp và đối tượng — khóa Lập trình Java

    Một cửa hàng có 2 kênh bán hàng: online và tại cửa hàng.

    1. Lớp trừu tượng Order:
      • id (String), subtotal (double) — tổng tiền hàng trước phí/giảm.
      • Phương thức trừu tượng double finalTotal().
      • Phương thức String describe() trả về id + "|" + subtotal (2 chữ số TP).
    2. Lớp OnlineOrder extends Order:
      • Thêm shippingFee (double).
      • finalTotal = subtotal + shippingFee.
      • Nếu subtotal >= 500000 thì miễn phí ship (shippingFee không cộng vào).
    3. Lớp StoreOrder extends Order:
      • Thêm discount (double, 0-1) — tỉ lệ giảm giá khi mua trực tiếp.
      • finalTotal = subtotal * (1 - discount).
    4. Đọc N. Mỗi dòng:
      • ON <id> <subtotal> <shippingFee>
      • ST <id> <subtotal> <discount>
    5. Sau đó đọc Q truy vấn, mỗi dòng:
      • TOTAL <id> → in <id> <finalTotal> (2 chữ số TP).
      • DESC <id> → in <id> <describe> (chính là id + "|" + subtotal, ví dụ ABC|100.00).
    6. Cuối cùng in GRAND <tổng finalTotal của tất cả đơn> (2 chữ số TP).
    • Định dạng đầu vào:
      • Dòng 1: N (1 ≤ N ≤ 100)
      • N dòng đơn hàng theo format trên
      • Dòng kế: Q (0 ≤ Q ≤ 200)
      • Q dòng truy vấn
    • Ràng buộc đầu vào:
      • 0 ≤ subtotal, shippingFee ≤ 10⁸
      • 0 ≤ discount ≤ 1
      • id duy nhất, không khoảng trắng
    • Định dạng đầu ra:
      • Mỗi truy vấn in 1 dòng
      • Dòng cuối GRAND <tổng> (2 chữ số thập phân)

    Ví dụ:

    Đầu vào:

    3
    ON A 300000 30000
    ON B 600000 30000
    ST C 1000000 0.1
    3
    TOTAL A
    TOTAL B
    TOTAL C
    

    Đầu ra:

    A 330000.00
    B 600000.00
    C 900000.00
    GRAND 1830000.00
    

    Giải thích:

    A online 300K < 500K → +30K ship = 330K. B online 600K ≥ 500K → miễn ship = 600K. C store 1M × 0.9 = 900K. GRAND = 330K + 600K + 900K = 1830000.

    Đầu vào:

    2
    ON X 500000 50000
    ST Y 200000 0
    2
    DESC X
    TOTAL Y
    

    Đầu ra:

    X X|500000.00
    Y 200000.00
    GRAND 700000.00
    

    Giải thích:

    X subtotal = 500K đúng ngưỡng → miễn ship. DESC X in 'X X|500000.00'. Y store discount 0 → 200K. GRAND = 500K + 200K = 700000.

    Đầu vào:

    4
    ON o1 100000 20000
    ON o2 100000 30000
    ST s1 100000 0.5
    ST s2 200000 0.25
    4
    TOTAL o1
    TOTAL o2
    TOTAL s1
    TOTAL s2
    

    Đầu ra:

    o1 120000.00
    o2 130000.00
    s1 50000.00
    s2 150000.00
    GRAND 450000.00
    

    Đầu vào:

    1
    ST Z 1000000 1
    2
    TOTAL Z
    DESC Z
    

    Đầu ra:

    Z 0.00
    Z Z|1000000.00
    GRAND 0.00
    

    Giải thích:

    Discount 100% → finalTotal = 0. describe vẫn in subtotal gốc.

    Đầu vào:

    3
    ON A 0 100000
    ST B 0 0.5
    ON C 499999 1
    3
    TOTAL A
    TOTAL B
    TOTAL C
    

    Đầu ra:

    A 100000.00
    B 0.00
    C 500000.00
    GRAND 600000.00
    

    Giải thích:

    Edge: A subtotal 0 < 500K → +ship = 100K. B subtotal 0 × 0.5 = 0. C 499999 < 500K → +1 = 500000.

    Đầu vào:

    2
    ON O 1000000 99999
    ST S 1000000 0
    0
    

    Đầu ra:

    GRAND 2000000.00
    

    Giải thích:

    Q=0 nên không có truy vấn, chỉ in GRAND. O miễn ship = 1M. S 1M × 1 = 1M. GRAND = 2M.

    Chủ đề

    🧩 Lập trình hướng đối tượng☕ JavaJavaJava: OOPTất cả môn học

    Đang tải editor...