小键盘数字录入练习软件

Option Explicit
Private A0 As Integer, A1 As Integer, A2 As Integer, A3 As Integer, A4 As Integer, A5 As Integer, A6 As Integer
Private C1 As Boolean, C2 As Boolean
Private D1(3, 15) As Integer
Rem 分项统计面板
Private Sub Lab_M_Click()
Static S1 As Boolean
S1 = Not S1
If S1 Then
Picture1.Top = -6000
Picture4.Visible = True
Lab_M = "关闭"
Dim S2 As Integer
For S2 = 0 To 150 Step 10
Lab_F(S2) = D1(0, S2 / 10)
Lab_F(S2 + 1) = D1(1, S2 / 10)
Lab_F(S2 + 2) = D1(2, S2 / 10)

If D1(0, S2 / 10) > 0 Then
Lab_F(S2 + 3) = Int((D1(1, S2 / 10) / D1(0, S2 / 10)) * 10000) / 100 & "%" '录入正确率
Else
Lab_F(S2 + 3) = "00.00%"
End If
D1(3, 0) = D1(3, 0) + D1(0, S2 / 10)
D1(3, 1) = D1(3, 1) + D1(1, S2 / 10)
D1(3, 2) = D1(3, 2) + D1(2, S2 / 10)
If Combo1(2).Text = "仅有数字字符" And S2 < 60 And S2 <> 40 Then
Lab_F(S2) = "关闭"
Lab_F(S2 + 1) = "关闭"
Lab_F(S2 + 2) = "关闭"
Lab_F(S2 + 3) = "关闭"
End If
Next S2
Lab_F(160) = D1(3, 0)
Lab_F(161) = D1(3, 1)
Lab_F(162) = D1(3, 2)
If D1(3, 0) > 0 Then
Lab_F(163) = Int((D1(3, 1) / D1(3, 0)) * 10000) / 100 & "%" '录入正确率
Else
Lab_F(163) = "00.00%"
End If
Else

Picture1.Top = 960
Picture4.Visible = False
Lab_M = "详细"
Picture1.SetFocus
End If

End Sub

Rem 输入处理模块
Private Sub Picture1_KeyPress(KeyAscii As Integer)

Static S1 As Integer

If KeyAscii <> 13 And KeyAscii <> 8 Then A5 = A5 + 1 '输入字符数量统计

If Picture1.Top < 0 Then Picture1.Top = 960
If Picture4.Visible Then Lab_M_Click

Select Case KeyAscii
Case 42 To 57 '有效字符
D1(0, A0) = D1(0, A0) + 1 '总有效字符
If C2 Then Call Clearr: C2 = Not C2 '如果录入完一组 则在下一组录入第一个字符时清除上一组的录入显示
If KeyAscii <> 44 Then '在不等于","的情况下
Lab_S(A1).BackColor = &H4000& '恢复小键盘背景色
A1 = KeyAscii - 42 '转换成对应的标签索引号
Lab_B(A2) = Lab_S(A1) '将录入结果送到显示屏

If Lab_B(A2) = Lab_A(A3) Then '判断录入结果的正误 如果正确 则
D1(1, A0) = D1(1, A0) + 1 '录入正确的字符记数
Call Wave(KeyAscii + 52) '播报录入的字符
Call Dispy(A3) '下一录入字符颜色变换及字体加粗
A2 = A2 + 1 '显示框列计数
A3 = A3 + 1 '列计数
A6

= A6 + 1 '正确输入字符成绩统计

ElseIf Combo1(4).Text = "忽略输入错误" Then '当选择选项"忽略输入错误"时 则
Lab_B(A2).ForeColor = &H80& '显示屏显示错误的字符的颜色
Lab_S(A1).BackColor = &HFF& '小键盘出现错误的字符的颜色
Call Wave(112) '播报"错误"
D1(2, A0) = D1(2, A0) + 1 '录入错误的字符记数
Call Dispy(A3) '下一录入字符颜色变换及字体加粗
A2 = A2 + 1 '显示框列计数
A3 = A3 + 1 '列计数

Else
Lab_S(A0).BackColor = &H800000 '不允许更改小键盘字符背景色
Lab_B(A2).ForeColor = &H80& '显示屏显示错误的字符的颜色
Lab_S(A1).BackColor = &HFF& '小键盘出现错误的字符的颜色
Call Wave(112) '播报"错误"
D1(2, A0) = D1(2, A0) + 1 '录入错误的字符记数
End If
Else
Call Wave(112) '"错误"
End If
Case 8
Call Wave(114) '"退位"
'等待插入代码
Case 13
Call Wave(111) '"等于"
'等待插入代码
Case Else
Call Wave(112) '"错误"
End Select

If Lab_A(A3) = "" Then '换行处理
A4 = A4 + 1 '行计数
If A4 = 6 Then Call Runsum '当前所有组数据均录入完毕时 则重新产生一屏数据
A3 = 20 * A4 '组进位
Lab_S(A0).BackColor = &H4000& '恢复小键盘背景色
A0 = Asc(Lab_A(A3)) - 42 '将下组第一个待录入字符的值转换成对应的标签索引号
Lab_S(A0).BackColor = &H800000 '将下组第一个待录入字符在小键盘位置的颜色变换

Lab_A(A3).ForeColor = &HFFFFFF '将下组第一个待录入字符的颜色变换
Lab_A(A3).FontBold = True '将下组第一个待录入字符加粗显示
C2 = True '指定在显示屏上清除上一组录入数据标志为清除状态
Shape2(1).Top = Lab_A(A3).Top - 30 '数据组标示框移动到当前组
A2 = 0 '显示框列计数复位
End If

Lab_A(124) = A5 '录入字符总数
Lab_A(125) = A6 '录入正确字符数
Lab_A(126) = A5 - A6 '录入错误字符数
If A5 > 0 Then Lab_A(127) = Int((A6 / A5) * 10000) / 100 & "%" '录入正确率
Picture1.SetFocus
End Sub

Rem 数据发生器
Sub Runsum()
Dim S1 As Integer, S2 As Integer, S3 As Integer, S4 As Integer, S5 As Integer, S6 As Integer, S7 As Integer
Dim T1 As String, T2 As String

For S1 = 0 To 119: Lab_A(S1) = "": Lab_A(S1).ForeColor = &H8000&: Next S1 '显示数据清除
For S1 = 0 To 16: Lab_S(S1).BackColor = &H4000&: Next S1

'显示数据清除
S1 = Val(Combo1(0).Text) '数字长度
S2 = Val(Combo1(1).Text) '小数点位数

For S5 = 0 To 5 '产生5个符合条件的随机数
T1 = ""
T2 = ""
S4 = 0
If S2 > 0 Then S3 = S1 + 1 Else S3 = S1 '如果有小数点则增加一个小数点位
Do
Randomize (Timer)
If (S2 > 0 And S4 = S3 - S2 - 1) Or (S4 = 0 And S3 - S2 - 1 < 0) Then '产生小数点的条件 一是指定小数点位置
If S4 = 0 Or S1 <= S2 Then '如果小数点在第一位或数字长度比小数位数还少 则在数字前补0
T1 = T1 & "0."
T2 = T2 & "0."
S4 = S4 + 1 '数字记位
Else
T1 = T1 & "."
T2 = T2 & "."
End If
ElseIf S4 = 0 Then '如果是第一位数 则产生大于0的数 不允许为0
T1 = T1 & Int(Rnd() * 9 + 1)
T2 = T2 & Int(Rnd() * 9 + 1)
ElseIf S4 > 0 Then '产生其它随机数
T1 = T1 & Int(Rnd() * 10)
T2 = T2 & Int(Rnd() * 10)
End If
S4 = S4 + 1 '数字记位
Loop While S3 > S4

If Combo1(2).Text = "包含运算符号" Then '如果字符串包含有运算符号 则随机产生运算符 并用运算符连接两字段
T1 = T1 & Mid("+-*/", Int(Rnd() * 4 + 1), 1) & T2
End If
For S6 = 1 To Len(T1) '将产生的字符串分配给标签显示
Lab_A(S7) = Mid(T1, S6, 1) '分割字符串 每标签一字符
S7 = S7 + 1 '标签定位
Next S6
S7 = 20 * (S5 + 1) '标签组进位
Next S5

Shape2(0).Width = Lab_A(Len(T1)).Left - Lab_A(0).Left + 360 '标签组背景宽度
Shape2(1).Width = Shape2(0).Width - 180 '标签组框架定位 用于突出显示当前输入标签组
Shape2(1).Top = Lab_A(0).Top - 30: Shape2(1).Left = Lab_A(0).Left - 30 '同上
Picture1.Width = Shape2(0).Left + Shape2(0).Width + 180 '控件大小与位置
Me.Width = Picture1.Left + Picture1.Width + 360 '同上
If Me.Width < 8640 Then Me.Width = 8640
Picture2.Left = (Picture1.Width - Picture2.Width) / 2 '同上

Lab_A(0).ForeColor = &HFFFFFF
Lab_A(0).FontBold = True
Lab_S(Asc(Lab_A(0)) - 42).BackColor = &H800000
A0 = Asc(Lab_A(0)) - 42 '指定复位小键盘按钮颜色

A2 = 0 '输入列位置复位
A3 = 0 '全局列计数复位
A4 = 0 '全局行计数复位
End Sub

Rem 清除输入显示标签内容
Sub Clearr()
Dim S1 As Integer
For S1 = 0 To 19: Lab_B(S1) = "": Next S1
End Sub
Rem 当前输入字符组颜色更换
Sub Forasp(w1 As Integer)
Dim S1 As Integer
For S1 = w1 To w1 + 19
Lab_A(S1).ForeColor = &H80FF&
Next S1
End Sub

Rem 当前录入字符颜色变换及字体加粗
Sub Dispy(w1 As

Integer)
Lab_A(w1 + 1).ForeColor = &HFFFFFF
Lab_A(w1 + 1).FontBold = True
Lab_A(w1).ForeColor = &H80FF&
Lab_A(w1).FontBold = False
Lab_S(A0).BackColor = &H4000&
If Lab_A(A3 + 1) <> "" Then A0 = Asc(Lab_A(A3 + 1)) - 42
Lab_S(A0).BackColor = &H800000
Lab_B(A2).ForeColor = &H80C0FF '显示屏显示以字符的录入正确的颜色显示
End Sub

Rem 语音组件
Sub Wave(w1 As Integer)
If Combo1(3).Text = "开启语音提示" Then
Sound = LoadResData(w1, "WAVE")
sndPlaySoundFromMemory Sound(0), SND_ASYNC Or SND_MEMORY
End If
End Sub


Rem 选项更改
Private Sub Combo1_Click(Index As Integer)
If C1 Then Call Runsum '根据情况是否重置产生字符
If Picture4.Visible Then Lab_M_Click
Picture1.SetFocus
End Sub

Rem 返回焦点
Private Sub Combo1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
Picture1.SetFocus
End Sub

Rem 选项赋值
Private Sub Form_Activate()
Combo1(0).Text = "6位数字"
Combo1(1).Text = "2位小数"
Combo1(2).Text = "仅有数字字符"
Combo1(3).Text = "开启语音提示"
Combo1(4).Text = "直接覆盖错误"
'Combo1(5).Text = "智能加强弱项"
Call Runsum '字符产生器
C1 = Not C1 '进入字符产生器有效
Call Clearr '清除显示屏所有显示字符
End Sub

Rem 相应控件属性赋值
Private Sub Form_Load()
Dim S1 As Integer, S2 As Integer
For S1 = 0 To 160 Step 10
For S2 = 0 To 3
If S2 = 3 Then
Lab_F(S1 + S2).Caption = "--.--%"
Else
Lab_F(S1 + S2).Caption = "000"
End If
Lab_F(S1 + S2).BackStyle = 0
Next S2
Next S1
For S1 = 4 To 8
Combo1(0).AddItem S1 & "位数字"
Next S1

For S1 = 0 To 5
Combo1(1).AddItem S1 & "位小数"
Next S1
'Combo1(0).AddItem "随机长度"
'Combo1(1).AddItem "小数随机"
Combo1(2).AddItem "包含运算符号"
Combo1(2).AddItem "仅有数字字符"
'Combo1(2).AddItem "自动随机生成"
Combo1(3).AddItem "开启语音提示"
Combo1(3).AddItem "关闭语音提示"
Combo1(4).AddItem "直接覆盖错误"
Combo1(4).AddItem "忽略输入错误"
'Combo1(5).AddItem "智能加强弱项"
'Combo1(5).AddItem "字符概率相同"
End Sub

相关文档
最新文档