logo
0
0
Login

智能排课系统

基于Flask框架开发的智能排课系统,支持自动读取Excel教师信息并生成合理的课程表。

功能特点

  • 📊 Excel数据导入: 支持读取包含教师信息的Excel文件
  • 🧠 智能排课算法: 自动平均分配周课时,确保课程分布均匀
  • 🎯 灵活配置: 可自定义上午/下午课节数和上课日期
  • 📱 响应式设计: 支持PC和移动端访问
  • 🖨️ 打印功能: 支持课程表打印输出
  • 📈 统计分析: 提供排课统计信息

系统要求

  • Python 3.7+
  • Flask
  • pandas
  • openpyxl

快速开始

1. 安装依赖

pip3 install flask pandas openpyxl --break-system-packages

2. 准备数据文件

确保有一个名为 test.xlsx 的Excel文件,包含以下列:

列名说明示例
教师教师姓名张三
性别教师性别男/女
所教科目教授科目数学
夫妻夫妻关系李四/无
所教班级教授班级1,2
周课时每周课时数6

3. 启动系统

方法一:使用启动脚本(推荐)

python3 start_server.py

方法二:直接运行

python3 app.py

4. 访问系统

打开浏览器访问:http://localhost:5000

使用说明

1. 上传教师信息

  • 在主页点击"选择文件"上传Excel文件
  • 点击"上传"按钮

2. 配置排课参数

  • 上午课程节数: 选择上午的课节数(1-5节)
  • 下午课程节数: 选择下午的课节数(1-5节)
  • 上课日期: 勾选需要上课的星期几
  • 智能排课: 启用自动平均分配功能

3. 生成课程表

  • 点击"开始排课"按钮
  • 系统会自动生成课程表并跳转到课程表页面

4. 查看和打印

  • 在课程表页面可以查看完整的排课结果
  • 点击"打印课程表"可以打印输出
  • 查看页面底部的统计信息

智能排课算法

系统采用智能排课算法,具有以下特点:

  1. 平均分配: 将每位教师的周课时尽量平均分配到各个上课日
  2. 避免冲突: 确保同一时间段不会有冲突安排
  3. 班级管理: 支持一位教师教授多个班级
  4. 灵活配置: 支持不同的课程时间安排

算法示例

如果一位教师一周要上6节课,课表有5天上课:

  • 基础分配:每天1节课(6÷5=1余1)
  • 额外分配:前1天额外增加1节课
  • 最终结果:第1天2节课,第2-5天各1节课

项目结构

智能排课系统/ ├── app.py # Flask主应用 ├── start_server.py # 启动脚本 ├── test_schedule.py # 测试脚本 ├── test.xlsx # 示例数据文件 ├── requirements.txt # 依赖包列表 ├── README.md # 说明文档 ├── templates/ # HTML模板 │ ├── base.html # 基础模板 │ ├── index.html # 主页模板 │ └── schedule.html # 课程表模板 ├── static/ # 静态资源 │ ├── css/ │ │ └── style.css # 样式文件 │ └── js/ │ └── main.js # JavaScript文件 └── uploads/ # 上传文件目录

API接口

获取课程表数据

GET /api/schedule

返回JSON格式的课程表数据:

{ "schedule": { "星期一": { "上午第1节": [ { "teacher": "张三", "subject": "数学", "class": "1" } ] } }, "days": ["星期一", "星期二", "星期三"], "time_slots": ["上午第1节", "上午第2节", "..."] }

测试

运行测试脚本验证系统功能:

python3 test_schedule.py

测试内容包括:

  • 服务器连接测试
  • 配置接口测试
  • 排课生成测试
  • API接口测试
  • 页面访问测试

故障排除

常见问题

  1. 端口被占用

    解决方案:修改app.py中的端口号或停止占用5000端口的程序
  2. Excel文件读取失败

    解决方案:确保Excel文件格式正确,包含必要的列名
  3. 依赖包安装失败

    解决方案:使用 --break-system-packages 参数强制安装
  4. 课程表显示异常

    解决方案:检查数据格式,确保周课时为数字,班级用逗号分隔

开发说明

扩展功能

系统采用模块化设计,可以轻松扩展以下功能:

  • 教师时间偏好设置
  • 课程冲突检测
  • 多校区支持
  • 课程表导出功能
  • 历史记录管理

自定义样式

修改 static/css/style.css 文件可以自定义界面样式。

数据库支持

当前版本使用内存存储,可以扩展为使用SQLite或其他数据库。

许可证

本项目采用MIT许可证,详见LICENSE文件。

联系方式

如有问题或建议,请通过以下方式联系:

  • 项目地址:[GitHub仓库地址]
  • 邮箱:[联系邮箱]

注意: 本系统为教育和演示目的开发,在生产环境使用前请进行充分测试。

About

测试

Language
Python56%
HTML25.4%
Markdown9%
CSS5.8%
Others3.8%