基于JAVA和MySQL的离散数学题库管理系统

                                      基于JAVA和MySQL的离散数学题库管理系统

摘 要
题库、试卷建设是教学活动的重要组成部分,传统手工编制的试卷经常出现内容雷同、知识点不合理以及笔误、印刷错误等情况。为了实现离散数学题库管理的信息化而开发了离散数学题库管理系统。

该系统采用C/S 模式,前台采用JAVA(JBuilder2006),后台采用SQLServer2000数据库。本文详细论述了系统总体设计思想、数据库设计以及功能模块设计等。应用软件工程中的瀑布开发模型,开发实现了以下功能:题库的管理与维护、自动生成试卷、手工改动生成试卷、生成WORD试卷和答案。

离散数学题库管理系统能够实现离散数学题库管理的信息化,规范化和试卷生成的自动化,并且在操作上实现简单、方便、快捷。

关键词: 离散数学 题库 生成试卷

第1章 系统结构特性设计
本章主要介绍离散数学题库管理软件中后台数据库的结构设计。数据库结构设计是继需求分析和确定开发工具后的重要阶段,是管理型软件开发设计的核心和重要组成部分。数据库结构设计的好坏与否将对应用系统的运行效率以及实现的效果产生很大影响。科学、合理的数据库结构设计可以提高数据访问的速度,有效保持数据的完整性、一致性和共享性,因此数据库结构设计对系统设计来说至关重要。

1.1 数据库概念模型
根据系统的设计要求,设计了E-R图,实体为教师、课程、题库和试卷,关系为试卷抽题表。

教师实体包含了教师编号、密码、教师姓名、住址、电话、手机、EMAIL、学历、职称和备注等属性。

课程实体包含了课程编号、课程名、任课教师和备注等属性。

题库实体包含了题号、课程编号、所属章节、试题内容、正确答案、分值、题型、难度系数、录入日期和备注等属性。

试卷实体包含了试卷编号、试卷名称、课程编号、考试类型、出题教师号、试卷总分、组卷时间、和备注等属性。

试卷抽题表关系包含了试卷编号、题目编号和备注属性。

1.2 数据库逻辑设计
在管理系统中,后台数据存储的地位相当重要合理的设计能缩减软件开发的周期和降低开发难度,并提高维护升级的可行性。而建立数据库最重要的一步是定义数据库表,数据是数据库中存储的基本对象,通过设计会以一定的组织结构存储在相关的基本表中。将基本信息分类、统计,根据数据库设计的基本原理,建立基本表构成数据库。在进行数据库的需求分析时,不但要考虑到软件系统当前要实现的功能,更要注重软件的可维护性和扩展性。

首先将离散数学题库管理系统的数据库概念结构转化为SQL Server数据库系统所支持的实际数据模型,即:数据库的逻辑结构。创建离散数学题库管理系统中的各个数据库表。

教师数据库表:用来记录教师的基本信息。该表的关键字字段是:教师编号。教师编号字段同时也是下面课程数据库表和试卷表的外键。

字段名 字段类型 字段长度 说明
教师编号 VARCHAR 20 关键字,如:001
密码 VARCHAR 10 密码
教师姓名 VARCHAR 20 教师姓名
住址 VARCHAR 200 可以输入英文字符200,但是汉字只能输入100个
电话 VARCHAR 15 电话
手机 VARCHAR 15 手机
EMAIL VARCHAR 40 EMAIL
学历 VARCHAR 10 学历
职称 VARCHAR 10 职称
备注 TEXT 16 备注
课程数据库表:用来记录课程的基本信息,可用于存储多个课程,用于系统的扩展。该表的关键字字段是:课程编号,同时也是下面题库数据库表和试卷数据库表的外键。该表中的任课教师字段是外键,对应教师表的教师编号字段,表示该课程的任课教师。

字段名 字段类型 字段长度 说明
课程编号 INT 4 关键字
课程名 VARCHAR 30 如:离散数学
任课教师 VARCHAR 20 外键,对应教师表的教师编号字段
备注 TEXT 16 备注
题库数据库表:用来记录各门课程所对应的试题,是生成试卷提供试题来源。该表的关键字字段是:题号,用来唯一表示一道题目。该表中的课程编号是外键,对应课程数据库表的课程编号,表示该题目对应的是哪门课程。

字段名 字段类型 字段长度 说明
题号 INT 4 关键字
课程编号 INT 4 外键,对应课程表的课程编号字段
所属章节 VARCHAR 100 此题所属课程的章节,比如第二章第三节,就是“2-3”
试题内容 TEXT 16 包括试题内容和四个选项内容
正确答案 TEXT 16 正确答案
分值 INT 4 题目的分数
题型 VARCHAR 200 选择题、填空题、简答题、计算题、证明题、其它
难度系数 DECIMAL 5 以往考试中该题答错人数 除以 总人数 得到的值,初次设置时根据教师的经验手动设置
录入日期 DATETIME 8 录入日期
备注 TEXT 16 备注
试卷数据库表:记录了试卷的基本信息,用于生成试卷的标题。该表的主键字段是:试卷编号。该表中的课程编号是外键,对应课程数据库表的课程编号,表示该试卷对应的是哪门课程。

字段名 字段类型 字段长度 说明
试卷编号 INT 4 主键
试卷名称 VARCHAR 200 试卷名称
课程编号 INT 4 外键,对应课程表的课程编号字段
考试类型 VARCHAR 20 单元测试、期中考试、期末考试以及补考等类型
出题教师号 VARCHAR 200 一人或多人 出题人默认为当前生成试卷的操作员的号。多人情况时,教师的编号如:1,2,3 表示 由1号和2号和3号老师同时出题
试卷总分 INT 4 用户设定的试卷总分
组卷时间 DATETIME 8 组卷时间
备注 TEXT 16 备注
试卷抽题表:用来记录每张试卷对应的试题,是生成WORD文件的数据来源。该表的主键字段是:试卷编号和题目编号。这两个字段同时也是外键,分别对应试卷表的试卷编号字段和题库表中的题号字段。

字段名 字段类型 字段长度 说明
试卷编号 INT 4 主键,同时也是外键,对应试卷表的试卷编号字段。
题目编号 INT 4 主键,同时也是外键,对应题库表中的题号字段。
备注 TEXT 16 备注
第2章 系统行为特性设计
2.1 软件结构设计
本系统共分3个大功能模块。如图:

上图即为总体的功能模块图,它清晰的显示了系统的各个模块的分布。教师登陆模块是用来验证用户是否为系统的合法用户,题库的管理与维护模块完成对题目的录入、删除、修改和查询。生成试卷模块完成根据用户输入的生成试卷要求,自动生成试卷,维护已经生成的试卷和生成WORD试卷和参考答案。

2.2 功能子模块设计
下面将详细描述每个子模块的详细设计。

2.2.1 教师登录模块
2.2.1.1 界面设计
此界面为教师登录界面,在用户登录时检查用户名和密码是否有填写,如果未填写则提示并返回,检查通过之后把数据提交给服务器,打开数据库检查用户填写的信息是否正确,登录名称、密码是否相符合,若符合管理员登录信息则登录成功,进入主界面。此模块用于验证用户的信息,保证了系统内部资料的安全性。

2.2.1.2 模块内主要算法的描述

2.2.1.3 该模块的JAVA类设计
实现该模块的JAVA类为:ui.LoginFrame和app.DBAccess类

ui.LoginFrame类

该类用于显示教师登陆窗口,并且负责判断用户输入的用户名密码是否正确。

主要方法介绍:

okButton_actionPerformed(ActionEvent e):该方法在用户点击确定按钮时被调用,取得界面上输入的用户名和密码,如果用户名或者密码不正确,则提示用户重新输入。若用户为系统合法用户,则允许用户登陆系统,打开系统主界面
app.DBAccess类

该类为底层数据库操作类。实现基本的数据库操作,如插入,删除,修改。

主要方法介绍:

getConnection():用于返回一个JDBC数据库连接(Connection)对象

executeUpdate(Connection conn, Stringsql):执行insert、delete和update语句。对数据库表进行插入删除和更新

executeQuery(Connection dbCon, StringquerySQL ):根据给定的sql语句,进行查询,返回DefaultTableModel对象

2.2.2 题库的管理与维护模块
2.2.2.1 界面设计
此界面是题库的维护界面,是对试题的基本信息进行录入,删除和更改。

若要添加试题,先点击添加按钮,然后在上面的试题信息部分填入试题的内容,填写好后,点击保存按钮即可将试题保存到数据库。若要修改试题,在下面的表格中选择要修改的试题,修改上面的试题内容,然后点击保存按钮即可将修改后的试题保存到数据库。若要删除试题,在下面的表格中选择要删除的试题,然后点击删除按钮,如果确认删除,系统将会把指定的试题删除。

2.2.2.2 模块内主要算法的描述

2.2.2.3 该模块的JAVA类设计
实现该模块的JAVA类为:ui.AddTestDialog类和app.TestLibraryHandler类

ui.AddTestDialog类

该类负责显示题库维护窗口和响应用户的各种操作。

主要方法介绍:

addjButton2_actionPerformed(ActionEvente):该方法用于处理添加试题请求。首先将题库记录集(QueryDataSet)移动到最后一行,然后插入一条新记录

deletejButton2_actionPerformed(ActionEvente):该方法用于处理删除试题请求。内部实现时首先判断用户是否选中了一条记录,若没有选中则不能删除试题,提示错误消息。然后询问用户是否确认删除,若确认删除则删除选中的试题

savejButton1_actionPerformed(ActionEvente):该方法用于处理保存数据请求,当用户修改或者插入了一条数据后,需要点击保存按钮,也就是调用该方法,插入或者修改结果才能插入到数据库中

app.TestLibraryHandler类

该类主要用于处理添加试题相关的数据库操作,与界面类一起实现题库的维护和查询功能。

主要方法介绍:

String[] getAllCourseNames():该方法用于返回课程表的所有课程名,这个方法在添加试题和查询试题窗口中被使用

addCourseNameItems( JComboBoxcourseNamejdbComboBox1 ):该方法用于给课程名称控件添加课程名称项。在显示添加试题和查询试题窗口时,需要先调用这个方法,将所有的课程名添加到课程名下拉框中

getCourseIdByName( String courseName ):该方法用于根据课程名取得课程编号,在添加试题到数据库中时被调用。因为用户操作界面上输入的是课程名,而题库数据库表中保存的是课程编号,所以需要调用该方法进行转换

2.2.3 试题查询模块
2.2.3.1 界面设计
此界面是试题的查询界面,该功能允许用户试题的查询条件,进行查询试题操作。该功能可用于手工改动现有试卷模块。

2.2.3.2 模块内主要算法的描述

2.2.3.3 该模块的JAVA类设计
实现该模块的JAVA类为:ui.QueryTestDialog类

ui.QueryTestDialog类

该类用于实现查询已有题目功能,负责显示查询试卷对话框。

主要方法介绍:

okjButton1_actionPerformed(ActionEvente):该方法在提交查询按钮被点击时被调用。内部实现时,首先取得所有用户输入的查询条件,生成查询用的SQL语句。然后利用JBuilder自带的DbExpress类库中的QueryDataSet类实现用户的查询操作
2.2.4 自动生成试卷模块
2.2.4.1 界面设计
此界面是自动生成试卷界面。教师在上面输入试卷的基本信息,在下面抽取试题选项中设置试题要抽取的章节,题型,与往年试卷雷同度的最大值,平均难度系数的最大值。

其中雷同度的计算方法为:两张试卷相同的题目的数量*2 / 两张试卷总的题目数。平均难度系数的计算方法为:所有试题的难度系数的和 / 试题的总数。

2.2.4.2 模块内主要算法的描述

该模块为系统的核心业务模块,考虑了三年内不能出现重复的题目,与往年试卷的雷同度和试卷的平均难度。首先,统计今年,去年,和前年的试卷中包含的题目题号,这些题目号将不能用于这次的试题抽取(三年内不能出现重复的题目)。然后根据上步的结果、选中的课程名、设置的题型和章节选项执行查询,先按照章节排序,再按照题型排序,查询出的试题可以用于此次试卷的生成。

然后按照设定的试卷总分进行循环,当抽取试题的总分不大于设定的总分,并且仍有题目可抽取时,根据查询结果的数量,生成一个随机数,抽取一道题目加到已抽取试题列表中,将该试题的分数累加到抽取试题的总分上,将该试题从待抽取列表中去掉。这样循环下去,当退出循环的时候,已抽取试题列表中已经包含了一些题目,满足了试卷总分设定要求。

然后按照设定的最大雷同度进行循环,首先将已抽取试题列表中的试题题号与往年试卷中的题号相比较,计算出雷同度,找出往年试卷中雷同度最高的试卷。判断雷同度是否超过设定值,若超过设定值,并且仍有试题可抽取,则去掉一道与雷同度最高试卷中的雷同试题,另外抽取一道与去掉的题目题型相同并且在雷同度最高试卷中没有的题目。这样循环下去,当退出循环的时候,已抽取试题列表中的题目即会满足试卷最大雷同度设定要求,或者由于题库中试题有限,待抽取试题列表已经没有试题了。

然后按照设定的最大平均难度系数进行循环,首先计算已生成试卷的平均难度,若难度超过设定值,并且仍有试题可抽取,则去掉一道难度超过平均值的题目,抽取另一道同类型题目。这样循环下去,当退出循环的时候,已抽取试题列表中的题目即会满足试卷最大平均难度系数设定要求,或者由于题库中试题有限,待抽取试题列表已经没有试题了。

2.2.4.3 该模块的JAVA类设计
实现该模块的JAVA类为:ui.GeneratePaperDialog类,app. MsWordHandler类和app. TestPaperHandler类

ui.GeneratePaperDialog类

该类用于实现自动生成试卷功能,并且负责显示自动生成试卷对话框。

主要方法介绍:

initUnitTree(Connection connection):该方法用于初始化表示章节的树(查询出题库表的所有章节,按照章节顺序显示),在自动生成试卷对话框初始化的时候会调用该方法,将界面中的章节树初始化(填充章节的信息)

addUnitButton_actionPerformed(ActionEvente):该方法用于将左侧章节树中选择的章节添加到界面右侧的章节选择列表中。右侧的章节选择列表是指最后生成的试卷涵盖的章节列表

deleteUnitButton_actionPerformed(ActionEvente):该方法用于将用户在右侧的章节选择列表中选择的项删除

genPaperButton_actionPerformed(ActionEvente):该方法用于根据界面上输入的生成试卷条件和试卷基本信息,自动生成试卷,并且将试题和参考答案输出到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类具体实现

2.2.5 手工改动现有试卷模块
2.2.5.1 界面设计
此界面是手工改动现有试卷界面,在该界面中可以对试卷的基本信息进行修改,同时也可以打开试题查询界面,将试题手动添加到选中的试卷中。

2.2.5.2 模块内主要算法的描述

2.2.5.3 该模块的JAVA类设计
实现该模块的JAVA类为:ui. MaintainPaperDialog类

ui. MaintainPaperDialog类

该类实现对已生成试卷进行维护的功能,负责显示维护已生成试卷对话框。

主要方法介绍:

deleteButton_actionPerformed(ActionEvente):该方法用于从试卷中删除一道题,实现对试卷中题目的手工删除

addButton_actionPerformed(ActionEvente):该方法用于添加一道题到试卷中,实现对试卷中题目的手工添加。内部实现时首先打开查询试题界面,查询到想要的试题后,点击界面上的“添加该试题”按钮,即可将试题添加到试卷中

saveButton_actionPerformed(ActionEvente):该方法用于保存试卷的基本信息

genWordPaperButton_actionPerformed(ActionEvente):该方法用于将选中的试卷生成WORD试卷文件

参考文献
[1] Satyaraj Pantham,黄晓鸣,武清译. 深入学习:JFC Swing—Java基础类组件[M]. 北京:电子工业出版社

[2] 萨师煊,王珊 . 数据库系统概论(第三版)[M]. 北京:高等教育出版社

[3] 张洪斌. Java程序设计百事通[M]. 北京:清华大学出版社

[4] 飞思科技产品研发中心. 精通JBuilder 9 [M]. 北京:电子工业出版社

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值