优秀毕业设计-VB考试系统.doc_第1页
优秀毕业设计-VB考试系统.doc_第2页
优秀毕业设计-VB考试系统.doc_第3页
优秀毕业设计-VB考试系统.doc_第4页
优秀毕业设计-VB考试系统.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档!Visual Basic案例论文VB考试系统班级:08软件2班姓名:范达学号:VB自动考试系统随着高科技的发展,考试系统自动化在现代社会已极为普遍,因此一个完美的自动考试系统,一直是众考核单位的渴求。该系统追求完美,但也不免瑕疵。一、算法分析:本系统采用回溯算法自动组卷,具有随机性、科学性、合理性,与随机选取法有一定区别,组卷速度较高。运行时计算机随机地抽取一道试题放入试题库,此过程不断重复,直到组卷完毕,或到已无法从题库中抽取满足控制指标的试题为止,该方法结构简单,对于单道题的抽取运行速度较快。回溯试探法是将随机选取法产生的每一状态类型纪录下来,当搜索失败时释放上次纪录的状态类型,然后再依据一定的规律变换一种新的状态类型进行试探,通过不断的回溯试探直到试卷生成完毕或退回出发点为止,这种有条件的深度优先算法,对于状态类型和出题量都较少的题库系统而言,组卷成功率较好。回溯试探法组卷成功率高,但它是以牺牲大量的时间为代价的,本软件只是个小型的单科考试组卷系统,结构简单,出题量也较少,所以本系统选择相对简单,且组卷成功率较好的回溯试探法进行组卷。二、回溯算法: 回溯试探法的应用回溯算法也叫试探法,它是一种系统地搜索问题的解的方法,其基本思想是:从一条道往前走,能进则进,不能进则退回来,换一条道再试试。利用回溯算法解决问题的一般步骤为:(1)定义一个解空间,它包含问题的解;(2)利用适于搜索的方法组织解空间;(3)利用深度优先法搜索解空间;(4)利用限界函数避免移动到不可能产生解的子空间。 问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特点。 回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的原则,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的原则进行搜索。回溯算法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束,而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。搜索,即全面访问所有可能的情况。分为两种:一是不考虑给定问题的特有性质,按事先顶好的顺序,依次运用规则,即盲目搜索的方法;另一种则考虑问题给定的特有性质,选用合适的规则,提高搜索的效率,即启发式的搜索。本系统使用的是回溯法的启发式搜索,以试题题型,试题分值和选题数量为约束条件进行随机搜索,而把设置的试卷总分数作为一个解空间。如果各题型分值之和等于用户设置的试卷总分数,则产生一个有效解,系统生成一份试卷,试题的题型,编号,分值等信息储存进试题库表中。系统通过所存信息搜索数据库,获取试题内容,并组成一份完整试卷。三、系统简介:自动组卷自动组卷时,系统随机抽取试题,组成一份完整的试卷,包括选择、判断、填空三类。本系统使用的是回溯探取法随机抽题。其主要过程如下:(1)用户登陆后,点击开始考试,初始化随机数生成器,生成试题。(2)系统根据题型数量在各题型表中随机抽取试题,并对其进行排序,如有重复则返回继续搜索,防止试题被重复选取,一直到抽取试题数等于用户设置的各题型的试题数量。(3)系统根据数据库表TSOFT中信息搜索题库试题内容,生成一份完整的试卷。由于本系统记录用户信息,所以每位考生只允许参加一次考试。下面是本系统考试的基本流程图:程序开始抽取试题考试交卷自动打分自动计时四、编程大致思路流程:本考试系统具备一般考试系统的基本功能,能够自动打分,并且在用户考试时,系统自动显示考试时间,以便用户充分利用有限时间答题,用户交卷后,试卷自动保存到数据库中,方便后台查询控制。程序开始存入数据库加载试题设判分标准、题型比例保存试题题库试题充分NO出题用户抽题YES五、部分重要代码:自动生成试卷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 Result(1 To 100) As String 用于记录选出的试卷题目 Dim Sel() As String 存储题目类型和题目编号 Dim i As Long 用于循环的变量 Dim ct As Long 记录的条数 Dim th As Long 随机的题号 Dim j As Long 用于循环的变量 Dim lUB As Long 数组上限 On Error GoTo Err1 Screen.MousePointer = 11 设置鼠标形状 Sql = select * from tb_Param WHERE id=1 把获取系统参数的SQL语句赋给字符串变量Sql rs.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) 整形变量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 如果记录集不为空 If rs.State = adStateOpen Then 如果记录集在打开状态 rs.Close 关闭记录集 End If 结束if语句 Set rs = Nothing rs设为空 End If Sql = SELECT * FROM tb_topicstor WHERE typeid=0 把选取所有的选择题的SQL语句赋给变量Sql rs.Open Sql, cnn, adOpenStatic, adLockReadOnly 以只读的方式静态的打开Sql执行的结果的记录集 ct = rs.RecordCount 把记录集中的元组数赋给变量ct If ct XZT / 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.MoveNext 转向下一条记录 Next i i值加1 If 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 把题号赋给j Sel(j - 1) = Sel(j) 调整数组Sel:将已经产生的去掉 Next j j加1 End If 结束if语句 ReDim Preserve Sel(1 To lUB) 重新为动态数组分配内存空间 Next i i加1 如果题库中试题数目等于考试试题数 Else ReDim Sel(1 To ct) 重新为动态数组分配内存空间 For i = 1 To ct 循环读取记录集的题目号 Sel(i) = 0 & - & CStr(ToLong(rs(topicid) 把题目类型和题目号存到数组中 rs.MoveNext 转向下一条记录 Next i i值加1 If 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为选择题个数 lUB = UBound(Sel) 读取数组sel()的下标赋给变量1UB Randomize 初始化 th = Int(lUB * Rnd() + 1) 产生随机题号 Result(i) = Sel(th) 将产生的题目放在Result中 If th lUB Then 调整数组Sel:将已经产生的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论