收藏 分享(赏)

优秀毕业设计-VB考试系统.doc

上传人:weiwoduzun 文档编号:1897367 上传时间:2018-08-29 格式:DOC 页数:9 大小:232.50KB
下载 相关 举报
优秀毕业设计-VB考试系统.doc_第1页
第1页 / 共9页
优秀毕业设计-VB考试系统.doc_第2页
第2页 / 共9页
优秀毕业设计-VB考试系统.doc_第3页
第3页 / 共9页
优秀毕业设计-VB考试系统.doc_第4页
第4页 / 共9页
优秀毕业设计-VB考试系统.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、精品文档!精品文档!Visual Basic 案例论文VB 考试系统班级:08 软件 2 班姓名:范达学号:精品文档!精品文档!VB 自动考试系统随着高科技的发展,考试系统自动化在现代社会已极为普遍,因此一个完美的自动考试系统,一直是众考核单位的渴求。该系统追求完美,但也不免瑕疵。一、算法分析:本系统采用回溯算法自动组卷,具有随机性、科学性、合理性,与随机选取法有一定区别,组卷速度较高。运行时计算机随机地抽取一道试题放入试题库,此过程不断重复,直到组卷完毕,或到已无法从题库中抽取满足控制指标的试题为止,该方法结构简单,对于单道题的抽取运行速度较快。回溯试探法是将随机选取法产生的每一状态类型纪录

2、下来,当搜索失败时释放上次纪录的状态类型,然后再依据一定的规律变换一种新的状态类型进行试探,通过不断的回溯试探直到试卷生成完毕或退回出发点为止,这种有条件的深度优先算法,对于状态类型和出题量都较少的题库系统而言,组卷成功率较好。回溯试探法组卷成功率高,但它是以牺牲大量的时间为代价的,本软件只是个小型的单科考试组卷系统,结构简单,出题量也较少,所以本系统选择相对简单,且组卷成功率较好的回溯试探法进行组卷。二、回溯算法: 回溯试探法的应用回溯算法也叫试探法,它是一种系统地搜索问题的解的方法,其基本思想是:从一条道往前走,能进则进,不能进则退回来,换一条道再试试。利用回溯算法解决问题的一般步骤为:(

3、1)定义一个解空间,它包含问题的解;(2)利用适于搜索的方法组织解空间;(3)利用深度优先法搜索解空间;(4)利用限界函数避免移动到不可能产生解的子空间。 问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特点。 回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的原则,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的原则进行搜索。回溯算法在用来求问题的所有解时,要回溯

4、到根,且根结点的所有子树都已被搜索遍才结束,而回溯法在用来求问题的任一解精品文档!精品文档!时,只要搜索到问题的一个解就可以结束。搜索,即全面访问所有可能的情况。分为两种:一是不考虑给定问题的特有性质,按事先顶好的顺序,依次运用规则,即盲目搜索的方法;另一种则考虑问题给定的特有性质,选用合适的规则,提高搜索的效率,即启发式的搜索。本系统使用的是回溯法的启发式搜索,以试题题型,试题分值和选题数量为约束条件进行随机搜索,而把设置的试卷总分数作为一个解空间。如果各题型分值之和等于用户设置的试卷总分数,则产生一个有效解,系统生成一份试卷,试题的题型,编号,分值等信息储存进试题库表中。系统通过所存信息搜

5、索数据库,获取试题内容,并组成一份完整试卷。三、系统简介:自动组卷自动组卷时,系统随机抽取试题,组成一份完整的试卷,包括选择、判断、填空三类。本系统使用的是回溯探取法随机抽题。其主要过程如下:精品文档!精品文档!(1)用户登陆后,点击开始考试,初始化随机数生成器,生成试题。(2)系统根据题型数量在各题型表中随机抽取试题,并对其进行排序,如有重复则返回继续搜索,防止试题被重复选取,一直到抽取试题数等于用户设置的各题型的试题数量。(3)系统根据数据库表 TSOFT 中信息搜索题库试题内容,生成一份完整的试卷。由于本系统记录用户信息,所以每位考生只允许参加一次考试。下面是本系统考试的基本流程图:四、

6、编程大致思路流程:本考试系统具备一般考试系统的基本功能,能够自动打分,并且在用户考试时,系统自动显示考试时间,以便用户充分利用有限时间答题,用户交卷后,试卷自动保存到数据库中,方便后台查询控制。程序开始 抽取试题 考试 交卷 自动打分自动计时精品文档!精品文档!五、部分重要代码:自动生成试卷Dim rs As New ADODB.Recordset 声明认识为记录集对象Dim XZT As Long 选择题比例Dim PDT As Long 判断题比例Dim TKT As Long 填空题比例Dim TMLX As Long 题目类型Dim TMID As Long 题目编号Dim Resul

7、t(1 To 100) As String 用于记录选出的试卷题目Dim Sel() As String 存储题目类型和题目编号Dim i As Long 用于循环的变量Dim ct As Long 记录的条数程序开始存入数据库加载试题设判分标准、题型比例保存试题题库试题充分NO出题用户抽题YES精品文档!精品文档!Dim th As Long 随机的题号Dim j As Long 用于循环的变量Dim lUB As Long 数组上限On Error GoTo Err1Screen.MousePointer = 11 设置鼠标形状Sql = “select * from tb_Param W

8、HERE id=1“ 把获取系统参数的 SQL 语句赋给字符串变量 Sqlrs.Open Sql, cnn, adOpenStatic, adLockReadOnly 以只读的方式静态的打开Sql 执行的结果的记录集If rs.RecordCount 0 Then 如果记录集不为空XZT = rs.Fields(“xzt_bl“) 整形变量 XZT 记录选择题的比例XZTFZ = rs.Fields(“xzt_fz“) 整形变量 XZTFZ 记录选择题的分值PDT = rs.Fields(“pdt_bl“) 整形变量 PDT 记录判断题的比例PDTFZ = rs.Fields(“pdt_fz“

9、) 整形变量 PDTFZ 记录判断题的分值TKT = rs.Fields(“tkt_bl“) 整形变量 TKT 记录填空题的比例TKTFZ = rs.Fields(“tkt_fz“) 整形变量 TKTFZ 记录填空题的分值Else 如果记录集为空MsgBox “还没有设定系统参数,请您与系统管理员联系!“, vbOKOnly + vbInformation 显示错误Me.Hide 卸载考试窗体frm_Stu.Show 显示学生窗体Exit Sub 跳出 sub 过程End If 结束 if 语句将所有的选择题读出来放在数组中If Not rs Is Nothing Then 如果记录集不为空精

10、品文档!精品文档!If rs.State = adStateOpen Then 如果记录集在打开状态rs.Close 关闭记录集End If 结束 if 语句Set rs = Nothing rs 设为空End IfSql = “SELECT * FROM tb_topicstor WHERE typeid=0“ 把选取所有的选择题的SQL 语句赋给变量 Sqlrs.Open Sql, cnn, adOpenStatic, adLockReadOnly 以只读的方式静态的打开Sql 执行的结果的记录集ct = rs.RecordCount 把记录集中的元组数赋给变量 ctIf ct XZT /

11、 XZTFZ Then 如果题库中试题数目小于考试试题数MsgBox “题库中选择题数目小于试卷要求的题目数,请与管理员联系!“, _vbOKOnly + vbInformation 提示错误GoTo Err2 转向错误处理ElseIf ct = XZT / XZTFZ Then 如果题库中试题数目等于考试试题数ReDim Sel(1 To ct) 重新为动态数组分配内存空间将选择题的题目类型、题目编号存起来For i = 1 To ct 循环读取记录集的题目号Sel(i) = “0“ & “-“ & CStr(ToLong(rs(“topicid“) 把题目类型和题目号存到数组中rs.Mov

12、eNext 转向下一条记录Next i i 值加 1If Not rs Is Nothing Then 如果记录集不为空If rs.State = adStateOpen Then 如果记录集在打开状态rs.Close 关闭记录集End If 结束 if 语句Set rs = Nothing 记录集设为空End If 结束 if 语句根据随机数产生选择题For i = 1 To (XZT / XZTFZ) 设定循环值,精品文档!精品文档!XZT / XZTFZ 为选择题个数For j = th + 1 To lUB 把题号赋给 jSel(j - 1) = Sel(j) 调整数组 Sel:将已经

13、产生的去掉Next j j 加 1End If 结束 if 语句ReDim Preserve Sel(1 To lUB) 重新为动态数组分配内存空间Next i i 加 1如果题库中试题数目等于考试试题数ElseReDim Sel(1 To ct) 重新为动态数组分配内存空间For i = 1 To ct 循环读取记录集的题目号Sel(i) = “0“ & “-“ & CStr(ToLong(rs(“topicid“) 把题目类型和题目号存到数组中rs.MoveNext 转向下一条记录Next i i 值加 1If Not rs Is Nothing Then 如果记录集不为空If rs.St

14、ate = adStateOpen Then 如果记录集在打开状态rs.Close 关闭记录集End If 结束 if 语句Set rs = Nothing 记录集设为空End If 结束 if 语句For i = 1 To (XZT / XZTFZ) 设定循环值,XZT / XZTFZ 为选择题个数lUB = UBound(Sel) 读取数组 sel()的下标赋给变量 1UBRandomize 初始化th = Int(lUB * Rnd() + 1) 产生随机题号Result(i) = Sel(th) 将产生的题目放在 Result 中If th lUB Then 调整数组 Sel:将已经产生的去掉For j = th + 1 To lUB 把题号赋给 jSel(j - 1) = Sel(j) 调整数组 Sel:将已经产生的去掉Next j j 加 1精品文档!精品文档!End If 结束 if 语句ReDim Preserve Sel(1 To lUB - 1) 重新为动态数组分配内存空间Next iEnd If由于本系统自动生成试卷,所以对于试卷知识覆盖面的问题不好控制,这也是本系统尚未解决的一个问题,正是所谓的瑕疵所在。

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

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报