[Buổi 27][Củng cố OOP cơ bản][HW] Bài 3: Thư viện có hạn mức mượn theo độc giả


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Thư viện có hạn mức mượn theo độc giả

Bối cảnh

Một thư viện quản lý BookMember. Book biết id và trạng thái available. Member biết id, limit và danh sách book đang mượn. Quy tắc borrow chỉ thành công khi book tồn tại/available, member tồn tại/chưa đạt limit và chưa giữ book đó. Return chỉ thành công khi member thực sự đang giữ book.

Command thêm book/member, borrow/return và query MEMBER id in số sách đang mượn, AVAILABLE in tổng book available. Manager/Library chịu trách nhiệm phối hợp hai object; Book và Member tự bảo vệ state riêng.

Bài tích hợp B27 cần thể hiện rõ trách nhiệm giữa các class. Object nhỏ bảo vệ state cục bộ; class quản lý/aggregate root chịu trách nhiệm tìm object và phối hợp workflow. Một thao tác liên quan nhiều object phải kiểm tra đủ điều kiện trước khi mutation để tránh trạng thái chỉ cập nhật một nửa.

Yêu cầu

  1. Classes Book, Member, Library.
  2. Book available private; Member borrowed private.
  3. Library phối hợp BORROW/RETURN atomic.
  4. Queries.

Input

Dòng 1 q; q command.

Output

Mỗi command một dòng.

Ràng buộc

q≤5000, member limit>0.

Ví dụ 1

Input

12
ADDBOOK B1
ADDBOOK B2
ADDMEMBER M1 1
BORROW M1 B1
BORROW M1 B2
AVAILABLE
MEMBER M1
RETURN M1 B1
BORROW M1 B2
AVAILABLE
MEMBER M1
RETURN M1 B1

Output

OK
OK
OK
OK
FAIL
1
1
OK
OK
1
1
FAIL

Giải thích

M1 limit1 mượn B1 thành công; mượn B2 fail do đạt limit. Available còn1 và MEMBER M1=1. Return B1 OK, sau đó borrow B2 OK. Available lại1 và member count1. Return B1 cuối fail vì M1 không còn giữ B1.

Ví dụ này cũng kiểm tra trách nhiệm giữa manager và object domain: lookup/điều phối được thực hiện ở lớp quản lý, còn object tự quyết định mutation hợp lệ của state riêng. Vì vậy sau mỗi lệnh, các query tiếp theo phản ánh một trạng thái nhất quán thay vì các field bị sửa rời rạc.

Ví dụ 2

Input

6
BORROW X B
RETURN X B
MEMBER X
AVAILABLE
ADDMEMBER X 0
ADDBOOK B

Output

FAIL
FAIL
NOT_FOUND
0
FAIL
OK

Giải thích

Borrow/return với object chưa tồn tại fail; MEMBER X NOT_FOUND, AVAILABLE0. AddMember limit0 fail. AddBook B cuối OK.

Ví dụ này cũng kiểm tra trách nhiệm giữa manager và object domain: lookup/điều phối được thực hiện ở lớp quản lý, còn object tự quyết định mutation hợp lệ của state riêng. Vì vậy sau mỗi lệnh, các query tiếp theo phản ánh một trạng thái nhất quán thay vì các field bị sửa rời rạc.

Thông tin học tập

  • Module: M07
  • Buổi: B27
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: multiple classes, private state, cross-object rules, vector, command simulation
  • Giới hạn kiến thức: B01-B27
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo