引子
你可能无法想象,在计算机高度普及的今天,很多学校排课,排监考仍然是手工完成的。主要原因有几点:
- 专业排课软件比较贵
- 已经习惯了手工排
话说,在一个晴朗的午后,有位女神主动约我喝茶。。。本来以为机会来了,没想到最后也是为这档子事:排监考。 女神有求,理由很充分了。开工。。。
需求
输入部分很简单:教师资源,考场资源,再加上考试时间。然后输出表格,将教师妥善地安排到对应考场上。其中有几个冲突要考虑。
- 分配要均衡
- 分配不能有冲突
- 分配要随机
若干个小时后,第一个版本出来了,自信满满地交给女神过目。。。结果没有等来赞美,等来了问题:
- 某老师属于中干,监考量应该是其他老师的一半
- 某老师某天要出去教研活动,不能监考。
- 某些科目需要设置主考
为了解决这些需求,可以将这些条件加进来,但是使用复杂度也将增加。最后妥协方案就是放弃自动排考,使用全手工的方式。(我提出可以先自动排,再手工改。被女神无情否决!!)
但是问题也来了,既然要手工排,操作必须要方便。
- 鼠标拖放
- 冲突提醒
- 实时统计
- 结果打印
- 并行排考
实现
方案选择
最初,想写一个windows应用程序去做这个事情。但是考虑到,跨平台,易于调试,界面美观等因素,最后还是决定用web实现。
鼠标拖放
偶然看到了,easyui.js ,他提供了一个样例,正好是排课的。而且对鼠标拖放支持的很好。于是框架部分就继承了那个样例。剩下的冲突提醒,实时统计,都是基于此样例的拓展。
实时打印
因为浏览器本身支持打印,只需用CSS控制打印分页即可。
1 | style="page-break-after: always;" |
并行排考
主要是使用了[leancloud]的远端存储服务,将用户数据存储到远端。