项目---考评系统排课算法分析

         第一次参加项目,跟着师姐做考评系统需求分析,将考评分为:教务、后台、教师、学生四个角色,我们做教务,做需求和做开发的区别在于,搞开发敲代码会越来越上瘾,做需求就是一直在给大脑做思维体操,经常要推翻自己之前的想法,再换角度去分析,看是否这个想法流程是否有漏洞,很有意思,也是这个过程让我对于“算法”这个东西产生了兴趣。

    言归正传,这次教务方面我们花了很大的精力在给学生安排考场上,尽管最后决定不把这个功能加到ITOO考评系统中,拿出来分享一起做做思维体操也是很有意思的。

 

前提:

   ITOO系统有一个功能是要给高校在考试周分配考场,参考廊坊师范学院,做出以下前提:

   1、考试分为专业课(类似于电子专业的通信原理、信号与系统)和公共课(类似于VB、马克思、大学英语等)

   2、两种类型的考试不在同一个时间段内考。

   3、参与分配考场的角色有大院教务处和二级学院的教秘。

   4、分配完考场之后要把监场老师分配好。

   5、考场分配好之后会以邮件或者ITOO 移动端公告的形式发给学生。

 

    由于这是个新的功能,在30.和3.1版本中都没有,而且这个时间段内,学校的教务处和各个学院老师都没有在,我们只能自己去想这个情况,先想好方案,具体用哪个最后来决定。

    暂定为两套方案:

    No1、各个专业的考场都由教务处来进行分配

    No2、教务处负责分配教室给二级学院,二级学院来为具体科目分配教室。

 

   如果抛开实现仅仅从需求来分析:

   方案一教务处的职责过于细致,具体到每个专业每门课程的考试都需要考虑,这样有点第一版机房收费系统按照窗体进行编程的意思,耦合性太强了。相对来说第二种方案,将职责细分,自己做自己职责范围内的工作,就像是我们机房重构时候一样,分层的思想就用到了现实当中。思考我们电子专业的考试三年来基本上考试的时候教室全部打乱,我觉得廊坊师范学院的考场是由大院统一安排的,这样子从面向对象的角度来分析的话,有些不合理,职责没有分配下去。可能他们有自己的办法,这个过程我想在开学后去了解一下,便于以后ITOO强大了把这个分考场的功能加入进去。

 

    下面针对第二种分配方法进行分析:

   (1)大院根据学院人数分配教室给二级学院,比如考试周物电学院占用十教一层和二层,文学院占用十教其他教室,数信学院占用11教2楼3楼北侧机房等。

    至此,教务处的任务已经完成。

   (2)到了二级学院,将教室用作考场,第一个划分标准是什么?比如按照年级划分,也可以按照专业划分当然可以按照科目划分,综合比较之后,按照科目划分是最标准的划分方法,why?按照科目划分,和考试科目同步,划分思路清晰;其次,如果按照专业划分,可能出现两个相似专业上同一门课,这样会有一种情况:同一门考试会出现两个专业先后进行考试,当然按照年级划分也会出现此种状况,就像电子专业大二专科的学生会和大三本科的同学同时学习“信号与系统”、“电子测量”、“通信原理”等科目,因此,按照专业或者年级来划分,很大可能会出现漏题现象。因此,按照考试科目划分是最好的办法。


    具体例子,比如:文学院仅仅分到了三个教室A、B、C。可是四个年级N个专业一共有5门课程,怎么办?

 

    情况如下:教室A、B、C分别坐80人,100人,120人

    古代文学有77人考试

    现代文学有90人考试

    当代小说有118人考试

    高等数学有140考试

    大学语文60人考试


    此处需要用到的一个算法即:运筹学中的“寻找最优解”算法。

                

            这个算法是这个过程的关键所在,将具体的科目分配到“死”的教室中,如何最优(考试人数要少于教室容纳人数,尽量让每个教室里分配的科目数量平均等),这步操作的对象仅仅是教室和课程,将其分配到最合理之后,就把分配考试的范围缩小到了最小程度。(这个过程做到程序里,就是自动分配的过程,监场教室也会自动进行分配,如果没有算法的转化,是需要人工来做的。)

    如图:

            

  (相当于在接下来的操作中,分析问题的核心就要放到每个具体的教室中)

           

          最后的一个步骤就是为每个教室里的科目安排考试时间,从需求角度来说,避免一个人在同一个时间段内出现多门考试的情况;避免一个人的几场考试时间过于密集就OK了,这个过程可以自动也可以手动,便于老师调整监考时间或者临时事件的处理。至此,整个过程结束,教秘可以通过单击按钮将考场信息发送到监场教室和同学的邮件或者手机端。


   注意:一、找最优解的算法要运用灵活

         二、出现类似“高等数学”这样需要将人拆分到两个考场的情况,确保同时考试。

         三、避免一个人在同一个时间段内出现多门考试的情况。

         四、这样子就能将四个年级之间的考试同时进行,而不是先是一个年级考,再是另一个年级考这样了。相当于考试之间的空余时间能够确保很充分,让大家准备好考试。

 

    整体来说:

        1、大院分配固定教室给二级学院

        2、二级学院为教室分配考试科目

        3、为考试科目分配时间、避免冲突(同时为科目分配监考教师)

    也就是说范围从二级学院到教室到该教室内的科目,层次性很强,之前理的思路很多方面都存在或多或少的弊端,这样子每一层都仅仅需要考虑该层所办的事情,然而能做到这点,是因为准确的将该层的主要对象进行了很好的抽象。

 

    通过这个分配考场的小练习,做需求更要有全局观,也通过这个例子,我找到了我毕业设计的课题,也在或多或少的搜索资料,希望我的表达能够更加流畅、思路能够更加清晰。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值