数据库原理课程设计题库管理系统.docx

上传人:b****7 文档编号:8971017 上传时间:2023-02-02 格式:DOCX 页数:53 大小:268.30KB
下载 相关 举报
数据库原理课程设计题库管理系统.docx_第1页
第1页 / 共53页
数据库原理课程设计题库管理系统.docx_第2页
第2页 / 共53页
数据库原理课程设计题库管理系统.docx_第3页
第3页 / 共53页
数据库原理课程设计题库管理系统.docx_第4页
第4页 / 共53页
数据库原理课程设计题库管理系统.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

数据库原理课程设计题库管理系统.docx

《数据库原理课程设计题库管理系统.docx》由会员分享,可在线阅读,更多相关《数据库原理课程设计题库管理系统.docx(53页珍藏版)》请在冰豆网上搜索。

数据库原理课程设计题库管理系统.docx

数据库原理课程设计题库管理系统

摘要

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

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

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

以做一个数据库原理这门课的题库系统为例,为了达到预期的标准本文最终选择了txt文本文件做为本系统的终端输出。

并且实现了以下主要功能试题数据库的创建、不同章节不同难度的试题录入、图片保存、试卷分析、自动生成试卷等功能,多次运行证明本系统运行较为稳定且各项功能运行得比较正确,基本达到了预期的要求。

关键词:

VisualBasic6.0,SQLServer2000,题库管理系统

1系统功能概述

1.1系统功能

系统功能介绍:

1、创建题库:

本系统适合不同科目的老师进行试题的录入,可根据不同的课程名创建不同的试题数据库,且自动生成简答题、单选题、多选题、填空题、难度值四张表。

题库维护系统:

该系统是适合不同课程的老师录入考试试题,本系统包括了题文的录入、题文的查找、题文的删除和修改,章节的设定,分值的设置,试题的难度设置,试卷分析,以及生成试卷的功能。

2、生成卷:

该系统是本软件的主要的功能的体现,不受分值和难易程度的限制,可以人为定义,同时在分析的过程中那判定合理性,并提示最高设置值,让老师更合理地考察不同程度的学生的学习情况。

3、各个试题数据库中主要包含以下实体及其属性:

(1)简答题(旅游团编号、旅游点名称、地理位置、旅游天数,价格,出发日期,返回日期)

(2)单选题(导游编号、导游姓名、性别、联系电话)

(3)多选题(游客编号、游客姓名、性别、年龄、联系电话)

(4)填空题(用户名、密码)

1.2系统结构总图

流程图:

题库系统

试卷分析

题库维护系统

退出

1试题的录入

2试题的删除

3试题的查找

4试题的修改

随机组卷

题文库

结构图:

1.3系统E-R模型

2数据库设计

2.1需求分析

1)设计试题生成功能,试题能分布整个教学内容

2)设计试题的难易程度分析功能

3)具有试题的答案生成功能

4)数据库设计及维护

5)程序的其它选项设置

2.2功能分析

1.每创建一个数据库将自动生成四种题型几个各个章节的数据表,因为在录入题目的时候要显示书本章节信息以供用户使用。

而在数据库里章节的存放是没有规则也即它们的顺序不一定按照真实书本的章节顺序来存储的。

但是在显示章节信息的时候必须按照书本的章节顺序来显示。

所以分别设置如下的各张表的数据类型:

'创建“章节”数据表

strSQL="CreateTable章节("_

&"编号intidentityprimarykey,"_

&"名称varchar(50)notnull)"

objCn.ExecutestrSQL

objCn.Close

SetobjCn=Nothing

MsgBox"数据库已成功创建!

"

由于数据库里章节的数量是不定的,故此种数据类型的变量必须是一种长度可变的类型才行。

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

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

IfcmbChapter<>""Then

objRs.Filter="章节="&cmbChapter.ItemData(cmbChapter.ListIndex)

IfobjRs.RecordCount>0ThenobjRs.MoveFirst

Show_Data

Else

objRs.Filter="章节=-99999"

Show_Data

EndIf

2.试卷分析的过程中,要考虑到一张试卷里面各个不同题目所在比例与试题库中该类试题占所有试题库中的比例之间的差异问题,所以在分析的过程中在成分不足或者成分超过的情况需要设置提示,整个参数分析代码为:

'分析章节中的题数分配

DimNews,i%,j%,strFilter$,Chapter%(3,2),k%

News=Array("判断题","单选题","多选题","填空题")

Fori=0To3

IfVal(txtScore(i))<>0AndVal(lblRemain(i))<>0Then

MsgBoxNews(i)&"试题剩余"&lblRemain(i)&"%未分配",vbCritical

txtScale(i).SetFocus

ExitSub

EndIf

Next

'检查章节题量分配是否有效

IfobjRsChapter.RecordCount<=0ThenExitSub

Fori=0To3

IfVal(txtScore(i))<>0Then

Forj=0TocmbChapter(i).ListCount-1

objRsChapter.MoveFirst

objRsChapter.Find"名称='"&cmbChapter(i).List(j)&"'"

strFilter="章节="&objRsChapter!

编号

SelectCasei

Case0'检查判断题题量分配是否有效

objRsJudge.Filter=strFilter

IfobjRsJudge.RecordCount

txtCount(i)/100)Then

MsgBox"<"&News(i)&"><"&objRsChapter!

名称&">中只有<"_

&objRsJudge.RecordCount&">道试题,小题百分比最多<"_

&Int(objRsJudge.RecordCount/Val(txtCount(i))*100)_

&">",vbCritical

cmbChapter(i).ListIndex=j

ExitSub

EndIf

'小题数通过检验,统计各类难度试题数量

Fork=0To2

objRsJudge.Filter=strFilter&"and难度="&k

Chapter(i,k)=Chapter(i,k)+objRsJudge.RecordCount

Next

Case1'检查单选题题量分配是否有效

objRsSingle.Filter=strFilter

IfobjRsSingle.RecordCount

txtCount(i)/100)Then

MsgBox"<"&News(i)&"><"&objRsChapter!

名称&">中只有<"_

&objRsSingle.RecordCount&">道试题,小题百分比最多<"_

&Int(objRsSingle.RecordCount/Val(txtCount(i))*100)_

&">",vbCritical

cmbChapter(i).ListIndex=j

ExitSub

EndIf

'小题数通过检验,统计各类难度试题数量

Fork=0To2

objRsSingle.Filter=strFilter&"and难度="&k

Chapter(i,k)=Chapter(i,k)+objRsSingle.RecordCount

Next

Case2'检查多选题题量分配是否有效

objRsMore.Filter=strFilter

IfobjRsMore.RecordCount

txtCount(i)/100)Then

MsgBox"<"&News(i)&"><"&objRsChapter!

名称&">中只有<"_

&objRsMore.RecordCount&">道试题,小题百分比最多<"_

&Int(objRsMore.RecordCount/Val(txtCount(i))*100)_

&">",vbCritical

cmbChapter(i).ListIndex=j

ExitSub

EndIf

'小题数通过检验,统计各类难度试题数量

Fork=0To2

objRsMore.Filter=strFilter&"And难度="&k

Chapter(i,k)=Chapter(i,k)+objRsMore.RecordCount

Next

Case3'检查填空题题量分配是否有效

objRsSpace.Filter=strFilter

IfobjRsSpace.RecordCount

txtCount(i)/100)Then

MsgBox"<"&News(i)&"><"&objRsChapter!

名称&">中只有<"_

&objRsSpace.RecordCount&">道试题,小题百分比最多<"_

&Int(objRsSpace.RecordCount/Val(txtCount(i))*100)&">",vbCritical

cmbChapter(i).ListIndex=j

ExitSub

EndIf

'小题数通过检验,统计各类难度试题数量

Fork=0To2

objRsSpace.Filter=strFilter&"and难度="&k

Chapter(i,k)=Chapter(i,k)+objRsSpace.RecordCount

Next

EndSelect

Next

EndIf

Next

'按难度检查题量分配是否合理

Fori=0To3

'检查难度属于“难”的题题量分配是否有效

IfChapter(i,0)

MsgBoxNews(i)&"题库中难度属于“难”的题只有<"_

&Chapter(i,0)&">道,难度百分比最大可为<"_

&Int(Chapter(i,0)/Val(txtCount(i))*100)_

&">",vbCritical

txtLevel0(i).SetFocus

ExitSub

EndIf

'检查难度属于“一般”的题题量分配是否有效

IfChapter(i,1)

MsgBoxNews(i)&"题库中难度属于“一般”的题只有<"_

&Chapter(i,1)&">道,难度百分比最大可为<"_

&Int(Chapter(i,1)/Val(txtCount(i))*100)_

&">",vbCritical

txtLevel1(i).SetFocus

ExitSub

EndIf

'检查难度属于“容易”的题题量分配是否有效

IfChapter(i,2)

MsgBoxNews(i)&"题库中难度属于“容易”的题只有<"_

&Chapter(i,2)&">道,难度百分比最大可为<"_

&Int(Chapter(i,2)/Val(txtCount(i))*100)_

&">",vbCritical

txtLevel2(i).SetFocus

ExitSub

EndIf

Next

MsgBox"试卷参数设置正确,可以生成试卷!

",vbInformation

'取消各个记录集的过虑设置

objRsSpace.Filter=""

objRsMore.Filter=""

objRsSingle.Filter=""

objRsJudge.Filter=""

cmdMakePaper.Enabled=True

ExitSub

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

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

同时,为了防止生成时间过长或者说代码编写出错时造成程序运行不停止,需要设置一个时间函数,控制试卷生成时间,本文定义的是30秒,如果超过这个时间将停止生成试卷并提示错误。

程序如下:

RandomizeTimer

DimLevel0%(3),Level1%(3),Level2%(3),i%,n%,strTest$,strAnswer$

DimCount%(3),Selected$,Chapter%(),Ok,Abcd,more%,doTimeAsLong

doTime=Timer'开始计算生成试题时间

Abcd=Array("A","B","C","D")

ReDimChapter(3,cmbChapter(0).ListCount-1)

'计算各类题型的难度小题数

Fori=0To3

n=Val(txtCount(i))

Count(i)=n

Level0%(i)=Int(Val(txtLevel0(i))*n/100)

Level1%(i)=Int(Val(txtLevel1(i))*n/100)

Level2%(i)=Int(Val(txtLevel2(i))*n/100)

IfLevel0%(i)+Level1%(i)+Level2%(i)<>nThen_

Level1%(i)=n-Level0%(i)-Level2%(i)

Next

Fori=0To3

cmbChapter(i).ItemData(0)=20

cmbChapter(i).ItemData

(1)=30

cmbChapter(i).ItemData

(2)=30

cmbChapter(i).ItemData(3)=20

Next

'计算个章节各类题型的小题数

Fori=0To3

Forj=0TocmbChapter(0).ListCount-1

Chapter(i,j)=Int(cmbChapter(i).ItemData(j)*Val(txtCount(i))/100)

Next

n=0

Forj=0TocmbChapter(0).ListCount-1

n=n+Chapter(i,j)

Next

Ifn<>Val(txtCount(i))ThenChapter(i,0)=Chapter(i,0)+Val(txtCount(i))-n

Next

'将cmbchapter列表itemdata中的百分比数转换为章节编号

Fori=0To3

Forj=0TocmbChapter(0).ListCount-1

objRsChapter.MoveFirst

objRsChapter.Find"名称='"&cmbChapter(i).List(j)&"'"

cmbChapter(i).ItemData(j)=objRsChapter!

编号

Next

Next

'生成试卷

Fori=0To3

Selected=""

SelectCasei

Case0'选择判断题

strTest=strTest&"一、简答题。

(共"&txtCount(i)_

&",每小题"&txtAvg(i)&"分,共"&txtScore(i)&"分)"&vbCrLf

strAnswer=strAnswer&"一、简答题。

(共"&txtCount(i)_

&",每小题"&txtAvg(i)&"分,共"&txtScore(i)&"分)"&vbCrLf

j=1

WhileCount(i)>0

'随即产生一个未选择的试题的记录序号

Do

IfTimer-doTime>30Then

MsgBox"本次生成判断题花费时间过长,退出重试!

",vbCritical

ExitSub

EndIf

n=Int(Rnd*objRsJudge.RecordCount+1)

LoopUntilInStr(Selected,"#"&n&"#")=0

Selected=Selected&"#"&n&"#"

objRsJudge.MoveFirst

objRsJudge.Moven-1

SelectCaseobjRsJudge!

难度

Case0

IfLevel0(i)>0Then

'检查本章试题是否已选够

Forn=0To3

IfcmbChapter(i).ItemData(n)=objRsJudge!

章节ThenExitFor

Next

IfChapter(i,n)>0Then

strTest=strTest&j&"、"&objRsJudge!

题干&"()"&vbCrLf

strAnswer=strAnswer&j&"、"

'IfobjRsJudge!

答案Then

'strAnswer=strAnswer&"错误"

'Else

'strAnswer=strAnswer&"正确"

'EndIf

strAnswer=strAnswer&vbCrLf

j=j+1

Chapter(i,n)=Chapter(i,n)-1

Level0(i)=Level0(i)-1

Count(i)=Count(i)-1

IfNotIsNull(objRsJudge!

图片)Then_

strTest=strTest&"本题图片:

"&objRsJudge!

图片

EndIf

EndIf

Case1

IfLevel1(i)>0Then

'检查本章试题是否已选够

Forn=0To3

IfcmbChapter(i).ItemData(n)=objRsJudge!

章节ThenExitFor

Next

IfChapter(i,n)>0Then

strTest=strTest&j&"、"&objRsJudge!

题干&"()"&vbCrLf

strAnswer=strAnswer&j&"、"

'IfobjRsJudge!

答案Then

'strAnswer=strAnswer&"错误"

'Else

'strAnswer=strAnswer&"正确"

'EndIf

strAnswer=strAnswer&vbCrLf

j=j+1

Chapter(i,n)=Chapter(i,n)-1

Level1(i)=Level1(i)-1

Count(i)=Count(i)-1

IfNotIsNull(objRsJudge!

图片)Then_

strTest=strTest&"本题图片:

"&objRsJudge!

图片

EndIf

EndIf

Case2

IfLevel2(i)>0Then

'检查本章试题是否已选够

Forn=0To3

IfcmbChapter(i).ItemData(n)=objRsJudge!

章节ThenExitFor

Next

IfChapter(i,n)>0Then

strTest=strTest&j&"、"&objRsJudge!

题干&"()"&vbCrLf

strAnswer=strAnswer&j&"、"

strAnswer=strAnswer&vbCrLf

j=j+1

Chapter(i,n)=Chapter(i,n)-1

Level2(i)=Level2(i)-1

Count(i)=Count(i)-1

IfNotIsNull(objRsJudge!

图片)Then_

strTest=strTest&"本题图片:

"&objRsJudge!

图片

EndIf

EndIf

EndSelect

Wend

Case1'卸载单选题

strTest=strTest&"二、单选题。

(共"&txtCount(i)_

&",每小题"&txtAvg(i)&"分,共"&txtScore(i)&"分)"&vbCrLf

strAnswer=strAnswer&"二、单选题。

(共"&txtCount(i)_

&",每小题"&txtAvg(i)&"分,共"&txtScore(i)&"分)"&vbCrLf

j=1

WhileCount(i)>0

'随即产生一个未选择的试题的记录序号

Do

IfTimer-doTime>30Then

MsgBox"本次生成单选题试题花费时间过长,退出重试!

",vbCritical

ExitSub

EndIf

n=Int(Rnd*objRsSingle.RecordCount+1)

LoopUnt

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

当前位置:首页 > 成人教育 > 自考

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

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