- 新增数据库表结构脚本:edu_schema.sql,定义教育模块数据表 - 新增权限初始化脚本:edu_auth_init.sql,配置模块权限和菜单 - 新增系统设计文档:学生选课管理系统设计说明.md,详细说明系统架构和功能 - 完善项目文档结构,便于开发和维护
166 lines
10 KiB
Markdown
166 lines
10 KiB
Markdown
# 学生选课管理系统设计说明
|
||
|
||
## 1. 项目概述
|
||
|
||
学生选课管理系统基于 RuoYi-Vue 3.9.0 脚手架进行扩展,实现高校学生选课的全流程数字化管理。系统延续现有的前后端分离架构、RBAC 权限体系与代码生成能力,新增选课业务所需的数据库表、菜单权限、角色配置以及前端路由。设计目标是在保持框架简洁可维护的前提下,覆盖学生选课的核心业务流程(学期规划 → 开课计划 → 学生选课 → 成绩登记)。
|
||
|
||
## 2. 业务目标与角色
|
||
|
||
### 2.1 业务目标
|
||
|
||
- **统一管理学期与开课信息**:教务部门集中维护课程、班级、选课窗口,避免信息孤岛。
|
||
- **提升选课效率与体验**:为学生提供实时选课、冲突校验、容量提示等能力。
|
||
- **保障教学执行与质量**:教师可查看班级名单、录入成绩,辅导员掌握学生选课动态。
|
||
- **沉淀数据支持决策**:选课结果与统计数据为培养方案调整提供依据。
|
||
|
||
### 2.2 角色及职责
|
||
|
||
| 角色 | 权限标识 | 数据范围 | 核心职责 |
|
||
|------|----------|----------|----------|
|
||
| 教务管理员 | `edu_admin` | 全部数据 | 维护基础档案、发布学期与开课计划、处理选课异常 |
|
||
| 教师角色 | `teacher` | 个人关联数据 | 查看授课课程、管理课内学生名单、录入成绩 |
|
||
| 学生角色 | `student` | 个人数据 | 浏览可选课程、提交选课/退课、查看个人课表与成绩 |
|
||
| 辅导员 | `counselor` | 本部门及以下 | 审核学生选课情况、协助处理退补选 |
|
||
|
||
> 权限与菜单配置对应 `student/edu_auth_init.sql`,沿用 RuoYi RBAC 模型。
|
||
|
||
## 3. 功能规划
|
||
|
||
### 3.1 模块划分
|
||
|
||
| 模块 | 子功能 | 描述 |
|
||
|------|--------|------|
|
||
| 基础信息 | 学生档案、教师档案、课程信息、教室管理 | 维护选课所需的基础主数据,支持导入/导出 |
|
||
| 学期与开课 | 学期设置、开课计划、节次安排 | 规划选课时间窗口、生成开课班级、配置教室与节次 |
|
||
| 选课服务 | 选课中心、选课校验、退课申请 | 学生在线选课、冲突与容量校验、退课与锁定控制 |
|
||
| 教学执行 | 班级名单、选课结果、成绩登记 | 教师/辅导员查看选课名单,教师录入成绩并导出 |
|
||
| 统计分析 | 选课统计、课程热度 | 选课数据可视化,为教务决策提供支撑(后续扩展) |
|
||
|
||
### 3.2 用例流程(概述)
|
||
|
||
1. **基础档案维护**:教务管理员导入学生、教师、课程、教室数据 → 自动关联 RuoYi 用户信息。
|
||
2. **学期发布**:设置学期、选课起止时间,发布后开放选课入口。
|
||
3. **开课计划**:为课程创建班级,指定教师、教室、节次与人数上限,发布后进入可选状态。
|
||
4. **在线选课**:学生在选课中心搜索课程 → 系统校验时间冲突/容量 → 选课成功写入选课记录。
|
||
5. **退课与调剂**:学生或教务发起退课 → 更新选课记录、回收名额;特殊场景由教务管理员手动调整。
|
||
6. **成绩登记**:课程结课后教师录入成绩 → 学生查看个人成绩 → 教务导出成绩归档。
|
||
|
||
## 4. 系统架构设计
|
||
|
||
### 4.1 整体架构
|
||
|
||
```
|
||
┌───────────────────────────────────────────────────┐
|
||
│ 前端(ruoyi-ui 扩展模块) │
|
||
│ Vue2 + ElementUI + Vuex + Axios │
|
||
│ ├─ education/student ├─ education/course │
|
||
│ ├─ education/semester ├─ education/courseClass │
|
||
│ ├─ education/enroll └─ education/grade │
|
||
└───────────────────────────────────────────────────┘
|
||
⇅ JSON/REST
|
||
┌───────────────────────────────────────────────────┐
|
||
│ 后端(ruoyi-admin 扩展) │
|
||
│ Spring Boot 2.5 + MyBatis + Spring Security + JWT │
|
||
│ ├─ controller.education.* │
|
||
│ ├─ service.education.* │
|
||
│ └─ mapper.education.* │
|
||
└───────────────────────────────────────────────────┘
|
||
⇅
|
||
┌───────────────────────────────────────────────────┐
|
||
│ 数据层:MySQL + Redis + Druid │
|
||
│ ├─ 新增业务表:edu_* │
|
||
│ ├─ 字典扩展:edu_*_status 等 │
|
||
│ └─ 权限拓展:sys_role/menu/menu_role │
|
||
└───────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 4.2 模块对照
|
||
|
||
| 层次 | 扩展点 | 说明 |
|
||
|------|--------|------|
|
||
| 前端 | `src/views/education/*` | 新增菜单对应页面组件,沿用 RuoYi CRUD 页面范式 |
|
||
| 后端 Controller | `com.ruoyi.web.controller.education` | 新增 REST 接口,合并安全注解与数据范围控制 |
|
||
| Service | `com.ruoyi.education.service` | 实现业务逻辑、选课冲突校验、容量控制 |
|
||
| Mapper | `com.ruoyi.education.mapper` | 定义 SQL 映射,命名规范沿用表前缀 `Edu*Mapper` |
|
||
| 安全 | `@PreAuthorize` + 数据范围切面 | 新增权限标识以 `education:*` 开头,复用 DataScope |
|
||
|
||
### 4.3 接口设计原则
|
||
|
||
- **RESTful 风格**:列表 `GET`、新增 `POST`、修改 `PUT`、删除 `DELETE`。
|
||
- **统一响应**:沿用 `AjaxResult` 与 `TableDataInfo`。
|
||
- **参数校验**:`@Validated` + 自定义业务校验(如容量、时间冲突)。
|
||
- **幂等控制**:选课提交接口使用 Redis 分布式锁避免重复提交。
|
||
|
||
## 5. 数据库设计
|
||
|
||
详见 `student/edu_schema.sql`,以下为关键表摘要:
|
||
|
||
| 表名 | 说明 | 关键字段 |
|
||
|------|------|----------|
|
||
| `edu_semester` | 学期与选课窗口 | `status`(0草稿/1进行中/2归档)、`enroll_*_time` |
|
||
| `edu_student` | 学生档案 | 关联 `sys_user.user_id`,学籍状态 `status` |
|
||
| `edu_teacher` | 教师档案 | 关联 `sys_user.user_id`、职称 `title` |
|
||
| `edu_classroom` | 教室信息 | `room_type` 字典(理论/实验/多媒体) |
|
||
| `edu_course` | 课程基础信息 | 课程类型 `course_type`(必修/选修/公选) |
|
||
| `edu_course_class` | 开课计划 | `capacity`、`enrolled_count`、`status`、`teacher_id` |
|
||
| `edu_course_schedule` | 节次安排 | `weekday`、`period_start/end`、`weeks` |
|
||
| `edu_enrollment` | 学生选课记录 | `status`(已选/已退)、`score`、`eval_status` |
|
||
|
||
### 5.1 关系说明
|
||
|
||
- `edu_student.user_id`、`edu_teacher.user_id` 与 `sys_user` 一一对应。
|
||
- `edu_course_class` 关联 `edu_course`、`edu_semester`、`edu_teacher`、`edu_classroom`。
|
||
- `edu_course_schedule` 与 `edu_course_class` 为一对多关系。
|
||
- `edu_enrollment` 与 `edu_course_class`、`edu_student` 为多对一关系,复合唯一键 `(class_id, student_id)` 防重复选课。
|
||
|
||
### 5.2 字典与状态
|
||
|
||
`edu_schema.sql` 已新增字典类型/数据(ID 11-17),用于驱动前端下拉选择与状态高亮,包括:学期状态、开课状态、课程类型、学籍状态、教师状态、选课记录状态、教室类型。
|
||
|
||
## 6. 权限与菜单设计
|
||
|
||
- 新增根菜单 `选课管理`(menuId=2000),子菜单对应业务模块。
|
||
- 权限命名统一为 `education:<资源>:<操作>`,确保与 RuoYi 命名空间隔离。
|
||
- 新角色:教务管理员、教师、学生、辅导员;脚本位于 `student/edu_auth_init.sql`。
|
||
- 通过 `sys_role_menu` 赋权,其中超级管理员与教务管理员拥有全量菜单,教师与学生仅拥有面向自身的菜单与按钮权限。
|
||
|
||
## 7. 实施路径
|
||
|
||
| 阶段 | 目标 | 主要工作 |
|
||
|------|------|----------|
|
||
| 准备阶段 | 环境与规划 | 初始化数据库、导入 SQL、配置角色菜单、确认账号策略 |
|
||
| 开发阶段 | 功能实现 | 按模块迭代后端接口与前端页面,补充单元测试与 API 文档 |
|
||
| 联调阶段 | 集成与验证 | 进行选课冲突、容量、权限、性能等专项测试,准备演示数据 |
|
||
| 上线阶段 | 发布与推广 | 数据初始化(导入学生/课程)、配置选课窗口、发布公告 |
|
||
| 运营阶段 | 监控与优化 | 监控日志与性能指标、迭代统计分析、收集用户反馈 |
|
||
|
||
## 8. 风险与控制
|
||
|
||
| 风险 | 影响 | 应对措施 |
|
||
|------|------|----------|
|
||
| 选课高并发导致锁冲突 | 影响提交体验 | Redis 分布式锁 + 容量缓存、对选课接口限流 |
|
||
| 数据一致性 | 产生错误名单 | 关键操作启用事务与行级锁,容量使用原子更新 |
|
||
| 角色权限配置遗漏 | 造成越权或缺权 | SQL 初始化脚本自动赋权,发布前回归权限用例 |
|
||
| 课程冲突判定复杂 | 学生无法选课 | 统一冲突算法(节次 + 教室 + 时间),服务层复用 |
|
||
|
||
## 9. 交付物清单
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `student/edu_schema.sql` | 业务表结构、字典数据脚本 |
|
||
| `student/edu_auth_init.sql` | 菜单、角色、权限初始化脚本 |
|
||
| `student/学生选课管理系统设计说明.md` | 本设计文档 |
|
||
|
||
执行顺序建议:先运行 `ry_20250522.sql` 初始化基础库 → 执行 `edu_schema.sql` → 执行 `edu_auth_init.sql`。
|
||
|
||
## 10. 后续扩展建议
|
||
|
||
- 接入代码生成器模板,快速生成 CRUD 页面与后端骨架。
|
||
- 引入课表视图(周历展示),提升学生端体验。
|
||
- 增加选课统计图表(选课热度、容量利用率)。
|
||
- 与消息中心联动,发送选课结果、退课提醒。
|
||
- 结合流程引擎(如 Flowable)支撑特殊申请审批。
|
||
|
||
---
|
||
|
||
如需进一步协助实现接口、前端页面或测试方案,可在现有设计基础上继续细化任务。 |