图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 Whereupdate 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
strsql = "select * from question where subjectname='" & name & "' AND type='单选题'and haveselect=0 "
Dim cmd As New SqlDataAdapter(strsql, appconn)
cmd.Fill(Qds, "Info")
Return Qds.Tables("Info").Rows.Count
End Function
4.2 管理主页面的实现管理主页面是管理员进入后台管理后所看到的第一个页面,在该页面上有Label控件显示了管理员名,登录时间信息,一组超链接实现各个页面之间的跳转,以一个表格中加入超链接图片也可以在不同页面之间跳转,该页面主要是管理员欢迎界面,没有什么关键代码,只是超链接的使用。
4.3 学生信息管理页面(manstudentinfo/)的实现该页面用DataGrid控件显示了学生信息,并实现了分页显示,同时以下拉列表事件来实现按班级查询学生信息,其中班级是从数据库里查询出来的不重复的班级,还以下拉列表提供了按序号、学号、姓名进行的关键字查询,以超链接实现了跳转到添加、修改学生信息页面。如图4-1所示:
图4-1 学生信息管理页面
关键代码解释:
//定义数据库连接字符串,
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
//使用DISTINCT关键字搜索出数据库中的不同班级,class_name为下拉列表控件
comdstr2 = "select DISTINCT class from student"
class_name.DataSource = studs.Tables("student1")
class_name.DataBind()
class_name.Items.Insert(0, New ListItem("全部", "全部"))
//使第一项显示为“全部”
class_name.SelectedIndex = class_name.Items.IndexOf(class_name.Items.FindByText("全部"))
//使用Response.Redirect可以将网页转移至另外的网页上,使用的语法结构是:Response.Redirect网址,其中网址可以是相对地址或绝对地址,在此使用Response.Redirect("addstudentinfo/")跳转到修改学生信息页面
Session