图3-2 程序总体流程图
3.2.1 公共登陆模块设计
所有用户都从本模块登陆,登陆界面(login/)上包括一个文本框用于输入用户名,一个文本框用于输入密码;包括两个按钮,用来区分考生登录,还是管理员登陆。点击登陆后,根据不同按钮的单击事件,连接到不同的
数据库,从相应的数据库表中查询用户名和密码,如查询到,则进入相应的页面,如未查询到,则弹出出错信息,用户点击确定重新输入用户名和密码登陆,图3-3示:
图3-3 用户登录界面
3.2.2 在线考试模块设计
考生登录后,进入考试须知页面(know1/),选择考试科目后,若未参加该科目的考试,则进入相应科目考试页面;否则,不能进入考试页面。该页面主要提供了一个考生选择考试科目的功能,以简单的超链接进入不同的科目考试页面。考试须知页面如图3-4示:
图3-4 考试须知页面
3.2.3 管理员功能模块设计
管理员登录后进入后台管理主页面(classintro/),由该页面可以登录到学生信息管理、科目管理、试题管理、成绩管理页面。如图3-6所示:
图3-6 后台管理主页面
4 部分页面实现详解
4.1 考试页面的实现
考试页面(exampage/)可以进行单选、多选、填空题这些客观题的考试。每一类型题都以一个Web用户控件来实现题目显示,试题是随机生成的,每次考试都不同的试卷,如图3-5所示:
图3-5 考试页面
系统以随机抽题来生成试卷,使用了一个随机函数。先在题库question表中得到每种题型在每次抽题供抽取的总题数count= SubjectInfo(Subject),随机选题时应在1-count之间选取,temp = Fix(count * Rnd(10))。由于试卷是考前随机抽题而得,考生在第一时间开启试卷,减少了接触试题的人员间环节,也在一定程度上防止了考生将试题传出考场,增强了试题的保密性其次,为了避免由于得到的随机数相同,而在一份试卷中抽到相同的考题,在设计题库结构时设置了haveselect标记字段,标记字段取值为0时,该题未被抽取,haveselect标记字段取值为1,表示该题已被抽取,不能再用。这统在抽题时,首先判断haveselect标记字段是否为0,如果该题已被抽过,则必取新的随机数重新抽取。下面以单选题为例来说明。
//将haveselect置为1,标记该题为已选
Public Function SetReaded(ByVal QuestionID As String)
strsql = "update question set haveselect=1 Where id=" & CInt(QuestionID)
ExeSQL(strsql)
End Function
//将haveselect置为0,该课程所有的考题初始化
Public Sub SetRead()
strsql = "update question set haveselect=0 where subjectname='" & Subject & "'"
ExeSQL(strsql)
End Sub
//用随机函数Rnd()来生成试题号
Public Sub DataBingToRep()
strsql = "select top " & 1 & " * from question Where subjectname='" & Subject & "' AND type='单选题'and haveselect= 0 "
Randomize()
count = SubjectInfo(Subject)
temp = Fix(count * Rnd(100))
If Qds.Tables(0).Rows.Count > 0 Then
GetRowInfo(Qds.Tables(0).Rows(temp))
Else
lblQesName.Text = "暂时没有" & Subject & "的单选题!"
End If
End Sub
//统计课程考题的数量, 获得count值
Function SubjectInfo(ByVal name As String) As Integer
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说计算机基于B/S的网上考试系统的设计与实现(6)在线全文阅读。
相关推荐: