基于POI的集实验+练习+考试于一体的在线测试系统的设计
2024-04-03刘辉胡潇潇
刘辉 胡潇潇
关键词:在线考试;随机组卷;Office操作题自动评阅;POI
0 引言
目前各类高校均开设了大学计算机基础课程,教育部高等学校大学计算机课程教学指导委员会在大学计算机基础课程教学基本要求中根据该门课程的特点和学生的层次提出了“宽专融”三类课程体系[1],不同的课程体系中有不同的知识点和课程的核心点,其中有两类课程体系中都对文档操作和数据表格操作有要求。故对于多数高校而言,Microsoft Office软件的操作与使用是该课程的主要教学与考核内容之一。
目前,利用计算机系统考试,并进行客观题(如选择题、判断题、填空题)的评阅已经较为常见,但是对于Office文档操作题的自动评阅还存在一定的难度,尤其是因为Microsoft Office 2007 or Later版本的Office 文档格式由二进制格式转变为Office Open XML 格式[2],导致早期开发的旧系统对新版本的Office文档评阅解析的支持存在问题。
Apache POI是Apache软件基金会的开放源码函数库[3],其提供API用于Java程序对Office文件进行读和写。因此利用POI通过对Office文件解析,即可实现自动评阅Office文件的操作题,对于降低教师的工作强度、提高工作效率具有实际的意义。
1 系统需求
本系统的总体目标是搭建一个B/S架构的Web应用程序,该程序不仅可以进行选择题、判断题、填空题等客观题的自动评阅,还可以进行Office 2010及以上版本的操作结果进行自动评阅,同时做到界面美观、交互良好、使用便捷、人性化和自动化的要求。
本系统主要需求分为三部分,分别是在线测试、考试管理和系统管理。
本系统根据实际情况需要三种角色,分别是:学生(Student) 、教师(Teacher) 、管理员(SA) 。
学生以班级(选课号)为单位,提供查询考试列表、查询考试详情、创建试卷、答题、交卷、查看考试结果等功能。学生的在线测试又分为在线实验、在线模拟考试练习、在线考试。其中的核心需求是学生考试时,试卷答题结果的存储和判分(尤其是Office操作题的判分)、考试倒计时自动交卷、试卷查看、查看操作题得分点等功能。
教师可以管理多个班级,查看所属学生的考试成绩和试卷、批量导入用户、批量导出试卷、批量导出成绩、在线监考、创建考试(组卷)等功能。
管理员在包含教师身份所有功能的同时,还具有题库管理、试题管理、考试管理、用户管理、角色权限管理、菜单管理等功能。
2 系统设计
根据需求,参考了张巍的基于VBA技术的Office 上机考试系统的设计与实现[4]、高上雄的Office操作题生成与自动判分的C#语言实现[5]、职晓晓等人的全国计算机等级考试二级MS Office高级应用考试系统[6],弥补了这些系统在组卷方式、试题管理、系统功能等方面存在的局限性和不足,提出了本系统的设计方案。
2.1 系统功能设计
设计的系统总体功能如图1所示。
2.2 系统架构设计
本系统后端采用SpringBoot框架,基于MVC设计模式,前端采用Vue框架,系统架构如图2所示。
SpringBoot 是对Spring 框架的扩展,内部集成了其他框架,提供了许多便捷的开发方式,减少系统搭建的开发工作,并能够了解决各框架依赖包的冲突问题[7]。其中的Spring MVC 提供了基于MVC(Model-View-Controller) 设计模式,结合基于Java 注解的配置,能够使开发出的代码具有低侵入性。在后端框架中,还加入了Apache POI,利用其为Java程序提供的API实现对符合Office Open XML(OOXML) 标准的Of?fice文件和微软的OLE 2复合文档格式进行读和写。
Vue是一个用于创建用户界面的开源的前端Ja?vaScript框架,本系统利用Vue-Element-Admin开源项目,基于Vue和Element UI开发前端功能,从而使系统具有轻量级、双向数据绑定、运行速度快等优势。
2.3 系统数据库设计
根据需求分析,本系统一共包含题库、题目、选择题选项、操作题得分点、考试、试卷、试卷选择题选项、班级(课程)、用户、身份、权限(菜单)、日志等共12个实体,系统设计的E-R图如图3所示。
为了满足多种形式的组卷方式,本系统把题库与题目之间的关系设计为多对多的关系,即一个题库可能包含了多个题目、一个题目可能在多个题库当中。考试与题库也设计为多对多关系,即一个考试可以选择多个题库进行出题,一个题库可供多个考试选择题目。
2.4 关键技术设计
1) 组卷设计
本系统通过实现题库、题目与考试之间的关联关系,实现了随机试题组卷和特定试题组卷两种组卷方式灵活结合使用的功能,并且同时支持了实验、练习和正式考试。
本系統为了实现随机试题组卷和特定试题组卷的功能,设计如下:
首先根据需求创建对应的题库,如果需要随机组卷,则需要把所有随机出题的题目放在同一个题库当中。如果需要某个考试指定出现某些题目,则需要把该题目放在一个单独的题库中。
在创建考试时,能选择多个题库,根据题库中包含的题目数量选择并设置每道题的分数。同时,通过选择多个题库或者设置单个题库的某个题型全部出现,来实现随机试题组卷和特定试题组卷两种组卷方式同时使用。
实现组卷的界面如图4所示。
2) 卷面显示设计
本系统在显示卷面时,采用题目顺序随机显示,选项顺序随机显示,从而实现即使是同一份试卷,当前页面显示的考卷也不完全一样。
3) Office操作题判分设计
本系统使用POI结合Java的语言特性设计了操作题的判分方法与流程。
对应Office操作中最常用的Word、Excel和PPT三类文件,分别利用POI 中的XWPFDocument、XSSF?Workbook和XMLSlideShow三个类开发自定义的判分工具类WordUtils、ExcelUtils和PPTUtils。通过获取目标Office文件的xml解析文件[8],进一步获取所需数据在xml文件中的位置,在对应的判分工具类中提供对应的格式获取方法和判分方法,从而实现Office操作的判分;提供所有判分方法的接口,从而可通过Java反射方式獲取到对应判分工具类中所有的判分方法;提供反射工具类的invokeMethod方法,从而实现前端向后端接口传递参数,进而调用对应的判分方法并获得返回值;提供文件的“内容和段落”解析接口,以便于前端选择对应的文字、段落、单元格、占位符;提供前端选择页面,通过携带操作对象、方法名、题目id等数据,请求后端接口,从而获取到对应格式(答案)并设置每个判分点的得分。
操作题判分过程如下:①下载答题模板(原始未操作的Office文件);②根据题目要求修改答题模板,完成后保存修改并上传已完成的文件;③后端查询当前试题的所有判分点,其中包含方法名、位置、正确答案、分数等信息;④根据获取到的判分点中的信息,依次执行对应的方法并将获取到的内容与判分点中的正确答案进行比对,比对结果一致则操作正确,反之则错误;⑤根据考试中该题型设置的分数与学生得分比例(回答正确的判分点分数综合/ 所有判分点的分数综合)相乘得到学生该题目的得分并保存。
4) 实验、练习与考试功能集成设计
本系统通过设定系统权限、考试配置等信息,实现了集实验、练习与正式考试为一体。不同类型的考试设置如表1所示,模拟练习的考试配置界面如图5所示。
5) 精确到按钮的权限控制设计
本系统提供了学生、教师、管理员三种身份的用户,不同的身份具有不同的权限。系统实现了前后端一致的,精确到按钮级别的权限控制功能,能够动态更改各个身份的权限,同时前端会根据用户身份所拥有的权限,来提供不同的菜单、按钮和功能。系统前后端权限控制示意图如图6所示。
6) Redis缓存设计
本系统采用Redis 实现缓存,用旁路缓存模式(Cache Aside Pattern) 作为缓存的读写策略,完成了如下数据接口的缓存:①不同身份的权限标识列表查询接口;②系统配置查询接口;③部门详情与部门树查询接口;④考试列表分页查询接口;⑤考试详情查询接口;⑥试题内容详情查询接口;⑦选择题选项查询接口;⑧操作题判分点查询接口;⑨用户登录后生成的token。
本系统集成Redis后,极大地提高了系统性能,降低了数据库的压力。
3 结束语
相比于传统的纸质试卷考试来说,在线考试有诸多优势,包括实现无纸化、无须人工阅卷、可以随机组卷等,在学校的教学环节中有效地提高了工作效率,减轻了教师的改卷工作量,实现了即考即出成绩。