基于《数据库原理》2026 春季学期第 9-14 周实验要求实现的 B/S 教学事务管理系统。系统以原始 School 数据库为基础,扩展为支持管理员、教师、学生三类角色的教务管理平台。
- 前端:Vue 3、Vite、Element Plus、Pinia、Vue Router、Axios
- 后端:Node.js、Express、mysql2、JWT、bcryptjs、zod
- 数据库:MySQL 8
- 部署:Docker Compose、Nginx
teaching-management-system/
├── frontend/
├── backend/
├── database/
├── deploy/
├── docs/
├── docker-compose.yml
├── 账号说明.txt
└── README.md
| 角色 | 用户名 | 密码 |
|---|---|---|
| 管理员 | admin | 123456 |
| 教师 | 0101 | 123456 |
| 学生 | 1101 | 123456 |
数据库中保存的是 bcrypt 哈希,不保存明文密码。
如果使用 Docker,先启动 MySQL:
docker compose -f deploy/docker-compose.local.yml up -d如果使用本机已有 MySQL,可以直接启动当前机器上的 MySQL:
powershell -ExecutionPolicy Bypass -File deploy/start-local-mysql.ps1启动后端:
cd backend
npm install
npm run dev启动前端:
cd frontend
npm install
npm run dev访问:
http://localhost:5173
健康检查:
curl http://localhost:3000/api/healthdocker compose up -d --build访问:
http://localhost/
database/ 下编号文件会按顺序初始化:
| 文件 | 说明 |
|---|---|
00_create_database.sql |
创建 school 数据库 |
01_schema.sql |
建表、主键、外键、索引和约束 |
02_seed_data.sql |
导入课程文档中的 School 基础数据并添加演示数据 |
03_triggers.sql |
选课和成绩触发器 |
04_procedures.sql |
学分统计和成绩分布存储过程 |
05_views.sql |
开课汇总、成绩记录等视图 |
trg_before_course_selection_insert:检查课程开放状态、容量、重复选课、同学期同课程多教师冲突。trg_before_course_selection_update:检查成绩范围,阻止已录成绩课程退课,必要时自动计算总评。sp_student_credit_summary:统计学生已选课程、通过学分、平均分和剩余学分。sp_course_grade_distribution:统计课程平均分、最高分、最低分和成绩等级分布。
上述触发器通过学生选课、退课、教师录成绩实际触发;存储过程通过学生学分页、教师/管理员成绩统计页实际调用。
- 管理员
admin / 123456登录。 - 进入课程管理和开课管理,维护课程或新增开课记录。
- 学生
1101 / 123456登录,进入学生选课页选择当前学期课程。 - 学生再次选择同学期同课程不同教师,页面展示触发器拦截信息。
- 教师
0101 / 123456登录,查看课程学生名单。 - 教师录入非法成绩,例如 120,页面展示触发器拦截信息。
- 教师录入合法成绩并保存。
- 学生查看成绩和学分统计。
- 管理员查看统计分析和学生学分统计。
- 如果 MySQL 已经有旧数据,先执行
docker compose -f deploy/docker-compose.local.yml down -v再重新启动。 - 如果前端请求失败,确认后端运行在
http://localhost:3000,并且.env中CORS_ORIGIN=http://localhost:5173。 - 生产部署前必须修改
MYSQL_ROOT_PASSWORD和JWT_SECRET。