【论文摘要】在考试系统中,实现自动判卷是程序题考核设计的核心。围绕该核心,开发设计“教师端程序题模板生成工具”、“学生端答题界面”、“服务端自动判卷逻辑 业务”三个子模块,以确保每一个程序题都有一个全面而准确的判卷模板与之对应,学生可以方便快捷地在可编辑区域编写代码并进行测试和提交,判卷模板和学生 代码自动组合并编译成一个可执行程序,从而得到判卷得分临时数据文件,考试系统通过读取该临时数据得到判卷结果。 【论文关键词】考试系统 程序题 自动判卷 C语言 Java语言 随着计算机技术的发展,越来越多的考试采用上机考试的形式。对选择题、判断题这类有固定答案的考试题型的判卷是很简单的;然而,对程序题这种 表述形式多样化的题型,很难通过自动判卷给出合理的分数,多数是针对某一个运行结果进行判断,未能满足根据得分点进行判卷的需求。本文通过详细介绍“教师 端程序题模板生成工具”、“学生端答题界面”、“服务端自动判卷逻辑业务”三个模块的设计,阐述了程序题自动判卷、以及合理评分的解决方案,在一定程度上 提升了程序题考试的可行性、以及程序题判卷的合理性。 1 自动判卷功能的设计方案 1.1 设计思路 由于考试系统的开发语言是面向对象语言Java;程序题考核所用的语言为是C语言。所以很难通过代理模式实现对C语言程序的处理。因此,可将程序题判卷从系统整体设计中独立出来,两者之间通过某个简单的数据存储建立联系。 记事本文件(设为grade.txt)可作为上述的中介数据存储,其主要用于存储学生得分记录。一方面:系统可以读取文件信息将得分记录存入 数据库;另一方面:grade.txt可以通过调用java.lang.Runtime实例的exec(String command)方法运行某个可执行文件(设为judgeMain.exe)来得到。而judgeMain.exe文件、也可以通过调用 exec(String command)方法对某个源文件(设为judgeMain.cpp)进行编译和链接而生成。 其中,judgeMain.cpp文件是可以实现自动判卷、并将得分纪录写入记事本的源代码文件。因此,只要获得judgeMain.cpp文件,自动判卷问题就可以得到解决。 1.2 设计方案 1.2.1 核心方案 获取judgeMain.cpp文件,使考试系统整体设计和程序题自动判卷业务逻辑相对独立,通过exec(String command)方法编译、链接、运行判卷程序。 1.2.2 judgeMain.cpp文件的获取 假设A:每个用于学生考试的考试模板都有一个与之对应的判卷模板,该判卷模板通过输出流生成一个记事本文件,并且学生在考试模板里填写的内容可以自动而正确地填写到判卷模板里。 假设B、有一个简单可用的程序题模板生成工具,通过该工具,结合某个欲要考核算法或知识点的源代码文件,能够简单快速的生成一一对应的考试模板和判卷模板。 假设C、有一个严格规范而且灵活简洁的程序题答题编译界面,既方便学生填写、编译、运行程序,而且可以准确地将学生填写区域的代码上传到服务器。 可见,假设B和C成立时,A成立,从而可获得judgeMain.cpp文件。 1.2.3 结论:开发以下两个模块支撑自动判卷实现 (1)教师端程序题模板生成工具;(2)严格而便捷的学生断答题界面。 |