用Visual Basic实现20以内加减法出题器
2017-09-22张玄同
张玄同
摘 要 利用Visual Basic中的标签、文本框和命令按钮等基本控件编写“20以内加减法练习”程序。实现出题、判断正误、统计练习者正确率、结束练习、结束程序的功能。
关键词 任意;加减法练习;开始答题;结束答题;结束程序
中图分类号 TP3 文献标识码 A 文章编号 1674-6708(2017)194-0085-03
高二上学期学习《算法与程序设计》这门课,老师让学生在Visual Basic编程环境下学习编写一些功能简单易实现的程序,笔者对此也很有兴趣。笔者想到了小学时每天要做算术练习,如果能有程序自动为小学生出题,家长就不用为孩了买练习册了,于是笔者试着编写了能够帮助小学生练习20以内任意两个正整数的加减法练习程序。
笔者利用Visual Basic中的标签、文本框和命令按钮等基本控件实现了“20以内加减法练习”程序。其中自动出题的两个数不能被修改,所以用标签控件显示,减号和等号也是用标签控件显示,而最后的答题区需要答题者在此输入答案,文本框控件具有这个功能,所以笔者选择了文本框控件,为了让答题者能了解如何答題,我在下面用标签控件给出的操作提示。程序运行界面如图1所示。
当练习者单击“开始答题”按钮时程序随机出题,这时练习者可以在等号后的答题区输入答案,如果输入错误可以进行修改,确认答案正确后,敲键盘上的“Enter”键提交答案,程序会对练习者的答案进行正误判断并把结果显示在列表框中,以供练习者查看,并自动进入下一题的练习。如果练习者想停止答题,可单击“结束答题”按钮,程序会在列表框下显示练习者本次练习的情况统计,即共做了几题,对了几题,错了几题,如图2所示。如需继续练习,可再次单击“开始答题”按钮;如果要结束程序运行,可单击“结束程序”按钮。程序代码如下:
因为答题总数、答对的题目数和答错题目数要被两个事件过程用到,所以要在通用代码段变声明这4个变量:
Dim t As Integer, y As Integer, n As Integer
答题者单击“开始答题”按钮,程序就开始第一次随机出题。程序的随机出题功能是利用了Visual Basic中的随机函数Rnd来实现的,其中包括运算数的随机出现和加减法运算符的随机出现。为了做到被减数一定要不小于减数,笔者用了一个循环语句(Do While…Loop),当被减数小于减数时就重新随机产生减数,直到符合减法运算的要求为止。“开始答题”按钮(Command1)的单击事件过程代码如下:
Private Sub Command1_Click()
Dim c As Integer
t = 0
y = 0
n = 0
List1.Clear
Label5.Caption = “”
Randomize
Label1.Caption = Int(Rnd * 21)
Label3.Caption = Int(Rnd * 21)
c = Int(Rnd * 10) + 1
If c Mod 2 = 0 Then
Label2.Caption = “+”
Else
Label2.Caption = “-”
End If
If Label2.Caption = “-” Then
Do While Val(Label1.Caption) < Val(Label3.Caption)
Label3.Caption = Int(Rnd * 21)
Loop
End If
Text1.SetFocus
End Sub
如果答题者想中止练习,可以单击“结束答题”按钮。结束答题的同时程序会给出答题的正误情况及正确率。“结束答题”按钮(Command2)单击事件过程代码:
Private Sub Command2_Click()
Dim p As Single
p = y / t * 100
Label5.Caption = "共" & t & "道题," & "对了" & y & "道题,错了" & n & "道题。" & "正确率" & p & "%"
Label1.Caption = “”
Label3.Caption = “”
End Sub
如果答题者想停止练习,可以单击“结束程序”按钮,“结束程序”按钮(Command3)代码:
Private Sub Command3_Click()
End
End Sub
答题者输入完答敲回车键表示提交答案。输入答案和敲回车键都是按键的动作,所以用到文本框的按键事件过程。那么按键的动作是在输入答案还是结束答题呢?就要看答题者按的是否是“回车”键,键盘上的每一个键对应的都有编码,回车键的编码是13,所以我用if语句判断被按下键的编码是否是13,如果是13,再判断答案是否正确,如果答正确就把各标签及文本框的内容连接成一个字符串最后再串上"√",否则在最后串上”×”。t表示答题总数,y表示答对的题数,n表示答错的题数,每完成一道题,答题的总数就t加上1,如果答对了y的值就加上1,如果答错了n的值就加上1。由于此题已完成,所以要紧接着随机出下一道题,这部分代码和“开始答题”按钮的出题部分代码相同。文本框的按键事件过程代码:
Private Sub Text1_KeyPress(KeyAscii As Integer)endprint
If KeyAscii = 13 Then
If Label2.Caption = “+” Then
If Val(Label1.Caption) + Val(Label3.Caption) = Val(Text1.Text) Then
List1.AddItem Label1.Caption & Label2.Caption & Label3.Caption & "=" & Text1.Text & "√"
y = y + 1
Else
List1.AddItem Label1.Caption & Label2.Caption & Label3.Caption & “=” & Text1.Text & “×”
n = n + 1
End If
Else
If Val(Label1.Caption) - Val(Label3.Caption) = Val(Text1.Text) Then
List1.AddItem Label1.Caption & Label2.Caption & Label3.Caption & "=" & Text1.Text & "√"
y = y + 1
Else
List1.AddItem Label1.Caption & Label2.Caption & Label3.Caption & “=” & Text1.Text & “×”
n = n + 1
End If
End If
Text1.Text = “”
Randomize
c = Int(Rnd * 10) + 1
If c Mod 2 = 0 Then
Label2.Caption = “+”
Else
Label2.Caption = “-”
End If
Label1.Caption = Int(Rnd * 21)
Label3.Caption = Int(Rnd * 21)
If Label2.Caption = “-” Then
Do While Val(Label1.Caption) < Val(Label3.Caption)
Label3.Caption = Int(Rnd * 21)
Loop
End If
t = t + 1
End If
End Sub
非常感謝老师带领学生认真学习了这门课,让笔者对Visual Basic程序设计有了初步的认识。由于笔者学习Visual Basic编程时间不长,水平有限,对很多知识还没有掌握,可能程序还有需要改进的地方,笔者会在以后的学习中继续努力。希望笔者设计的这个程序能够帮助到需要的人。
参考文献
[1]信息技术(选修1算法与程序设计)[M].上海:上海科技教育出版社,2017.
[2]沈祥玖.VB程序设计[M].2版,北京:高等教育出版社,2003.endprint