[Buổi 31][Củng cố OOP nâng cao][WS] Bài 1: Extensible Checkout Engine


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Extensible Checkout Engine

Bối cảnh

Workshop tích hợp có kiểm soát: PaymentMethod là polymorphic interface; template helper tính tổng; invalid amount ném exception.

Chỉ dùng kỹ thuật nâng cao khi giải quyết một nhu cầu rõ.

Yêu cầu

  1. Template sumValues tính tổng vector<long long> item prices.
  2. PaymentMethod abstract fee(amount).
  3. Cash fee=0; Card fee=2% làm tròn xuống integer; EWallet fee=1%.
  4. Nếu item price <0 throw và in ERROR.
  5. Ngược lại in SUBTOTAL x, FEE y, TOTAL z.

Yêu cầu tổ chức code

Phải có ít nhất một template function, abstract PaymentMethod và try/catch.

Online Judge chấm output. Với bài nhạy về cấu trúc OOP, giảng viên review thêm source code để xác nhận học viên luyện đúng kỹ năng.

Input

Dòng 1 type n; dòng 2 n price. type C/D/E.

Output

Ba dòng hoặc ERROR.

Ràng buộc

1≤n≤2000, price trong long long.

Ví dụ 1

Input

C 3
100 200 300

Output

SUBTOTAL 600
FEE 0
TOTAL 600

Giải thích

Checkout type C dùng implementation không thu fee. Subtotal 100+200+300=600; fee0; total600. Ba dòng output phản ánh pipeline subtotal → strategy fee → final total.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Ví dụ 2

Input

D 2
1000 1000

Output

SUBTOTAL 2000
FEE 40
TOTAL 2040

Giải thích

Checkout type D có hai item1000 nên subtotal2000. Strategy D tính fee40 theo contract, total thành2040. Cùng engine nhưng strategy/runtime type khác làm thay đổi fee mà không đổi code tổng quát.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Thông tin học tập

  • Module: M08
  • Buổi: B31
  • Loại bài: WORKSHOP
  • Độ khó: Hard
  • Concepts: abstract class, polymorphism, templates, exceptions, integration
  • Giới hạn kiến thức: B01-B31
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo