┌────────────────────────────────────────────────────────────────────────┐
│ 1. TẦNG GIAO DIỆN (GUI LAYER) │
│ - frmLogin.cs (Xác thực tài khoản và ghi nhận phiên người dùng) │
│ - frmBanVe.cs (Sơ đồ ma trận 100 ghế tương tác, chọn vé, đổi điểm) │
│ - frmAdmin.cs (Quản trị 5 tab: Phim, Ca chiếu, Nhân viên, Doanh thu) │
│ - frmDangKyThanhVien.cs (Đăng ký nhanh hội viên tại quầy bán vé) │
└───────────────────────────────────┬────────────────────────────────────┘
│ Truyền đối tượng DTO và nhận phản hồi
┌───────────────────────────────────▼────────────────────────────────────┐
│ 2. TẦNG XỬ LÝ NGHIỆP VỤ (BUS LAYER) │
│ - BanVeBUS.cs (Thuật toán chiết khấu giá vé, thanh toán, trừ/cộng điểm)│
│ - KhachHangBUS.cs (Tra cứu hội viên theo số điện thoại, đăng ký mới) │
│ - PhimBUS.cs, CaChieuBUS.cs, DoanhThuBUS.cs, TaiKhoanBUS.cs │
└───────────────────────────────────┬────────────────────────────────────┘
│ Gọi truy vấn DAL có tham số SqlParameter
┌───────────────────────────────────▼────────────────────────────────────┐
│ 3. TẦNG TRUY XUẤT DỮ LIỆU (DAL LAYER) │
│ - DataProvider.cs (Mô hình Singleton quản lý kết nối SqlConnection) │
│ - VeDAL.cs, PhimDAL.cs, CaChieuDAL.cs, KhachHangDAL.cs, DoanhThuDAL...│
│ - Đã chuyển đổi sang Parameterized Query phòng chống SQL Injection │
└───────────────────────────────────┬────────────────────────────────────┘
│ Kết nối qua chuỗi CinemaConnection trong App.config
┌───────────────────────────────────▼────────────────────────────────────┐
│ 4. CƠ SỞ DỮ LIỆU SQL SERVER (8 BẢNG QUAN HỆ CÓ KHÓA CHÍNH, KHÓA NGOẠI) │
│ - TaiKhoan, NhanVien, KhachHang, TheLoai, Phim, PhongChieu, CaChieu, Ve│
│ - Stored Procedure: sp_TaoDanhSachGheChoCaChieu (sinh 100 ghế tự động)│
└────────────────────────────────────────────────────────────────────────┘