。该表中的课程编号是外键,对应课程数据库表的课程编号,表示该试卷对应的是哪门课程。
字段名
字段类型
字段长度
说明
试卷编号
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(ActionEvente):该方法在用户点击确定按钮时被调用,取得界面上输入的用户名和密码,如果用户名或者密码不正确,则提示用户重新输入。若用户为系统合法用户,则允许用户登陆系统,打开系统主界面。
app.DBAccess类:
该类为底层数据库操作类。实现基本的数据库操作,如插入,删除,修改。
主要方法介绍:
getConnection():用于返回一个JDBC数据库连接(Connection)对象。
executeUpdate(Connectionconn,Stringsql):执行insert、delete和update语句。对数据库表进行插入删除和更新。
executeQuery(ConnectiondbCon,StringquerySQL):根据给定的sql语句,进行查询,返回DefaultTableModel对象。
4.2.2题库的管理与维护模块
(1)界面设计
此界面是题库的维护界面,是对试题的基本信息进行录入,删除和更改。
若要添加试题,先点击添加按钮,然后在上面的试题信息部分填入试题的内容,填写好后,点击保存按钮即可将试题保存到数据库。若要修改试题,在下面的表格中选择要修改的试题,修改上面的试题内容,然后点击保存按钮即可将修改后的试题保存到数据库。若要删除试题,在下面的表格中选择要删除的试题,然后点击删除按钮,如果确认删除,系统将会把指定的试题删除。
图4.4题库的维护界面
(2)模块内主要算法的描述
图4.5题库维护模块流程图
(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(StringcourseName):该方法用于根据课程名取得课程编号,在添加试题到数据库中时被调用。因为用户操作界面上输入的是课程名,而题库数据库表中保存的是课程编号,所以需要调用该方法进行转换。
4.2.3试题查询模块
(1)界面设计
此界面是试题的查询界面,该功能允许用户试题的查询条件,进行查询试题操作。该功能可用于手工改动现有试卷模块。
图4.6试题查询模块界面图
(2)模块内主要算法的描述
图4.7试题查询模块流程图
(3)该模块的JAVA类设计
实现该模块的JAVA类为:ui.QueryTestDialog类
ui.QueryTestDialog类
该类用于实现查询已有题目功能,负责显示查询试卷对话框。
主要方法介绍:
okjButton1_actionPerformed(ActionEvente):该方法在提交查询按钮被点击时被调用。内部实现时,首先取得所有用户输入的查询条件,生成查询用的SQL语句。然后利用JBuilder自带的DbExpress类库中的QueryDataSet类实现用户的查询操作。
4.2.4自动生成试卷模块
(1)界面设计
此界面是自动生成试卷界面。教师在上面输入试卷的基本信息,在下面抽取试题选项中设置试题要抽取的章节,题型,与往年试卷雷同度的最大值,平均难度系数的最大值。
其中雷同度的计算方法为:两张试卷相同的题目的数量*2/两张试卷总的题目数。平均难度系数的计算方法为:所有试题的难度系数的和/试题的总数。
图4.8自动生成试卷界面
(2)模块内主要算法的描述
图4.9自动生成试卷算法流程图
该模块为系统的核心业务模块,考虑了三年内不能出现重复的题目,与往年试卷的雷同度和试卷的平均难度。首先,统计今年,去年,和前年的试卷中包含的题目题号,这些题目号将不能用于这次的试题抽取(三年内不能出现重复的题目)。然后根据上步的结果、选中的课程名、设置的题型和章节选项执行查询,先按照章节排序,再按照题型排序,查询出的试题可以用于此次试卷的生成。
然后按照设定的试卷总分进行循环,当抽取试题的总分不大于设定的总分,并且仍有题目可抽取时,根据查询结果的数量,生成一个随机数,抽取一道题目加到已抽取试题列表中,将该试题的分数累加到抽取试题的总分上,将该试题从待抽取列表中去掉。这样循环下去,当退出循环的时候,已抽取试题列表中已经包含了一些题目,满足了试卷总分设定要求。
然后按照设定的最大雷同度进行循环,首先将已抽取试题列表中的试题题号与往年试卷中的题号相比较,计算出雷同度,找出往年试卷中雷同度最高的试卷。判断雷同度是否超过设定值,若超过设定值,并且仍有试题可抽取,则去掉一道与雷同度最高试卷中的雷同试题,另外抽取一道与去掉的题目题型相同并且在雷同度最高试卷中没有的题目。这样循环下去,当退出循环的时候,已抽取试题列表中的题
上一篇:
JAVA+access做的毕业设计综合测评系统(论文和程序)
下一篇:
智能手机操作系统与刷机论文