简单的排课排考实现

Posted by JunMing on 2019-06-05

引子

你可能无法想象,在计算机高度普及的今天,很多学校排课,排监考仍然是手工完成的。主要原因有几点:

  1. 专业排课软件比较贵
  2. 已经习惯了手工排
    话说,在一个晴朗的午后,有位女神主动约我喝茶。。。本来以为机会来了,没想到最后也是为这档子事:排监考。 女神有求,理由很充分了。开工。。。

需求

输入部分很简单:教师资源,考场资源,再加上考试时间。然后输出表格,将教师妥善地安排到对应考场上。其中有几个冲突要考虑。

  1. 分配要均衡
  2. 分配不能有冲突
  3. 分配要随机

若干个小时后,第一个版本出来了,自信满满地交给女神过目。。。结果没有等来赞美,等来了问题:

  1. 某老师属于中干,监考量应该是其他老师的一半
  2. 某老师某天要出去教研活动,不能监考。
  3. 某些科目需要设置主考

为了解决这些需求,可以将这些条件加进来,但是使用复杂度也将增加。最后妥协方案就是放弃自动排考,使用全手工的方式。(我提出可以先自动排,再手工改。被女神无情否决!!)
但是问题也来了,既然要手工排,操作必须要方便。

  1. 鼠标拖放
  2. 冲突提醒
  3. 实时统计
  4. 结果打印
  5. 并行排考

实现

方案选择

最初,想写一个windows应用程序去做这个事情。但是考虑到,跨平台,易于调试,界面美观等因素,最后还是决定用web实现。

鼠标拖放

偶然看到了,easyui.js ,他提供了一个样例,正好是排课的。而且对鼠标拖放支持的很好。于是框架部分就继承了那个样例。剩下的冲突提醒,实时统计,都是基于此样例的拓展。

实时打印

因为浏览器本身支持打印,只需用CSS控制打印分页即可。

1
style="page-break-after: always;"

并行排考

主要是使用了[leancloud]的远端存储服务,将用户数据存储到远端。

demo

排考排课demo