教育行业的业务后台系统搭建(二):排班组课

Ron
5 评论 17981 浏览 89 收藏 17 分钟

编辑导语:大家都没有对课表好奇过,系统是怎么做到把老师和学生的时间安排的恰到好处?排一节课业务后台是如何进行操作的?本文作者从排一节课到排一个学校的课,由浅入深地详细介绍了排课的流程,供大家一同参考学习。

排课?这玩意儿不就是指定一个时间,把老师、学生塞到一个教室,然后给他们一本书,让他们自己玩去,很简单呀,有啥可说的?

确实,“排课”听起来不过如此。

不过排一节课简单,排一个学期的课也不难。但是给一个学校排一个学期的课可就不是几句话能说清楚的了。

为了让大家比较容易理解,我们由浅入深得“推倒”:如何排课?

01 排一节课

其实上一篇文章就已经提到过如何排一节课。

一老师、一课件、一班学员、一个时间、一教室而已,见下图

具体就不细说了,没什么逻辑在里面。

02 排一个学期的课

知道如何排一节课,那么排一个学期的课就不难了。

在排一节课的时候,添加一个学期的概念即可。

那什么是学期呢?

学期指的是一学年中上课时间的一个单位。

——百度百科

说白了就是一个较长的时间内,定期循环上课,直到该学期预设的学习内容讲完为止。

翻译一下,一个学期会有以下三个要素:

  1. 起止时间:即从第一节课开课,直到最后一节课下课,经历的时长称之为一个学期。换而言之,一个学期是提前做好计划的,只有明确了起止时间,才能明确“学期”
  2. 循环周期:即在一个学期内,明确课程内容。每天上哪些课,每周上哪些课,每个月上哪些课,是否有定期模考等等。
  3. 连贯的课程内容:即同一个科目,每节课上的内容必然出自同一份教材。前后课节也必然是有关联的,通常都是由浅入深,并且定期测试学习效果,并微调课程内容,以确保一个班级内的学生不会拉开太大差距(其实上过学的大家都知道亲身经历过这个情况,此处点到为止)

然后我们抽象一下上述三要素,以及一些排课的基本要素,得出以下这张图:

注意:要确保教材的“课程小节”与学期内“课节总数”是一一对应的。可以额外预留几个多余的课节,用作小节考试、月考、期中考、期末考等练习课使用。

为了让大家更容易理解什么是“循环周期”,在这里举三个实际场景作为例子:

先定个前提:

  • 科目:数学
  • 一个学期历时30周(相当于循环30周)
  1. 例1【每周1节数学课】:即每周只上一节数学课,且每节课都在同一天的同一个时间,那么只需要在排课的时候,确定好上课日,以及加上一个循环周期为“一周”的前提条件,再设置循环次数为30次,即可生成30节课,分布在连续的30周内,每周的同一天同一时间上课。此时,一个学期的课就算排好了。
  2. 例2【每2周1节数学课】:即隔周上一节数学课,且每节课都在同一天的同一个时间,那么只需要在排课的时候,确定好上课日,以及加上一个循环周期为“两周/隔周”的前提条件,再设置循环次数为15次,即可生成15节课,分布在间隔的15周内,每隔周的同一天同一时间上课。此时,一个学期的课就算排好了。
  3. 例3【每周2节课数学课】:即每周上2节数学课,且每周内的所有课节时间相对固定,那么只需要在排课的时候,确定好上课日,以及加上一个循环周期为“一周”的前提条件,再设置循环次数为30次,即可生成60节课,分布在连续的30周内,每周的固定时间上课。此时,一个学期的课就算排好了。
  4. 同理如果每月1节,规则同【例1】
  5. 同理如果隔两周、隔月等,规则同【例2】
  6. 同理如果每周同一科目数大于2,规则同【例3】

03 排一个学校的课(重点来了,做好笔记)

本文的重头戏来了,实话实说,排课的最难点就在这里。即如何做到大量排课的同时,又不会造成时间冲突。

首先,我们要考虑,排课的核心关键点就是“能开课”。那什么情况会导致不能开课,或者说开课无意义?

第二次引用这张图:

究其根本,还是上面提到的一句话:唯一老师、一课件、一班学员、一个时间、一教室而已也就是说,只有同时满足以上5个条件,才是一节有意义的课。反过来说,以上5个条件缺少至少一个,这节课将毫无意义。

那好,为了让一节课变得有意义,我们先来梳理所有条件(或称之为维度):老师、学员、课件、时间、教室

看下来,上面这几个维度,好像没什么交集。如果一定要有,也只能是时间维度

  • 同一名老师,在不同时间,可以教不同的课程;
  • 同一名学生,在不同时间,可以学习不同的课程;
  • 同一处教室,在不同时间,可以被许多课循环使用;
  • 课件没有时间交集,随时可以被重复使用。

这么看来,一旦老师、学生、教室三者之中任一维度,同时做多件事,都可能会造成这节课变得毫无意义

  • 同一名老师,精力有限,不可能同时教多门课程; ❌
  • 同一名学生,精力有限,不可能同时学习多门课程; ❌
  • 同一处教室,物理空间有限,不可能同时开多个班级。 ❌

所以我们在设计系统时,一定要避免上述任一场景发生。

那么该如何避免呢?继续往下看

1. 如何确保一个学校能够排出有意义的课?

最重要的是确保各维度在同一时间线,只能安排一件事(即单线程):

  • 同一名老师,同一时间,只能安排教一节课;
  • 同一名学员,同一时间,只能安排学习一节课;
  • 同一个教室,同一时间,只能安排一个班级上课。

有没有发现,好像又回到了最开始的“排一节课”,只不过现在的场景不再是排一节课了,而是排若干个“一节课”。

第三次引用这张图:

既然知道了排课时要注意各个维度“单线程”,那么为了排好一节课,我们应该在排课前就把一切可能造成“多线程”的“意外”排除在外。

2. 如何排除“意外”?

想要排除“意外”,无非就是在系统中操作排课时,添加限制

  1. 同一名老师在一个时间只能安排在一个班级上课;
  2. 同一名学生在同一时间只能安排在一个班级学习;
  3. 同一个教室在同一时间只能安排一个班级上课。

但身为资深挖坑人,不得不告诫大家一句:真实场景远比我们想象中的复杂得多

在此举4个实际业务场景给大家做参考:

场景一:一名学生买了多门科目,但同一时间只能上一节课。

针对这种情况,我只能说,一定要给时间加上限制!!!不然学生一看同一时间有多节课,学生学得一脸懵逼,家长看着暴跳如雷,顺便发起退费。

为什么呢?因为虽然教育行业直接服务的是学生,间接服务的是家长,但是家长的实际控制权比学生要大得多。如果排课混乱的事情被家长发现,家长内心肯定会认为该教育机构不专业,退费也将成为必然。

所以,面向客户一定要做到严谨、专业。因此,该加的限制必须加,不容马虎。

场景二:一名老师,一个可排课时间只能安排一节课。(这个时候就要分场景了)

  • 如果是全职老师,那这个时间限制其实可以不做控制,因为老师都是自己人,毕竟再乱的排课,只需要面对面一句话就搞得定;

反过来说,如果为了所谓的“专业严谨”,而在系统中加上时间限制,那么恭喜你,排课端同事正拿着板砖朝你走来。(有的时候,所谓的“专业严谨”,给一线业务人员造成的困扰远大于便利。而且,如果因为所谓的“专业严谨”最终导致业务方使用系统降低了工作效率,那这系统不用也罢);

  • 如果是兼职老师,此时又必须“专业严谨”了。

因为兼职老师是外人,相比给自己人带来不便而言,给外人带来困扰影响更大,范围更广,同理“学员家长”。因此系统必须确保兼职老师一个时间有且只能有一节课。

场景三:老师的休息时间,不能排课。

无论是自己人还是外人,在非工作时间给他安排任务,都会在上班那天拿着板砖来找你你(手动滑稽)。

场景四:一处教室,同一时间,只能排一个班级的课程。(此处也需要分场景)

  • 线下课程:最好还是不要加时间限制。完全由排课端同事自行处理教室问题。同理“全职老师”
  • 在线课程:没有物理教室的说法,无需做任何判断。

3. 排一个学校的课

其实到了这里,大家对于如何排好学校的课程,心里应该都已经有一个大致概念了。

我再给大家梳理一遍注意事项

  1. 同一名学员,同一时间,只能安排学习一节课;
  2. 如果是兼职老师,那么同一名老师,同一时间,只能安排教一节课;
  3. 找出排课规律,根据规律,设置合适的“循环周期”和“循环次数”;
  4. 要确保教材的“课程小节”与学期内“课节总数”是一一对应的。
  5. 可以额外预留几个多余的课节,用作小节考、月考、期中考、期末考等练习课使用。

根据注意事项,我们来按照业务步骤排课:

(注意:不同的业务场景,可能排课的流程不同,此处我根据一个虚拟场景进行排课)

场景一:创建第一个班级

  • 我要在一所学校,名为阿里巴巴的教室,创建一个三年级数学的班级,教材为人教版;
  • 这个班级在2020年10月1日,下午13:00(周四)正式开班,下午14:30第一节课下课;
  • 且每周只上一节课,即每周四有课,上课时间为周四下午的13:00 ~ 14:30。
  • 该班级总历时15周;
  • 上课老师是业内知名的数学老师麦斯
  • 学员是路人甲乙丙丁….

在业务明确的情况下,我们开始排课:

Step1.创建一个班级,命名班级A。这个班级只是一个空壳子,没有起止时间、没有老师、没有学员、没有对应的科目。

Step2.给班级A添加一个学期的上课时间。

  • 开课日期:2020年10月1日
  • 上课时间:13:00
  • 下课时间:14:30
  • 循环周期:“每周”
  • 循环次数:15次

Step3.给班级A设置上课年级:三年级。

Step4.给班级A设置上课科目:数学。

Step5.给班级A设置上课教材版本:人教版。

Step6.给班级A设置一名老师:麦斯。

Step7.给班级A设置若干名学员:路人甲乙丙丁….

Step8.给班级A设置一名班主任:小丽。

得出下图:

到了这里,场景一的班级A想必已经能够开班了。

(注意:实际业务场景中,创建班级可不是像例子这样穷尽,一定要根据业务做变通!!)

场景二:创建第二个班级

在创建好班级A以后,如果还想再创建同样上课条件的班级B,这个班能创建以后会有意义吗?根据我们总结的注意事项来看,答案显然是不能的。

原因:同一批学员,在同一时间,不能上两门课。(可不考虑教室全职老师

所以为了是班级B有意义,只有两种选择:

  1. 学员固定时:换一个上课时间;
  2. 时间固定时:换一批学员。

如果排课同事坚持要同样的时间,同一批学员开两个班级。我建议换一批排课同事(手动滑稽)。

总结

至此,大家了解了如何排一个班、如何排两个班,我相信仅凭各位看官的举一反三能力,想必只要资源允许,排多少班对大家来说都是易如反掌的事情!

#相关阅读#

教育行业的业务后台系统搭建(一)——基础模块搭建

 

本文由 @Ron 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 这个是不是不适用于 每周课表不一样的场景

    来自湖南 回复
    1. 不适用,建议每周挑一天(一般是周末),用excel导入形式,创建下一周的课表
      比如班级ID一致,上课时间批量导入(如果有大量班级)

      来自上海 回复
  2. 行云流水,重点突出,会讲故事

    来自北京 回复
  3. 写得太棒啦~

    回复
    1. 感谢支持!

      回复