基于LabVIEW的考场排布系统的实现
2014-08-25高瑜
高 瑜
(湖北师范学院 物理与电子科学学院,湖北 黄石 435002)
基于LabVIEW的考场排布系统的实现
高 瑜
(湖北师范学院 物理与电子科学学院,湖北 黄石 435002)
针对高校中频繁进行的考试工作,研究一种考场排布系统,能自动完成考试时间、考场、监考人员的安排工作。该系统以excel表格的内容为数据源,通过LabVIEW强大的运算功能完成逻辑判断,在充分利用有限考场的前提下,快速、准确地给出了合理的考试安排。该系统不仅解决了手动输入的时效性差,需要多次审核来提高正确率的问题,还利用算法的灵活性,兼顾了监考人员监考次数的平均性,考试时间、考场分配的随机性。
考场排布;LabVIEW;随机性;Excel
0 引言
在高校处理的众多事务中,安排考试是最常见的工作之一,但是却很少针对这项工作进行系统开发,而是采用人工输入,人脑进行逻辑判断来完成;但是随着高校课程的日趋丰富,参加各种考试的人数增多,使得安排考场和监考人员的工作变得越来越繁复,如何保证在充分利用有限考场的基础上快速、准确的给出合理的考试安排,也是一项急需解决的任务。
在安排考试的过程中,有几项互相制约的条件:第一,同一班级不能在同一时间进行多门考试;第二,参加同一门课程考试的班级必须在同一时段进行该门考试;第三,出卷老师必须在对应的考试时段参加监考,以保证在试卷出现疑问时能及时解答;第四,监考老师不能被安排在同一时段的多个考场中。而且,在安排监考时,还要兼顾监考人员的监考次数的平均性,所有的考试应该在最少的时段内完成,即同一时段,考场应该安排的越满越好。
1 设计方法
结合实际,现设定某一院系要给出专业课的期末考试安排,给定的条件为,任一时段可以使用m个教室,需要在n天内(系统可以根据时段数组和教室数组中填入的内容自动确定m,n的值,其中m,n均为正整数,本系统以m=5,n=2做测试)完成所有考试工作,每天可以安排四个时段进行考试(上午两场,下午两场)。由于互相制约的因素很多,算法比较复杂,故而按功能分成8个模块(P1~P8)来构建系统,其系统框图由图1所示。
图1 系统框图
2 算法的软件实现
1)P1的功能是导入原始数据,根据导入数据的不同,将程序命名为P1.0.vi,P1.1.vi,P1.2.vi,其具体的对应关系及导入后的数组格式如表1所示。
表1 P1导入数据对应表
导入已有的excel表格中的数据,不仅能省去手动输入的工作,大大提高效率,而且保证了正确性。一般每个学期要上的课程在学期初已经由排课系统给出,即“课程表”,该表格列明了每个班级应上的课程;第二个要导入的表格是“出卷老师一览表”,该表格在制卷前就已经明确登记了,也是现成的文档,它列明了课程和对应出卷老师的姓名;第三个要导入的表格是全院教师的名单,即能参加监考的人员库,这也是已有的数据。利用LabVIEW的Office工具包可以很容易完成“导入功能”[1,2]。
2)P2完成的功能为:将P1.0.vi的输出——P1输出数组(见表1)作为输入,转为列数固定为2的表格输出,它清晰的反映了班级-考试科目的对应关系。该功能是利用表格的设置单元格值的方法[3]来实现的。
3)P3的功能是借助P2输出表格的信息,排出每科分别有几个班考试,且按照课程表中的顺序给各个班级编号,记为0,1,2,……,依此类推。P3输出数组的第一行记录为{0905,C语言,8,1}其中第3列的“8”,表明0905班的编号为8;第四列的“1”说明只有1个班级参加C语言考试。
4)P4的作用是安排时段和对应的考场。其算法为:首先,用sequence结构做初始化处理。一是,创建一维数组C,教室数决定了它的初始值,而时段数则说明了它的元素个数。如果教室数为5个,时段数为8,则数组C就是8个5组成的一维数组,它用于对当前时段剩余的教室数目做实时更新。数组B是由班级数和时段数决定的二维数组,其行标表示班级代号,列标表示时段代码,初始值为全1,当某个班级的某个时段被占用时,则自动将数组B中的对应数值改为0.定义两个一维数组,输出数组T1,输出数组T2,取P3输出数组的后两列转为数值型数组,即班级代号,同考班级数,这两列,记为数组A.
其次,用外循环控制课程数,外循环每进行一次,就将一门课程的应考时段及对应考场分配完毕。每次从“每课程的索引值”数组中依次取出1个元素,用该元素作为索引,取出数组A的第1列(同考班级数)对应的值,即该门课程需要占用几个教室,并用“元素2”保存起来;每次安排课程都从“当前时段=0”开始,在时段数组C中依次搜索:时段0中教室剩余个数大于等于元素2(需要占用教室数)么?如果是(说明此时段教室条件满足),则停止搜索,输出时段0,将元素2的值作为循环次数,依据数组A中0列(班级代号)所对应的B组的索引号,找出对应的班级在该时段的值,并求和,如果这个值等于元素2,则说明参加该门课程考试的班级此时段是空闲的,则停止此层while外循环,否则将当前时段+1,继续while外循环,搜索同时满足两个条件的时段号。
最后,将满足条件的时段号分配下去,此时,将时段号作为初始数值,给对应的课程分配“元素2”大小的一维数组,并利用局部变量将其保存起来,最终的结果为“输出数组T”,这个就是各个课程的时段分配方案;数组C的对应时段减去分配的时段个数,这也是利用局部变量来完成;数组B需要及时修改班级被占用的时段信息,即将对应班级的对应时段由1变为0,并将该时段最后剩余的教室个数每个循环加1,送入到输出数组T2中保存起来,这个就是分配的教室代码,教室1,教室2,留待后续vi翻译成字符串就可以了。将“输出数组”和“输出数组2”一并与“结果数组”合并并删除班级代号列和同考班级数目列,为P4输出表格。其主要程序框图如图2所示。
图2 P4.vi主要程序框图
P4输出表格中的一项为{0905,C语言,0,5},其表达的含义为:0905班的C语言考试安排在0时段,而代号为5的教室作为其考场。
5)P5部分是用来完成出卷老师在对应时段监考的设计初衷,具体由3个部分来实现。
P5.0部分完成的功能是,通过“每课程的索引值”数组将P4输出表格中课程名相同的行删除。算法是,每次循环取“每课程的索引值”数组的一个元素y,并以此作为索引值,取得P4输出数组中的一行,待循环结束后输出“去重复课程”数组。
P5.1部分完成的功能是,通过P1.1导入的出卷老师对应表和P5.0得到的“去重复课程”数组得到“行为时段,列为老师”的数组,该数组根据出卷老师的情况,把需要固定监考时间的老师做预先安排。用行表示时段,即所有需要排在时段0监考的教师,就送到0行中,需要排在时段1监考的教师,就排在第1行,以此类推。根据P5.1部分采用的算法,没有对以下特殊情况做单独处理,即有可能同一个出卷教师的多门课程都安排在一个时段,那么该教师在这个时段必然出现多次,这是不允许的。因此需要由P5.2来完成。
P5.2部分的作用是将初始的“行为时段,列为老师”数组中同一行(即代表同时段)中重复的元素删除,仅保留一项。其算法为:将“行为时段,列为教师”数组进行排序,然后比较同一行相邻两列的值是否相同,若不相同,则保留;若相同,则删除。
6)P6的作用是,根据前面的信息算出,每个时段应该安排的总的监考老师数目,即C~数组,如C~[0]表示的是时段0应该安排的监考老师数量;每时段总的监考人数减去已经由出卷表限定的教师人数,即得“每行多少个待入”数组;将各时段需要添加的教师名单首尾相接成一维数组,以备后续填入以“监考教师一,监考教师二”为列首的表格中。其算法为:首先,利用while循环,得到“行为时段,列为老师”数组的每一行的非0元素的个数,以此控制for循环的循环次数。利用for循环,使其每执行一次,就把一个时段的监考人员安排完毕,具体为,从0行开始,每次从“行为时段,列为老师”中取出一个元素,通过while循环,将其从一维教师数组中的原位置调动到最后一个元素(通过删除函数和添加函数来完成),然后将当前时段还需添加的人数作为长度,从一维教师数组中取出由索引0开始的该长度的子数组,添加到最终数组中,同时添加到一维教师数组的最后;当所有的时段排好后,得到“最终”数组,以及与之对应的,“每行待入多少个”数组。
7)P7的作用是把时段代码,教室代码转换为时段名、教室名填入表格。其算法为:将P4输出表格中的第三列的代号,作为索引,索引出时段数组中对应的时段名,并填入表中。
图3 P7效果图
即如,代码0对应的是时段名数组中的0号元素,2014年7月1日08:00——10:00。同理将教室名的代号作为索引值,替换成教室名,其效果图如图3所示。
8)P8的作用是将监考教师安排到“监考安排一览表”表格中。其算法为:第一步,将“行为时段,列为老师”数组与“最终”数组进行拼接,例如时段0安排了5个考场,故需要10个监考老师;由于时段0安排了4门课程,且4门课程的出卷老师不同,所以10个名额中有4个来自于“行为时段,列为老师”数组;6个名额来自于“最终”数组中;对于其他时段,依此类推。第二步,将拼接后的一维数组转换成列数为2的二维数组,接入到监考安排一览表中,并将表格按照时段进行排序。第三步,将表格加上表头[3],并导出到excel表格中,其效果图如图4所示。
图4 P8效果图
3 结论
基于LabVIEW的考场排布系统,利用了LabVIEW在数组、表格运算方面的强大优势[2,4],进行了算法简化,使得运行速度较高。该系统在提高考场利用率的前提下,实现了快速安排考试时间、考场、监考人员的目标;一键式的处理方式,既节省了人力又保证了正确率,有很强的实用性。而且由于算法的灵活性,使得修改参数非常容易;但该系统还有一些需要优化之处,比如教室空间的大小与班级人数的匹配问题,教师前后两场监考的时间间隔与教室远近的问题等,今后将逐步完成。
[1]郑对元.精通LabVIEW虚拟仪器程序设计[M].北京:清华大学出版社,2012.
[2]阮奇帧.我和LabVIEW——一个NI工程师的十年编程经验[M].北京:北京航空航天大学出版社,2012.
[3]陈树学,刘 萱.LabVIEW宝典[M].北京:电子工业出版社,2012.
[4]杨高科.LabVIEW虚拟仪器项目开发与管理[M].北京:机械工业出版社,2012.
AnexaminationschedulesystembasedonLabVIEW
GAO Yu
(College and Physics and Electronic Science,Hubei Normal University,Huangshi 435002,China)
The system is used for generating an examination schedule automatically, including assigning the test time, test rooms and invigilating teachers for each course. It derives from the excel tables , using the operation function based on LabVIEW to process the logic judgement. The system has the advantages of improving the utilization rate of examination rooms, precision and efficiency of the assignment task. It has solved the problems which the manual input has ,that is, time-consuming and checking several times to ensure the accuracy. What is more, the system has held the randomness of examination time and rooms distribution as well as the consistency of invigilating number for each teacher.
examination room assignment; LabVIEW randomness; excel
2014—09—15
高瑜(1981— ),女,湖北武汉人,讲师,从事虚拟仪器的设计、计算机网络与应用方面的研究.
TP311
A
1009-2714(2014)04- 0045- 04
10.3969/j.issn.1009-2714.2014.04.010