智能排课系统

排课系统

        一个老领导经常会提到某个学校跟他抱怨说没有一个很好用的排课系统,在排课时没有一个系统能很好的适配他们目前的排课条件,在日常教学过程中更是无法通过系统发起、确认、记录调课信息。说得多了我也会好奇,是有什么很难的点在里面,怎么一直没有人去做或者完善这个东西。

        趁着过年期间空闲的时间比较多,做了一些研究,试用了一些目前比较流行的排课系统,例如:水晶等。我觉得这些工具在自动排课算法这块研究的还是很深的,能有一些自定义的排课条件设置来辅助排课人员进行排课。但是美中不足的是,只解决的了排课环节的问题,对于排课完成后正式上课时期,老师们的日常调课也是一份非常重要的工作,但这项功能往往是缺失的,还有就是统计分析这块数据有时是错误的。

        所以我就尝试着去构想这么一个系统,采用BS架构,教务老师可以通过后台初始化排课基础数据、设置排课参数、自动排课、导出课表、生成正式课表、发起调课、确认调课以及统计分析;老师们可以通过小程序或者企业微信及时查看自己的课表以及自己班级(如果是班主任)的课表信息,并可通过手机端直接发起调课申请,被调课的老师可接收到调课申请通知并可直在手机端做确认操作。同时系统后台会记录每次调课记录,以便在综合统计中对每个老师实际上课情况做出统计报表。

        研发过程还是比较艰辛的尤其是在攻破自动排课的算法、优化手动调课换课、支持老师手机端发起调课等环节,最终历时3个多月时间终于完成了整个排课系统的设计和开发。

开发框架

后端:Springboot+mybatisplus

前端:react+antd

具体的功能包括

1、数据导入工具


        排课系统涉及到的基础数据种类还是挺多的,包括:年级、班级、老师、课程、教室、年级课时、老师授课关系、课程上课教室关系等,这些数据如果全部通过界面输入系统还是很费时间的,所以系统支持通过Excel表格进行导入。如果学校有自己的教务系统并且接口允许的情况下,可以直接通过此处对接教务系统将基础数据直接导入系统。(导入时需要注意验证数据的合法性,例如:班级某一课程被多个老师授课)

2、基础数据管理


        教务老师可以通过此功能对所有的基础数据可视化界面查看、编辑。

        年级管理—管理学校的年级信息以及每个年级的课时(上午几节课、下午几节课、晚上几节课);

        班级管理—管理每个年级的班级信息以及每个班级的班主任;

        教室管理—管理学校所有公共教室基本信息,同时教务人员可为每个教室指定上课的班级课程(只有需要用到公共教室的才需要在此处设置,未设置公共教室的系统默认将本班作为该课程的上课教室);

        课程管理—管理每个年级的课程以及课时数,管理员可通过年级课程和班级课程两个视角查看课程信息。在年级课程视角中,管理员看到不同年级的所有课程信息,并可为该年级的课程批量设置排课偏好。在班级课程视角中,管理员看到不同班级的所有课程信息,并可为班级的某个课程设置授课老师、设置上课教室以及单独设置排课偏好。此外提供了设置合班的功能,以满足多个班级同时上同一个老师的同一门课程情况;

        老师管理—管理老师的基础信息以及老师的授课关系;

        上课周期管理—管理每个年级每个学期的上课时间区间,以便系统根据时间区间生成每周的课表信息。

其中排课偏好支持

        时间偏好:可以勾选课程的时间喜好,例如:主课一般勾选上午课时,副课一般勾选下午课时;

        间隔偏好:如果一个课程一周只上两节课,那么可以填写间隔偏好两到三天,避免同一课程连续两天都上

        单循环偏好:此偏好可避免同一个老师在同一天备多门课程情况。例如张三教初一1班、初一2班、初一3班音乐课,每个星期两节课,那么如果开启单循环偏好后,系统会尽量将三个班的第一节音乐课安排在周一、周二、周三,第二节课安排在周三、周四、周五,避免有的班第一节音乐课还没有开始上,而有的班已经开始上第二节音乐课的情况。

        单双周偏好:系统支持单双周的模式,课时如果设置的是0.5,那么系统会识别为单双周模式,在自动排课或者手动排课环节将该课程只占一半的课表位置以表示该课程为单双周,同时将同样是单双周模式的课程优先安排在互补的位置。

3.自动排课管理


        管理员可通过此功能查看所有班级的排课基础数据合法性、生成待排课列表、为特殊课程手动排课、批量自动排课、人工调整排课结果最终完成排课工作。系统提供了可视化的三维透视工具以及手动拖拽课程组件,方便排课人员快速判断班级、老师、教室排课以及空闲情况,以便快速的判断做出合适的调整。同时在排课过程中,还可通过上一步、下一步来恢复历史排课节点,或者通过备份排课方案临时保存当前排课整体方案,以便在做一些大的调整时整体撤回。

自动排课流程:

        第一步—初始化待排课列表和清空已排课列表。系统会根据配置的基础数据初始化好每个班级的排课课程信息,并生成待排课列表。

        第二步—为特殊课程手动排课。如果存在一些特殊规则的课程,教务人员可提前先将这些课程在自动排课之前手动拖拽到相应位置。

        第三步—批量自动排课。系统会根据设置的排课喜好为所有在待排课列表的课程按照先后有限顺序进行排课。

        第四步—人工调整排课。在自动排课完成后,管理员可手工处理排课失败的以及一些因为冲突未满足设置条件的课程内容,最后完成排课工作。

        第五步—导出课表信息。在排课工作完成后,教务人员可按照分类导出班级、老师、教室课表信息。

包含的组件功能:

        统计组件—因为正式排课工作之前,需要准备的数据种类和数据内容很多,为了防止人为的错误,需要在排课之前通过统计组件对数据做合法性校验,包括:年级、班级、教室、课程、老师、老师授课关系、教室课程关系等数据。

        时间组件—教务人员点击排课区域的某一节课程,系统会同时将该课程的课表视角、老师时间表、教室时间表三个视角展示出来,教务人员可以清楚看到该班级、老师、教室哪些时间是空闲的,哪些时间是已经安排了哪个老师的哪个课程,以便在做调整的时候可以清楚的制定调整方案。

        历史排课方案组件—教务人员在手动调整排课时,很容易出现调整一门课程就牵动很多课程,最后发现还不如不动,所以系统提供了整体备份工具,教务人员可随时备份当前所有班级的排课方案,如果对后期的排课方案不满意,可随时点击恢复。

        历史操作组件—教务人员可通过此组件中的上一步、下一步实现短期的撤回操作。

        排课组件—教务人员可通过此组件查看任何班级的待排课列表信息以及已排课的课表信息,拖拽待排课课程到课表区域时,系统会实时计算该课程的老师和上课教室在这个时间点是否空闲(如果空闲则显示为绿色可放置,如果冲突则显示为红色不可放置),支持单双周模式,单双周模式的课程拖拽到对应的课表区域,区域会显示左右两个区域,放置在左边为单周,放置在右边为双周。

4、学年课表


        教务人员可通过此功能可生成整个学年的课表信息,除了可以查看每个周的课表信息以外,还可以满足临时调课工作。系统支持两种方式的调课:

        第一种为教务人员发起—教务人员可在学年课表模块制定调课方案,可提前将需要调课或者代课的课程拟制好,系统会在临时调课计划中集中展示,确认无误后可批量提交(也支持教务老师直接确认),对应的调课老师在小程序端会接收到调课通知,查看后可直接确认或者拒绝;

        第二种为老师主动发起—老师可通过小程序进入到实时课表查看自己的课表信息,点击某个课程即可主动发起调课申请,如果自己与某个老师商量好了则可以直接选择调课或者代课的老师,如果没有商量好则可以直接发起调课申请,由教务的老师在后台进行匹配合适的老师,申请提交后,同样对应的老师会在手机端收到调课申请通知,点击后即可做确认操作。

        系统会在调课发起(被调课人接收到调课确认通知)、调课确认(调课发起人接收到调课被确认通知)、调课拒绝(调课发起人接收到调课被拒绝通知)三个环节给对应人员发起调课通知。

5、其他功能


        其他功能包含排课综合展示(通过课程列表、逐班小表、汇总大表、总任课表等维度展示排课信息)、综合统计(老师周课时、总课时统计)等,此处不做过多的介绍。

以上是本智能排课系统的全部内容,当然还有很多需要优化改进的地方,有兴趣的朋友们可以一起讨论研究合作。

原创,转载请标明出处,翻版必究~~

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值