ECMS – Hệ thống Quản lý Trung tâm Tiếng Anh
Xây dựng CSDL SQL Server và ứng dụng web Python (Streamlit) quản lý một chuỗi trung tâm tiếng Anh: chi nhánh, khoá học, lớp, lịch học, học viên, kiểm tra đầu vào, ghi danh, điểm danh, điểm số, học phí và báo cáo. Mọi phần đều bám đúng đề cương môn học, từ tổ chức thông tin đến các mô hình CSDL tiên tiến.
Thành viên & vai trò
Mỗi bạn phụ trách một mảng kiến thức của môn và một phân hệ của ứng dụng, để ai cũng có phần CSDL, phần web và phần báo cáo. Bấm vào thẻ để lọc task của bạn đó.
Lộ trình 4 sprint
Thứ tự đi theo quy trình quản lý thông tin trong Chương 1: tổ chức → xử lý → trình bày, rồi tới mô hình tiên tiến và tổng hợp.
Công việc chi tiết
Mỗi task là một issue trên GitHub. Mở từng task để xem mục tiêu, các bước, sản phẩm bàn giao và tiêu chí hoàn thành.
Bám sát đề cương IE103
Đối chiếu từng nội dung trong đề cương (lý thuyết, thực hành, chuẩn đầu ra) với task và sản phẩm của đồ án, để không sót phần nào khi chấm A4.
| Chương / buổi | Nội dung đề cương | Task | Sản phẩm trong đồ án |
|---|
Thiết kế CSDL dự kiến
Bản nháp để cả nhóm thống nhất phạm vi: 19 bảng, gọn như một đồ án, nhưng có đủ mọi loại thuộc tính và mối quan hệ học ở Chương 2. Trâm hoàn thiện ERD chính thức (ký hiệu Chen) ở T04.
Các loại mối quan hệ được thể hiện
- 1 – 1
- CHINHANH – NHANVIEN (quản lý chi nhánh); NHANVIEN – GIAOVIEN (chuyên biệt hoá); TAIKHOAN – NHANVIEN / HOCVIEN
- 1 – N
- CHINHANH – PHONGHOC / NHANVIEN / LOPHOC; CHUONGTRINH – KHOAHOC; KHOAHOC – LOPHOC; GIAOVIEN – LOPHOC; HOCVIEN – PHIEUTHU
- N – M
- HOCVIEN – LOPHOC qua DANGKY; DANGKY – BUOIHOC qua DIEMDANH; PHIEUTHU – DANGKY qua CT_PHIEUTHU
- Đệ quy
- NHANVIEN quản lý NHANVIEN; KHOAHOC tiên quyết của KHOAHOC
- 3 ngôi
- LICHHOC: LOPHOC – PHONGHOC – CAHOC
- Thực thể yếu
- PHONGHOC (theo CHINHANH), BUOIHOC (theo LOPHOC)
Thuộc tính & dữ liệu đặc biệt
- Phức hợp
- Họ tên (Họ + Tên), Địa chỉ
- Đa trị
- Chứng chỉ của giáo viên → bảng CHUNGCHI_GV
- Suy diễn
- Tuổi, Thành tiền, Điểm TB (computed column); Sĩ số hiện tại, Tổng tiền phiếu thu (trigger)
- XML
- KIEMTRA_DAUVAO.KetQuaChiTiet – điểm 4 kỹ năng, có XML Schema
- Kế thừa
- Class Diagram: Nguoi → HocVien, NhanVien → GiaoVien
- Kiểm toán
- NHATKY ghi vết thay đổi bằng trigger
erDiagram
CHINHANH ||--o{ NHANVIEN : "làm việc tại"
CHINHANH |o--o| NHANVIEN : "quản lý"
NHANVIEN |o--o{ NHANVIEN : "quản lý trực tiếp"
NHANVIEN ||--o| GIAOVIEN : "là"
GIAOVIEN ||--o{ CHUNGCHI_GV : "có"
CHINHANH ||--|{ PHONGHOC : "gồm"
CHUONGTRINH ||--|{ KHOAHOC : "gồm"
KHOAHOC |o--o{ KHOAHOC : "tiên quyết"
KHOAHOC ||--o{ LOPHOC : "mở"
CHINHANH ||--o{ LOPHOC : "tổ chức"
GIAOVIEN ||--o{ LOPHOC : "phụ trách"
LOPHOC ||--|{ LICHHOC : "xếp lịch"
PHONGHOC ||--o{ LICHHOC : "dùng"
CAHOC ||--o{ LICHHOC : "vào ca"
LOPHOC ||--o{ BUOIHOC : "gồm"
CHINHANH ||--o{ HOCVIEN : "tiếp nhận"
HOCVIEN ||--o{ KIEMTRA_DAUVAO : "dự"
KHOAHOC |o--o{ KIEMTRA_DAUVAO : "đề xuất"
HOCVIEN ||--o{ DANGKY : "đăng ký"
LOPHOC ||--o{ DANGKY : "có"
DANGKY ||--o{ DIEMDANH : "được"
BUOIHOC ||--o{ DIEMDANH : "ghi nhận"
HOCVIEN ||--o{ PHIEUTHU : "đóng"
NHANVIEN ||--o{ PHIEUTHU : "lập"
PHIEUTHU ||--|{ CT_PHIEUTHU : "gồm"
DANGKY ||--o{ CT_PHIEUTHU : "được thu"
NHANVIEN |o--o| TAIKHOAN : "dùng"
HOCVIEN |o--o| TAIKHOAN : "dùng"
| Bảng | Ý nghĩa | Cột chính (dự kiến) |
|---|---|---|
| CHINHANH | Chi nhánh trung tâm | MaCN, TenCN, DiaChi, SoDienThoai, MaNVQuanLy |
| NHANVIEN | Nhân viên (quản lý, giáo vụ, kế toán, giáo viên) | MaNV, HoNV, TenNV, NgaySinh, ChucVu, LuongCoBan, MaCN, MaNVQuanLy |
| GIAOVIEN | Thông tin riêng của giáo viên (chuyên biệt hoá NHANVIEN) | MaGV, LoaiGV, QuocTich, TrinhDo, DonGiaBuoi |
| CHUNGCHI_GV | Chứng chỉ giáo viên (thuộc tính đa trị) | MaGV, TenChungChi, Diem, NgayCap |
| HOCVIEN | Học viên | MaHV, HoHV, TenHV, NgaySinh, Tuoi (tính toán), SoDienThoai, Email, MaCN |
| KIEMTRA_DAUVAO | Kết quả kiểm tra xếp lớp | MaKT, MaHV, NgayKT, DiemTong, KetQuaChiTiet (XML), MaKHDeXuat |
| CHUONGTRINH | Chương trình đào tạo (IELTS, TOEIC…) | MaCT, TenCT, MoTa |
| KHOAHOC | Khoá học thuộc chương trình | MaKH, TenKH, MaCT, TrinhDoDauVao, TrinhDoDauRa, SoBuoi, HocPhi, MaKHTienQuyet |
| PHONGHOC | Phòng học (thực thể yếu theo chi nhánh) | MaCN, MaPhong, SucChua, LoaiPhong |
| CAHOC | Ca học trong ngày | MaCa, GioBatDau, GioKetThuc |
| LOPHOC | Lớp mở của một khoá học | MaLop, MaKH, MaCN, MaGV, NgayKhaiGiang, NgayKetThuc, SiSoToiDa, SiSoHienTai, TrangThai |
| LICHHOC | Lịch học cố định (liên kết 3 ngôi) | MaLop, Thu, MaCa, MaCN, MaPhong |
| BUOIHOC | Buổi học cụ thể (thực thể yếu theo lớp) | MaLop, STT, NgayHoc, MaCa, NoiDung |
| DANGKY | Ghi danh học viên vào lớp (N–M có thuộc tính) | MaDK, MaHV, MaLop, NgayDK, HocPhi, GiamGia, ThanhTien, TrangThaiHP, DiemGK, DiemCK, DiemTB, KetQua |
| DIEMDANH | Điểm danh từng buổi | MaDK, MaLop, STT, TrangThai, GhiChu |
| PHIEUTHU | Phiếu thu học phí (master) | MaPT, MaHV, MaNV, NgayThu, HinhThuc, TongTien |
| CT_PHIEUTHU | Chi tiết phiếu thu (detail) | MaPT, MaDK, SoTien |
| TAIKHOAN | Tài khoản đăng nhập ứng dụng | TenDangNhap, MatKhauHash, Salt, VaiTro, MaNV, MaHV, TrangThai |
| NHATKY | Nhật ký kiểm toán | MaNK, TenBang, ThaoTac, DuLieuCu, DuLieuMoi, NguoiThucHien, ThoiGian |
Công nghệ & cấu trúc repo
Theo đúng công cụ trong đề cương (SQL Server Management Studio) và bài thực hành 5 (Python + pyodbc + Streamlit).
SQL Server 2022
HQT CSDL chính, dùng T-SQL cho procedure, function, trigger, cursor, XML, login/role, backup. Windows dùng SSMS; macOS chạy Docker.
Python · Streamlit
Ứng dụng web: menu bằng st.navigation, form bằng st.form / st.data_editor, biểu đồ bằng Plotly. Kết nối DB qua pyodbc + ODBC Driver 18.
pandas · reportlab · openpyxl
Xử lý dữ liệu báo cáo, xuất PDF (thay Crystal Report) và Excel.
draw.io · Mermaid
ERD (Chen), Class Diagram, sơ đồ quy trình nghiệp vụ, cây menu.
MongoDB
Demo chuyển đổi sang CSDL phi quan hệ ở Chương 5 (chạy bằng Docker).
GitHub
Issues + Project để giao việc, Pages để công bố kế hoạch, lịch sử commit ghi đúng người phụ trách.
ecms/
├── app/ # Ứng dụng web Streamlit (main.py, pages/, core/, reports/)
├── database/ # Script SQL đánh số theo thứ tự chạy
│ ├── 01_schema.sql 02_seed.sql 03_functions.sql
│ ├── 04_views.sql 05_procedures.sql 06_triggers.sql
│ ├── 07_cursors.sql 08_security.sql 09_xml.sql
│ ├── 10_queries.sql 11_backup_restore.sql
│ └── 12_import_export.sql 13_distributed.sql
├── data/ # CSV / XML mẫu cho import
├── nosql/ # Demo MongoDB (Chương 5)
├── docs/ # GitHub Pages (trang này) + docs/design (ERD, CD…)
├── report/ # Báo cáo theo chương
├── slides/ # Slide thuyết trình
└── scripts/ # commit-as.sh, gen_seed.py, sync_issues.py…
Quy ước làm việc
Nhóm uỷ quyền cho Như thực hiện phần code. Mỗi commit vẫn ghi tên thành viên phụ trách phần đó, để lịch sử git thể hiện đúng phân công.
Quy trình một task
- Tạo nhánh theo task:
t11-stored-procedure - Commit bằng tên người phụ trách:
scripts/commit-as.sh phu -m "feat(db): sp_DangKyHoc (#11)" - Mở Pull Request, mô tả có
Closes #11, đính kèm ảnh kết quả - Người phụ trách xem lại → merge vào
main→ issue tự đóng, Project tự chuyển sang Done
Definition of Done
- Script SQL chạy lại được từ đầu (
DROP … IF EXISTS), chú thích tiếng Việt - Có ảnh chụp kết quả và mục báo cáo tương ứng trong
report/ - Có phần so sánh / đánh giá kèm số liệu khi phù hợp (theo rubric A4)
- Tick đủ checklist trong issue; PR đã merge
Mẫu commit
feat tính năng · db script CSDL · docs tài liệu/báo cáo · fix sửa lỗi · chore việc lặt vặt. Ví dụ: db(views): thêm vw_CongNoHocVien (#16)