【DELPHI设计栏目提醒】:网学会员--在 DELPHI设计编辑为广大网友搜集整理了:题库系统绩等信息,祝愿广大网友取得需要的信息,参考学习。
1 . 简述
1.1 开发工具简介
1.1.1 Delphi 7.0的特点
Delphi是Borland公司出品的开发工具,在众多的开发工具中,我们为什么要选择Delphi呢?因为Delphi具有众多其它开发工具所没有的优点!具体介绍如下:
开发的高效
语言的高效
编译的高效
执行的高效
维护的高效
基于以上理由,我们毫不忧郁的选择了Delphi做为我们的开发工具!!
1.1.2 主要的控件及其属性简介
TForm类的控件:
1) BorderIcons属性:用来控制程序标题按钮的可用性。
2) BorderStyle属性:用来控制程序边框的样式。
3) Color属性:用来控制程序界面的颜色。
4) Font属性:用来控制程序界面的字体。
5) Position属性:用来控制程序运行时界面的显示位置。
TADOConnection类的控件:
1) ConnectionString属性:用来控制链接字符串。
2) LoginPrompt属性:用来控制链接时是否要输入密码。
3) Connected属性:用来控制是否进行链接。
TADOQuery类的控件:
1) Connection属性:用来指定和哪个TADOConnection控件相连。
2) SQL属性:用来添加向数据库提交的SQL语句。
3) Add方法:用来向SQL属性添加SQL语句。
4) Open方法:用来执行SQL语言中的Select语句。
5) ExecSQL方法:用来执行任何SQL语句。
6) FieldByName属性:用来给数据库的字段赋值。
7) FidldValues属性:用来取出数据库的字段的。
8) Append方法:用来向数据库添加一条记录。
9) Edit方法:用来编辑当前的记录。
10) Post:用来向数据库提交所做的修改。
TADOTable类的控件:
1) Connection属性:用来指定和哪个TADOConnection控件相连。
2) Open方法:用来打开数据库中指定的表。
3) FieldByName属性:用来给数据库的字段赋值。
4) FidldValues属性:用来取出数据库的字段的。
5) Append方法:用来向数据库添加一条记录。
6) Edit方法:用来编辑当前的记录。
7) Post:用来向数据库提交所做的修改。
TDataSource类的控件:
1) DataSet:用来指定和哪个数据集相连。
TDBGrid类的控件:
1) DataSource:用来指定和哪个TDataSource控件相连。
TPageControl类的控件:
1) ActivePage属性:用来指定当前活动的Page页。
TCheckTree类的控件:
1) ReadOnly属性:用来控制TCheckTree内的Item是否可编辑。
2) Item属性:用来控制TCheckTree包含的所有树形结点。
3) Images属性:用来指点TCheckTree中结点的图标。
4) OnMouseUp事件:用来添加鼠标放开事件所执行的程序代码。
5) OnStateChange事件:用来添加结点状态改变时的程序代码。
TFlatButton类的控件:
1) Caption属性:用来指定TFlatButton的标题。
OnClick事件:用来添加按钮的单击事件所执行的程序代码。
1.1.3 数据库连接方式选择
Delphi连接数据库的主要方式有两种:一是:BDE ,二是ADO 。现在我们来大致比较一下这两种技术的优缺点:
BDE(Borland Database Engine)是Delphi颇具特色的数据库连接管理技术。凭借窗体和报表,BDE可以访问诸如Paradox,dBASE,本地InterBase服务器的数据库,也可访问远程数据库服务器上的数据库,如Oracle,SyBase,Informix等C/S数据库中的数据库,也可访问经ODBC可访问的数据库管理系统中的数据库。
ADO(ActiveX Data Objects)是微软提供的一项技术。通过ADO,可以方便的访问各种类型的数据库,特别是OLEDB数据库。ADO已成为访问数据库的新的标准接口。从Delphi 6.0开始Delphi添加了对ADO的支持,以便让用户能迅速实现对终端用户用来做商业决策的数据库的一致性访问,结合Delphi本身的开发式数据组件结构,程序员可以很快地建立应用程序,用来把自己的商业数据库通过Internet发送给客户,最终用户以及整个销售环节。通过ADO,Delphi 7.0也能让用户快速访问关系或非关系数据库以及E-Mail和商务文件系统。
这两者提供了几乎相同的功能,在进行产品开发时,势必要做一个精心的比较。虽然ADO技术提出的时间不长,并被定位为工业标准的,而且其在性能上由于当前没有良好的数据库引擎支持,其性能还不够完美,但是,我们应该要注意到Borland公司已经宣布停止发展BDE了,其性能被ADO超越也是迟早的事,因此,在开发长期应用的产品时,推荐采用ADO技术。这样还有另一个好处是,在进行产品分发时,可以避开大量BDE的链接库DLL的分发。
基于以上原因我们选择了ADO做为我们的数据库访问组件。
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,然而如果用这个函数来生成一定范围内的随机数
上一篇:题库系统与试卷生成设计