Bài 36.4. Hệ Thống Xử Lý Sự Kiện Đa Tầng - [Độ khó: Khá]


LÀM BÀI

Points: 10 (partial)
Time limit: 2.0s
Memory limit: 64M

Author:
Problem type

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:

  1. Ghi log khởi đầu: In ra "[ThoiGian] - Bat dau xu ly su kien [MaSuKien]".
  2. 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).
  3. 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:

  1. 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]".
  2. 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]""- Cap nhat so du tai khoan.".
  3. SuKienLoi (Error Event):
    • Thêm thuộc tính thongDiepLoi (error message).
    • Trong xuLy(), in ra "- Ghi nhan loi: [ThongDiepLoi]""- Thong bao den admin.".

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ạng HH: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ủa SuKienDangNhap đượ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ủa SuKienGiaoDich đượ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

There are no comments at the moment.

Zalo