ECMS · IE103
Đồ án IE103 – Quản lý thông tin · Nhóm 1 · UIT

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.

Nhóm 1 Thành viên 5 Bắt đầu 12/10/2026 Hạn nộp dự kiến 04/11/2026
Tiến độ chung
–
Task hoàn thành
–
trên tổng số task
Sprint hiện tại
–
Còn lại tới hạn nộp
–
Đang đồng bộ trạng thái từ GitHub Issues…

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ổiNội dung đề cươngTaskSả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ĩaCột chính (dự kiến)
CHINHANHChi nhánh trung tâmMaCN, TenCN, DiaChi, SoDienThoai, MaNVQuanLy
NHANVIENNhân viên (quản lý, giáo vụ, kế toán, giáo viên)MaNV, HoNV, TenNV, NgaySinh, ChucVu, LuongCoBan, MaCN, MaNVQuanLy
GIAOVIENThông tin riêng của giáo viên (chuyên biệt hoá NHANVIEN)MaGV, LoaiGV, QuocTich, TrinhDo, DonGiaBuoi
CHUNGCHI_GVChứng chỉ giáo viên (thuộc tính đa trị)MaGV, TenChungChi, Diem, NgayCap
HOCVIENHọc viênMaHV, HoHV, TenHV, NgaySinh, Tuoi (tính toán), SoDienThoai, Email, MaCN
KIEMTRA_DAUVAOKết quả kiểm tra xếp lớpMaKT, MaHV, NgayKT, DiemTong, KetQuaChiTiet (XML), MaKHDeXuat
CHUONGTRINHChương trình đào tạo (IELTS, TOEIC…)MaCT, TenCT, MoTa
KHOAHOCKhoá học thuộc chương trìnhMaKH, TenKH, MaCT, TrinhDoDauVao, TrinhDoDauRa, SoBuoi, HocPhi, MaKHTienQuyet
PHONGHOCPhòng học (thực thể yếu theo chi nhánh)MaCN, MaPhong, SucChua, LoaiPhong
CAHOCCa học trong ngàyMaCa, GioBatDau, GioKetThuc
LOPHOCLớp mở của một khoá họcMaLop, MaKH, MaCN, MaGV, NgayKhaiGiang, NgayKetThuc, SiSoToiDa, SiSoHienTai, TrangThai
LICHHOCLịch học cố định (liên kết 3 ngôi)MaLop, Thu, MaCa, MaCN, MaPhong
BUOIHOCBuổi học cụ thể (thực thể yếu theo lớp)MaLop, STT, NgayHoc, MaCa, NoiDung
DANGKYGhi 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ổiMaDK, MaLop, STT, TrangThai, GhiChu
PHIEUTHUPhiếu thu học phí (master)MaPT, MaHV, MaNV, NgayThu, HinhThuc, TongTien
CT_PHIEUTHUChi tiết phiếu thu (detail)MaPT, MaDK, SoTien
TAIKHOANTài khoản đăng nhập ứng dụngTenDangNhap, MatKhauHash, Salt, VaiTro, MaNV, MaHV, TrangThai
NHATKYNhật ký kiểm toánMaNK, 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

  1. Tạo nhánh theo task: t11-stored-procedure
  2. Commit bằng tên người phụ trách: scripts/commit-as.sh phu -m "feat(db): sp_DangKyHoc (#11)"
  3. Mở Pull Request, mô tả có Closes #11, đính kèm ảnh kết quả
  4. 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)