高校教学管理里,学生成绩是绕不开的核心。Excel 和单机系统用着用着,数据同步慢、权限乱、分析基本靠手,这些毛病就出来了。花了一点时间,用 Spring Boot 3.0 + MySQL 8.0 搭了一套小系统,覆盖用户、课程、成绩三个模块,顺带踩了几个坑,记录一下。
需求怎么梳理
系统主要给三类人用:教学管理员、老师、学生。各自要的东西不太一样:
- 管理员:管账号、分权限、建课程、配成绩模板、导出 Excel 报表、看日志。
- 老师:录成绩(可以单个录也能批量)、审核后锁定、看平均分 / 及格率之类的统计图表、偶尔处理学生异议。
- 学生:按学期或课程查成绩、看趋势、有异议能申请、下载成绩单。
按这个拆出几个联动模块:
| 模块 | 主要功能 | 跟哪些模块打交道 |
|---|---|---|
| 用户权限 | 注册登录、角色分配、密码重置 | 所有模块(权限校验) |
| 课程管理 | 课程维护、班级 - 课程 - 教师关联 | 用户权限、成绩管理 |
| 成绩管理 | 录入、加权计算、审核锁定、修改审批 | 课程管理、用户权限 |
| 数据统计 | 成绩分析、趋势图、报表导出 | 成绩管理、课程管理 |
| 消息通知 | 录入提醒、审核推送、公告 | 成绩管理、用户权限 |
接口与数据库
先定了 RESTful 风格的 API。核心的就那几个:
- 用户:
/api/user/login认证,/api/user/role/assign分配角色。 - 课程:
/api/course/add新增,/api/course/teacher/bind绑定教师。 - 成绩:
/api/score/batch/save批量录入,/api/score/calculate自动计算汇总。
数据库表大致这样:
CREATE TABLE user_info (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一标识',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
password VARCHAR(255) NOT NULL COMMENT '密码(加密存储)',
user_role ENUM('admin', 'teacher', 'student') NOT NULL COMMENT '用户角色',
status TINYINT COMMENT ,
create_time DATETIME ,
update_time DATETIME
) COMMENT;
course_info (
course_id AUTO_INCREMENT,
course_name () ,
course_code () ,
teacher_id COMMENT ,
credits ,
status TINYINT ,
create_time DATETIME
) COMMENT;
score_record (
score_id AUTO_INCREMENT,
student_id ,
course_id ,
score_type ENUM(, , , ),
score_value (,) ,
score_weight (,) ,
is_reviewed TINYINT ,
review_time DATETIME,
reviewer (),
create_time DATETIME
) COMMENT;


