Python+Django实战|线下培训机构学员排课管理系统:班级管理、课程编排、教师排班、学员选课、课时消课、考勤签到、课表查询、营收统计
一、项目背景与痛点
线下艺术、职业、少儿等各类培训机构,日常核心工作围绕班级、课程、教师、学员排课展开。目前大量中小型机构依旧采用手工排课、纸质课表、Excel台账、口头通知的管理模式,随着学员增多、课程品类丰富、全职/兼职教师队伍扩大,各类管理问题集中爆发,核心痛点如下:
- 人工排课效率低、易冲突:依靠人工手写编排课程,极易出现同一教师多时段撞课、同一教室重复安排课程,调整课表耗时费力;
- 课表分发与查询不便:纸质课表下发各班,学员、教师无法快速查询个人课表,临时调课通知传达滞后;
- 课时管控混乱:学员购课之后,剩余课时依靠手工记录,消课、扣课不及时,容易出现课时错记、漏记;
- 签到考勤流于形式:线下纸质签到表易丢失,无法统一统计学员出勤、旷课、请假数据,课后复盘困难;
- 教师排班无统筹:全职、兼职教师上课时长、授课班级无统一台账,课时薪资核算缺少精准依据;
- 班级管理松散:班级学员、授课课程、开班时间无电子化档案,分班、合班操作繁琐;
- 经营数据难以统计:班级数量、开课量、学员人数、课时营收依靠人工汇总,无法直观分析机构运营状况。
针对传统培训机构的管理弊端,本次基于Python+Django4.2+MySQL+时段冲突算法+Ajax+ECharts搭建一体化培训机构排课管理系统,实现班级搭建、课程管理、智能排课、教师排班、学员选课、课时消课、在线签到、课表查询、营收统计全套闭环能力。本项目开辟线下教培机构排课运营全新赛道,和日志、天气、智能在线考试、智能图书、考勤、租赁、CRM、售后工单、记账、音乐、物业等往期所有项目业务、功能、代码完全无重复。
二、核心目标与定位
本项目核心目标:搭建数字化教培机构综合排课平台,实现班级建档→课程维护→教师排班→智能防冲突排课→学员选课报班→课时自动消课→课堂签到考勤→个人课表查询→教师薪资核算→机构营收数据统计完整闭环,彻底替代纸质课表与手工台账,实现排课智能化、课时精细化、考勤规范化、运营数据可视化。
项目精准定位:面向少儿艺术、职业技能、文体兴趣等线下培训机构的专用管理系统,采用Django原生MVT架构,部署简单、低配服务器即可稳定运行;划分机构管理员、授课教师、学员/家长三类角色,权限严格隔离,各司其职;主打智能排课防冲突、课时精准管控、考勤全程留痕、课表一键查询,适配大中小型线下培训机构、兴趣辅导班、艺术画室等场景。
核心设计理念:班级标准化、排课智能化、课时精细化、考勤电子化、课表可视化、经营数据量化,解决人工排课冲突、课时混乱、考勤难统计的核心问题。
三、整体技术方案
项目基于Django原生MVT分层架构开发,MySQL存储班级、课程、教师、学员、排课、考勤、课时全量业务数据,自研时段&场地&教师三重冲突检测算法,datetime模块完成课时、考勤时间计算,Ajax实现无刷新选课与签到,自定义枚举管控全业务状态,中间件实现多角色权限拦截,ECharts制作运营数据看板。整体分层架构流程图如下:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 班级课程层 │────▶│ 教师排班层 │────▶│ 智能排课层 │────▶│ 学员选课层 │ │ 班级创建、课程分类与信息维护 │ 教师档案、授课时段、排班设置 │ 三重冲突校验、生成正式课表 │ 学员选班报名、绑定课程 │ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 课时消课层 │────▶│ 课堂签到层 │────▶│ 课表查询层 │ │ 上课自动扣减剩余课时、课时记录 │ 在线签到、请假、旷课标记 │ 教师/学员个人课表检索查看 │ │ │ │ ▼ ┌─────────────┐ │ 薪资营收层 │ │ 教师课时薪资、机构营收图表统计 │ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 底层技术底座 │ │ - 后端框架:Python3.11 + Django4.2 原生MVT架构 │ │ - 数据存储:MySQL 存储班级、课程、教师、学员、排课全量数据 │ │ - 核心算法:教师/教室/时段三重排课冲突检测算法 │ │ - 时间处理:datetime 实现课时、考勤、上课时间计算 │ │ - 前端交互:Ajax 实现选课、签到无刷新操作 │ │ - 状态管理:枚举类管控排课、考勤、课时全状态 │ │ - 权限体系:多角色中间件,区分管理员/教师/学员权限 │ │ - 数据可视化:ECharts 生成营收、开课、学员统计图表 │ └─────────────────────────────────────────────────────────────────────────完整技术栈清单:
- Web后端:Python 3.11、Django 4.2 原生MVT轻量化架构
- 数据库:MySQL 8.0,结构化存储教培全业务数据
- 核心算法:三重排课冲突检测算法,规避撞课问题
- 时间处理:datetime 完成上课时间、考勤、课时计算
- 异步交互:Ajax 完成选课、签到无刷新提交
- 状态管控:自定义枚举类管理排课、考勤、课时状态
- 权限控制:自定义中间件实现三类角色权限隔离
- 数据可视化:ECharts 实现机构运营数据图表展示
四、核心能力模块详解
1. 班级与课程管理模块
搭建机构基础架构,为排课、选课提供底层数据支撑:
- 班级管理:创建班级、设置开班日期、上课地点、班级类型,支持合班、分班管理;
- 课程分类:按艺术、文化课、职业技能等划分大类,录入课程名称、课时单价、总课时;
- 课程档案:记录课程简介、适合人群、教学大纲,支持启用/停用课程;
- 班级课程绑定:为固定班级分配长期授课课程。
2. 教师档案与排班模块
统一管理全职/兼职教师信息与可授课时段:
- 教师档案:登记姓名、联系方式、授课科目、课时薪资、在岗状态;
- 时段排班:设置教师每周可授课时间段,休息时段自动排除;
- 授课统计:记录每位教师授课班级、累计课时,作为薪资核算依据;
- 教师筛选:按授课科目快速匹配对应师资。
3. 智能排课模块(核心亮点)
依靠算法实现智能排课,彻底解决人工撞课问题:
- 三重校验:同时校验**教师时段、教室场地、班级时段**三大维度,杜绝冲突;
- 手动微调:自动排课后支持人工局部调整,适配特殊临时课程;
- 排课状态:区分正常课程、临时加课、调课三种类型;
- 周期设置:支持每日、每周循环排课,自动生成周期性课表。
4. 学员选课与档案模块
学员报名选班,建立电子化学员档案:
- 学员档案:登记学员姓名、年龄、联系方式、报名班级、购课总课时;
- 在线选课:学员/家长查看开放班级与课程,自主提交报名选课;
- 课时台账:实时展示已消耗课时、剩余课时,数据动态更新;
- 学员分班:管理员批量将学员分配至对应班级。
5. 课时消课管理模块
上课自动扣减课时,实现课时精细化管控:
- 上课消课:每完成一节课程,系统自动扣除学员对应课时;
- 课时记录:每一笔消课行为永久留存,可按学员、班级、日期查询;
- 课时预警:学员剩余课时不足时自动高亮提醒,方便续课跟进;
- 补课登记:支持请假学员后期补课,单独记录补课课时。
6. 课堂签到考勤模块
替代纸质签到表,电子化记录出勤状态:
- 在线签到:上课时间段内教师/学员完成线上签到,超时关闭入口;
- 状态区分:正常出勤、迟到、请假、旷课四大状态;
- 考勤台账:按班级、日期、学员汇总考勤数据;
- 异常统计:自动统计各班旷课、迟到人数。
7. 个人课表查询模块
多角色独立课表,查询便捷高效:
- 教师课表:展示个人每日/每周授课班级、地点、课程;
- 学员课表:查看自身班级课程、上课时间;
- 全局课表:管理员查看全机构排课总表,统筹调度;
- 周期切换:支持日视图、周视图快速切换。
8. 薪资与营收统计模块
自动核算教师薪资与机构经营数据:
- 教师薪资:根据授课课时+课时单价,自动计算周期薪资;
- 营收统计:统计新增学员、售课收入、课时消耗营收;
- 班级排行:按学员数量、开课频次统计热门班级;
- 数据图表:用柱状图、饼图展示运营趋势与占比。
五、创新价值与亮点
- 三重智能排课算法:同时校验教师、场地、时段,从根源解决撞课、排课冲突,大幅降低人工工作量;
- 课时全流程管控:购课、消课、剩余课时、补课全程电子化,数据精准可追溯;
- 电子化考勤体系:告别纸质签到,出勤状态自动统计,考勤数据一目了然;
- 多角色专属课表管理员、教师、学员分权限查看课表,信息隔离、使用便捷;
- 薪资营收自动核算依靠课时数据自动算薪资、算营收,财务对账高效准确。
六、应用前景与落地场景
- 少儿艺术培训机构舞蹈、美术、音乐等兴趣班班级排课、学员管理;
- 学科辅导机构文化课辅导班、培优班日常排课与考勤;
- 职业技能培训中心 成人技能、考证类培训班运营管理;
- 社区兴趣小班 小型线下兴趣社团、临时辅导班轻量化使用;
- 毕业设计/求职项目教培行业垂直系统,排课算法为核心亮点,差异化极强。
七、完整代码结构示例
1. 项目整体目录结构
django-training-course/├── manage.py ├── training_project/│ ├── settings.py# 数据库、排课规则、权限配置│ ├── urls.py# 全局路由分发│ └── middleware.py# 角色权限中间件├── apps/│ ├── user_role/# 管理员/教师/学员账号权限模块│ ├── class_course/# 班级、课程基础管理模块│ ├── teacher_schedule/# 教师档案、个人排班模块│ ├── course_arrange/# 智能排课、冲突校验模块│ ├── student_select/# 学员档案、选课报名模块│ ├── class_hour/# 课时消课、课时预警模块│ ├── sign_attend/# 课堂签到、考勤统计模块│ ├── schedule_view/# 多角色课表查询模块│ └── salary_stat/# 教师薪资、机构营收统计模块├── core/│ ├── arrange_check.py# 排课冲突校验算法│ ├── time_calc.py# 上课、考勤时间计算工具│ ├── hour_calc.py# 课时、薪资计算工具│ └── data_filter.py# 数据筛选工具├── static/├── templates/├── media/├── requirements.txt └── readme.md</pre>### 2. 核心可运行代码片段#### 示例1:班级、课程、教师、排课、学员核心数据模型```pythonfromdjango.dbimportmodelsfromdjango.contrib.auth.models# 考勤状态枚举ATTEND_STATUS=(("normal","正常出勤"),("late","迟到"),("leave","请假"),("absent","旷课"),)# 排课类型枚举ARRANGE_TYPE=(("normal","常规课"),("temp","临时加课"),("change","调课"),)classCourse(models.Model):"""课程模型"""course_name=models.CharField(max=60,verbose_name="课程名称")course_type=models.CharField(max=30,verbose_name="课程分类")hour_price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name="单课时费用")is_enable=models.BooleanField(default=True,verbose_name="是否启用")create_time=models.DateTimeField(auto_now_add=True)def__str__(self):returnself.course_nameclassTeacher(models.Model):"""教师模型"""name=models.CharField(max=30,verbose_name="教师姓名")phone=models.CharField(max=11,verbose_name="联系电话")teach_course=models.CharField(max=100,verbose_name="授课科目")is_full_time=models.BooleanField(default=True,verbose_name="是否全职")create_time=models.DateTimeField(auto_now_add=True)classClassInfo(models.Model):"""班级模型"""class_name=models.CharField(max=50,verbose_name="班级名称")class_addr=models.CharField(max=80,verbose_name="上课地点")open_date=models.DateField(verbose_name="开班日期")create_time=models.DateTimeField(auto_now_add=True)classCourseArrange(models.Model):"""排课记录模型"""class_info=models.ForeignKey(ClassInfo,on_delete=models.CASCADE)course=models.ForeignKey(Course,on_delete=models.CASCADE)teacher=models.ForeignKey(Teacher,on_delete=models.CASCADE)week_day=models.IntegerField(verbose_name="周次(1-7)")start_time=models.TimeField(verbose_name="上课时间")end_time=models.TimeField(verbose_name="下课时间")arrange_type=models.CharField(max=10,choices=ARRANGE_TYPE,default="normal")create_time=models.DateTimeField(auto_now_add=True)classStudent(models.Model):"""学员模型"""name=models.CharField(max=30,verbose_name="学员姓名")phone=models.CharField(max=11,verbose_name="联系电话")class_info=models.ForeignKey(ClassInfo,on_delete=models.SET_NULL,null=True)total_hour=models.IntegerField(default=0,verbose_name="总购课时")remain_hour=models.IntegerField(default=0,verbose_name="剩余课时")create_time=models.DateTimeField(auto_now_add=True)classAttendanceRecord(models.Model):"""考勤签到模型"""arrange=models.ForeignKey(CourseArrange,on_delete=models.CASCADE)student=models.ForeignKey(Student,on_delete=models.CASCADE)sign_time=models.DateTime(null=True,blank=True)attend_status=models.CharField(max=10,choices=ATTEND_STATUS,default="normal")create_time=models.DateTime(auto_now_add=True)示例2:排课三重冲突校验算法(core/arrange_check.py)
fromdjango.db.modelsimportQclassArrangeCheck:"""排课冲突校验:教师、场地、班级三重检测"""@classmethoddefcheck_all_conflict(cls,class_id,teacher_id,addr,week_day,s_time,e_time):""" 整体冲突检测 :return: True 存在冲突 False 无冲突 """# 同周次+时间段 判定冲突base_q=Q(week_day=week_day)&Q(start_time__lt=e_time)&Q(end_time__gt=s_time)# 1. 班级时段冲突class_conf=CourseArrange.objects.filter(base_q&Q(class_info_id=class_id)).exists()ifclass_conf:returnTrue,"该班级此时间段已有课程"# 2. 教师时段冲突teacher_conf=CourseArrange.objects.filter(base_q&Q(teacher_id=teacher_id)).exists()ifteacher_conf:returnTrue,"该教师此时间段已排课"# 3. 上课地点冲突addr_conf=CourseArrange.objects.filter(base_q&Q(class_info__class_addr=addr)).exists()ifaddr_conf:returnTrue,"该上课场地已被占用"returnFalse,"校验通过"示例3:课时扣减工具(core/hour_calc.py)
classHourCalc:"""课时与薪资计算工具"""@classmethoddefdeduct_hour(cls,student,deduct_num=1):"""学员课时扣减"""ifstudent.remain_hour<deduct_num:returnFalse,"剩余课时不足,无法消课"student.remain_hour-=deduct_num student.save()returnTrue,"课时扣减成功"@classmethoddefcalc_salary(cls,total_hour,hour_price):"""计算教师单周期薪资"""returnround(total_hour*float(hour_price),2)八、总结与展望
本篇博客聚焦线下培训机构智能排课系统全新赛道,和日志、天气、智能在线考试、智能图书、考勤、租赁、CRM、售后、记账、物业、音乐等所有往期项目完全独立。项目核心亮点为三重排课冲突算法,结合课时管控、在线考勤、薪资营收核算等业务,高度贴合艺术、学科、职业类培训机构的日常运营场景,算法+业务结合紧密,技术亮点突出。
代码模块化清晰,算法实用性强,无论是Django后端技术学习,还是作为毕业设计、求职简历实战项目,都具备极高的差异化和竞争力。
后续迭代规划
- 新增微信消息推送,上课提醒、课时不足、调课通知自动发给学员与教师;
- 开发移动端签到、查课页面,支持手机端操作;
- 新增学员续费报名流程,集成收费与课时充值功能;
- 支持节假日自动停排、节后复排的批量课表调整功能。
