返回社区
公开项目
可预览原型图
by 匿名用户

基于SpringBoot的智能排课管理系统

实现课程、教师、教室、时间等多维约束下的自动排课,支持冲突检测、手动调整、课表导出。包含教师工作量统计与课表发布。使用SpringBoot+MyBatis+MySQL,前端Thymeleaf

预览原型图

版本

v1 · running

需求

53 条

文件

528 个 · 57 MB

公开时间

2026/6/23 14:56:46

更新时间

2026/6/23 20:50:44

需求树

53 条
FR-MOD-BASE

基础数据管理

functional
pending
待处理

管理课程、教师、教室、班级、学期等基础信息的增删改查,为排课提供数据底座。

FR-BASE-001

课程信息管理

functional
pending
待处理

管理员可对课程进行增删改查。列表支持按课程名称、课程代码、开课院系筛选,分页展示;表单字段包括课程名称、课程代码、学分、周课时、适用年级、课程类型(必修/选修);课程代码全局唯一校验。

FR-BASE-002

教师信息管理

functional
pending
待处理

管理员可对教师信息增删改查。列表支持按教师姓名、工号、所属院系筛选;表单字段包括姓名、工号、性别、职称、联系电话、所属院系、可授课程(多选关联课程表);工号全局唯一。

FR-BASE-003

教室信息管理

functional
pending
待处理

管理员可对教室增删改查。列表支持按教室编号、教学楼、教室类型(普通/多媒体/实验室/机房)筛选;表单字段包括教室编号、教室名称、教学楼、楼层、容量、教室类型、是否可用;教室编号全局唯一。

FR-BASE-004

班级信息管理

functional
pending
待处理

管理员可对班级增删改查。列表支持按班级名称、年级、所属专业筛选;表单字段包括班级名称、班级编号、年级、所属专业、学生人数;班级编号全局唯一。

FR-BASE-005

学期与教学周设置

functional
pending
待处理

管理员可创建学期并设置起止日期、教学周数、每日上课节次(如上午4节下午4节),支持按学期切换数据视图。学期名称(如2025-2026-1)全局唯一,激活学期作为当前排课目标。

FR-BASE-006

课表模板与学期复制

functional
pending
待处理

管理员可将当前学期完整课表另存为模板(命名+备注),也可将任意历史学期课表复制到目标学期作为初始方案。复制时自动校验教师/教室/班级是否仍存在,缺失资源标红提示。复制后课表为"草稿"状态,可在此基础上手动微调或重新自动排课。

FR-MOD-RULE

排课规则与约束配置

functional
pending
待处理

配置排课所需的多维约束规则,包括时间片、教室容量、教师时间、课程优先级等。

FR-RULE-001

时间片与节次约束配置

functional
pending
待处理

管理员可配置每周排课天数(如周一至周五)和每天排课节次,设置每节课的时间段。支持对特定节次标记为"不可排课"(如午休时段),约束自动排课算法跳过该时段。

FR-RULE-002

教室容量与类型约束

functional
pending
待处理

自动排课时校验教室容量≥班级学生人数,且教室类型匹配课程需求(如实验课必须排入实验室)。管理员可为课程设定"指定教室"或"可选教室类型"约束,指定教室时优先排入。

FR-RULE-003

教师时间冲突约束

functional
pending
待处理

排课时同一教师不能在同一时间片被安排到不同班级授课。管理员可为教师设置不可排课时段(如某教师周二全天不可排课),自动排课算法必须遵守该约束。

FR-RULE-004

课程优先级与排课顺序

functional
pending
待处理

管理员可为课程设置排课优先级(高/中/低),自动排课时高优先级课程优先分配优质时段(如上午1-2节)。同时支持设置课程排课顺序权重,解决资源竞争时的先后问题。

FR-RULE-005

连堂课与合班课规则

functional
pending
待处理

支持配置连堂课(同一课程连续2节排在一起)和合班课(多个班级同时同教室上课)。连堂课自动排入相邻节次不跨天;合班课校验教室容量≥所有合班班级学生总数。

FR-RULE-006

教师日课时与周课时上限

functional
pending
待处理

管理员可为每位教师设置每日最大授课节数和每周最大授课节数(默认每日≤4节、每周≤20节)。自动排课时教师超出上限则停止为该教师排课,并在排课结果中标注"超限"原因。教师不可排课时段(FR-RULE-003)优先级高于日/周上限。

FR-RULE-007

班级日排课上限约束

functional
pending
待处理

管理员可为每个班级设置每日最大排课节数(默认≤8节),防止单日课程过密。自动排课时班级当日已排节数达上限则跳过该班级剩余课程,在排课结果中标注"超限"。该约束与教师约束同时生效,取更严格者。

FR-RULE-008

固定排课与课程锁定

functional
pending
待处理

管理员可为某课程-班级组合指定固定时间片(如"高等数学-计科2201必须排在周一1-2节"),自动排课时该安排锁定不动,算法仅填充剩余空位。锁定安排仍需通过冲突校验(教室和教师在该时段不可冲突),冲突时红色提示"锁定安排冲突"并阻止排课。

FR-RULE-009

合班课折算系数配置

functional
pending
待处理

管理员可在系统设置中配置合班课工作量折算系数(默认1.2,范围0.5~3.0,步长0.1)。该系数用于FR-STAT-001教师课时统计中合班课课时的折算计算。修改系数后已统计的工作量数据同步重算。

FR-RULE-010

约束优先级规则

functional
pending
待处理

排课算法中约束按优先级从高到低:①硬锁定(FR-RULE-008固定排课)②教师不可排时段(FR-RULE-003)③教室不可用/容量不足(FR-RULE-002)④连堂课(FR-RULE-005)⑤课程优先级(FR-RULE-004)⑥教师日/周上限(FR-RULE-006)。低优先级约束在资源不足时可被放松,硬锁定和不可排时段不可违反。

FR-MOD-ENGINE

自动排课引擎

functional
pending
待处理

基于约束规则执行自动排课算法,生成满足多维约束的课表方案。

FR-ENGINE-001

一键自动排课

functional
pending
待处理

管理员选择学期后点击"开始排课",后端基于当前所有约束规则执行排课算法。API: POST /api/schedule/auto-generate,入参{ semesterId },出参{ taskId, status }。排课采用异步任务,返回任务ID供前端轮询。

FR-ENGINE-002

排课进度实时反馈

functional
pending
待处理

前端轮询 GET /api/schedule/task/{taskId} 获取排课进度(已排课程数/总课程数、当前处理班级、预估剩余时间)。进度条实时更新,三态:进行中/已完成/失败,失败时展示错误原因(如"教室资源不足:3个班级无法安排")。

FR-ENGINE-003

排课结果预览与确认

functional
pending
待处理

排课完成后以表格形式展示完整课表预览(班级×星期×节次矩阵),标注未排课程和冲突项。预览数据暂存于数据库临时表(schedule_preview),与正式课表物理隔离。管理员可"确认应用"将预览数据写入正式课表并清空临时表,或"放弃"直接清空临时表回滚。确认操作在同一事务中执行。

FR-MOD-CONFLICT

冲突检测与处理

functional
pending
待处理

检测排课结果中的教师、教室、时间等冲突,提供冲突列表和解决建议。

FR-CONFLICT-001

排课后自动冲突扫描

functional
pending
待处理

排课结果生成后自动扫描三类冲突:教师冲突(同一教师同时段不同班级)、教室冲突(同一教室同时段不同课程)、班级冲突(同一班级同时段不同课程)。扫描结果生成冲突清单,每条冲突标出冲突类型、涉及资源和时间片。

FR-CONFLICT-002

冲突列表展示与筛选

functional
pending
待处理

冲突列表以表格展示,支持按冲突类型(教师/教室/班级)和解决状态筛选排序。每条冲突行显示冲突简述、涉及资源名、时间片、解决状态(未处理/已处理/已忽略)。"已忽略"表示管理员已知悉该冲突并接受当前安排,发布时不做拦截。点击行展开冲突详情,高亮冲突涉及的课表单元格。

FR-CONFLICT-003

冲突解决引导

functional
pending
待处理

点击冲突项的"解决建议",系统给出可选方案(如"将A课程移至周三3-4节教室301空闲时段"),列出目标时段和教室的可用状态。管理员可选择采纳建议自动调课,或标记为"手动处理"稍后自行调整。

FR-MOD-ADJUST

手动调整课表

functional
pending
待处理

在自动排课基础上支持手动拖拽调课、增删课程安排,记录调整历史。

FR-ADJUST-001

课表手动调课

functional
pending
待处理

在课表视图(班级×星期×节次矩阵)中,管理员可点击任意已排课程单元格弹出调课面板:修改教师、教室、时间片(星期+节次)。提交时即时校验新安排是否产生新冲突,有冲突时红色警告并阻止保存,无冲突时绿色提示"可保存"。

FR-ADJUST-002

手动添加课程安排

functional
pending
待处理

管理员可在课表空白单元格直接新增课程安排。点击空白单元格弹出表单选择课程、班级、教师、教室(自动带入当前单元格对应的星期和节次,连堂课自动占用连续2节)。提交时进行冲突校验,通过后插入课表。支持快捷添加:在弹出表单中勾选"连续添加模式",提交后表单保持打开可继续添加下一个安排。

FR-ADJUST-003

调整历史与撤销

functional
pending
待处理

系统记录每次手动调整的操作日志(操作时间、操作人、调整前内容、调整后内容)。管理员可在"调整历史"面板查看所有变更记录,支持按时间范围筛选。每条记录提供"撤销"按钮,撤销后课表恢复到调整前状态并记录新的撤销日志。

FR-ADJUST-004

删除课程安排

functional
pending
待处理

管理员在课表视图中可删除某条已排课程安排。点击课程单元格后操作菜单含"删除"选项,弹出确认对话框(展示被删课程、班级、时间片信息),确认后删除并记录操作日志。删除操作支持撤销:在调整历史面板中恢复已删安排。

FR-MOD-VIEW

课表查看与导出

functional
pending
待处理

支持按班级/教师/教室/时间等多维度查看课表,并提供Excel和PDF导出及打印功能。

FR-VIEW-001

多维度课表视图

functional
pending
待处理

课表支持三种维度切换查看:班级课表(选班级看一周课程)、教师课表(选教师看一周授课安排)、教室课表(选教室看一周占用情况)。每种视图均为星期×节次矩阵表格,课程单元格显示课程名+教师名+教室编号。

FR-VIEW-002

课表Excel导出

functional
pending
待处理

在任意课表视图页面点击"导出Excel",后端生成xlsx文件并下载。导出内容与当前视图一致(含表头、合并单元格),文件命名格式为"{学期}-{维度}-{资源名}-课表.xlsx"。API: GET /api/schedule/export/excel?semesterId=&dimension=&resourceId=。

FR-VIEW-003

课表PDF导出与打印

functional
pending
待处理

点击"导出PDF"生成A4横向PDF课表文件,自动分页适配;点击"打印"调用浏览器打印预览,样式适配打印纸张。支持批量导出:选择多个班级一键导出所有班级PDF,打包为ZIP下载。

FR-MOD-STAT

教师工作量统计

functional
pending
待处理

基于排课结果自动计算教师课时数、工作量分布,生成统计报表和对比分析。

FR-STAT-001

教师课时自动统计

functional
pending
待处理

基于生效课表自动计算每位教师的周课时数、总课时数(学期总教学周×周课时)。区分授课类型统计:理论课课时、实验课课时、合班课课时(合班课按FR-RULE-009配置的折算系数计算)。统计在课表确认应用和每次手动调课保存后触发增量重算(仅重算受影响教师,非全量),工作量报表页面打开时展示最新数据。

FR-STAT-002

工作量统计报表

functional
pending
待处理

按院系统计教师工作量汇总表:列表展示每位教师的周课时、总课时、授课班级数、授课课程数。支持按院系筛选,按总课时降序排列。顶部汇总卡片展示全院总课时、教师人均课时、最高/最低课时教师。

FR-STAT-003

工作量报表导出

functional
pending
待处理

工作量统计报表支持导出Excel(含汇总卡片数据+明细列表),文件命名"{学期}-教师工作量统计.xlsx"。也支持导出PDF,按院系分页。API: GET /api/statistics/export?semesterId=&format=excel|pdf&departmentId=。

FR-MOD-PUB

课表发布管理

functional
pending
待处理

支持课表的发布、撤回操作,管理发布状态,控制师生端课表可见范围。

FR-PUB-001

课表发布与撤回

functional
pending
待处理

管理员确认课表无误后点击"发布",课表状态从"草稿"变为"已发布",师生端可见。发布前系统自动执行最终冲突扫描,仅"未处理"状态的冲突会阻止发布;"已忽略"冲突视为管理员已知悉并接受,不阻止发布。支持"撤回发布"使课表回到草稿状态,撤回后师生端不可见并自动发送撤回通知。

FR-PUB-002

师生端课表查看

functional
pending
待处理

教师登录后默认展示个人课表(本周授课安排),可按周切换;学生/班级负责人登录后默认展示本班课表。已发布课表只读,不可编辑。支持搜索教师姓名查看该教师课表(学生端)。

FR-PUB-003

课表变更通知

functional
pending
待处理

课表发布或发生调整后,系统自动向受影响班级的学生和教师发送站内消息通知。通知内容包含变更摘要和查看链接。邮件通知为可选增强:需管理员在系统设置中配置SMTP邮件服务后才启用,未配置时仅使用站内消息。

FR-MOD-AUTH

用户与权限管理

functional
pending
待处理

系统用户登录认证、角色(管理员/教师/学生)权限划分、操作日志审计。

FR-AUTH-001

用户登录认证

functional
pending
待处理

登录表单包含用户名+密码,支持"记住我"(7天免登录)。API: POST /api/auth/login,入参{ username, password, rememberMe },出参{ token, userInfo{ id, name, role } }。连续5次密码错误锁定账户15分钟,密码采用BCrypt加密存储。

FR-AUTH-002

角色权限控制

functional
pending
待处理

三级角色:超级管理员(全部权限,可管理用户)、教务管理员(基础数据管理+排课+发布)、教师(仅查看个人课表和工作量)、学生(仅查看本班课表)。权限控制到页面和API级别,未授权访问返回403并跳转无权限页面。

FR-AUTH-003

操作日志审计

functional
pending
待处理

记录关键操作日志:排课生成、手动调课、课表发布/撤回、用户登录/登出、基础数据变更。日志字段包括操作时间、操作人、IP地址、操作类型、操作详情。管理员可按时间范围和操作类型筛选查看,日志仅可查看不可删除。

FR-AUTH-004

用户账号管理

functional
pending
待处理

超管可对系统用户进行增删改查。列表支持按用户名、角色筛选分页;新建用户时分配角色(教务管理员/教师/学生)并设置初始密码;支持启用/禁用账号、重置密码(生成随机密码或手动输入)。用户名全局唯一,密码BCrypt加密存储。

TR-MOD

技术架构约束

technical
pending
待处理

SpringBoot+MyBatis+MySQL后端,Thymeleaf模板引擎前端,Java生态依赖的技术约定。

TR-001

后端技术栈:SpringBoot+MyBatis+MySQL

technical
pending
待处理

后端使用SpringBoot 2.7+搭建,MyBatis作为ORM框架,MySQL 8.0+存储数据。使用Spring AOP实现操作日志切面,Spring Security实现认证授权。数据库连接池使用HikariCP,事务管理使用@Transactional注解。邮件通知功能使用Spring Boot Starter Mail(JavaMailSender),为可选模块仅在管理员配置SMTP后激活。

TR-002

前端技术栈:Thymeleaf+Bootstrap

technical
pending
待处理

前端使用Thymeleaf模板引擎渲染页面,搭配Bootstrap 5实现响应式布局。课表矩阵表格使用Thymeleaf循环渲染,交互增强使用原生JavaScript或Alpine.js轻量框架。不使用Vue/React等重型前端框架,保持服务端渲染架构。

TR-003

RESTful API设计规范

technical
pending
待处理

所有API路径以/api/开头,使用标准HTTP方法(GET查询、POST创建、PUT更新、DELETE删除)。统一响应格式{ code, message, data },业务成功code=200,参数校验失败code=400,未认证code=401,无权限code=403。分页接口统一入参{ page, size },出参{ list, total, page, size }。

TR-004

排课并发锁与数据一致性

technical
pending
待处理

同一学期同时只允许一个排课任务运行,使用MySQL行锁(schedule_task表semester_id唯一索引+status状态机)防止重复触发。排课异步任务使用Spring @Async + 数据库任务表(schedule_task)持久化,服务重启后任务不丢失。排课结果应用使用数据库事务保证原子性:预览数据→正式课表写入+冲突记录+日志写入在同一事务中,失败全部回滚。