学生考试系统课程设计
此工程用于辅助学生考试,共有五个窗体结构:frmMain(主窗体,启动窗体),frmXz3
(单选窗体),frmXz4(多选窗体),frmTk(填空窗体),frmPd(判断窗体)。考生的答案分
别记在四个动态数组中,它们分别是 intXz3ans(),intXz4ans(),blnPdans(),strTkans()。前两个为
整形数组分别记录单选和多选题答案,第三和第四分别为布儿和字符型数组来记录判断题和
填空题答案。以下是编程过程中遇到的一些问题:
1,变量的存储问题
窗体模块级变量:intNumNow ,intNumAll 分别用来存储当前题号和当前类型题的题目总
数 。 在 主 窗 体 加 载 时 分 别 对 记 答 案 的 数 组 从 新 定 义 : intXz3ans(1 to intNumAll , 1 to
4),intXz4ans(1 to intNumAll,1 to 5),blnPdans(1 to intNumAll,1 to 3),strTkans(1 to intNumAll,1
to 2).
例如 intXz3ans(1 to intNumAll, 1 to 4)
1
2
3
4
1
2
3
4
5
6
7
8
9
10
11
表格中的数据或为“0”,或为“1”,前三列用于存放每题各选项的记录,选中为“1”,没选
为“0”,最后一列用于记录各题是否打做了不确定标记,若标记则为“1”,未标记则为“0”。
其它类型题与次类似。
2,函数过程的位置
另为此工程记录答案的数组和四个计算分数的函数过程都定义在标准模块中,便于各
窗体对不同题型和总分的计算。
3,提供帮助的随机性问题
3.1 在单选窗体中如下编程:
Private Sub cmdHelp_Click()
示
'随机性的去掉一个错误答案 并将其灰色显
Set recNow = dbTiku.OpenRecordset("select * from xz3 where qno=" & intNumNow)
If recNow!ans = "100" Then
i = Int(Rnd * 3) + 1
optAns(i).Enabled = False
ElseIf recNow!ans = "001" Then
i = Int(Rnd * 3)
optAns(i).Enabled = False
ElseIf recNow!ans = "010" Then
Do
i = Int(Rnd * 4)
If i <> 2 Then
Exit Do
End If
Loop
optAns(i).Enabled = False
End If
End Sub
3.2 在多选窗体中编写如下函数过程:
Private Sub cmdHelp_Click()
Randomize
Set recNow = dbTiku.OpenRecordset("select * from xz4 where qno=" & intNumNow)
If recNow!ans = "1111" Then
'若正确答案为全选,则直接给出答案
For i = 1 To 4
chkAns(i).Value = 1
chkAns(i).Enabled = False
Next
Else
Do
i = Int(Rnd * 5)
If i = 1 And Trim(recNow!ans) Like "0???" Then
Exit Do
ElseIf i = 2 And Trim(recNow!ans) Like "?0??" Then
Exit Do
ElseIf i = 3 And Trim(recNow!ans) Like "??0?" Then
Exit Do
ElseIf i = 4 And Trim(recNow!ans) Like "???0" Then
Exit Do
End If
Loop
chkAns(i).Enabled = False
End If
End Sub
掉用字符匹配函数辅助解决问题
3,为实现快速察看功能,在 Picure 中添加了一个下标为 0,名为 Cmdqno 的控件数组,在
点击快速察看按钮时为其动态赋值,并且改变它的 Caption 属性以显示相关信息,例如单选
窗体中此过程可如下编写:
Private Sub cmdScan_Click()
Dim j As Integer, k As Integer
Picture2.Visible = True
For i = 1 To intNumAll
Load cmdQno(i)
j = i \ 5: k = i Mod 5
With cmdQno(i)
.Top = 600 * j
.Left = 600 + (k - 1) * 600
If intXz3ans(i, 1) = 0 And intXz3ans(i, 2) = 0 And intXz3ans(i, 3) = 0 Then
.Caption = i & "未做"
.BackColor = vbRed
Else
.Caption = i & "已做"
.BackColor = vbGreen
End If
If intXz3ans(i, 4) = 1 Then
.FontBold = True
.FontUnderline = True
End If
.Visible = True
End With
Next
Picture1.Enabled = False
End Sub
斜体表示此题已做标记,背景颜色为红代表此题未做,绿色背景代表此题已经做过了。值得
注意的 Picture 为命令按钮 cmdQno()的载体,则命令按钮的坐标是相对于它的载体 Picture2
而言的。