摘 要
题库、试卷建设是教学活动的重要组成部分,传统手工编制的试卷经常出现内容雷同、知识点不合理以及笔误、印刷错误等情况。为了实现离散数学题库管理的信息化而开发了离散数学题库管理系统。
该系统采用C/S 模式,前台采用JAVA(JBuilder2006),后台采用SQLServer2000数据库。本文详细论述了系统总体设计思想、数据库设计以及功能模块设计等。应用软件工程中的瀑布开发模型,开发实现了以下功能:题库的管理与维护、自动生成试卷、手工改动生成试卷、生成WORD试卷和答案。
离散数学题库管理系统能够实现离散数学题库管理的信息化,规范化和试卷生成的自动化,并且在操作上实现简单、方便、快捷。
关键词 离散数学 题库 生成试卷
Abstract
The constructions of test library and examination paper are the important parts of teaching activities. The cases of similar content, illogical ken, and clerical or literal error, often occur in the manual-made paper. The development of this system is to make the management of the discrete mathematics test library more efficient.
The system applies C/S mode and JAVA (JBuilder2006) .The backstage applies SQLServer2000 database. This paper states the general design method, the design of the database and the function mode. By classic waterfall models of software development implemented the following functions: 1. management and maintenance of the test library; 2. make a test paper automatically; 3. maintenance of the existed test paper; 4. generate WORD test paper and test answers.
The discrete mathematics test library management system can realize the management systematic, standardized and automatic and also make the operation easy, fast and convenient.
Key words discrete mathematics, test library, generate a test paper
目 录
第1章 概 述
1.1 题目的来源及背景
1.2 研究意义
1.3 软件工程瀑布模型介绍
第2章 需求分析
2.1 项目内容及要求
2.1.1 具体完成功能
2.1.2 实现目标
2.2 可行性分析
2.2.1 经济可行性
2.2.2 技术可行性
2.3 开发工具的论述
2.3.1 前台开发工具
2.3.2 后台数据库
第3章 系统结构特性设计
3.1 系统分析模型
3.2 数据库设计
第4章 系统行为特性设计
4.1 软件结构设计
4.2功能子模块设计
4.2.1 教师登录模块
4.2.2 题库的管理与维护模块
4.2.3 试题查询模块
4.2.4 自动生成试卷模块
4.2.5 手工改动现有试卷模块
第5章 系统测试
5.1 系统测试方案
5.2 测试结果分析与调试
结 论
参考文献
致 谢
第1章 概 述
1.1 题目的来源及背景
随着生产社会化趋势的扩大、科学技术的进步、人类知识总量的增长速度不断加快、以及市场竞争的日益激烈,使人们对信息的认识产生了根本性的变化。信息被列为与物质、能源并列的人类社会发展的三大资源之一。信息化水平已成为衡量一个国家现代化水平和综合国力的重要标志。我国也正处于改革开放进一步深化的环境下,因此我们应当抓住机遇,充分利用信息,扎实的做好信息管理系统的基础工作,建设开发较为先进的应用系统,加快我国信息化建设的步伐。
邓小平同志指出“教育要面向现代化、面向世界、面向未来”。信息社会的到来已预示着电脑网络会在教育技术现代化中扮演重要角色,在实施教育技术现代化的过程中我们深刻认识到,在教学及考试的过程中应用网络化的手段解决传统的教师出题已经迫在眉睫,系统就是建立在这个基础上才得以全面、健康地发展。
目前,大多数高等院校学生考试仍采用任课教师人工出题的方式,教务管理部门通常要求教师同时出多套试卷,其题量与难度要求相同,且要求近几年试题重复率不超过30%,并且要同时给出答案和评分标准,这样做给教师增加了很大的工作负担,并且若上下届学生的同一门课程由同一教师承担,则难免几届学生用相同几套试卷,很难保证试题的保密性。采用计算机信息管理技术与数据库技术,建立合理出题、公正阅卷和科学评价为一体的试题库管理系统,每次考试前由题库中题目随机生成试卷,则可较好地解决教考分离的问题,体现考试的公正性,也可将广大教师从繁重的命题工作中解放出来。
1.2 研究意义
随着科技发展和社会进步,尤其是计算机大范围的普及,计算机应用逐渐由海量数据处理转向大规模的事务处理和对工作流的管理,这就产生了以台式计算机为核心,以数据库管理系统为开发环境的管理信息系统,以及在大规模的事务处理和对工作流的管理等方面的应用。
教学评价是检验教学设计效果,修订和完善教学设计的一个基本因素。教学评价通过单元测验和最终考试环节来完成。题库、试卷是教育部本科评估的指标和观测点,随着5年一轮的本科教学评估活动的开展,对高等院校试卷的质量提出了更高的要求。采用传统的手工编制试卷方式,容易出现试卷题目与往年雷同、考核的知识点不合理或笔误、印刷错误等现象,也不能适应网络环境下的教学要求。
设计完成的题库管理与试卷自动生成系统的使用对象为教师。教师可以利用系统对不同课程建立题库并进行管理,根据不同的要求自动生成试卷和参考答案,使用系统提供的试卷自动生成功能可以大大提高试卷的质量,减轻教师的工作负担,提高教师的工作效率。
1.3 软件工程瀑布模型介绍
最初发表的软件工程开发过程起源于其他的工程过程。如下图所示,因为该图从一个阶段到另一个阶段逐次下降,这个模型因此以“瀑布模型”命名或软件生命周期模型。
图1.1 软件生命周期
模型中主要的阶段映射为一些基本的开发活动:
- 需求分析和定义
通过咨询系统用户建立系统的服务、约束和目标。并对其详细定义从而为系统描述服务。
- 系统和软件设计
系统设计过程区分硬件和软件系统的需求。硬件设计是指建立一个总体的系统体系结构。软件设计包括识别和描述一些基本的软件系统的抽象及其之间的关系。
- 实现和单元测试
在这个阶段,软件设计是作为一组程序或程序单元实现的。单元测试就是检验每个单元是否符合其描述。
- 集成和系统测试
集成单个的程序单元或程序,并对系统整体进行测试以确保其满足需求。在测试之后,软件系统交付给客户使用。
- 运行和维护
正常情况下(虽然不是必须的),这是一个具有最长生命周期的阶段。系统被安装并且进入实际的使用中。维护包括改正在早期各阶段未被发现的错误,改善系统单元的实现,当新的需求出现时提高系统的服务能力。
原则上,每个阶段的结果是一个或多个经过核准的文件。直到上一个阶段完成,下一阶段才能启动。在实际的过程中,这些阶段经常是重叠和彼此间有信息交换的。在设计阶段,需求中的问题被发现;在编程阶段,设计问题被发现,以此类推。软件过程不是一个简单的线性模型,它包括开发活动的多个反复。
第2章 需求分析
开发软件首先做的是开发过程中最主要的就是系统的需求分析,需求分析同时也是软件生存周期中关键的一步。根据软件工程学中开发软件的要求,对离散数学题库管理系统全部功能和相关的技术进行具体的分析,分析时采用结构化的分析方法,自顶向下、逐层分解问题。
2.1 项目内容及要求
根据此次项目的要求,主要完成对离散数学题库管理系统的设计。
2.1.1 具体完成功能
本系统具体完成的功能如下:
1)题库的管理与维护:新题的录入,修改,删除等功能。
2)生成试卷:包括自动生成与手工改动,要求可以对生成的试卷进行打印和WORD排版,并且对生成的试卷能自动生成其参考答案。
其次还应考虑到试题的实际应用性,如:题目的覆盖率,雷同度,难度系数及近三年内不能重题等问题。
2.1.2 实现目标
该系统具有较好的现实意义,特别是计算机发展迅速的今天,实现了由传统的手工化管理向信息化管理,充分的利用了计算机的强大计算能力。该系统界面美观、操作方便、简捷,对于没有操作经验的人员根据系统的提示也能很快的熟悉操作该系统。该系统具有实用性和通用性。
2.2 可行性分析
可行性分析是研究技术领域的经济问题和经济规律的科学,是研究一定技术条件下如何提高经济效果的科学,是技术与经济的交叉。其主要研究技术的经济效果问题,技术与经济的最佳组合问题。
2.2.1 经济可行性
由于该软件是一个小型的离散数学题库管理系统,所以进行该软件的开发经费和投资较少,只需一台普通的计算机即可,系统的开发并不太复杂和繁琐,操作尽可能简单易行。在开发过程中,由一个人独立开发,用时三个月左右,所需成本费用主要为人工费用,再加上计算机和软件等构成该系统的开发成本。
经济上的合理性:在系统开发上,现在普通的计算机市场价4000元左右,操作系统是Windows XP加上Microsoft Office其正版软件也不过5000元,数据库采用SQL Server2000,前端采用JBuilder2006。开发人员1名(假设月薪1500),开发本软件如果是网络开发的技术人员最多1个月,开发费用合计大概是10000元左右,且计算机和软件可重复使用。选择自行开发系统,既节省了费用,又可以使本软件符合我们自己的要求并拥有及源码,使以后系统的可扩展性也很大。
2.2.2 技术可行性
由于该系统是小型的离散数学题库管理系统,采用C/S模式,开发难度适中。通过对各种开发工具和数据库之间进行比较以及指导老师的建议,最终确定采用JAVA(Jbuilder2006)。数据库方面则选用了SQL Server2000进行设计。
C/S是指:客户/服务器。其主要由客户机、服务器、网络三要素主成。用户在个人机(客户机)上工作,可以与中心计算机(服务器)互相通信。网络软件则保证客户机和服务器互相连通。C/S结构的最大优点是具有强大的使用和处理数据的能力,它将数据处理任务分开在客户端和数据库服务器上进行,有利于充分利用网络的计算资源,该操作还大大减少了网络的传输量,从客户发往数据库服务器的只是查询请求,从数据库传回的只是查询的结果。以简单的两层客户机/服务器系统而言,客户端是指应用软件以图形接口显示数据并让用户进行添加、修改等并行输入输出作业的部分,也就是用户接口负责向后端的数据库索取数据,执行客户端软件的工作。服务器所执行的后端数据库服务器,则专门执行数据的存储、检索、管理、备份等种种关键操作。C/S体系结构图如图2.1。
图2.1 C/S体系结构图
数据库的设计是以关系型数据库理论作为指导,将数据库建立在服务器上,应用程序则运行在客户机/服务器体系结构中的客户机上。
关于JAVA生成WORD文件的技术,虽然Sun公司的JDK开发包中本身没有提供该功能,但是可以利用JACOB开源类库实现。JACOB是一个JAVA到微软的COM接口的桥梁。使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象。可以利用它对MS Word、Excel进行处理,目前最新公开版本是1.10.1。
以上的这些技术已经较为成熟,并且在诸多的领域中得到了有效的验证。有了这样的技术支持,也为离散数学题库管理系统开发的最终成功奠定了坚实的基础。
2.3 开发工具的论述
本软件为离散数学题库管理系统,是C/S模式的信息管理系统。前台采用JAVA技术, 后台采用SQL Server 2000数据库, 操作系统采用Windows XP。
2.3.1 前台开发工具
Java是一个由Sun公司开发而成的新一代编程语言。使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。不论你使用的是哪一种WWW浏览器,哪一种计算机,哪一种操作系统,只要WWW浏览器上面注明了“支持Java”,你就可以看到生动的主页。Java正在逐步成为Internet应用的主要开发语言。它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。
JBuilder2006企业版是Borland公司最新推出的JAVA集成开发环境。通过可视化的开发工具,使得EJB,Web Service, XML和数据库应用程序的开发更加简单,方便,大大提高了开发人员的效率。比以前更快地在支持J2EE,Web Applications, EJB的单元测试工具的支持下,使用灵活的开发方法开发软件。使用改进的编辑器增加了产生力和代码可靠性,还有Hot Swap调试和改善的性能。
2.3.2 后台数据库
SQL Server 2000数据库逐渐成为Windows操作系统平台下进行数据库应用开发中较为理想的选择之一。SQL Server 2000数据库管理系统是目前最常用的关系型数据库系统之一,它是基于客户机/服务器模式下的数据库,扮演着后端数据库的角色,它对中等规模的数据库支持较好且具有强大的功能和稳定性及易于维护等优点。它具有真正的客户机/服务器体系结构,能与WINDOWS 2000 操作系统有机的结合,在目前的数据库开发中被广泛的应用。
第3章 系统结构特性设计
本章主要介绍离散数学题库管理软件中后台数据库的结构设计。数据库结构设计是继需求分析和确定开发工具后的重要阶段,是管理型软件开发设计的核心和重要组成部分。数据库结构设计的好坏与否将对应用系统的运行效率以及实现的效果产生很大影响。科学、合理的数据库结构设计可以提高数据访问的速度,有效保持数据的完整性、一致性和共享性,因此数据库结构设计对系统设计来说至关重要。
3.1 数据库概念模型
根据系统的设计要求,设计了E-R图,实体为教师、课程、题库和试卷,关系为试卷抽题表。
图3.1 教师实体及其属性图
教师实体包含了教师编号、密码、教师姓名、住址、电话、手机、EMAIL、学历、职称和备注等属性。
图3.2 课程实体及其属性图
课程实体包含了课程编号、课程名、任课教师和备注等属性。
图3.3题库实体及其属性图
题库实体包含了题号、课程编号、所属章节、试题内容、正确答案、分值、题型、难度系数、录入日期和备注等属性。
图3.4 试卷实体及其属性图
试卷实体包含了试卷编号、试卷名称、课程编号、考试类型、出题教师号、试卷总分、组卷时间、和备注等属性。
图3.5 试卷抽题表关系及其属性图
试卷抽题表关系包含了试卷编号、题目编号和备注属性。
图3.6 总体E-R图
3.2 数据库逻辑设计
在管理系统中,后台数据存储的地位相当重要合理的设计能缩减软件开发的周期和降低开发难度,并提高维护升级的可行性。而建立数据库最重要的一步是定义数据库表,数据是数据库中存储的基本对象,通过设计会以一定的组织结构存储在相关的基本表中。将基本信息分类、统计,根据数据库设计的基本原理,建立基本表构成数据库。在进行数据库的需求分析时,不但要考虑到软件系统当前要实现的功能,更要注重软件的可维护性和扩展性。
首先将离散数学题库管理系统的数据库概念结构转化为SQL Server2000数据库系统所支持的实际数据模型,即:数据库的逻辑结构。创建离散数学题库管理系统中的各个数据库表。
字段名 | 字段类型 | 字段长度 | 说明 |
教师编号 | VARCHAR | 20 | 关键字,如:001 |
密码 | VARCHAR | 10 | 密码 |
教师姓名 | VARCHAR | 20 | 教师姓名 |
住址 | VARCHAR | 200 | 可以输入英文字符200,但是汉字只能输入100个 |
电话 | VARCHAR | 15 | 电话 |
手机 | VARCHAR | 15 | 手机 |
| VARCHAR | 40 | |
学历 | VARCHAR | 10 | 学历 |
职称 | VARCHAR | 10 | 职称 |
备注 | TEXT | 16 | 备注 |
表3.1 教师数据库表
教师数据库表:用来记录教师的基本信息。该表的关键字字段是:教师编号。教师编号字段同时也是下面课程数据库表和试卷表的外键。
字段名 | 字段类型 | 字段长度 | 说明 |
课程编号 | INT | 4 | 关键字 |
课程名 | VARCHAR | 30 | 如:离散数学 |
任课教师 | VARCHAR | 20 | 外键,对应教师表的教师编号字段 |
备注 | TEXT | 16 | 备注 |
表3.2 课程数据库表
课程数据库表:用来记录课程的基本信息,可用于存储多个课程,用于系统的扩展。该表的关键字字段是:课程编号,同时也是下面题库数据库表和试卷数据库表的外键。该表中的任课教师字段是外键,对应教师表的教师编号字段,表示该课程的任课教师。
字段名 | 字段类型 | 字段长度 | 说明 |
题号 | INT | 4 | 关键字 |
课程编号 | INT | 4 | 外键,对应课程表的课程编号字段 |
所属章节 | VARCHAR | 100 | 此题所属课程的章节,比如第二章第三节,就是“2-3” |
试题内容 | TEXT | 16 | 包括试题内容和四个选项内容 |
正确答案 | TEXT | 16 | 正确答案 |
分值 | INT | 4 | 题目的分数 |
题型 | VARCHAR | 200 | 选择题、填空题、简答题、计算题、证明题、其它 |
难度系数 | DECIMAL | 5 | 以往考试中该题答错人数 除以 总人数 得到的值,初次设置时根据教师的经验手动设置 |
录入日期 | DATETIME | 8 | 录入日期 |
备注 | TEXT | 16 | 备注 |
表3.3 题库数据库表
题库数据库表:用来记录各门课程所对应的试题,是生成试卷提供试题来源。该表的关键字字段是:题号,用来唯一表示一道题目。该表中的课程编号是外键,对应课程数据库表的课程编号,表示该题目对应的是哪门课程。
字段名 | 字段类型 | 字段长度 | 说明 |
试卷编号 | INT | 4 | 主键 |
试卷名称 | VARCHAR | 200 | 试卷名称 |
课程编号 | INT | 4 | 外键,对应课程表的课程编号字段 |
考试类型 | VARCHAR | 20 | 单元测试、期中考试、期末考试以及补考等类型 |
出题教师号 | VARCHAR | 200 | 一人或多人 出题人默认为当前生成试卷的操作员的号。多人情况时,教师的编号如:1,2,3 表示 由1号和2号和3号老师同时出题 |
试卷总分 | INT | 4 | 用户设定的试卷总分 |
组卷时间 | DATETIME | 8 | 组卷时间 |
备注 | TEXT | 16 | 备注 |
表3.4 试卷数据库表
试卷数据库表:记录了试卷的基本信息,用于生成试卷的标题。该表的主键字段是:试卷编号。该表中的课程编号是外键,对应课程数据库表的课程编号,表示该试卷对应的是哪门课程。
字段名 | 字段类型 | 字段长度 | 说明 |
试卷编号 | INT | 4 | 主键,同时也是外键,对应试卷表的试卷编号字段。 |
题目编号 | INT | 4 | 主键,同时也是外键,对应题库表中的题号字段。 |
备注 | TEXT | 16 | 备注 |
表3.5 试卷抽题表数据库表
试卷抽题表:用来记录每张试卷对应的试题,是生成WORD文件的数据来源。该表的主键字段是:试卷编号和题目编号。这两个字段同时也是外键,分别对应试卷表的试卷编号字段和题库表中的题号字段。
第4章 系统行为特性设计
4.1 软件结构设计
本系统共分3个大功能模块。如图:
图4.1 功能模块图
上图即为总体的功能模块图,它清晰的显示了系统的各个模块的分布。教师登陆模块是用来验证用户是否为系统的合法用户,题库的管理与维护模块完成对题目的录入、删除、修改和查询。生成试卷模块完成根据用户输入的生成试卷要求,自动生成试卷,维护已经生成的试卷和生成WORD试卷和参考答案。
4.2功能子模块设计
下面将详细描述每个子模块的详细设计。
4.2.1 教师登录模块
(1) 界面设计
此界面为教师登录界面,在用户登录时检查用户名和密码是否有填写,如果未填写则提示并返回,检查通过之后把数据提交给服务器,打开数据库检查用户填写的信息是否正确,登录名称、密码是否相符合,若符合管理员登录信息则登录成功,进入主界面。此模块用于验证用户的信息,保证了系统内部资料的安全性。
图4.2 教师登录界面
(2) 模块内主要算法的描述
图4.2 教师登录模块流程图
(3) 该模块的JAVA类设计
实现该模块的JAVA类为:ui.LoginFrame和app.DBAccess类
ui.LoginFrame类:
该类用于显示教师登陆窗口,并且负责判断用户输入的用户名密码是否正确。
主要方法介绍:
okButton_actionPerformed(ActionEvent e):该方法在用户点击确定按钮时被调用,取得界面上输入的用户名和密码,如果用户名或者密码不正确,则提示用户重新输入。若用户为系统合法用户,则允许用户登陆系统,打开系统主界面。
app.DBAccess类:
该类为底层数据库操作类。实现基本的数据库操作,如插入,删除,修改。
主要方法介绍:
getConnection():用于返回一个JDBC数据库连接(Connection)对象。
executeUpdate(Connection conn, String sql):执行insert、delete和update语句。对数据库表进行插入删除和更新。
executeQuery(Connection dbCon, String querySQL ):根据给定的sql语句,进行查询,返回 DefaultTableModel对象。
4.2.2 题库的管理与维护模块
(1) 界面设计
此界面是题库的维护界面,是对试题的基本信息进行录入,删除和更改。
若要添加试题,先点击添加按钮,然后在上面的试题信息部分填入试题的内容,填写好后,点击保存按钮即可将试题保存到数据库。若要修改试题,在下面的表格中选择要修改的试题,修改上面的试题内容,然后点击保存按钮即可将修改后的试题保存到数据库。若要删除试题,在下面的表格中选择要删除的试题,然后点击删除按钮,如果确认删除,系统将会把指定的试题删除。
图4.4 题库的维护界面
(2) 模块内主要算法的描述
图4.5 题库维护模块流程图
(3) 该模块的JAVA类设计
实现该模块的JAVA类为:ui.AddTestDialog类和app.TestLibraryHandler类
ui.AddTestDialog类:
该类负责显示题库维护窗口和响应用户的各种操作。
主要方法介绍:
addjButton2_actionPerformed(ActionEvent e):该方法用于处理添加试题请求。首先将题库记录集(QueryDataSet)移动到最后一行,然后插入一条新记录。
deletejButton2_actionPerformed(ActionEvent e):该方法用于处理删除试题请求。内部实现时首先判断用户是否选中了一条记录,若没有选中则不能删除试题,提示错误消息。然后询问用户是否确认删除,若确认删除则删除选中的试题。
savejButton1_actionPerformed(ActionEvent e):该方法用于处理保存数据请求,当用户修改或者插入了一条数据后,需要点击保存按钮,也就是调用该方法,插入或者修改结果才能插入到数据库中。
app.TestLibraryHandler类:
该类主要用于处理添加试题相关的数据库操作,与界面类一起实现题库的维护和查询功能。
主要方法介绍:
String[] getAllCourseNames():该方法用于返回课程表的所有课程名,这个方法在添加试题和查询试题窗口中被使用。
addCourseNameItems( JComboBox courseNamejdbComboBox1 ):该方法用于给课程名称控件添加课程名称项。在显示添加试题和查询试题窗口时,需要先调用这个方法,将所有的课程名添加到课程名下拉框中。
getCourseIdByName( String courseName ):该方法用于根据课程名取得课程编号,在添加试题到数据库中时被调用。因为用户操作界面上输入的是课程名,而题库数据库表中保存的是课程编号,所以需要调用该方法进行转换。
4.2.3 试题查询模块
(1) 界面设计
此界面是试题的查询界面,该功能允许用户试题的查询条件,进行查询试题操作。该功能可用于手工改动现有试卷模块。
图4.6 试题查询模块界面图
(2) 模块内主要算法的描述
图4.7 试题查询模块流程图
(3) 该模块的JAVA类设计
实现该模块的JAVA类为:ui.QueryTestDialog类
ui.QueryTestDialog类
该类用于实现查询已有题目功能,负责显示查询试卷对话框。
主要方法介绍:
okjButton1_actionPerformed(ActionEvent e):该方法在提交查询按钮被点击时被调用。内部实现时,首先取得所有用户输入的查询条件,生成查询用的SQL语句。然后利用JBuilder自带的DbExpress类库中的QueryDataSet类实现用户的查询操作。
4.2.4 自动生成试卷模块
(1) 界面设计
此界面是自动生成试卷界面。教师在上面输入试卷的基本信息,在下面抽取试题选项中设置试题要抽取的章节,题型,与往年试卷雷同度的最大值,平均难度系数的最大值。
其中雷同度的计算方法为:两张试卷相同的题目的数量*2 / 两张试卷总的题目数。平均难度系数的计算方法为:所有试题的难度系数的和 / 试题的总数。
图4.8 自动生成试卷界面
(2) 模块内主要算法的描述
图4.9 自动生成试卷算法流程图
该模块为系统的核心业务模块,考虑了三年内不能出现重复的题目,与往年试卷的雷同度和试卷的平均难度。首先,统计今年,去年,和前年的试卷中包含的题目题号,这些题目号将不能用于这次的试题抽取(三年内不能出现重复的题目)。然后根据上步的结果、选中的课程名、设置的题型和章节选项执行查询,先按照章节排序,再按照题型排序,查询出的试题可以用于此次试卷的生成。
然后按照设定的试卷总分进行循环,当抽取试题的总分不大于设定的总分,并且仍有题目可抽取时,根据查询结果的数量,生成一个随机数,抽取一道题目加到已抽取试题列表中,将该试题的分数累加到抽取试题的总分上,将该试题从待抽取列表中去掉。这样循环下去,当退出循环的时候,已抽取试题列表中已经包含了一些题目,满足了试卷总分设定要求。
然后按照设定的最大雷同度进行循环,首先将已抽取试题列表中的试题题号与往年试卷中的题号相比较,计算出雷同度,找出往年试卷中雷同度最高的试卷。判断雷同度是否超过设定值,若超过设定值,并且仍有试题可抽取,则去掉一道与雷同度最高试卷中的雷同试题,另外抽取一道与去掉的题目题型相同并且在雷同度最高试卷中没有的题目。这样循环下去,当退出循环的时候,已抽取试题列表中的题目即会满足试卷最大雷同度设定要求,或者由于题库中试题有限,待抽取试题列表已经没有试题了。
然后按照设定的最大平均难度系数进行循环,首先计算已生成试卷的平均难度,若难度超过设定值,并且仍有试题可抽取,则去掉一道难度超过平均值的题目,抽取另一道同类型题目。这样循环下去,当退出循环的时候,已抽取试题列表中的题目即会满足试卷最大平均难度系数设定要求,或者由于题库中试题有限,待抽取试题列表已经没有试题了。
图4.10 找出与往年雷同度最高的试卷的算法流程图
(3) 该模块的JAVA类设计
实现该模块的JAVA类为:ui.GeneratePaperDialog类,app. MsWordHandler类和app. TestPaperHandler类
ui.GeneratePaperDialog类:
该类用于实现自动生成试卷功能,并且负责显示自动生成试卷对话框。
主要方法介绍:
initUnitTree(Connection connection):该方法用于初始化表示章节的树(查询出题库表的所有章节,按照章节顺序显示),在自动生成试卷对话框初始化的时候会调用该方法,将界面中的章节树初始化(填充章节的信息)。
addUnitButton_actionPerformed(ActionEvent e):该方法用于将左侧章节树中选择的章节添加到界面右侧的章节选择列表中。右侧的章节选择列表是指最后生成的试卷涵盖的章节列表。
deleteUnitButton_actionPerformed(ActionEvent e):该方法用于将用户在右侧的章节选择列表中选择的项删除。
genPaperButton_actionPerformed(ActionEvent e):该方法用于根据界面上输入的生成试卷条件和试卷基本信息,自动生成试卷,并且将试题和参考答案输出到WORD文件中。
app. MsWordHandler类:
该类是操作WORD文件的类,包含WORD文件的基本操作方法。
主要方法介绍:
MsWordHandler():构造函数。初始化 WORD应用程序,新建一个WORD文档。
insertParagraph(...):向WORD中添加一个新的段落。该方法有5个参数,分别为aParagraph,表示段落的内容;fontName表示段落的字体;isBold表示是否设定为黑体;isItalic表示是否设定为斜体;fontSize表示字体的大小。
该类还有其他一些方法,比如添加试卷的标题,添加一道大题,添加一道题目等方法,这些方法都通过调用insertParagraph(...)方法实现。在这里就不仔细讲解了。
app. TestPaperHandler类:
该类将已抽取的试题列表生成WORD文档。
主要方法介绍:
genWordPaper(...):根据抽取的试题,生成WORD文件。该方法共有4个参数,selectedTestItems表示已抽取的试题列表;paperTitle表示试卷标题;courseName表示课程名称;testStyle表示测试类型。该方法的具体实现:首先弹出保存文件框,让用户选择保存位置;然后计算出已抽取的试题的总分,用于WORD文件输出;然后利用循环,将选择的题目输出到WORD文件中。
addSpecifiedTestToWord(...):将指定的题型的题目添加到 WORD 文件中。调用MsWordHandler类具体实现。
addSpecifiedAnswerToWord(...):将指定的题型的题目答案添加到 WORD文件中。调用MsWordHandler类具体实现。
4.2.5 手工改动现有试卷模块
(1) 界面设计
此界面是手工改动现有试卷界面,在该界面中可以对试卷的基本信息进行修改,同时也可以打开试题查询界面,将试题手动添加到选中的试卷中。
图4.11 手工改动现有试卷界面
(2)模块内主要算法的描述
图4.12 手工改动现有试卷流程图
(3) 该模块的JAVA类设计
实现该模块的JAVA类为:ui. MaintainPaperDialog类
ui. MaintainPaperDialog类:
该类实现对已生成试卷进行维护的功能,负责显示维护已生成试卷对话框。
主要方法介绍:
deleteButton_actionPerformed(ActionEvent e):该方法用于从试卷中删除一道题,实现对试卷中题目的手工删除。
addButton_actionPerformed(ActionEvent e):该方法用于添加一道题到试卷中,实现对试卷中题目的手工添加。内部实现时首先打开查询试题界面,查询到想要的试题后,点击界面上的“添加该试题”按钮,即可将试题添加到试卷中。
saveButton_actionPerformed(ActionEvent e):该方法用于保存试卷的基本信息。
genWordPaperButton_actionPerformed(ActionEvent e):该方法用于将选中的试卷生成WORD试卷文件。
第5章 系统测试
5.1 系统测试方案
在基本完成了程序的详细设计和编码,剩下的工作就是对软件进行测试。软件测试是发现软件中错误和缺陷的主要手段。在一般情况下,软件测试的过程与整个软件开发过程基本上是平行进行的。软件测试是非常重要的因为测试是为了及时发现应用程序中的错误而执行程序的过程,它的目标是暴露程序中的错误,及时发现问题,提出相应的修改方案,及时解决问题,使系统更加完善。
单元测试也称模块测试或程序测试,单元测试是对每个模块单独进行的,验证模块接口与设计说明书是否一致,对模块的所有主要处理路径进行测试且与预期的结构进行对照,还要对所有错误处理路径进行测试。对源码进行审查,对照设计说明书,表态地检查源程序是否符合功能的逻辑要求,是进行单元测试前的重要工作工。单元测试一般是由程序员完成,也称程序调试。
5.2 测试结果分析与调试
首先,我对这个毕业设计程序的每个模块和方法都进行了单体测试,由于第一次正式的按照软件工程的开发流程开发一套软件程序,在测试时感触颇深。感叹自己编写的程序在测试环节的时候问题出现之多。其中有些问题很棘手,感到很莫名其妙,但后来经过查阅书籍和相关资料,都依依得到了顺利解决,其中大部分感觉莫名其妙的问题的产生是因为自己对相关技术掌握的不够扎实和细致,同时也感叹到编写出一套商用的软件是多么的不容易。在调试和测试的过程中,在老师和同学的帮助下,在查阅了一些书籍后,慢慢学会了JBuilder2006的调试功能,提高了测试的效率。
下面简单的介绍一下,测试过程中都遇到了哪些典型的问题,以及解决的办法。
从数据库中读出数据后,以Object类型返回,直接调用Object.toString()方法输出该对象的字符串表示。该错误在调试的过程中没有发现,但是在真正测试的时候,JAVA的控制台抛出了NullPointerException,后来查找到原因:因为数据库表中某些字段可以为NULL,所以数据库表中相应的字段可以没有数据,所以返回的Object是null,这样在调用Object.toString()的时候,就发生了空指针异常,后来在调用Object.toString()之前,加了if判断,问题得以解决。
在生成试卷的程序里,需要取得数据库表的结构,刚开始编写了一个方法getResultSetMetaData ()返回ResultSetMetaData对象,然后将该参数传递给另外一个方法genPaper(),但在取得字段的名字和类型时,控制台抛出了数据库连接已关闭的异常信息。后来通过查阅资料和书籍,发现在getResultSetMetaData方法里面关闭了数据库连接(Connection),所以出现了该异常,后来将这两个方法合并,问题得到了解决。
在生成试卷的程序里,需要先生成SQL的插入语句,在测试时抛出了SQLException异常,后来我检查了一下插入语句,问题出在插入语句上,生成了下面的形式insert into 试卷(试卷名称,试卷名称,……) values("名称1","期末考试",……)这样的语句,在字段名的位置,第一个字段重复出现,经过认真调试和检查,发现取得字段的语句在循环的外面,所以取得的是第一个字段的名称,将其放到循环的里面问题就解决了。
其次,我对整个程序做了整体测试,经过前一阶段的单体测试,本以为整体测试不会发生什么问题,但结果出乎了我的意料。在整体测试过程中暴露了设计过程中的一些问题,比如预先设计的方法参数不足,导致前端用户界面输入的数据没办法发挥作用。还有发现设计中漏写了一些方法,导致整个系统不能正常运行,后来发现问题一一修正后,系统得以完好运行。
调试和测试阶段是软件工程开发过程中很重要的一个阶段,没有测试就没有可以健壮运行的软件,如果一套软件不能有一定的容错能力,就没有办法正式的投入使用。调试和测试的过程是需要耐心和严谨的,一个小小的误差往往是需要反复测试才能得以改正的。最后经过调试和测试,系统全部功能运行完好,实现了异构数据库间利用XML文件进行数据交互。
通过以上的测试方案和测试方法,对该系统的各个细节的功能进行了详细的测试,得出以下的测试结果。
本系统已基本上实现来题目要求的各项功能。本系统的界面友好,可以很快的掌握操作方法。
系统的优点:
(1) 界面友好,操作简单。接触计算机较少的操作人员也能根据菜单项提示进行操作。
(2) 信息管理详细,提供了强大查询功能。
(3) 业务流程合理安排方便用户使用。
系统基本上达到了设计要求,基本功能已经实现,但系统仍存在不足之处,某些细节和内容上有待改进和加强。
结 论
在这毕业设计的这段时间里,学到了很多书本上没有的东西,锻炼了自己的动手实践能力、查阅资料能力和自学能力,在这次毕业设计之前对于JAVA语言比较陌生,JBuilder2006也只是听说过,具体的内容几乎不懂,通过这次毕业设计我了解了JAVA语言的大体体系,掌握了JBuilder2006开发环境的基本使用方法。但由于时间有限,还有好多东西没有搞懂,这需要我以后在学习中不断的去努力。
刚开始拿到设计题目时感觉很盲目。但在老师的指导下,自己硬着头皮,从一点一滴学起,编写和调试一个个简单的例子程序。按照软件工程的开发流程从需求分析开始,查阅相关资料,对系统进行概要分析、设计,熟悉软件的开发环境、界面,到编码、测试,调试,直至各个功能的最终实现,毕业论文的撰写。为将来的工作打下了坚实基础,让我对实际软件的开发工作有了深刻的认识,也按时顺利地完成毕业设计这个项目。
由于自己经历了软件开发的全过程,所以也体会到了软件开发的创造性和严谨性,在此过程中我受益匪浅。与此同时通过对系统的需求分析和在编码中对错误的处理,培养了自己的自学能力和独立分析、解决问题的能力,这对我以后的学习和生活都有相当大的影响。
毕业设计真的是一件辛苦的事,但在这之中所得到的知识是无穷尽的,所学到的一些方法是书本上没有的,是靠自己一点点总结出来的。但由于自己的能力有限,做出的程序还不够完善。可是在这一段时间内自己从各方面都得到了锻炼和提高。今后我会更加严格的要求自己,找出自己的不足来完善自己。