Java研究与实现编程题自动评分技术

本系统选用 SQL Server 2005 数据库。它在 SQL Server 2000 的基础上增添一些新特性,包括表和索引数据分区、CLR 集成、T-SQL 语言增强、快照隔离、数据库镜像、异步处理能力等功能。
    (1)数据库需求分析
    评分过程中需要存储考生的基本信息,明确每个考生解答了哪些试题,提交试题评阅后的成绩是多少,由此总结出如下需求:
    l 一个考生可以解答多题,一个答题对应一个试题l 一个答题有一个程序文件名
    l 一个程序文件名对应一个试题号
    l 考生提交答题,评阅就有一个成绩
    对数据库需求进行归结,设计如下的数据实体:
    l 考生信息:学号、姓名、班级24
    l 试题信息:试题号、程序文件名、试题内容

    l 成绩信息:学号、得分情况、总成绩

Java研究与实现编程题自动评分技术_第1张图片


    (2) 概念结构设计
    通过对上述数据实体的分析,得出各实体间的关系为:一个考生可以解答多个试题,多个试题提交评阅生成一个成绩,最后每个考生就拥有一个成绩。
    其 E-R 图如图 3.6 所示:
    图 3.6 E-R 图
    (3) 逻辑结构设计
    评分系统共使用了三张表,分别为: 考生表(stu_info)、试题表(test_answer)及成绩表(stu_score)。考生表用于存储考生的基本信息,试题表用于存储考试试题信息,成绩表用于存储考生的各试题的得分情况及总成绩。数据表设计如表 3.4——3.5 所示:
    表 3.4 考生表(stu_info)
    序号 字段名称 字段类型 主键 外键 是否为空 描述1 STU_ID Int 是 学号
    2 STU_Name Varchar(50) 姓名
    3 STU_Class Varchar(50) 班级25
    表 3.5 试题表(test_answer)
    序号 字段名称 字段类型 主键 外键 是否为空 描述1 ItemID Int 是 试题号
    2 FileName Varchar(20) 程序文件名
    3 Content Varchar(50) 试题内容
    表 3.6 成绩表(stu_score)
    序号 字段名称 字段类型 主键 外键 是否为空 描述1 STU_ID Int 是 学号
    2 GradingResult Varchar(50) 得分情况
    3 TotalScore Int 总成绩
    3.6 试卷标准答案的 XML 文档格式
    标准答案中需要存放多个试题的参考答案,每个试题有不同的评分方法,每种评分方法包含多个得分项,某个得分项又有多种表示形式,XML 文档正好适合描述这种层次结构,因此本文用 XML 文档来描述与存放试卷标准答案,下面给出标准答案的 XML 文档模板(以试题为单位):
   
   
    试题内容
   
   
    结果值
   
    输入值
    输出值
   

   

   
    26
    第 1 个知识要点
    …
    第 N 个知识要点
   

   

   

   

    其中id 表明题号为第一题,fullsort 表明该题满分分值。表明第一种评分标准,不同的评分标准通过 method 属性来区分,标记表明知识要点部分,通常一个试题包含多个知识要点,分别使用子标记 keypoint1、…、keypointN 表示,比如表明第 N 个知识要点的分值。
    3.7 XML 数据的加解密
    对于一门考试,标准答案泄露,其后果可想而知,因此标准答案的保密性极其重要。本文采用 3DES 算法对标准答案的 XML 文档中的元素进行加密来提高数据的安全性。其加密原理是先利用 DOM 解析器解析标准答案的 XML 文档生成一个文档对象,使用 XPath 表达式定位并提取需要加密的元素信息,然后选用3DES 加密算法与其生成的密钥对这些元素信息进行加密,最后用加密后的内容替换原始 XML 文档中对应的元素信息,生成一个加密后的 XML 文档。评分过程中需要提取 XML 文件中的数据进行匹配评分,所以要获取加密前的数据还得先解密,XML 数据加解密的实现。
    3.8 本章小结
    本章阐述自动评分系统的总体设计。通过系统需求建模所捕获的系统功能为:自动评分、成绩查询、成绩图表统计,同时对评分模块的静态结构与动态行为进行建模。本文根据标准答案的特殊性,采用 XML 文档格式存储之,为保证标准答案的保密性,采用 3DES 加密算法对存放标准答案的 XML 文档中的元素进行加密。27
    第 4 章 自动评分系统的实现与测试
    自动评分技术的难点在于:(1)当考生的代码无法通过编译时如何进行查错及局部纠错处理 (2)基于反射机制的黑盒测试技术的实现(3) 知识要点的正则表达式匹配评分技术的实现。以上三大难点的解决即为系统的关键技术,最后通过构建原型系统进行测试来验证本文所实现的Java程序题的自动评分技术的合理性及准确性。
    4.1 程序查错及局部纠错技术的实现
    考生所编写的程序难免存在语法错误,而语法错会导致程序无法运行,因此评分模块应该模仿人工阅卷方式,具备查错与局部纠错功能,尽量减少考生程序因极小的错误而导致失分严重的现象。
    4.1.1 获取程序编译后的出错信息
    每个运行中的 Java 应用程序都有一个 Runtime 实例,使应用程序能够与其所运行的环境相关联。Runtime 类的应用则是先调用静态方法 getRuntime()来创建实例,然后调用 exec(String command)来运行由字符串命令指定的本地机上的可执行文件。假若要编译本地机上的一个 java 程序并获取其编译的出错信息,只需将 exec(String command)方法中字符串命令指定为 “javac 文件名.java”,再通过调用 getErrorStream()方法便可获取错误流,然后将该错误流嵌套在缓冲输入流来创建一个 BufferedInputStream 类的对象,该对象通过调用 read()方法便可获取程序编译后的出错信息。获取编译的出错信息的代码块如图 4.1 所示:28图 4.1 获取编译的错误信息

你可能感兴趣的:(Java研究与实现编程题自动评分技术)