试题管理系统Word格式.docx
《试题管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《试题管理系统Word格式.docx(44页珍藏版)》请在冰豆网上搜索。
本模块的主要功能是按照用户设置的查询条件对试题进行快速查询。
用户可以根据章节号、题型、难度、试题编号等信息来查询试题的内容及答案等信息。
2)试卷管理
该模块可根据要求实现试卷的自动/人工出卷,自动生成的试卷试题由系统随机抽取,由于题库中的试题按照试题的类型分类,故随机抽出的试题难易适中,既可满足一般考试的要求又避免了人为因素,增强了试卷的可信度,尽管自动生成试卷符合规范化考试的要求,但为了满足不同用户的特殊需要,特设置了手工出卷的操作,这样就增加了系统的通用性与灵活性。
此外,该模块还可根据用户的要求生成关于相应试卷的文档。
3)系统管理
可增加删除系统操作人员,并设定操作人员的权限。
通过对用户进行权限管理范围设定,减轻操作内容,也可对单个用户权限及范围进行修订,从而保证系统在实施中的灵活性。
同时用户也对密码进行修改,保证安全性。
2.2各子系统的数据流程图
2.2.1系统管理子系统
流程图:
图2-1系统管理子系统的数据流程图
2.2.2题库管理子系统
图2-2题库管理子系统的数据流程图
2.2.3试卷管理子模块
图2-3试卷管理子模块的数据流程图
总系统的流程图如下:
图2-4总流程图
2.3数据字典
数据字典是关于数据的数据表和视图,系统管理员可以通过数据字典获取全面的数据库信息,根据上述分析,本系统的数据字典设计如下:
(1)系统用户管理数据:
管理数据包括用户名、密码、权限和数据库处理,其中用户名分为系统管理员和用户,登录系统后按各自的权限不同有不同的管理部分。
(2)题库表数据:
此数据表只能系统管理员使用,实现题库的编辑(录入,添加爱和修改)和查询。
(3)试卷信息表数据:
此数据可供系统管理员和用户,实现试卷的相关信息的查询。
第三章概要设计和逻辑设计
3.1概要设计
根据需求分析和数据流图的结果:
由于各个表之间是否具有索引关系,因此得到各E-R图以及关系模型:
图3-1用户的E-R图
图3-2题库的E-R图
图3-3试卷信息的E-R图
图3-4系统总的E-R图
3.2逻辑设计
根据总E-R图中的实体与实体之间的联系以及转换的一般原则,得到如下的关系模型:
1.用户表(用户名,用户密码,用户身份)
2.题库表(试题编号,试题章节,试题难度,试题类型,试题内容,试题答案,试题分值)
3.试卷信息表(试卷编号,信息表号,试题编号,试题难度,试题分值,试题类型,试题内容,试题答案)
函数依赖关系分别为:
1.
图3-5用户表的依赖关系
从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有用户名能够确定其它各项。
所以该关系是BCNF范式。
2.
图3-6题库表的依赖关系
从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有试题编号能够确定其它各项。
3.
图3-7试卷信息表的依赖关系
从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有试卷编号和信息表号能够确定其它各项。
第四章数据库设计
数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。
对数据库的一切操作,包括定义、更新及各种控制,都是通过DBMS进行的。
根据数据模型的不同,DBMS可以分成层次型、网状型、关系型等。
MSSQLserver就是一种关系型数据库管理系统。
根据概要设计和逻辑设计,数据库原理试卷库生成系统后台数据库有3张表组成,分别为用户表,题库表,试卷信息表。
4.1用户表的设计
用户表主要包含系统用户的基本信息:
用户名、用户密码、用户身份。
用户身份有两种,分别为系统管理员和用户。
由于不同的用户身份权限不一样。
如系统管理员可以进入系统管理、题库管理、试卷管理和辅助功能,但用户只能进入系统管理的修改密码,试卷管理和辅助功能。
考虑到char和varchar的类型的不同。
Varchar的字节数可变,而且char的字节数固定,如果输入的字符少于规定的字节数,会自动填充。
因此,选择了varchar类型,这样比较容易判断用户名和密码是否正确。
表4-1用户表
列名
数据类型
允许为空
主键
用户名
Varchar(50)
no
yes
用户密码
Varchar(50)
no
用户身份
4.2题库表的设计
题库表主要包含了题目的各项信息,如试题编号,试题难度,章节,类型,试题内容以及答案。
考虑到在自动出卷的时候,要根据试题难度进行选题,所以试题难度的数据类型为varchar。
试题内容和试题答案都可以插入图片,因此数据类型为image。
试题编号设置为自动编号。
试题类型主要为五种,分别为选择题、填空题、简答题、设计题和综合题。
试题难度分为难、中、易。
试题分值一般规定为选择题和填空题为3分,后面类型的题目由系统管理员自行定义。
表4-2题库表的设计
可否为空
试题编号
int(4)
No
试题章节
char(20)
试题难度
试题分值
试题类型
char(10)
试题内容
Image(16)
试题答案
4.3试卷信息表的设计
试卷信息表主要是用来储存一张试卷的题目以及题目的各项信息。
它包含了试卷编号,信息表号,试题编号,试题章节,试题分值,试题章节等各项属性。
且信息表号是采用自动编号。
表4-3试卷信息表
试卷编号
信息表号
第五章系统的详细设计和实现
该系统设计主要包括五大模块,分别为登录模块、主界面模块、系统管理模块、题库管理模块、试卷管理模块。
在与各种数据库建立连接的时候,用到了adotable,adoquery,datasource以及adoconnection。
同时也用到了datamodule。
Tadoconnection是用来建立与数据库之间连接的组件,各种dbGo的数据集及操作组件可以共用该连接来执行命令,读取数据,并执行相应的操作。
Tadoquery组件通过使用常用的SQL语句来读取数据,完成相应的操作,它还可以使用DDLSQL语句。
CREATETABLE。
Tadotable组件主要用来从单个数据表格中读取数据。
数据模块通过VCL中的TdataModule类来操纵,是一个专门用来集中统一存放数据集相关控件的容器。
你可以当做是一个窗体,不过是隐藏的不可见的窗体。
便於集中管理和引用数据相关控件。
通过使用ConnectionString属性来设置连接数据库,也可以通过Adoconnection组件进行连接。
图5-1数据库的连接
5.1登录模块的设计
登录模块主要是认证登录人的身份是否合法,登录权限也要进行认证。
当用户名用户密码错误时会进行报错,当用户身份合法后会进行权限检查,根据权限开放或者限制其能使用的功能。
根据登录模块主要功能,可得流程图:
图5-2登录流程图
用户登录窗体设计界面含tlabel和tedit及tbutton,窗体的运行界面。
图5-3用户登录界面
登录的步骤是:
首先输入edit1.text(用户名),然后通过adotable.lookup检索对应用户名的用户密码。
再将检索出的用户密码与输入的用户密码进行比较(edit2.text)。
如果相等,然后再根据用户名检索出该用户的身份,根据用户身份设置用户权限。
如果不相等,则系统显示“密码错误或用户名不正确!
”。
5.2主界面模块的设计
当输入密码验证成功后,就进入系统主程序界面,主程序界面主要实现如下功能:
(1)选择主界面的菜单,调用相应程序,进行相应的系统操作。
(2)显示用户名、权限、登录时间和设计主题。
当系统管理员登录到主界面时,所有的菜单项显示为可用;
以用户身份登录时候,系统管理下的用户管理以及题库管理不可用。
主程序界面如下:
图5-4主界面窗体
5.3系统管理模块的设计
5.3.1修改密码模块的设计
修改密码主要是为了满足用户当觉得自己的密码的保密性不够好,想对其进行修改。
在本次设计要求密码必须大于3个字符。
修改密码的流程图为:
图5-5修改密码的流程图
图5-6修改密码的界面
5.3.2用户管理模块的设计
用户管理模块主要是系统管理员对用户的管理,包括对用户的相关信息的修改,添加用户和删除用户。
一般用户不可用。
相关流程图如下:
图5-7用户添加流程图
N
Y
图5-8用户删除的流程图
图5-9用户管理界面
相关代码:
1.添加和修改:
由于输入的用户名和密码都是用dbedit1.text和dbedit2.text,分别与用户表的用户名和用户密码相连接。
因此添加和修改的相关程序为:
DataModule2.ADOQuery1.Insert;
DataModule2.ADOQuery1.Edit;
然后进行数据录入:
DataModule2.ADOQuery1.FieldByName('
用户身份'
).asstring:
=RadioGroup1.Items.Strings[RadioGroup1.Itemindex];
DataModule2.ADOQuery1.post;
DataModule2.ADOQuery1.Refresh;
2.删除:
用户表的删除:
为了防止意外删除,所以在删除时需要给一个确认提示,来给操作者确定是否真的进行删除。
用户删除的代码:
if(Application.MessageBox('
是否真的要删除?
'
'
提示:
MB_yesno)=idyes)then
begin
DataModule2.ADOQuery1.Delete;
end;
5.4题库管理模块的设计
5.4.1题库编辑界面的设计
题库编辑模块主要是完成题库的添加,修改和删除。
图5-10题库信息的添加和修改
图5-11题库删除的流程图
图5-12题库编辑的界面
由于题目编号是自动编号。
因此,添加试题只需添加试题章节,试题难度,试题分值,试题类型,试题内容以及试题答案。
由于试题内容和答案要求可以载入图片,因此选择用Richedit组件。
在Dephi中提供了一个抽象的数据类型TStream来支持对流式数据的操作。
这些数据通常来自文件、数据库、内存对象、OLE对象等,TStream提供了统一、简洁的方法来进行数据的读写。
在通常情况下,笔者并不需要直接使用TStream类,对流式数据的读写封装在VCL控件的方法中。
因为试题内容和试题答案要求可以携带图片信息。
因此选择使用TStream读写数据。
5.4.2题库查询的设计
题库查询包括精确查询和模糊查询。
它们的区别在于查询条件的约束。
精确查询是必须输入完整的条件,这样才可以准备无误查询到信息。
例如,你想查试题类型为选择题,查询项必须填入选择题。
模糊查询通过Like加上通配符作为查询条件。
本系统的主要是用%。
%表示任意0个或多个字符。
可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
查询的流程图:
图5-13查询的流程图
图5-14精确查找的界面
图5-15模糊查找的界面
1.精确查询:
form6.adoquery1.close;
form6.adoquery1.sql.clear;
form6.adoquery1.sql.add('
select*from题库表where试题编号='
+edit1.text+'
);
form6.adoquery1.open;
2.模糊查询:
select*from题库表where试题章节like'
+'
%'
+edit2.text+'
’’);
5.5试卷管理的模块
试卷管理模块是整个试卷生成系统的核心。
试卷生成主要有两种方式:
手动生成试卷和自动生成试卷。
5.5.1自动出卷模块
自动出卷是通过用户选择的生成试卷的条件,随机地选择试题,自动完成试卷的生成。
自动生成试卷最重要的是要掌握自动出卷的算法。
算法概要:
自动组卷得的过程是根据某些约束条件,在试题库中选择满足约束条件试题的过程。
这些约束条件一般是指题型、难度、分值、考试所需章节等约束。
这些约束条件如果看作是局部约束条件,那么试卷将达到各项指标的均衡,这样就形成了全局的约束条件。
从这个意义上,计算机的自动组卷实际上就是一个约束满足的过程。
在自动出卷过程中,笔者为了排除同一份试卷中出现重复试题。
采取方法是将满足要求试题的试题编号保存到一个数组里面,下次随机抽取的时候,将试题编号与数组里面的进行比较,如果出现重复,重新进行抽题。
如果不同,将该试题编号保存到数组。
如此类推,只到完成抽题。
在该过程,为了防止死循环,笔者设置了循环次数,如果超过该次数,将显示没有满足该要求的试题。
实现自动生成试卷的流程图:
图5-16自动出卷的流程图
自动出题窗体的设计是本次设计的重点。
本次设计运用两个Form,第一个Form是添入你所需的各项试题类型的数目,以及难题和中等题在总题数的比例和试卷编号,通过MEMO显示该试卷的相关分布。
然后进行试卷生成,通过Richedit显示。
进入自动出卷界面如图5-11所示:
图5-17自动出卷界面
点击下一步,即将进入自动出卷的预览区。
预览区通过MainMenuDesigner设置菜单项。
根据用户需求,菜单项有文件(保存、退出),编辑(复制、粘贴、剪切),字体,查看试卷信息表。
当生成试卷后,如果觉得字体或者内容存在问题,笔者可以进行修改。
点击文件中,可以对试卷按照指定的地址以word文档的形式进行保存。
如图5-16所示:
图5-18自动出卷预览
5.5.2手动出卷模块
手动生成试卷让用户首先设定各项试题类型的试题数量,通过浏览题库,自己选择题目,当用户选择的试题重复时(这里主要是通过试题编号来识别),系统要能自动检测出冲突,让用户重新选择。
并在选择的过程中,可以显示试题分值以及总分。
手动生成的流程:
设定所需要选择题、填空题、设计题等题型的数量,然后点击开始手动抽题时,Dbgird1中仅显示选择题,当选中了一个选择题,选择题数目将会减1,通过调用Editchange事件,当edit内容等于0时,就进行下一项类型的抽题,如此类推。
相关代码为:
procedureTForm10.Edit8Change(Sender:
TObject);
ifedit8.Text='
0'
then
form11.RxRichEdit1.Lines.Add('
二,填空题'
+#10#13);
form11.RxRichEdit2.Lines.Add('
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('
select*from题库表where试题类型='
填空题'
ADOQuery1.Open;
tmnum:
=1;
其界面设计如下:
图4-19手动出卷
当添加试题全部完成后,生成试卷的按钮将会有效,进行试卷生成。
试卷的预览区主要是用Richedit显示。
试题内容和试题答案都是以对流式数据复制到Richedit上。
手动出卷的预览区和自动出卷的预览区基本相似。
因此,本次就不予显示。
4.5.3试卷信息表查询模块
用户可通过输入试卷编号,查询该份试卷的所包含的题目以及题目的相关属性。
设计界面如图4-20所示:
图5-20试卷信息表的查询界面
5.6辅助功能设计
本系统的辅助功能含画图、记事本、计算器。
对于前三个均借助Delphi自带的Winexec()函数,在辅助功能的下拉菜单选择计算器子菜单就可以调用微软操作系统的计算器功能了,实现的程序代码如下:
winexec('
c:
\windows\system32\calc.exe'
sw_normal);
调用计算器的界面如图5.15所示:
图5-21调用计算器辅助功能
第六章软件调试
6.1软件功能测试以及方法介绍
软件测试就是为了发现程序中的错误而执行的必要过程,它的目标是尽可能多的发现并排除软件中潜在的错误,最终把一个高质量的系统交给用户使用。
测试任何软件产品都有两种方法:
如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;
如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照产品规格说明书的规定正常进行。
前一个方法称为黑盒测试,后一种方法称为白盒测试。
黑盒测试是把程序看成一个黑盒子,可以不考虑程序的内部结构和处理过程。
也就是说,黑盒测试是在程序接口处进行测试,它只检查程序功能是否能按产品规格说明书的规定正常运行。
白盒测试可以把程序看成装在一个透明的白盒里,这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否能按预定要求正常运行。
6.2本系统的测试
在测试主要是通过快捷键F4运行,快捷键F7进行单步调试。
在调试过程中,可以通过看里面参数的变化是否正确。
本系统在开发中出现的问题和调试方法如下:
(1)在测试登录界面时,虽然笔者输入的用户名和密码都正确,但是仍然显示输入的用户名和密码错误。
最后,发现后台的数据库的数据类型定义错误。
笔者把用户名和用户密码定义为char类型,字符长度为20。
而char类型是固定的,如果当输入的字符长度小于定义的长度,将会以空格填充。
例如后台数据库中输入abc,在数据库中将会保存为“abc”,因此当用户名输入为”abc”,进行字符串比较,就会显示不相等,因此就不能登录成功。
后来,笔者将数据类型定义为varchar类型。
Varchar类型存储时,只存入数据的实际值。
定义的数据长度代表能够存入的数据的最大长度。
(2)在测试试卷自动生成过程中,发现生成的试题存在重复,于是通过定义一个数组存放选中试题的试题编号,然后每次抽取试题,并将试题编号与数组的进行比较,如果出现相同,将重新抽取。
如果,没有出现相同,就将该试题编号进行保存。
当把该数组定义到局部函数中,笔者通过查看该数组中的内容,发现每次重新进入该过程时,数组中的内容就会清零,原来保存的内容被释放。
因此,即使你想剔除重复题,也没有到达效果。
最后,笔者将该数组定义为全局变量,系统按预期的情况运行。
(3)在用户管理界面中,刚开始是先输入用户名和用户密码以及用户身份,然后按添加和修改,而且删除的时候,也不给与提示。
很容易造成误删除。
考虑到用户的思维,觉得这样设计不符合逻辑思维。
正常思维应该是点击添加和修改,然后显示你需要添加和修改的内容,再进行数据录入。
如果,你临时又不想修改和添加,可以取消录入。
在点击删除时,会弹出提示框,如果你确定要删除,就点击“是”,如果不想的话,就点击“否”。
这样的设计就更加人性化,满足人的思维。
(4)在调试过程中,也遇到了一些数据类型的定义不一致以及数据之间的类型忘记转化。
这些都是小问题,由于粗心造成,仔细检查就容易发现。
本系统的调试中的错误主要是对理论知识认识不够透彻以及理论不能够于实践紧密结合。
第七章结论
这次的毕业设计,笔者在指导老师的悉心指导和帮助下,顺利地完成了数据库原理试卷生成系统。
回顾这次毕业设计,笔者从刚开始的茫然,对Delphi的认识非常少,到后来能够