Bài 36.4. Hệ Thống Xử Lý Sự Kiện Đa Tầng - [Độ khó: Khá]
Bài 36.4. Hệ Thống Xử Lý Sự Kiện Đa Tầng - [Độ khó: Khá]
Bạn đang xây dựng một hệ thống quản lý sự kiện cho một nền tảng trực tuyến. Các sự kiện có thể thuộc nhiều loại khác nhau như "Sự kiện Đăng nhập", "Sự kiện Giao dịch", "Sự kiện Lỗi hệ thống". Mỗi loại sự kiện yêu cầu một quy trình xử lý riêng, nhưng tất cả đều bắt đầu bằng việc ghi log và kết thúc bằng việc gửi thông báo. Các bước xử lý cụ thể ở giữa sẽ khác nhau.
Mô tả bài tập
Tạo một lớp cơ sở trừu tượng SuKien
(Event) với các thuộc tính chung như thoiGian
(timestamp) và maSuKien
(event code). Lớp này phải có một phương thức ảo xuLy()
(handle) đại diện cho quy trình xử lý sự kiện. Phương thức xuLy()
này nên bao gồm:
- Ghi log khởi đầu: In ra
"[ThoiGian] - Bat dau xu ly su kien [MaSuKien]"
. - Thực hiện các bước xử lý riêng biệt (sẽ được định nghĩa trong các lớp dẫn xuất).
- Gửi thông báo kết thúc: In ra
"[ThoiGian] - Hoan thanh xu ly su kien [MaSuKien]. Gui thong bao."
.
Kế thừa từ SuKien
để tạo ba lớp cụ thể, mỗi lớp có một phương thức xuLy()
đã ghi đè để thêm các bước xử lý riêng biệt:
SuKienDangNhap
(Login Event):- Thêm thuộc tính
tenTaiKhoan
(username). - Trong
xuLy()
, sau bước ghi log khởi đầu, in ra"- Kiem tra thong tin dang nhap cua tai khoan: [TenTaiKhoan]"
.
- Thêm thuộc tính
SuKienGiaoDich
(Transaction Event):- Thêm thuộc tính
maGiaoDich
(transaction ID) vàsoTien
(amount). - Trong
xuLy()
, in ra"- Xac thuc giao dich [MaGiaoDich] voi so tien: [SoTien]"
và"- Cap nhat so du tai khoan."
.
- Thêm thuộc tính
SuKienLoi
(Error Event):- Thêm thuộc tính
thongDiepLoi
(error message). - Trong
xuLy()
, in ra"- Ghi nhan loi: [ThongDiepLoi]"
và"- Thong bao den admin."
.
- Thêm thuộc tính
Chương trình của bạn sẽ đọc một danh sách các sự kiện và sau đó gọi phương thức xuLy()
cho từng sự kiện theo thứ tự.
INPUT FORMAT
Dòng đầu tiên chứa số nguyên N
(1 <= N <= 100), là số lượng sự kiện.
N
dòng tiếp theo, mỗi dòng mô tả một sự kiện:
- Nếu là sự kiện đăng nhập:
DANG_NHAP <thoi_gian> <ma_su_kien> <ten_tai_khoan>
- Nếu là sự kiện giao dịch:
GIAO_DICH <thoi_gian> <ma_su_kien> <ma_giao_dich> <so_tien>
- Nếu là sự kiện lỗi:
LOI <thoi_gian> <ma_su_kien> <thong_diep_loi>
Trong đó:
<thoi_gian>
: Chuỗi định dạngHH:MM:SS
.<ma_su_kien>
,<ma_giao_dich>
,<ten_tai_khoan>
,<thong_diep_loi>
: Chuỗi (không chứa khoảng trắng).<so_tien>
: Số thực dương.
Ràng buộc:
- Thời gian, mã sự kiện, tên tài khoản, mã giao dịch, thông điệp lỗi luôn hợp lệ.
- Số tiền giao dịch từ 0.01 đến 1,000,000.00.
OUTPUT FORMAT
Với mỗi sự kiện, in ra các bước xử lý của nó theo thứ tự. Mỗi dòng của output là một bước xử lý. Số tiền in với 2 chữ số thập phân.
Ví dụ:
Input:
2
DANG_NHAP 08:30:15 EVT001 user_alice
GIAO_DICH 09:05:00 EVT002 TXN123 500.75
Output:
08:30:15 - Bat dau xu ly su kien EVT001
- Kiem tra thong tin dang nhap cua tai khoan: user_alice
08:30:15 - Hoan thanh xu ly su kien EVT001. Gui thong bao.
09:05:00 - Bat dau xu ly su kien EVT002
- Xac thuc giao dich TXN123 voi so tien: 500.75
- Cap nhat so du tai khoan.
09:05:00 - Hoan thanh xu ly su kien EVT002. Gui thong bao.
Giải thích:
- Sự kiện đầu tiên là "Đăng nhập". Phương thức
xuLy()
củaSuKienDangNhap
được gọi. Nó thực hiện bước ghi log khởi đầu, sau đó là bước kiểm tra thông tin đăng nhập riêng, và cuối cùng là bước gửi thông báo chung. - Sự kiện thứ hai là "Giao dịch". Phương thức
xuLy()
củaSuKienGiaoDich
được gọi. Nó thực hiện bước ghi log khởi đầu, sau đó là hai bước riêng biệt của giao dịch (xác thực và cập nhật số dư), và cuối cùng là bước gửi thông báo chung. - Điều này minh họa cách các hành vi chung có thể được thực hiện bởi lớp cơ sở, trong khi các hành vi cụ thể được xử lý bởi các lớp dẫn xuất thông qua đa hình (virtual function overriding).
Comments