基于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]. 北京:电子工业出版社

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

  1. java 不能同时修改一条记录_【免费毕设】JAVA+SQL离散数学题库管理系统(源代码+论文+外文翻译)...

    点击上方"蓝字"关注我们目录 系统设计 本章主要介绍离散数学题库管理软件中后台数据库的结构设计.数据库结构设计是继需求分析和确定开发工具后的重要阶段,是管理型软件开发设计的核心和重 ...

  2. 基于Java与MySQL开发的在线考试系统

    1 概述 1.1 简介 在Exam++考试系统第一版的基础上,我们对ExamStack V2.0进行了大量代码重构,同时也对数据模型做了部分调整.为了减小学员考试交卷时大量并发带来的系统风险,我们尝试 ...

  3. 基于java+jsp+mysql教师教学质量测评系统

    介绍: JSP:Mysql教师教学质量测评系统论文 要求系统能够实现以下功能: (1)要求学生能够对教师进行教学质量评估 (2)要求教师能够查看评教 (3)要求管理员能够对学生.教师信息进行插入,删除 ...

  4. 基于JAVA+SSH+MYSQL的社区医院远程挂号系统

    项目功能: 普通用户: 用户登录 用户信息管路 挂号系统管理 挂号报表统计 注销登录 系统管理员: 用户登录 用户信息管路 挂号系统管理 挂号报表统计 注销登录 页面效果:

  5. 基于JAVA+SpringMVC+MYSQL的自动排课系统

    项目功能: 专业信息管理 班级信息管理 教师信息管理 课程信息管理 教师信息管理 排课管理 用户信息管理 本系统分为三个角色:管理员.老师和学生 系统访问地址:http://localhost:808 ...

  6. 基于JAVA+SpringMVC+MYSQL的火车票订票系统

    项目功能: 客户端实现:客户端注册与登录,客户端浏览与添加购物车,客户端购买结账 管理端实现:管理端菜单管理,管理端用户管理,管理端订票信息管理,管理端安排车次 页面效果:

  7. 基于JAVA+SpringMVC+MYSQL的营业厅终端销售系统

    项目功能: 系统包括用户登录注册,首页按分类筛选产品,搜索产品,加入购物车,添加收货地址,提交订单,修改资料,查看我的订单,查看购物车,后台管理员登录,用户管理,产品管理,订单管理,产品类别管理,系统 ...

  8. 基于JAVA+SpringMVC+MYSQL的网上人才招聘系统

    项目功能: 系统包括模特会员登录注册,企业会员登录注册,首页查看招聘列表,申请职位,企业账号登录后修改企业资料,发布招聘信息,查看用户投递的简历,后台管理员登录,新闻资讯管理,模特会员管理,企业会员管 ...

  9. 基于JAVA+SpringMVC+MYSQL的在线课程学习系统

    项目功能: 系统分为学生和老师两种角色,学生端:登录注册,查看课程列表,根据课程编号选课,查询成绩成绩,查看学分.老师端:登录注册,开设课程,登记学生成绩等功能 页面效果:

  10. 基于JAVA+SpringMVC+MYSQL的城市公交查询系统

    项目功能: 系统包括登录模块.菜单管理.用户管理.公告管理.线路维护.会员提问等功能 页面效果:

最新文章

  1. 堆(heap)与栈(stack)的区别(一)
  2. 介绍下重绘和回流(Repaint Reflow),以及如何进行优化
  3. linux可以ping通,Linux可以Ping通但不能traceroute
  4. 怎么看python环境变量配置是否好了验证图片_python 的 tesserocr 模块安装与获取图片验证码...
  5. “我们的边缘计算技术点,可能超前了业界一点”
  6. 雷军喜提第四家上市公司;梨视频 App 被全网下架;Flutter 1.17 稳定版发布 | 极客头条...
  7. 开启html元素的编辑模式contenteditable=true
  8. Warning: Binary output can mess up your terminal. Use “--output -“ to tell
  9. 如何用计算机ip连接打印机共享,ip共享打印机怎么设置
  10. 中国企业管理水平啥时候才能成熟啊
  11. HTML5/CSS3 炫酷键盘 不规则布局 内含知识点总结
  12. 什么是虚拟机?虚拟机有那几种
  13. ChatGPT ,能替代程序员吗?
  14. SQLyog的安装及使用
  15. 用opencv和vc++6.0开发的五子棋游戏软件
  16. Unix网卡重启命令
  17. Java Maven项目文件红叉叉(The compiler compliance specified is 1.6 but a JRE 1.8 is used) java编译报错
  18. 有一个强大又好看的,赛过Typora,阿里开发的语雀编辑器
  19. 前端之JS篇(四)——三种循环(forwhiledo...while)
  20. Python基于OpenCV的人脸识别自助商店(源码&部署视频)

热门文章

  1. 【系统分析师之路】原创章节 非功能需求设计思维导图
  2. arcgis中python计算面积的表达式_Python计算任意多边形面积算法
  3. 根据stc89原理图画pcb_STC89C51单片机对AD模数转换学习板的控制原理解析
  4. 从苏宁电器到卡巴斯基(后传)第04篇:还愿吾爱破解视频教程大赛
  5. Android对话框处理
  6. 空域、频域、时域的解释
  7. 丝杠螺母传动机构设计
  8. 抄书——最优化的理论与方法(5)——数学基础(凸集和凸函数)
  9. 【计算机网络实验】使用Packet Tracer搭建网络拓扑
  10. 长文!机器学习笔试精选 100 题【附详细解析】