陈永松
(广东松山职业技术学院,广东 韶关 512126)
随着计算机教育的发展,高校计算机课程上机考试的比重越来越大。除少数课程用考试系统完成考试外,高校采取的考试方式一般是学生在本地机完成操作,然后将操作结果传到服务器的某个文件夹中。各个院校提交考试结果的方式不同,我院采用发卷交卷系统[1]将本地机中的答题文件传到服务器,尽管该系统通过交卷检查器[2]一定程度上避免了错误交卷,但是检查器只提供在客户端中检查单个考生交卷情况的功能,在服务器端缺乏必要的检查统计工具。考试过程中出现的考号错误、考生漏交卷、交空白卷等异常情况,监考教师往往不能及时发现,导致考生没有成绩。基于此,采用C#为开发工具,研发了一个交卷统计系统,该系统可以从考生目录自动识别出空白卷,显示已交卷和未交卷考号等各种交卷信息,帮助监考教师及时发现各种交卷异常。
在服务器端遍历交卷目录,显示按班级分类的各班已交卷人数及考号和未交卷考号,遍历每个考生目录下的文件,将没有答题卡或答题卡内没有答题信息的考生目录名称显示在输出端。
根据系统功能需求,结合实际考试中遇到的一些问题,画出本系统的数据流图。其中顶层图和0层图如图1和图2所示。
空白答题卡:由任课教师提供的没有答题信息的答题卡,同一场考试中最多有4张答题卡,每个考生分别使用一张答题卡答题。
已交卷考号:已经交卷的考生考号,考生目录左边8位为考号,考号左边6位为班号。
班级信息:由本班已交卷人数和本班全体交卷考生考号组成。
本系统分为空白卷及考号处理、分班、交卷信息处理3个模块。
输入设计包括输入交卷目录、空白答题卡目录和空白答题卡文件名。其中目录通过文件夹浏览对话框选择录入,文件名可以包含通配符,如*.sql。每次重新运行本系统,输入界面显示上一次操作输入的目录和文件名,通过读写XML格式文件实现这一功能。
在输出界面中显示考场已交卷总人数、各班已交卷人数、交卷及未交卷考号和空白卷考生目录名称。由于在实际考试中,监考教师更关心已交卷人数和未交卷考号,因此交卷考号只显示起始考号和最后考号。考虑到每场考试班级数量不超过3个,如果超过3个,说明有异常情况,如考生输错考号,因此人数最多的3个班才显示交卷人数、交卷和未交卷考号,其他班只显示已交卷考号。未交卷考号和空白卷考生目录以列表框形式显示。
2.4.1 空白卷及考号处理设计
空白卷及考号处理过程为:遍历空白答题卡目录,将空白答题卡的文件信息(包括文件名和文件大小)保存到答题卡结构体数组中。遍历交卷目录,从每个考生目录中提取考号,保存到考号数组中,按答题卡结构体数组提供的文件名,遍历每个考生目录中的文件,如果找不到文件判断为空白卷,否则判断考生答题卡文件大小,如果与空白答题卡文件大小相同,则判断为空白卷,系统将空白卷目录显示在输出界面中。
2.4.2 分班处理设计
分班目的是根据考号数组中的数据,按班号不同对考号进行分班,并将结果存入班级信息中。
(1)班级信息数据结构
①定义一个班级信息类存放班级信息,类图[3]如图 3所示。 其中Cnt为班级人数,No[]为考号数组。
②为便于对班级信息对象进行统一管理,引入 List<T>类[4],名称为ClassList,声明如下:
List<ClassGroup> ClassList=new List<ClassGroup>();
每增加一个班级信息对象,则将该对象添加到ClassList列表中。
(2)分班处理过程
为便于描述,使用以下符号:j为班级下标,k为考号下标,ClassList[j][k]为 j班第 k个人考号,ClassList[j].Cnt为 j班人数。
流程如下:将考号数组进行升序处理,然后判断每个考号和前一个考号,如果其中的班号不同,则创建一个新的ClassGroup对象,并将该对象添加到ClassList列表中,ClassList[j].Cnt=k+1,然后j++,k=0,如果和前一个考号相同,则k++,不管是哪种情况都将当前考号存入ClassList[j][k]。
2.4.3 交卷信息处理设计
将ClassList列表中的班级信息对象按Cnt进行降序处理,然后显示Cnt最大的3个班的班级人数、已交卷起始考号、已交卷最后考号和未交卷考号,其他班只显示已交卷考号。
未交卷考号的处理分两种情况,一种是有考生名单EXCEL文件的,则EXCEL文件中有但交卷考号中没有的即为未交卷考号;另一种情况是没有考生名单EXCEL文件,处理方法是遍历本班考生考号,如当前考号(如00301105)和前一个考号(如 00301102)之间不连续,则中间的号码(如00301103和00301104)认为是未交卷考号。
本系统大部分代码省略。这里只介绍班级信息对象按Cnt属性进行排序的处理方法,首先定义一个IComparer类型用于比较两个ClassGroup对象的大小,参考代码如下:
然后通过ClassList.Sort(new ClasscntCmp());实现班级信息对象的降序处理。
在操作考试中,存放考试结果大致分为两种类型。一是用专门的答题卡,将操作过程或结果以文字和图片形式的复制到答题卡中,在题目文件中输入答题信息也属于这种类型;二是没有专门的答题卡,考试结果就是对每道题进行相关操作后生成的文件,如程序设计源文件。对于第二种类型,建议将第一道操作题的空白操作文件(如a01.cs,进入操作软件后不要进行任何操作直接保存)作为答题卡进行检验。
系统检测出空白答题卡后,监考教师应通知考生,确认空白答题卡原因,如果考生答题文件在本地机中仍然存在,只是未传到服务器,允许考生重新交卷。如果因考生个人原因,如未保存文件,在本地机也找不到答题文件,则应让考生签名确认。
交卷统计系统实现了对所有计算机操作考试进行交卷信息管理,通过显示已交卷人数、未交卷考号等信息,便于监考教师对当前交卷情况进行监控,及时发现考场中出现的漏交卷、交卷考号错误等异常情况。而空白卷检测功能能够在第一时间发现考生空白卷,在监考现场就空白卷问题进行处理,一方面减少了空白卷率,另一方面现场签名确认也减少了考生与考场之间的纠纷。包括本院使用的发卷交卷系统在内,所有将操作结果传到服务器,并以考号作为目录名区分不同考生的操作考试,都可以使用交卷统计系统进行交卷信息管理。
[1]胡开明.基于.NET的发卷交卷系统设计[J].重庆工商大学 学 报(自 然 科 学 版),2010,27(3),252-256.
[2]胡开明,陈建华,王玉贤.基于VB.NET的交卷检查器设计[J].黄石:黄石理工学院学报,2009,25(2):15-17.
[3]马骏.C#程序设计及应用教程[M].北京:人民邮电出版,2009.
[4]孙涌.软件工程教程[M].北京:机械工业出版社,2010.