[Buổi 31][Củng cố OOP nâng cao][HW] Bài 4: Đơn hàng hợp lệ và discount strategy


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Đơn hàng hợp lệ và discount strategy

Bối cảnh

Một order gồm subtotal và discount strategy. Discount abstract có apply(subtotal): NONE giữ nguyên; PERCENT p giảm p%; FIXED x giảm x nhưng không dưới0. Order invalid nếu subtotal<0, percent ngoài[0,100], fixed<0; khi invalid ném invalid_argument và in ERROR.

Hệ thống xử lý batch order, in final total từng order, tổng doanh thu và số lỗi. Một helper template clampNonNegative<T> có thể dùng để minh họa tái sử dụng generic cho fixed discount. Bài Medium tích hợp polymorphism + exception + generic helper trong một workflow.

B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.

Yêu cầu

  1. Abstract Discount + three strategies.
  2. Validate params bằng exception.
  3. In final từng order/ERROR.
  4. Summary REVENUE và ERRORS.

Input

Dòng 1 n; mỗi dòng N subtotal, P subtotal percent, F subtotal fixed.

Output

n dòng result; 2 summary.

Ràng buộc

1≤n≤5000.

Ví dụ 1

Input

4
N 100
P 200 10
F 50 20
F 10 20

Output

100.00
180.00
30.00
0.00
REVENUE 310.00
ERRORS 0

Giải thích

N100→100; P200 giảm10%→180; F50-20→30; F10-20 clamp0. Revenue310, không lỗi. Output bốn total rồi REVENUE 310.00, ERRORS 0.

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

3
P 100 101
F 100 -1
N -5

Output

ERROR
ERROR
ERROR
REVENUE 0.00
ERRORS 3

Giải thích

Percent101 invalid, fixed -1 invalid, subtotal -5 invalid. Cả ba order ERROR và revenue0, errors3.

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: HOMEWORK
  • Độ khó: Medium
  • Concepts: polymorphism, exception, templates or generic helper, validated order total
  • 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