zoukankan      html  css  js  c++  java
  • 项目---考评系统排课算法分析

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

        言归正传,这次教务方面我们花了非常大的精力在给学生安排考场上,虽然最后决定不把这个功能加到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、为考试科目分配时间、避免冲突(同一时候为科目分配监考教师)

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

     

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

  • 相关阅读:
    JAVA安装
    capture格式布局
    CSS样式表
    进制的转换
    CentOs7设置主机名称,以及主机名称和ip的对应关系
    CentOS7中NAT网卡设置静态IP
    CentOs7安装配置JDK
    基于Go语言构建区块链:part5
    基于Go语言构建区块链:part4
    BoltDB使用笔记
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6890537.html
Copyright © 2011-2022 走看看