[Buổi 27][Củng cố OOP cơ bản][ADV] Bài 1: Final Core Simulator — hệ thống đặt chỗ sự kiện
Final Core Simulator — hệ thống đặt chỗ sự kiện
Bối cảnh
Final Core Simulator mô phỏng một hệ thống đặt chỗ sự kiện nhưng vẫn chỉ dùng OOP Basic. Có ba thực thể:
Event(id, capacity, booked): bảo vệ0≤booked≤capacity.Booking(id, eventId, seats, status)với statusACTIVE/CANCELLED.BookingSystem: sở hữu collections và phối hợp workflow.
Commands:
EVENT eid capacity: thêm event nếu ID mới, capacity>0.BOOK bid eid seats: booking ID mới, event tồn tại và còn đủ chỗ.CANCEL bid: chỉ booking ACTIVE; trả seats cho event.EVENTINFO eid:booked availablehoặcNOT_FOUND.BOOKING bid:eid seats statushoặcNOT_FOUND.TOP k: in tối đa k event có booked nhiều nhất; tie tỷ lệ lấp đầy cao hơn; tie ID tăng. Mỗi item dạngeid:bookedtrên một dòng duy nhất cách space.TOTAL: tổng seats đang booked trên mọi event.
Bài Advanced tích hợp class responsibility, invariant, lifecycle và ranking query. Không dùng inheritance/polymorphism; mục tiêu là kiểm tra khả năng thiết kế một core domain đủ lớn trước Final Project thật.
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
- Classes Event, Booking, BookingSystem.
- Unique IDs.
- BOOK/CANCEL atomic.
- TOP ranking đúng 3 tiêu chí.
- TOTAL active booked seats.
Input
Dòng 1 q; q command.
Output
Mỗi command một dòng.
Ràng buộc
q≤5000, capacities/seats≤1e9.
Ví dụ 1
Input
14
EVENT E1 10
EVENT E2 5
BOOK B1 E1 6
BOOK B2 E2 4
TOTAL
TOP 2
EVENTINFO E1
CANCEL B1
TOTAL
TOP 2
BOOKING B1
BOOK B3 E1 10
EVENTINFO E1
BOOKING B3
Output
OK
OK
OK
OK
10
E1:6 E2:4
6 4
OK
4
E2:4 E1:0
E1 6 CANCELLED
OK
10 0
E1 10 ACTIVE
Giải thích
Sau B1/B2, booked E1=6, E2=4 nên TOTAL10 và TOP E1:6 E2:4. EVENTINFO E1 là 6 4. Cancel B1 trả6 chỗ, TOTAL còn4; TOP đổi thành E2 trước E1. B1 status CANCELLED. BOOK B3 E1 10 thành công, EVENTINFO 10 0, BOOKING B3 E1 10 ACTIVE.
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
7
TOP 3
TOTAL
EVENT E 0
EVENT E 5
EVENT E 5
BOOK B X 1
EVENTINFO E
Output
EMPTY
0
FAIL
OK
FAIL
FAIL
0 5
Giải thích
TOP khi chưa có event là EMPTY, TOTAL0. EVENT E0 fail vì capacity0; thêm E5 OK; thêm trùng E fail. BOOK vào X fail vì event không tồn tại. EVENTINFO E trả 0 5.
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: ADVANCED
- Độ khó: Hard
- Concepts: multi-class design, private invariants, booking lifecycle, multiple indexes, sorting, summary queries
- Giới hạn kiến thức: B01-B27
- Time limit: 2 second(s)
- Memory limit: 256 MB
- Point: 100
Comments