Java研究与实现编程题自动评分技术
来源:互联网 发布:c语言线程优先级设置 编辑:程序博客网 时间:2024/06/01 10:26
本系统选用 SQL Server 2005 数据库。它在 SQL Server 2000 的基础上增添一些新特性,包括表和索引数据分区、CLR 集成、T-SQL 语言增强、快照隔离、数据库镜像、异步处理能力等功能。
(1)数据库需求分析
评分过程中需要存储考生的基本信息,明确每个考生解答了哪些试题,提交试题评阅后的成绩是多少,由此总结出如下需求:
l 一个考生可以解答多题,一个答题对应一个试题l 一个答题有一个程序文件名
l 一个程序文件名对应一个试题号
l 考生提交答题,评阅就有一个成绩
对数据库需求进行归结,设计如下的数据实体:
l 考生信息:学号、姓名、班级24
l 试题信息:试题号、程序文件名、试题内容
通过对上述数据实体的分析,得出各实体间的关系为:一个考生可以解答多个试题,多个试题提交评阅生成一个成绩,最后每个考生就拥有一个成绩。
其 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 文档模板(以试题为单位):
<standardanswer>
<itemnumber id="1" fullscore="满分分值">
<itemcontent>试题内容 </itemcontent>
<gradingstandard method="1">
<grammerpart grammerscore="分值" ></grammerpart>
<resultpart resultscore="分值">结果值 </resultpart>
<testcasepart testscore="分值">
<testcase-input> 输入值 </testcase-input>
<testcase-output> 输出值</testcase-output>
</testcasepart>
</gradingstandard>
<gradingstandard method="2">
<grammerpart grammerscore="2" ></grammerpart>26<keypointpart>
<keypoint1 score="分值"> 第 1 个知识要点</keypoint1>
…
<keypointN score="分值"> 第 N 个知识要点</keypointN>
</keypointpart>
</gradingstandard>
</itemnumber>
</standardanswer>
其中<itemnumber id="1" fullscore="满分分值">id 表明题号为第一题,fullsort 表明该题满分分值。<gradingstandard method="1">表明第一种评分标准,不同的评分标准通过 method 属性来区分,<keypointpart>标记表明知识要点部分,通常一个试题包含多个知识要点,分别使用子标记 keypoint1、…、keypointN 表示,比如<keypointN score="分值">表明第 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 获取编译的错误信息
(1)数据库需求分析
评分过程中需要存储考生的基本信息,明确每个考生解答了哪些试题,提交试题评阅后的成绩是多少,由此总结出如下需求:
l 一个考生可以解答多题,一个答题对应一个试题l 一个答题有一个程序文件名
l 一个程序文件名对应一个试题号
l 考生提交答题,评阅就有一个成绩
对数据库需求进行归结,设计如下的数据实体:
l 考生信息:学号、姓名、班级24
l 试题信息:试题号、程序文件名、试题内容
l 成绩信息:学号、得分情况、总成绩
通过对上述数据实体的分析,得出各实体间的关系为:一个考生可以解答多个试题,多个试题提交评阅生成一个成绩,最后每个考生就拥有一个成绩。
其 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 文档模板(以试题为单位):
<standardanswer>
<itemnumber id="1" fullscore="满分分值">
<itemcontent>试题内容 </itemcontent>
<gradingstandard method="1">
<grammerpart grammerscore="分值" ></grammerpart>
<resultpart resultscore="分值">结果值 </resultpart>
<testcasepart testscore="分值">
<testcase-input> 输入值 </testcase-input>
<testcase-output> 输出值</testcase-output>
</testcasepart>
</gradingstandard>
<gradingstandard method="2">
<grammerpart grammerscore="2" ></grammerpart>26<keypointpart>
<keypoint1 score="分值"> 第 1 个知识要点</keypoint1>
…
<keypointN score="分值"> 第 N 个知识要点</keypointN>
</keypointpart>
</gradingstandard>
</itemnumber>
</standardanswer>
其中<itemnumber id="1" fullscore="满分分值">id 表明题号为第一题,fullsort 表明该题满分分值。<gradingstandard method="1">表明第一种评分标准,不同的评分标准通过 method 属性来区分,<keypointpart>标记表明知识要点部分,通常一个试题包含多个知识要点,分别使用子标记 keypoint1、…、keypointN 表示,比如<keypointN score="分值">表明第 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 获取编译的错误信息
0 0
- 研究与实现Java编程题自动评分技术的
- Java研究与实现编程题自动评分技术
- Java 编程题自动评分技术的研究与实现(一)
- Java编程题自动评分技术的研究与实现(二)
- Java并发编程与技术内幕:消费者-生产者模式研究
- Java并发编程与技术内幕:消费者-生产者模式研究
- Java并发编程与技术内幕:消费者-生产者模式研究
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现(转载)
- java 技术的搜索引擎的研究与实现
- 【java基础 11】java集合框架学习
- leetcode-124. Binary Tree Maximum Path Sum
- 手势 Swift
- Layer.js——强大的弹出框
- 移动应用开发的10个最佳灵感来源
- Java研究与实现编程题自动评分技术
- MyBatis使用大全(1)------入门初体验
- Kotlin随笔 — Null安全性
- 80老翁谈人生(309):关于北大方正集团盗窃火星人源代码事件的历史真相
- VS2015 解决方案 或者项目 卡 正在加载 的解决办法
- 现有一个二进制数,如何快速判断某位是0还是1?
- 使用Eclipse构建Maven项目 (step-by-step)
- 2. 大型网站核心架构之网站的高性能架构
- 经典Android面试题和答案汇总