RuoYi-Vue-master/student/学生选课管理系统设计说明.md
Leo d9203524ab 新增学生选课管理系统相关文档和脚本
- 新增数据库表结构脚本:edu_schema.sql,定义教育模块数据表
- 新增权限初始化脚本:edu_auth_init.sql,配置模块权限和菜单
- 新增系统设计文档:学生选课管理系统设计说明.md,详细说明系统架构和功能
- 完善项目文档结构,便于开发和维护
2025-09-28 21:50:17 +08:00

166 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 学生选课管理系统设计说明
## 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支撑特殊申请审批。
---
如需进一步协助实现接口、前端页面或测试方案,可在现有设计基础上继续细化任务。