[Buổi 25][Đóng gói][WS] Bài 1: Safe Product


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Safe Product

Bối cảnh

Một Product object phải luôn giữ price và stock hợp lệ, đồng thời hỗ trợ bán hàng và định giá lại.

Workshop kiểm tra interface nhỏ thay vì public data.

Yêu cầu

  1. Class Product: private id, price, stock.
  2. Public behavior: restock, sell, changePrice, inventoryValue, getStock.
  3. Command ADD x, SELL x, PRICE x, VALUE.
  4. ADD/SELL/PRICE in OK/FAIL; VALUE in giá trị kho.
  5. Cuối cùng in STOCK s PRICE p.

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

Không có public setter trực tiếp cho stock; data phải private.

Online Judge chấm output. Giảng viên có thể review thêm cấu trúc code để xác nhận học viên luyện đúng kỹ năng OOP của buổi.

Input

Dòng 1 id price stock q; q command.

Output

Mỗi query một dòng và state cuối.

Ràng buộc

0≤price,stock≤1e12.

Ví dụ 1

Input

P1 100 5 5
VALUE
SELL 2
VALUE
PRICE 80
VALUE

Output

500
OK
300
OK
240
STOCK 3 PRICE 80

Giải thích

VALUE đầu là 100*5=500. SELL2 thành công làm stock3, VALUE mới 300. PRICE80 hợp lệ làm giá80, VALUE tiếp theo 80*3=240. State cuối STOCK 3 PRICE 80. Mọi state mutation đi qua method chứ main không sửa field private.

Ví dụ này còn kiểm tra nguyên tắc atomic của interface: khi một điều kiện không đạt, object không được giữ lại thay đổi dở dang. Các dòng output vì vậy không chỉ phản ánh OK/FAIL mà còn xác nhận state sau mỗi command vẫn thỏa invariant của class.

Ví dụ 2

Input

X 0 0 4
VALUE
ADD 3
SELL 4
PRICE -1

Output

0
OK
FAIL
FAIL
STOCK 3 PRICE 0

Giải thích

X bắt đầu price0 stock0 nên VALUE=0. ADD3 thành công. SELL4 fail vì stock chỉ3; PRICE -1 fail vì giá âm. State cuối giữ stock3 price0, đúng STOCK 3 PRICE 0.

Ví dụ này còn kiểm tra nguyên tắc atomic của interface: khi một điều kiện không đạt, object không được giữ lại thay đổi dở dang. Các dòng output vì vậy không chỉ phản ánh OK/FAIL mà còn xác nhận state sau mỗi command vẫn thỏa invariant của class.

Thông tin học tập

  • Module: M07
  • Buổi: B25
  • Loại bài: WORKSHOP
  • Độ khó: Medium
  • Concepts: encapsulation, validation, private state, small public interface, object commands
  • Giới hạn kiến thức: B01-B25
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo