delphi题库系统设计与实现论文.docx

上传人:b****8 文档编号:28333376 上传时间:2023-07-10 格式:DOCX 页数:38 大小:457.48KB
下载 相关 举报
delphi题库系统设计与实现论文.docx_第1页
第1页 / 共38页
delphi题库系统设计与实现论文.docx_第2页
第2页 / 共38页
delphi题库系统设计与实现论文.docx_第3页
第3页 / 共38页
delphi题库系统设计与实现论文.docx_第4页
第4页 / 共38页
delphi题库系统设计与实现论文.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

delphi题库系统设计与实现论文.docx

《delphi题库系统设计与实现论文.docx》由会员分享,可在线阅读,更多相关《delphi题库系统设计与实现论文.docx(38页珍藏版)》请在冰豆网上搜索。

delphi题库系统设计与实现论文.docx

delphi题库系统设计与实现论文

摘  要

一般情况教师想出一份试卷,要么到庞大的题库里一道一道的把题找出来,或是从几本相关的书里把题一道一道挑出来。

这样即费时又费力,而且很难保证试题的覆盖面和把握好试卷的难度。

正是为了能够帮助教师轻松的出一份高质量的试卷而开发了本软件。

为了达到预期的目标我们最终选择了MicrosoftOfficeWord做为本软件的终端输出。

本软件是在对现有控件的改进和VBA编程的研究的基础上开发的。

本软件实现了以下主要功能:

1.手动生成试卷;2.自动生成试卷;3.抽取现有试卷;4.用户管理;5.数据库管理。

大量的测试表明本软件在Windows98/me/2000/XP平台配合OfficeXP/2003的环境下程序运行稳定且各项功能运行得都很正确,基本达到了预期的要求!

结论:

经过老师的实际试用本软件在界面上和功能上都有独到之处!

相信完全可以胜任出一份好的试卷任务。

关键词:

题库系统,试卷生成,数据库,VBA

Abstract

Thegeneralsituationteacherthinksoutapaper,reachhugeexampooleachfindsoutthequestion,orshoulderthequestiontogetheroutfromseveralrelevantbooks.Time-consumingandalsostrenuouslikethis,andverydifficulttoguaranteecoveragerateandpaperdegreeofdifficultyofexaminationquestion.HelpingtheteacherthinksoutahigtqualitypaperisthedestinationofdevelopthisSoftware.InthecauseofthisweselecttheterminalisMicrosoftOfficeWord.ThisSoftware’sbaseofdevelopisimproveoncontrolinexistenceandstudytheVBAprograming.Thesefunctionsofthissoftwareareasfollows:

One.Manualcreatepaper;Two.Autocreatepaper;Three.Selectfromexistentialpapers;Four.Usermanage;Five.Databasemanage.TheresultofmanytestisthatthissoftwareisruningsteadyandthesefuntionsofitisruningrightintheenvironmentwhichmakeupofWindows98/me/2000/XPandOfficeXP/2003,itisbasicreachtherequests.

Inall:

theresultofrealtestbyteacheristhatthissoftwareareuniqueininterfaceandfunction.Wemustbelieveitcancompletecreatingahighqualitypaper.

KeyWords:

Exam,Problempool,VBA,word

目  录

前  言

在开发本软件之前,正是我努力提高自己的Delphi开发水平的时期。

因此我选择了Delphi做为我的开发工具,然而这次开发的软件和以前不一样。

最主要的区别在于这个软件要以MicrosoftOfficeWord做为试卷的终端输出。

而它们又是两个不同公司的产品。

因而,刚一开始我特别担心这个技术能否得到比较圆满的解决。

在开发的过程中我不断的对VBA技术进行研究,并且将它应用于这次的软件开发中。

因而比较好的解决了MicrosoftOfficeWord的接口编程问题。

还有一个比较棘手的问题就是Delphi提供的控件都是很基本的,而这次开发中要用到一个可以标记选中状态的树型控件,在对Delphi的TtreeView的深入研究后确认它不能胜任这个任务。

因此,我开始寻找第三方控件,然而这一次我很失望因为只找到了一个2000年编写的TCheckTree控件,没办法了,最后下定决心修改那个TCheckTree控件以使它能更加稳定和实用。

在深入研究Windows的消息机制和VCL框架对Windows消息机制的封装技术后我成功的修改了那个TCheckTree控件。

在程序开发的后期测试中,我充分利用各个同学电脑平台的多样性。

把本软件在多达4种操作系统和3个不同版本的Office上进行测试。

测试表明:

在Windows98/me/2000/XP平台配合OfficeXP/2003下程序运行稳定且各项功能运行得都很正确!

1.简述

1.1开发工具简介

1.1.1Delphi7.0的特点

Delphi是Borland公司出品的开发工具,在众多的开发工具中,我们为什么要选择Delphi呢?

因为Delphi具有众多其它开发工具所没有的优点!

具体介绍如下:

◆开发的高效

◆语言的高效

◆编译的高效

◆执行的高效

◆维护的高效

基于以上理由,我们毫不忧郁的选择了Delphi做为我们的开发工具!

1.1.2主要的控件及其属性简介

◆TForm类的控件:

1)BorderIcons属性:

用来控制程序标题按钮的可用性。

2)BorderStyle属性:

用来控制程序边框的样式。

3)Color属性:

用来控制程序界面的颜色。

4)Font属性:

用来控制程序界面的字体。

5)Position属性:

用来控制程序运行时界面的显示位置。

◆TADOConnection类的控件:

6)ConnectionString属性:

用来控制链接字符串。

7)LoginPrompt属性:

用来控制链接时是否要输入密码。

8)Connected属性:

用来控制是否进行链接。

◆TADOQuery类的控件:

9)Connection属性:

用来指定和哪个TADOConnection控件相连。

10)SQL属性:

用来添加向数据库提交的SQL语句。

11)Add方法:

用来向SQL属性添加SQL语句。

12)Open方法:

用来执行SQL语言中的Select语句。

13)ExecSQL方法:

用来执行任何SQL语句。

14)FieldByName属性:

用来给数据库的字段赋值。

15)FidldValues属性:

用来取出数据库的字段的。

16)Append方法:

用来向数据库添加一条记录。

17)Edit方法:

用来编辑当前的记录。

18)Post:

用来向数据库提交所做的修改。

◆TADOTable类的控件:

19)Connection属性:

用来指定和哪个TADOConnection控件相连。

20)Open方法:

用来打开数据库中指定的表。

21)FieldByName属性:

用来给数据库的字段赋值。

22)FidldValues属性:

用来取出数据库的字段的。

23)Append方法:

用来向数据库添加一条记录。

24)Edit方法:

用来编辑当前的记录。

25)Post:

用来向数据库提交所做的修改。

◆TDataSource类的控件:

26)DataSet:

用来指定和哪个数据集相连。

◆TDBGrid类的控件:

27)DataSource:

用来指定和哪个TDataSource控件相连。

◆TPageControl类的控件:

28)ActivePage属性:

用来指定当前活动的Page页。

◆TCheckTree类的控件:

29)ReadOnly属性:

用来控制TCheckTree内的Item是否可编辑。

30)Item属性:

用来控制TCheckTree包含的所有树形结点。

31)Images属性:

用来指点TCheckTree中结点的图标。

32)OnMouseUp事件:

用来添加鼠标放开事件所执行的程序代码。

33)OnStateChange事件:

用来添加结点状态改变时的程序代码。

◆TFlatButton类的控件:

34)Caption属性:

用来指定TFlatButton的标题。

OnClick事件:

用来添加按钮的单击事件所执行的程序代码。

1.1.3数据库连接方式选择

Delphi连接数据库的主要方式有两种:

一是:

BDE,二是ADO。

现在我们来大致比较一下这两种技术的优缺点:

BDE(BorlandDatabaseEngine)是Delphi颇具特色的数据库连接管理技术。

凭借窗体和报表,BDE可以访问诸如Paradox,dBASE,本地InterBase服务器的数据库,也可访问远程数据库服务器上的数据库,如Oracle,SyBase,Informix等C/S数据库中的数据库,也可访问经ODBC可访问的数据库管理系统中的数据库。

ADO(ActiveXDataObjects)是微软提供的一项技术。

通过ADO,可以方便的访问各种类型的数据库,特别是OLEDB数据库。

ADO已成为访问数据库的新的标准接口。

从Delphi6.0开始Delphi添加了对ADO的支持,以便让用户能迅速实现对终端用户用来做商业决策的数据库的一致性访问,结合Delphi本身的开发式数据组件结构,程序员可以很快地建立应用程序,用来把自己的商业数据库通过Internet发送给客户,最终用户以及整个销售环节。

通过ADO,Delphi7.0也能让用户快速访问关系或非关系数据库以及E-Mail和商务文件系统。

这两者提供了几乎相同的功能,在进行产品开发时,势必要做一个精心的比较。

虽然ADO技术提出的时间不长,并被定位为工业标准的,而且其在性能上由于当前没有良好的数据库引擎支持,其性能还不够完美,但是,我们应该要注意到Borland公司已经宣布停止发展BDE了,其性能被ADO超越也是迟早的事,因此,在开发长期应用的产品时,推荐采用ADO技术。

这样还有另一个好处是,在进行产品分发时,可以避开大量BDE的链接库DLL的分发。

基于以上原因我们选择了ADO做为我们的数据库访问组件。

 

1.2程序运行环境

操作系统:

Windows2000/WindowsXP

办公软件:

OfficeXP/Office2003

 

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:

arrayofZJ;

接下来的问题就是把这个变量记录的数据按一定顺序显示到TCheckTree的控件里了。

由于章节的数量还是比较多的,所以我选择了“改进的选择排序”,具体的排序算法代码实现如下:

fori:

=0toHigh(HaveZJ)do//对章节号进行排序

begin

k:

=i;

forj:

=i+1toMaxNumdo

ifHaveZJ[k].ZJID>HaveZJ[j].ZJIDthenk:

=j;

ifi<>kthen

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;

fori:

=0toSTTypeID.Count-1do

begin

if(StrToInt(STTypeID.Strings[i])=LX)and(StrToInt(STBH.Strings[i])=BH)thenbegin

MessageBox(handle,'要加入的试题已经存在了!

','加入错误',MB_OKorMB_ICONERROR);

exit;

end;

end;

如果不重复的话则把试题添加进来!

STTypeID.Add(IntToStr(LX));//记下试题类型

STBH.Add(IntToStr(BH));//记下试题编号

STND.Add(ST_DBG.Fields[4].AsString);//记下试题难度

3.在自动生成试卷里最主要的一点就是如何生成一个覆盖知道点广且试题不重复的试卷。

其中的关键算法在于如何生成一个不重复的随机数序列。

在Delphi里随机数的产生函数是Random,然而如果用这个函数来生成一定范围内的随机数重复的机率太大了。

其中变量定义如下:

var

XTH:

arrayofinteger;//存放随机选题号

以下是产生不重复随机数的算法:

num:

=MaxBH-MinBH+1;

ifnum>0then//开始初始化

begin

SetLength(XTH,num);

fori:

=0tonum-1do

XTH[i]:

=MinBH+i;//给动态数组设初值

Randomize;//初始化随机数生成器

fori:

=0tonum-1do

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

文本

表4:

用户组(UserGroup)

字段中文名

字段英文名

字段类型

字段长度

主键

编号

GroupID

自动编号

组名

GroupName

文本

20

 

 表5:

选择题(XuanZeTi)

字段中文名

字段英文名

字段类型

字段长度

主键

题号

TH

自动编号

题型

TypeID

数字

长整型

题目

TM

备注

选项A

A

文本

255

选项B

B

文本

255

选项C

C

文本

255

选项D

D

文本

255

正确答案

DA

文本

难易度

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.抽取现有试卷的流程图:

 

2.自动生成试卷的流程图:

 

3.下图是手动生成试卷的流程图:

3.2.2窗体功能简介

下图软件的登陆界面

在这里输入用户名及密码就可以进行入软件的主界面了!

下图是软件的主界面:

在以上的软件主界面的左边是各个功能模块的调用接口!

如:

抽取现有试卷:

点击后进入抽取现有试卷的功能界面。

自动生成试卷:

点击后进入自动生成试卷的功能界面。

手动生成试卷:

点击后进入手动生成试卷。

题库录入:

在这里可以往数据库里添加试题。

题库维护:

在这里可以对数据库里已有试题进行维护。

选项设置:

在这里可以对软件的其它选项进行设置。

软件的右上角有“帮助”和“关于”按钮!

在这里可以得到软件的使用帮助,和有关此软件的一些开发信息!

下图是自动生成试卷的界面:

上图中标为“第一部分”的树形控件是用来设置要生成的试卷的试题的抽取范围。

上图中标为“第二部分”的是用来设置各种题型的量及其分数。

上图中标为“第三部分”的是功能按钮,其中“生成试卷”用来根据“第二部分”的设置自动生成一份试卷。

“预览试卷”是用来预览刚生成的试卷。

“试卷答案”是用来查看刚生成的试卷的答案。

“保存试卷”是用来保存刚生成的试卷的信息。

 

下图是手动生成试卷的界面图:

上图中标为“第一部分”的树形控件是用来设置要生成的试卷的试题的抽取范围。

上图中标为“第二部分”的是用来设置各种题型的量及其分数。

上图中标为“第三部分”的是用来设置试卷的部分。

上图中标为“第五部分”的是用来选择要加入试卷的试题。

上图中标为“第四部分”的是功能按钮,其中“加入试卷”用来把在“第五部分”的选择试题加入到要生成的试卷中。

“保存试卷”是用来保存刚生成的试卷的信息。

 

下图是用户管理的界面:

上图中标为“第一部分”显示当前系统已有的用户。

上图中标为“第二部分”选择要进行的操作。

上图中标为“第三部分”设置相应的信息。

上图中标为“第四部分”。

可以删除用户或是提交对用户信息的修改。

 

下图是数据库功能模块的界面:

上图中标为“第一部分”可以改变数据库的存放路径。

上图中标为“第二部分”选择要进行的操作。

上图中标为“第三部分”选择还原的时间点或是执行备份操作。

 

4.软件实现

4.1OOP简介

每一个软件开发人员都会经常听到,看到“面向对象”这个词,程序员也时常把它挂在嘴上。

那么什么还是真正的“面向对象”?

什么是面向对象的编程?

是不是写几个类就算面向对象了?

为什么要面向对象?

“面向对象是一种思维方式,一种方法论!

“结构化编程”(SP)是一种编程方法,是从计算机的视角来抽象问题的方法。

而“面向对象编程”(OOP)也是一种编程方法,只不过它是从

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1