# 排课网站产品策划文案

版本：v0.1  
日期：2026-06-03  
定位：面向中小学、培训机构和小型教务团队的 Web 排课工具，后续可迁移到微信小程序。

## 1. 调研结论摘要

排课软件是成熟需求，市面产品通常已经覆盖“自动排课、手工调课、冲突检查、导出打印、教师/班级/教室课表、多校区/多学段管理”等基础能力。新的产品如果只强调“也能自动排课”，很难形成差异。

更有机会的切入点是：

1. **导入更轻松**：老师和教务手上通常已有旧课表、Excel、教师名单、班级课程计划。真正影响上手体验的是能否少填表、少改格式、少培训，把混乱数据快速变成可排课数据。
2. **交互更直观**：成熟软件功能很多，但 UI 往往偏传统。排课过程需要大量“看冲突、试交换、锁定局部、重新计算”，如果操作像现代日历/表格一样顺手，会有明显体验优势。
3. **冲突解释更清楚**：排不出来时，用户最需要知道“为什么排不出来、改哪条规则最有效”，而不是只看到失败提示。
4. **发布更移动化**：排完课表后，教师、班主任、学生、家长需要快速查看。Web 产品天然适合生成链接，小程序适合轻量查看和通知。
5. **先解决可信工作流，再追求全自动**：MVP 不必一开始就挑战最复杂的自动排课。先做好导入、课表编辑、冲突检测、导出发布，就能产生可用价值；随后再接入约束求解器做自动排课。

## 2. 竞品功能图谱

### 2.1 基础数据管理

成熟排课系统普遍需要以下基础资料：

- 学校/校区/学年/学期
- 年级、班级、教学班、行政班
- 教师、教师可用时间、教师任课科目、教师工作量
- 科目、课程计划、每周课时数
- 教室、功能室、场地、容量、设备
- 作息时间、上课节次、午休、晚自习、单双周
- 教研组、备课组、班主任、年级组
- 已有课表、历史课表、固定课程

对产品设计的启示：

- 不要让用户从空白表单开始建数据。
- 第一入口应是“导入旧数据/旧课表”，不是“新建学校资料”。
- 所有基础资料都应该能从 Excel、CSV、旧课表截图或手动粘贴中补全。

### 2.2 自动排课能力

常见能力：

- 一键自动排课
- 按年级、班级、教师、课程局部排课
- 保留已排课程，只自动安排剩余课程
- 支持硬约束与软约束
- 多方案生成与评分
- 自动避开教师冲突、班级冲突、教室冲突
- 自动控制上午/下午课程分布
- 自动处理连堂课、隔天课、单双周课、固定课
- 自动处理教师不可用时间、会议时间、教研时间
- 支持排不完后的原因提示或规则放宽

对产品设计的启示：

- 自动排课不能只是一个按钮，需要配合“规则可视化”和“结果可解释”。
- 生成结果最好提供多个候选方案，例如“教师更均衡”“班级更均衡”“尽量保留旧课表”。
- 用户通常需要逐步排课，而不是一次性把全校全部生成完。

### 2.3 手工调课与冲突检查

成熟产品普遍会支持：

- 拖拽课程到其他时间格
- 同时交换两门课
- 锁定某节课不参与自动调整
- 固定整天、半天、某教师、某班级
- 手动安排教室
- 冲突高亮：教师冲突、班级冲突、教室冲突、课时不足、规则违反
- 调整后实时校验
- 撤销、重做、历史版本

对产品设计的启示：

- 调课界面要像“带规则校验的课表画布”，而不是一堆弹窗。
- 每个格子应同时表现课程、教师、教室、状态。
- 冲突提示需要贴近出错位置，例如在课表格子、侧边栏、规则列表同时显示。

### 2.4 视图与报表

常见视图：

- 班级课表
- 教师课表
- 教室课表
- 年级总表
- 全校总表
- 课程分布表
- 教师工作量统计
- 空闲教师/空闲教室查询
- 冲突列表
- 课时完成率

常见导出：

- Excel
- PDF
- Word
- 图片
- 打印版
- 链接分享
- 教师个人课表
- 班级课表

对产品设计的启示：

- Web 产品应该把“查看”和“编辑”拆开。编辑端面向教务，查看端面向教师/学生/家长。
- 导出格式不只是附属功能，而是教务落地的关键。
- 小程序第一阶段更适合做查看、通知、调课确认，而不是复杂排课编辑。

### 2.5 培训机构额外需求

如果目标包含培训机构，常见扩展功能包括：

- 学员管理
- 课程包/课时包
- 班课/一对一/小班课
- 老师课酬
- 学员请假、补课、调课
- 签到、消课
- 家长通知
- 多校区资源共享

对产品设计的启示：

- 中小学排课和培训机构排课是两个相邻但不同的业务。
- MVP 应优先选择一个主场景。若先做中小学，就不要过早做复杂消课和收费；若先做培训机构，就要把调课、补课、通知放得更靠前。

## 3. 推荐产品定位

### 3.1 一句话定位

**一个能从旧课表和 Excel 快速导入、能解释冲突、能像日历一样拖拽调课的现代排课网站。**

### 3.2 核心卖点文案

1. **导入旧课表，少填一半资料**  
   支持上传 Excel、CSV、旧课表文件或粘贴表格内容，系统自动识别班级、教师、科目、教室和节次。

2. **边排边看冲突**  
   教师冲突、教室冲突、课时不足、连堂规则、不可用时间都会在课表中实时标记。

3. **自动排课不是黑盒**  
   每个排不进去的课程都能看到原因：哪个教师没空、哪个教室被占、哪条规则太严格。

4. **拖拽调课，系统兜底**  
   教务可以手动拖拽、交换、锁定课程，系统持续校验，避免改完又出现隐藏冲突。

5. **一键发布到手机端**  
   排完后生成教师课表、班级课表、教室课表，支持链接查看、Excel/PDF 导出，后续接入微信小程序。

### 3.3 第一批目标用户

建议先聚焦：

- 有 10-80 个班级的中小学或民办学校
- 目前使用 Excel 或传统软件排课的教务老师
- 需要频繁手工微调、临时调课、跨年级排课的学校
- 对自动排课有需求，但更在意“导入顺不顺、排错能不能看懂、结果能不能改”的团队

暂不优先：

- 超大型高校完整教务排课
- 强依赖选课、抢课、培养方案、考试排考的大学系统
- 以收费、消课、课酬为核心的复杂培训机构 ERP

## 4. 用户工作流

### 4.1 新学期建课表

1. 创建学期
2. 导入教师名单、班级名单、教室名单
3. 导入课程计划，例如“七年级 1 班：语文 5 节、数学 5 节、英语 4 节”
4. 导入旧课表或固定课
5. 设置规则：教师不可用时间、连堂、教室要求、上午优先等
6. 系统检查数据完整性
7. 生成排课方案
8. 教务拖拽微调
9. 查看冲突和评分
10. 导出并发布

### 4.2 中途临时调课

1. 选择要调整的班级、教师或日期
2. 系统显示相关教师/班级/教室的可用时段
3. 拖拽或点击交换课程
4. 实时检查影响范围
5. 保存为临时调课或正式课表
6. 通知相关教师和班级

### 4.3 导入失败时的体验

导入失败不应该让用户重新整理文件，而应该进入“导入修复”流程：

- 系统显示识别到的表格结构
- 让用户确认哪一行是节次、哪一列是班级
- 自动标记疑似教师名、课程名、教室名
- 对无法识别的单元格给出候选解释
- 修复后记住该学校的模板，下次自动套用

这会成为产品差异化的核心。

## 5. MVP 功能范围

### 5.1 第一版必须有

1. **项目/学期管理**  
   创建学校、学年、学期、周课表结构。

2. **基础数据导入**  
   支持 Excel/CSV/粘贴表格导入教师、班级、教室、课程计划。

3. **旧课表导入**  
   支持导入一个已有课表，自动拆分出班级、教师、课程、节次。

4. **导入映射器**  
   用户可以把列映射为“教师、班级、科目、教室、节次、课时数”等字段。

5. **课表编辑器**  
   周视图网格，支持新增课程、拖拽、交换、删除、锁定。

6. **实时冲突检查**  
   检查教师同一时间多课、班级同一时间多课、教室占用冲突、课时数不匹配。

7. **规则设置**  
   支持教师不可用时间、固定课程、连堂课程、教室要求、课程每天最多次数。

8. **导出发布**  
   导出 Excel/PDF，生成教师视图、班级视图、教室视图链接。

9. **版本历史**  
   每次保存生成版本，可回滚到之前课表。

### 5.2 第一版可以暂缓

- 完整全自动排课
- 高校选课/学生选课冲突
- 复杂考试排考
- 课酬、收费、消课
- 多校区资源自动均衡
- 微信小程序编辑端
- AI 自动生成最佳课表

### 5.3 第一版可做轻量自动化

完整自动排课难度高，但 MVP 可以做几个“低风险自动能力”：

- 自动补齐未排课程
- 自动推荐可交换时段
- 自动找空闲教师/教室
- 自动把固定课锁住
- 自动检测课时是否排满
- 自动给候选调整排序

这比一开始做“全校一键自动排课”更容易落地，也更能服务真实教务操作。

## 6. 导入功能设计

导入是核心获客点，建议按“模板导入 + 智能识别 + 手动确认 + 错误修复”设计。

### 6.1 支持的导入类型

- 教师名单
- 班级名单
- 教室名单
- 课程计划
- 教师任课关系
- 教师不可用时间
- 固定课安排
- 旧课表
- 教务系统导出的 Excel
- 用户直接复制粘贴的表格

### 6.2 导入流程

1. 上传或粘贴
2. 系统识别文件类型
3. 展示解析预览
4. 用户确认字段映射
5. 系统进行数据校验
6. 用户处理异常项
7. 生成导入摘要
8. 保存为学校专属模板

### 6.3 识别能力

系统应能识别：

- “语文/语/中文”是同一科目候选
- “张三老师/张三/张 三”可能是同一教师
- “七1班/七年级1班/初一1班”可能是同一班级
- “周一第1节/星期一 1/一-1”是同一节次
- 合并单元格中的课程可能跨多个节次
- 空白单元格可能是无课，也可能是合并单元格延续

### 6.4 导入错误提示

错误提示应使用业务语言：

- 不推荐：“字段 course_teacher_id 为空”
- 推荐：“数学这门课还没有指定教师”

- 不推荐：“slot conflict”
- 推荐：“周二第 3 节，王老师同时出现在七年级 1 班和七年级 3 班”

### 6.5 导入差异化文案

**不用重新整理表格，上传旧课表也能开始排。**  
系统会自动识别课表结构，无法确认的地方再让你点选修正。第一次导入修好后，下次同类文件会自动套用模板。

## 7. 排课规则设计

### 7.1 硬约束

硬约束表示绝对不能违反：

- 同一教师同一时间不能上两节课
- 同一班级同一时间不能上两节课
- 同一教室同一时间不能被多个班级占用
- 教师不可用时间不能安排课程
- 固定课程不能移动
- 课程必须满足每周课时数
- 特定课程必须使用特定教室或教室类型

### 7.2 软约束

软约束表示尽量满足，可以评分：

- 主科尽量排在上午
- 同一科目不要连续多天缺课
- 教师每天课时尽量均衡
- 教师连续上课节数不要过多
- 班级每天课程难度尽量均衡
- 体育课尽量不排第一节或最后一节
- 同年级同科目尽量方便集体备课
- 教师跨校区移动尽量少

### 7.3 规则 UI

规则设置不应只是复杂表单。建议做成三层：

1. **常用规则模板**：主科上午优先、教师半天无课、连堂课、固定班会。
2. **自然语言辅助**：用户输入“王老师周三上午不能排课”，系统转成规则并让用户确认。
3. **高级规则表格**：给熟练教务编辑权重、适用范围、例外情况。

## 8. 课表编辑器设计

### 8.1 主界面

建议首屏就是可编辑课表，不做营销式首页。

核心布局：

- 顶部：学期、视图切换、生成、检查、导出、发布
- 左侧：班级/教师/教室列表和筛选
- 中间：课表网格
- 右侧：冲突、未排课程、规则建议
- 底部或弹层：版本历史和操作日志

### 8.2 关键交互

- 拖拽课程到空格
- 拖拽课程到已占格时触发交换预览
- 点击格子打开课程详情
- 按住课程查看影响范围
- 锁定课程后显示锁图标
- 冲突格子用明确颜色和图标标记
- 右侧冲突列表点击后定位到格子
- 调整前显示“会影响哪些教师/班级/教室”

### 8.3 状态颜色

建议颜色含义：

- 正常：白底或浅色课程块
- 已锁定：灰色锁标识
- 轻微违反软规则：黄色提示
- 硬冲突：红色提示
- 未排课程：蓝色待安排
- 自动建议：绿色候选

颜色不能只靠色相区分，应配合文字、图标和 tooltip。

## 9. 自动排课技术路线

### 9.1 推荐思路

建议把自动排课拆成两个层次：

1. **业务规则层**  
   前端和后端共同维护规则配置、冲突解释、用户可理解的约束文案。

2. **求解器层**  
   使用约束求解器生成候选方案，例如 Google OR-Tools CP-SAT、Timefold Solver，或未来自研优化器。

这样可以避免把业务逻辑直接写死在求解器里。

### 9.2 求解器选择

推荐优先研究：

- **Google OR-Tools CP-SAT**：适合建模硬约束、软约束和组合优化；Python 生态成熟，适合作为后端 solver 服务。
- **Timefold Solver**：OptaPlanner 的延续方向之一，适合学习“约束流、评分、领域模型”的设计。
- **FET**：成熟开源排课软件，约束类型非常丰富，适合作为规则设计参考；若用于商业产品要仔细评估许可证和集成方式。
- **UniTime**：高校排课/考试排程/学生排课非常成熟，适合作为复杂教务系统的功能边界参考，不适合直接作为 MVP 蓝本。

### 9.3 不建议一开始做的算法承诺

- 不承诺“任何学校一键排出最优课表”
- 不承诺“导入任意 Excel 都 100% 自动识别”
- 不承诺“大型高校复杂选课一版支持”

更稳妥的承诺：

- “尽量自动识别，无法确认的地方可视化修复”
- “先保证冲突可见、规则可解释”
- “自动生成候选方案，教务可继续微调”

## 10. GitHub 和开源项目参考

### 10.1 FET

地址：https://lalescu.ro/liviu/fet/  
参考价值：

- 约束类型丰富，适合研究真实排课规则的覆盖范围。
- 支持教师、学生组、课程活动、教室、时间约束等概念。
- 对“规则建模”和“排课失败时如何理解限制”有参考意义。

注意：

- 更像桌面/传统排课工具，不是现代 Web UI。
- 商业集成需要关注许可证。

### 10.2 UniTime

地址：https://www.unitime.org/  
GitHub：https://github.com/UniTime/unitime  
参考价值：

- 高校级教务排课系统，覆盖课程排课、考试排考、学生排课等复杂场景。
- 适合研究大型系统的数据模型、权限、课程需求和排程生命周期。

注意：

- 系统复杂度远超 MVP。
- 不建议一开始按 UniTime 的完整边界做产品。

### 10.3 Google OR-Tools

地址：https://developers.google.com/optimization  
GitHub：https://github.com/google/or-tools  
参考价值：

- 可作为自动排课求解器基础。
- CP-SAT 适合表达“某个教师在某个时段是否上某门课”这类布尔决策变量。
- 官方有排班、调度、约束优化示例，适合做后端 solver 原型。

注意：

- OR-Tools 解决的是优化问题，不会自动提供业务 UI、导入、解释文案。
- 需要自己做好业务数据到约束模型的转换。

### 10.4 Timefold Quickstarts

地址：https://github.com/TimefoldAI/timefold-quickstarts  
参考价值：

- 学习约束评分、领域模型、硬约束/软约束拆分。
- 适合研究如何把排课问题做成可扩展的业务规则系统。

注意：

- 技术栈和商业许可需要进一步确认。

### 10.5 timetable-generator

地址：https://github.com/prabath1998/timetable-generator  
参考价值：

- Web 端排课项目，包含拖拽、冲突校验、后台管理等产品形态。
- 技术结构对“前端界面 + 后端生成/校验”的拆分有参考意义。

注意：

- 不能直接依赖其质量作为商业产品基础，需要审查代码、许可证和维护状态。

### 10.6 Timetabler

地址：https://github.com/sukrutrao/Timetabler  
参考价值：

- 用 SAT/MaxSAT 思路处理排课约束，适合参考约束表达。
- 强调用户自定义约束，适合启发高级规则设计。

注意：

- 更偏研究/算法方向，不是完整 SaaS 产品。

### 10.7 课表前端组件

可参考：

- https://github.com/Hzy0913/Timetable
- https://github.com/nei1ee/ColorTimetable

参考价值：

- 微信小程序/uni-app/移动端课表展示样式。
- 适合作为“查看端”的交互参考。

注意：

- 这些组件一般只解决展示，不解决排课、冲突检测和导入。

## 11. 产品阶段规划

### 阶段 1：可用的手工排课与导入工具

目标：让用户不用算法也愿意使用。

功能：

- 基础资料导入
- 旧课表导入
- 课表网格编辑
- 冲突检查
- 未排课程列表
- Excel/PDF 导出
- 教师/班级/教室查看链接

成功标准：

- 用户可以在 30 分钟内导入资料并得到一张可编辑课表。
- 手工调课时，系统能实时指出主要冲突。

### 阶段 2：半自动排课

目标：减少教务重复劳动。

功能：

- 自动填补未排课程
- 推荐交换时段
- 基于规则评分排序候选方案
- 支持锁定局部后重新排剩余部分
- 冲突原因解释

成功标准：

- 对中等复杂学校，系统能给出可继续微调的候选方案。
- 用户能理解未满足规则的原因。

### 阶段 3：完整自动排课

目标：形成核心壁垒。

功能：

- 求解器服务
- 多方案生成
- 规则权重配置
- 自动优化教师负载、课程分布、教室使用
- 大规模排课异步任务
- 排课结果评分报告

成功标准：

- 可以在合理时间内为目标学校生成可用课表。
- 排课失败时能给出可执行的修改建议。

### 阶段 4：移动端和协作

目标：从排课工具扩展为轻量教务协作工具。

功能：

- 微信小程序课表查看
- 教师调课申请
- 教务审批
- 临时调课通知
- 教师个人日程
- 班级课表分享

成功标准：

- 排课结果能被教师、学生、家长实际使用。
- 调课通知链路闭环。

## 12. 页面清单

### Web 管理端

- 登录/注册
- 学校/学期列表
- 导入中心
- 导入预览与字段映射
- 基础资料管理
- 课程计划管理
- 规则设置
- 课表编辑器
- 自动排课任务页
- 冲突检查页
- 版本历史
- 导出发布页
- 教师/班级/教室查看页

### 小程序端

- 我的课表
- 班级课表
- 今日课程
- 调课通知
- 临时变更
- 教师确认
- 分享查看

小程序第一阶段建议只做查看和通知，不做复杂编辑。

## 13. 数据模型草案

核心对象：

- School：学校
- Campus：校区
- Term：学期
- WeekPattern：周规则
- Day：星期
- Period：节次
- ClassGroup：行政班/教学班
- Teacher：教师
- Subject：科目
- Room：教室
- RoomType：教室类型
- CoursePlan：课程计划
- Lesson：待安排课程
- Assignment：已安排课程
- Constraint：规则
- TimetableVersion：课表版本
- ImportJob：导入任务
- ImportTemplate：导入模板
- Conflict：冲突
- PublishLink：发布链接

建议把“待安排课程 Lesson”和“已安排课程 Assignment”分开，这样更容易支持未排课程列表、局部重排、版本回滚。

## 14. 早期技术建议

### 14.1 Web 技术栈

可以考虑：

- 前端：React / Next.js / TypeScript
- UI：Tailwind CSS + Radix UI 或 shadcn/ui
- 拖拽：dnd-kit
- 表格：TanStack Table
- 后端：FastAPI / Django / NestJS
- 数据库：PostgreSQL
- 文件解析：SheetJS、openpyxl、pandas
- 求解器：Google OR-Tools Python
- 异步任务：Celery/RQ 或 BullMQ

若未来要迁移小程序：

- Web 端不要把业务逻辑写死在组件里。
- 排课规则、冲突检查、导入解析都放后端。
- 小程序只调用相同 API。
- UI 层和业务规则层明确分离。

### 14.2 架构原则

- 导入解析独立成模块
- 冲突检查独立成模块
- 自动排课独立成异步任务
- 课表版本不可直接覆盖，应保留历史
- 规则使用结构化数据保存，不要只保存自然语言
- 每次自动生成都保存输入参数和结果评分

## 15. 首版首页文案方向

如果需要落地官网，建议首页不要做泛泛的“智能教务云平台”，而是直接对准痛点。

### Hero

标题：  
**上传旧课表，也能开始智能排课**

副标题：  
把 Excel、旧课表、教师名单和教室信息导入系统，实时检查冲突，拖拽调整课程，并一键导出教师、班级、教室课表。

主按钮：  
上传课表试试

副按钮：  
查看导入示例

### 痛点区

- 不想重新整理一堆表格
- 自动排课失败时不知道哪里错
- 手工调课容易改出新冲突
- 排完还要分别发给教师和班级

### 能力区

- 旧课表识别
- 字段自动映射
- 实时冲突检查
- 拖拽调课
- 自动补排
- 多视图导出
- 手机端查看

### 试用引导

文案：  
先不用完整录入学校资料，上传一份旧课表，看看系统能识别出多少内容。

## 16. 风险与应对

### 风险 1：自动排课复杂度超预期

应对：

- 第一阶段以导入、编辑、冲突检查建立可用价值。
- 自动排课先做“推荐”和“补排”，再做全量生成。

### 风险 2：不同学校 Excel 格式差异巨大

应对：

- 做导入模板记忆。
- 做可视化字段映射。
- 允许用户上传后逐步修复，而不是要求一次成功。

### 风险 3：用户规则说不清

应对：

- 提供常用规则模板。
- 用业务语言解释规则。
- 对排课失败给出“放宽哪条规则”的建议。

### 风险 4：小程序无法承载复杂编辑

应对：

- Web 负责复杂排课编辑。
- 小程序负责查看、通知、确认、轻量调课申请。

## 17. 下一步建议

1. 先做一个低保真原型：导入中心 + 课表编辑器 + 冲突侧边栏。
2. 准备 3-5 份不同格式的真实/仿真课表 Excel，用来测试导入能力。
3. 设计数据模型和约束模型，不急着写完整求解器。
4. 用 OR-Tools 做一个小规模 solver 原型：例如 3 个班、8 个老师、5 天、每天 7 节。
5. 将产品第一版定义为“导入顺手的排课编辑器”，第二版再定义为“可解释的自动排课系统”。

## 18. 调研来源

- 排课系统产品页：https://www.pkxt.com/
- TimetableNow 中文功能页：https://timetablenow.com/?lang=zh
- FET 官方功能页：https://lalescu.ro/liviu/fet/features.html
- UniTime 官网：https://www.unitime.org/
- UniTime GitHub：https://github.com/UniTime/unitime
- Google OR-Tools 官方文档：https://developers.google.com/optimization
- Google OR-Tools GitHub：https://github.com/google/or-tools
- Timefold Quickstarts：https://github.com/TimefoldAI/timefold-quickstarts
- timetable-generator：https://github.com/prabath1998/timetable-generator
- Timetabler：https://github.com/sukrutrao/Timetabler
- Hzy0913 Timetable：https://github.com/Hzy0913/Timetable
- ColorTimetable：https://github.com/nei1ee/ColorTimetable
