1、引言
随着国内高等教育信息化的推进,办公自动化等现代信息技术的广泛应用,考试管理的信息化方面也有了长足的发展。大部分的院系在考试过程中为了做到严格纪律,都纷纷采用了随机排座机制来保障考试的顺利进行。但是,传统的随机座号机制是通过考前人工排序或在考场内随机抽号的方式进行的,这就耗费了大量的人力和时间,造成效率低下,为此,我们开发了一个简单的考场随机排座系统。
2、设计内容
根据考场随机排座的要求,整个系统由以下的模块组成:数据导入、排序处理、打印输出。除此之外,还要求系统具有良好的人机界面。
数据导入工作的对象是欲排序的名单,由于大部分的学生信息采用EXCEL格式或者WORD文档格式进行存储,所以,首要的工作是要将这些格式文档读入排座系统。
对于排座系统中各个记录的随机排序,应避免VC++中伪随机数机制可能带来的影响,为每条记录分配一个真正的符合数学规律的随机值。
数据的输出部分包括模拟显示和打印两部分,将对随机排序后的结果进行输出,生成考场座次表,和试卷一起密封,方便监考人员在考试之前进行宣读。
软件系统主要采用VC++ 6.0编写,整个系统是基于对话框的应用程序,程序的主界面采用了列表视图控件,打印和显示部分则利用了MFC的打印机制。
3、关键技术
3.1数据导入
由于每一个考生在入学时就已经在学院的管理系统中具有了相应的信息,只需要将该信息导入排座系统即可,也可以通过人工的方式进行录入,本系统支持EXCEL和TXT两种格式的数据导入。EXCEL格式的考生信息导入排座系统的方法主要有两种:一种是通过ODBC数据接口对EXCEL格式的文件进行读取[1],该方法需要熟悉SQL语法和数据库操作的相关知识,文献[1]介绍了该方法的详细操作步骤;另一种方法则是利用工具软件XLS Converter先将EXCEL格式的文件转换为TXT文件[2],然后再利用VC本身的文件操作函数进行读取,本系统采用了这种方法,即利用VC调用文件转换引擎将EXCEL转换为TXT格式。实现的部分核心代码如下:
cmdline=exePath+"XLSConverter.exe "+"C:\tempXLS\temp.xls"+" txt C:\tempXLS"; char buf[1024],cmdll[1024]; sprintf(cmdll,"%s",cmdline); cmdll[sizeof(cmdll)-1]=0; sprintf(buf,"%s","XLSConverter.exe"); buf[sizeof(buf)-1] = 0; //通过在新的进程中以命令形式调用转换引擎XLSConverter.exe STARTUPINFO startInfo; startInfo.cb = sizeof(STARTUPINFO); startInfo.lpReserved = NULL; startInfo.lpTitle = buf; startInfo.lpDesktop = NULL; startInfo.dwX = 0; startInfo.dwY = 0; startInfo.dwXSize = 0; startInfo.dwYSize = 0; startInfo.dwXCountChars = 0; startInfo.dwYCountChars = 0; startInfo.dwFlags = STARTF_USESTDHANDLES; startInfo.wShowWindow = 0; //SW_SHOWDEFAULT; startInfo.lpReserved2 = NULL; startInfo.cbReserved2 = 0; startInfo.hStdInput = 0; startInfo.hStdOutput = 0; startInfo.hStdError = 0; //产生新的进程,运行命令行,调用转换引擎进行转换 int nRet=CreateProcess( NULL, cmdll, NULL, NULL, TRUE, 0, //CREATE_NEW_CONSOLE NULL, NULL, &startInfo, &pidInfo); if(!nRet) { AfxMessageBox("调用引擎失败,程序将退出!",MB_OK|MB_ICONSTOP); return -1; } DWORD dwWait=WaitForSingleObject(pidInfo.hProcess, INFINITE); //等待进程结束 return; |