2 . 需求分析 内容来自www.paper51.com 2.1 负责的功能模块 copyright paper51.com n 设计试题生成功能,试题能分布整个教学内容 内容来自论文无忧网 www.paper51.com n 设计试题的难易程度分析功能 http://www.paper51.com n 具有试题的答案生成功能 内容来自www.paper51.com n 数据库设计及维护 http://www.paper51.com n 程序的其它选项设置 内容来自www.paper51.com 2.2 软件功能分析 内容来自www.paper51.com 根据我负责的功能模块,主要是在试卷的生成上。 paper51.com
1.要显示书本章节信息以供用户使用。而在数据库里章节的存放是没有规则也即它们的顺序不一定按照真实书本的章节顺序来存储的。但是在显示章节信息的时候必须按照书本的章节顺序来显示。所以特别设置如下的数据类型: http://www.paper51.com type 内容来自论文无忧网 www.paper51.com ZJ=record http://www.paper51.com ZJID:double; copyright paper51.com ZJName:string; 内容来自www.paper51.com
end; paper51.com 在这里ZJID是设置成double的类型与相对应的是数据库里表ZhangJie里的ZJ字段此字段的类型为文本弄的。故在添加此数据库结构的时候要把文本型转化为double的类型。而ZJName对应的是数据库里表ZhangJie里的ZJName它们为同一种数据类型。再由于数据库里章节的数量是不定的,故此种数据类型的变量必须是一种长度可变的类型才行,所以我们选择了Delphi里的动态数组类型。变量定义如下 : 内容来自论文无忧网 www.paper51.com Var copyright paper51.com
TempZJ:ZJ; 内容来自论文无忧网 www.paper51.com
HaveZJ:arrayof ZJ; http://www.paper51.com 接下来的问题就是把这个变量记录的数据按一定顺序显示到TCheckTree的控件里了。由于章节的数量还是比较多的,所以我选择了“改进的选择排序”,具体的排序算法代码实现如下: paper51.com for i:=0 to High(HaveZJ) do //对章节号进行排序 http://www.paper51.com begin paper51.com k:=i; 内容来自论文无忧网 www.paper51.com for j:=i+1 toMaxNum do 内容来自论文无忧网 www.paper51.com ifHaveZJ[k].ZJID>HaveZJ[j].ZJID then k:=j; 内容来自www.paper51.com if i<>kthen copyright paper51.com begin 内容来自论文无忧网 www.paper51.com TempZJ.ZJID:=HaveZJ[i].ZJID; copyright paper51.com
TempZJ.ZJName:=HaveZJ[i].ZJName; 内容来自论文无忧网 www.paper51.com HaveZJ[i].ZJID:=HaveZJ[k].ZJID; copyright paper51.com HaveZJ[i].ZJName:=HaveZJ[k].ZJName; copyright paper51.com HaveZJ[k].ZJID:=TempZJ.ZJID; paper51.com
HaveZJ[k].ZJName:=TempZJ.ZJName; copyright paper51.com end; copyright paper51.com end; paper51.com
2.手动生成试卷时要不断的将用户选择的题目临时存储起来,由于记录一道题所包含的信息不是很多,再因为这些信息一会儿还要在“保存答案”里使用,所以我设置了4个TStringList的全局变量,定义如下: 内容来自论文无忧网 www.paper51.com var paper51.com STTypeID,STBH,STND:TStringList; http://www.paper51.com 每选一道题保存时的算法代码如下: 内容来自www.paper51.com 首先保证要添加入的试题与现有的试题不能重复。 copyright paper51.com
LX:=ST_DBG.Fields[1].AsInteger; http://www.paper51.com BH:=ST_DBG.Fields[0].AsInteger; http://www.paper51.com
for i:=0 to STTypeID.Count-1 do 内容来自www.paper51.com begin copyright paper51.com if (StrToInt(STTypeID.Strings[i])=LX)and(StrToInt(STBH.Strings[i])=BH)then begin paper51.com MessageBox(handle,'要加入的试题已经存在了!','加入错误',MB_OK or MB_ICONERROR); 内容来自www.paper51.com exit; 内容来自论文无忧网 www.paper51.com
end; paper51.com end; copyright paper51.com 如果不重复的话则把试题添加进来!! 内容来自论文无忧网 www.paper51.com STTypeID.Add(IntToStr(LX)); //记下试题类型 copyright paper51.com
STBH.Add(IntToStr(BH)); //记下试题编号 http://www.paper51.com STND.Add(ST_DBG.Fields[4].AsString); //记下试题难度 http://www.paper51.com
3.在自动生成试卷里最主要的一点就是如何生成一个覆盖知道点广且试题不重复的试卷。其中的关键算法在于如何生成一个不重复的随机数序列。在Delphi里随机数的产生函数是Random,然而如果用这个函数来生成一定范围内的随机数重复的机率太大了。其中变量定义如下: http://www.paper51.com
var http://www.paper51.com
XTH:array of integer; //存放随机选题号 paper51.com 以下是产生不重复随机数的算法: 内容来自www.paper51.com
num:=MaxBH-MinBH+1; copyright paper51.com if num>0then //开始初始化 内容来自论文无忧网 www.paper51.com begin copyright paper51.com SetLength(XTH,num); http://www.paper51.com for i:=0 to num-1 do 内容来自论文无忧网 www.paper51.com XTH[i]:=MinBH+i; //给动态数组设初值 内容来自www.paper51.com
Randomize; //初始化随机数生成器 copyright paper51.com for i:=0 to num-1 do paper51.com begin http://www.paper51.com j:=random(num); paper51.com
temp:=XTH[i]; copyright paper51.com XTH[i]:=XTH[j]; paper51.com XTH[j]:=temp; 内容来自论文无忧网 www.paper51.com end; paper51.com end; paper51.com 3 . 设计阶段 copyright paper51.com 3.1 概要设计 内容来自论文无忧网 www.paper51.com 3.1.1 系统数据库设计 paper51.com 根据任务书的规定,现设计如下的数据库表格: 内容来自论文无忧网 www.paper51.com
表1:用户表(YH) 内容来自论文无忧网 www.paper51.com 字段中文名 http://www.paper51.com
字段英文名 http://www.paper51.com
字段类型 copyright paper51.com 字段长度 内容来自论文无忧网 www.paper51.com
主键 paper51.com 姓名 http://www.paper51.com UserName 内容来自论文无忧网 www.paper51.com 文本 paper51.com 20 paper51.com
是 http://www.paper51.com 密码 copyright paper51.com
Password http://www.paper51.com 文本 内容来自论文无忧网 www.paper51.com 18 内容来自www.paper51.com 组 paper51.com
GroupID 内容来自论文无忧网 www.paper51.com
数字 paper51.com 长整型 内容来自论文无忧网 www.paper51.com
权限 copyright paper51.com QXID http://www.paper51.com 数字 内容来自www.paper51.com 长整型 内容来自www.paper51.com 表2:题型(Type) http://www.paper51.com 字段中文名 内容来自www.paper51.com 字段英文名 http://www.paper51.com
字段类型 copyright paper51.com 字段长度 内容来自www.paper51.com 主键 http://www.paper51.com
编号 paper51.com
TypeID copyright paper51.com 自动编号 copyright paper51.com 是 paper51.com 名称 paper51.com TypeName 内容来自www.paper51.com 文本 http://www.paper51.com 20 内容来自www.paper51.com 分值 paper51.com
FZ copyright paper51.com
数字 内容来自论文无忧网 www.paper51.com 长整型 copyright paper51.com 表3:难易度(NYD) 内容来自论文无忧网 www.paper51.com 字段中文名 http://www.paper51.com
字段英文名 http://www.paper51.com 字段类型 内容来自论文无忧网 www.paper51.com 字段长度 内容来自www.paper51.com 主键 内容来自论文无忧网 www.paper51.com 编号 copyright paper51.com BH paper51.com 自动编号 paper51.com 是 内容来自论文无忧网 www.paper51.com 难易度 内容来自论文无忧网 www.paper51.com NYD 内容来自论文无忧网 www.paper51.com 文本 内容来自www.paper51.com 8 copyright paper51.com 表4:用户组(UserGroup) copyright paper51.com 字段中文名 http://www.paper51.com
字段英文名 内容来自论文无忧网 www.paper51.com 字段类型 内容来自www.paper51.com 字段长度 内容来自www.paper51.com 主键 内容来自www.paper51.com 编号 paper51.com GroupID http://www.paper51.com 自动编号 内容来自www.paper51.com 是 内容来自论文无忧网 www.paper51.com 组名 内容来自www.paper51.com GroupName 内容来自论文无忧网 www.paper51.com 文本 内容来自www.paper51.com 20 paper51.com 表5:选择题(XuanZeTi) 内容来自论文无忧网 www.paper51.com 字段中文名 http://www.paper51.com 字段英文名 http://www.paper51.com
字段类型 paper51.com 字段长度 http://www.paper51.com 主键 http://www.paper51.com 题号 内容来自论文无忧网 www.paper51.com
TH http://www.paper51.com 自动编号 内容来自www.paper51.com 是 内容来自论文无忧网 www.paper51.com 题型 http://www.paper51.com TypeID 内容来自www.paper51.com 数字 copyright paper51.com
长整型 内容来自论文无忧网 www.paper51.com
题目 paper51.com TM copyright paper51.com 备注 copyright paper51.com
内容来自论文无忧网 www.paper51.com |