【DELPHI设计栏目提醒】:本文主要为网学会员提供“题库系统与试卷生成”,希望对需要题库系统与试卷生成网友有所帮助,学习一下!
摘 要
一般情况教师想出一份试卷,要么到庞大的题库里一道一道的把题找出来,或是从几本相关的书里把题一道一道挑出来。这样即费时又费力,而且很难保证试题的覆盖面和把握好试卷的难度。正是为了能够帮助教师轻松的出一份高质量的试卷而开发了本软件。为了达到预期的目标我们最终选择了Microsoft Office Word做为本软件的终端输出。本软件是在对现有控件的改进和VBA编程的研究的基础上开发的。本软件实现了以下主要功能:1.手动生成试卷;2.自动生成试卷;3.抽取现有试卷;4.用户管理;5.数据库管理。大量的测试表明本软件在Windows 98/me/2000/XP平台配合Office XP/2003 的环境下程序运行稳定且各项功能运行得都很正确,基本达到了预期的要求!!
结论:经过老师的实际试用本软件在界面上和功能上都有独到之处!!相信完全可以胜任出一份好的试卷任务。
目 录
摘 要 1
Abstract 2
前 言 1
1 . 简述 2
1.1 开发工具简介 2
1.1.1 Delphi 7.0的特点 2
1.1.2 主要的控件及其属性简介 2
1.1.3 数据库连接方式选择 3
1.2 程序运行环境 4
2 . 需求分析 5
2.1 负责的功能模块 5
2.2 软件功能分析 5
3 . 设计阶段 8
3.1 概要设计 8
3.1.1 系统数据库设计 8
3.2 详细设计 12
3.2.1 程序流程图 12
3.2.2 窗体功能简介 14
4 . 软件实现 20
4.1 OOP简介 20
4.2 开发的关键技术 20
5 . 软件测试及其维护 24
5.1 系统测试平台简介 24
5.2 测试方法 24
5.3 系统维护 25
6 . 开发总结 26
参 考 文 献 27
致 谢 28
译 文 29
原 文 33
2 . 需求分析
2.1 负责的功能模块
设计试题生成功能,试题能分布整个教学内容
设计试题的难易程度分析功能
具有试题的答案生成功能
数据库设计及维护
程序的其它选项设置
2.2 软件功能分析
根据我负责的功能模块,主要是在试卷的生成上。
1.要显示书本章节信息以供用户使用。而在数据库里章节的存放是没有规则也即它们的顺序不一定按照真实书本的章节顺序来存储的。但是在显示章节信息的时候必须按照书本的章节顺序来显示。所以特别设置如下的数据类型:
type
ZJ=record
ZJID:double;
ZJName:string;
end;
在这里ZJID是设置成double的类型与相对应的是数据库里表ZhangJie里的ZJ字段此字段的类型为文本弄的。故在添加此数据库结构的时候要把文本型转化为double的类型。而ZJName对应的是数据库里表ZhangJie里的ZJName它们为同一种数据类型。再由于数据库里章节的数量是不定的,故此种数据类型的变量必须是一种长度可变的类型才行,所以我们选择了Delphi里的动态数组类型。变量定义如下 :
Var
TempZJ:ZJ;
HaveZJ:array of ZJ;
接下来的问题就是把这个变量记录的数据按一定顺序显示到TCheckTree的控件里了。由于章节的数量还是比较多的,所以我选择了“改进的选择排序”,具体的排序算法代码实现如下:
for i:=0 to High(HaveZJ) do //对章节号进行排序
begin
k:=i;
for j:=i+1 to MaxNum do
if HaveZJ[k].ZJID>HaveZJ[j].ZJID then k:=j;
if i<>k then
begin
TempZJ.ZJID:=HaveZJ[i].ZJID;
TempZJ.ZJName:=HaveZJ[i].ZJName;
HaveZJ[i].ZJID:=HaveZJ[k].ZJID;
HaveZJ[i].ZJName:=HaveZJ[k].ZJName;
HaveZJ[k].ZJID:=TempZJ.ZJID;
HaveZJ[k].ZJName:=TempZJ.ZJName;
end;
end;
2.手动生成试卷时要不断的将用户选择的题目临时存储起来,由于记录一道题所包含的信息不是很多,再因为这些信息一会儿还要在“保存答案”里使用,所以我设置了4个TStringList的全局变量,定义如下:
var
STTypeID,STBH,STND:TStringList;
每选一道题保存时的算法代码如下:
首先保证要添加入的试题与现有的试题不能重复。
LX:=ST_DBG.Fields[1].AsInteger;
BH:=ST_DBG.Fields[0].AsInteger;
for i:=0 to STTypeID.Count-1 do
begin
if (StrToInt(STTypeID.Strings[i])=LX)and(StrToInt(STBH.Strings[i])=BH) then begin
MessageBox(handle,''要加入的试题已经存在了!'',''加入错误'',MB_OK or MB_ICONERROR);
exit;
end;
end;
如果不重复的话则把试题添加进来!!
STTypeID.Add(IntToStr(LX)); //记下试题类型
STBH.Add(IntToStr(BH)); //记下试题编号
STND.Add(ST_DBG.Fields[4].AsString); //记下试题难度
3.在自动生成试卷里最主要的一点就是如何生成一个覆盖知道点广且试题不重复的试卷。其中的关键算法在于如何生成一个不重复的随机数序列。在Delphi里随机数的产生函数是Random,然而如果用这个函数来生成一定范围内的随机数重复的机率太大了。其中变量定义如下:
var
XTH:array of integer; //存放随机选题号
以下是产生不重复随机数的算法:
num:=MaxBH-MinBH+1;
if num>0 then //开始初始化
begin
SetLength(XTH,num);
for i:=0 to num-1 do
XTH[i]:=MinBH+i; //给动态数组设初值
Randomize; //初始化随机数生成器
for i:=0 to num-1 do
begin
j:=random(num);
temp:=XTH[i];
XTH[i]:=XTH[j];
XTH[j]:=temp;
end;
end;
3 . 设计阶段
3.1 概要设计
3.1.1 系统数据库设计
根据任务书的规定,现设计如下的数据库表格:
表1:用户表(YH)
字段中文名 字段英文名 字段类型 字段长度 主键
姓名 UserName 文本 20 是
密码 Password 文本 18
组 GroupID 数字 长整型
权限 QXID 数字 长整型
表2:题型(Type)
字段中文名 字段英文名 字段类型 字段长度 主键
编号 TypeID 自动编号 是
名称 TypeName 文本 20
分值 FZ 数字 长整型
表3:难易度(NYD)
字段中文名 字段英文名 字段类型 字段长度 主键
编号 BH 自动编号 是
难易度 NYD 文本 8
表4:用户组(UserGroup)
字段中文名 字段英文名 字段类型 字段长度 主键
编号 GroupID 自动编号 是
组名 GroupName 文本 20
表5:选择题(XuanZeTi)
字段中文名 字段英文名 字段类型 字段长度 主键
题号 TH 自动编号 是
题型 TypeID 数字 长整型
题目 TM 备注
选项A A 文本 255
选项B B 文本 255
选项C C 文本 255
选项D D 文本 255
正确答案 DA 文本 1
难易度 NY 数字 长整型
出自章节 CZ 文本 50
表6:填空题(TianKong)
字段中文名 字段英文名 字段类型 字段长度 主键
题号 BH 自动编号 是
题型 TypeID 数字 长整型
题目 TM 备注
空1 K1 文本 100
空2 K2 文本 100
空3 K3 文本 100
空4 K4 文本 100
空5 K5 文本 100
应填数 YTS 数字 长整型
难易度 NY 数字 长整型
出自章节 CZ 文本 50
表7:简答题(JianDaTi)
字段中文名 字段英文名 字段类型 字段长度 主键
题号 BH 自动编号 是
题型 TypeID 数字 长整型
题目 TM 备注
答案 DA 备注
难易度 NY 数字 长整型
出自章节 CZ 文本 50
表8:原理论述题(YuanLiLunShu)
字段中文名 字段英文名 字段类型 字段长度 主键
题号 BH 自动编号 是
题型 TypeID 数字 长整型
题目 TM 备注
答案 DA 备注
难易度 NY 数字 长整型
出自章节 CZ 文本 50
表9:系统设计题(XiTongSheJi)
字段中文名 字段英文名 字段类型 字段长度 主键
题号 BH 自动编号 是
题型 TypeID 数字 长整型
题目 TM 备注
表格 BG 文本 100
答案 DA 备注
难易度 NY 数字 长整型
出自章节 CZ 文本 50
答案表格 DABG 文本 50
题目表格 TMBG 文本 50
表10:系统操作题(XiTongCZ)
字段中文名 字段英文名 字段类型 字段长度 主键
题号 BH 自动编号 是
题型 TypeID 数字 长整型
题目 TM 备注
难易度 NY 数字 长整型
出自章节 CZ 文本 50
题目表格 TMBG 文本 50
问1答案 W1DA 文本 255
问1答案表格 W1DABG 文本 50
问2答案 W2DA 文本 255
问2答案表格 W2DABG 文本 50
问3答案 W3DA 文本 255
问3答案表格 W3DABG 文本 50
问4答案 W4DA 文本 255
问4答案表格 W4DABG 文本 50
问5答案 W5DA 文本 255
问5答案表格 W5DABG 文本 50
问题数 WTS 数字 长整型
3.2 详细设计
3.2.1 程序流程图
1.抽取
上一篇:教学排课及学生学籍管理