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

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

    言归正传,这次教务方面我们花了非常大的精力在给学生安排考场上,虽然最后决定不把这个功能加到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了。这个过程能够自己主动也能够手动,便于老师调整监考时间或者暂时事件的处理。至此,整个过程结束,教秘能够通过单击button将考场信息发送到监场教室和同学的邮件或者手机端。


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

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

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

         四、这样子就能将四个年级之间的考试同一时候进行,而不是先是一个年级考。再是还有一个年级考这样了。

相当于考试之间的空余时间可以确保非常充分。让大家准备好考试。

 

    总体来说:

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

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

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

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

 

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

原文地址:https://www.cnblogs.com/zhchoutai/p/6890537.html