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

10 KiB
Raw Permalink Blame History

学生选课管理系统设计说明

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
  • 统一响应:沿用 AjaxResultTableDataInfo
  • 参数校验@Validated + 自定义业务校验(如容量、时间冲突)。
  • 幂等控制:选课提交接口使用 Redis 分布式锁避免重复提交。

5. 数据库设计

详见 student/edu_schema.sql,以下为关键表摘要:

表名 说明 关键字段
edu_semester 学期与选课窗口 status0草稿/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 开课计划 capacityenrolled_countstatusteacher_id
edu_course_schedule 节次安排 weekdayperiod_start/endweeks
edu_enrollment 学生选课记录 status(已选/已退)、scoreeval_status

5.1 关系说明

  • edu_student.user_idedu_teacher.user_idsys_user 一一对应。
  • edu_course_class 关联 edu_courseedu_semesteredu_teacheredu_classroom
  • edu_course_scheduleedu_course_class 为一对多关系。
  • edu_enrollmentedu_course_classedu_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支撑特殊申请审批。

如需进一步协助实现接口、前端页面或测试方案,可在现有设计基础上继续细化任务。