用VB编写报分程序

我们经常在计算器上、电话里听到小姐如银铃般美妙的报数声,能否由计算机自动报分呢?当然可以。既然要报分,当然要有声音,你就用Win98自带的录音机录上0到10这十一个数字,每个数字保存为一个WAV文件(取名为0.wav、1.wav、……10.wav),还有点、百、千、万、分这五个字也要分别保存为WAV文件(取名为d.wav、b.wav、q.wav、w.wav、f.wav)。并将这些文件与下面编写的工程文件放在同一文件夹下。经我多次实践,每个WAV文件的发音时长为0.38秒为宜。
   接下来,我们就可以开始编程了。在VB6中新建一个工程文件,在Form1中建立一个Textbox控件Text1,两个CommandButton控件Command1和Command2。Text1的Text属性为空,Command1的Caption属性为“报分”,Command2的Caption属性为“退出”。
  #1 源程序如下:
   Option Explicit
   Private Declare Function sndPlaySound Lib “winmm.dll” Alias “sndPlaySoundA” (ByVal lpszSoundName As String,ByVal uFlags As Long) As Long
   Private Sub bf_zcx(x,y,z)'报分子程序,y为数x的长度,z为数x的整数位数
   Dim a,num,num1,i,t
   If Val(x) = 0 Then
   a = sndPlaySound(App.Path + “\” + “0.wav”,&H0)'报0
   GoTo aa 'App.Path返回工程文件或EXE文件的当前路径
   End If
   t = 1
   For i = 1 To z '报整数部分
   num = Right(Left(x,i),1)
   If Not (i = 1 And z = 2 And num = 1) Then '当x为十位数,且十位数为1时,不报1
   If num = 0 Then
   t = 0 '当前数num为0时,不报0
   Else
   If t = 0 Then '当前数不为0,而其前一数为0时,报0和当前数num
   a = sndPlaySound(App.Path + “\” + “0.wav”,&H0)'报0
   a = sndPlaySound(App.Path + “\” & num & “.wav”,&H0)'报数num
   t= 1
   Else
   a = sndPlaySound(App.Path + “\” & num & “.wav”,&H0)'报数num
   End If
   End If
   End If
   If z - i + 1 = 5 And num <> 0 Then '当num为0时,不报万
   a = sndPlaySound(App.Path + “\” + “w.wav”, &H0)'报万
   End If
   If z - i + 1 = 4 And num <> 0 Then '当num为0时,不报千
   a = sndPlaySound(App.Path + “\” + “q.wav”,&H0)'报千
   End If
   If z - i + 1 = 3 And num <> 0 Then'当num为0时,不报百
   a = sndPlaySound(App.Path + “\” + “b.wav”,&H0)'报百
   End If
   If z - i + 1 = 2 And num <> 0 Then'当num为0时,不报十
   a = sndPlaySound(App.Path + “\” + “10.wav”,&H0)'报十
   End If
   Next i
   If y = z Then GoTo aa
   a = sndPlaySound(App.Path + “\” + “d.wav”,&H0)'报点
   t = 1
   For i = z + 2 To y'报小数部分
   num = Right(Left(x,i),1)
   a = sndPlaySound(App.Path + “\” & num & “.wav”,&H0)'报数num
   If t >= 3 Then Exit For
   t = t + 1
   Next i
   aa:
   a = sndPlaySound(App.Path + “\” + “f.wav”,&H0)'报分
   End Sub
   Private Sub Command1_Click()
   Dim a,i
   If Text1.Text > 99999 Then
   i = MsgBox(“分数超过99999,不允许报分!”,vbExclamation,“错误”)
   GoTo aa
   End If
   a = Trim(Text1.Text)
   Call bf_zcx(a,Len(a), IIf(Int(Val(a)) = Val(a),Len(a),InStr(a,“.”) - 1))
   aa:
   End Sub
   Private Sub Command1_KeyPress(KeyAscii As Integer)
   If KeyAscii = 13 Then '13为回车键
   KeyAscii = 0 '避免计算机发出报警声
   Call Command1_Click
   End If
   End Sub
   Private Sub Command2_Click()
   Unload Me'本按钮控制软件的退出
   End Sub
   Private Sub Form_unLoad(cancel As Integer)
   End '退出程序
   End Sub
   Private Sub Text1_KeyPress(KeyAscii As Integer)
   If KeyAscii = 13 Then '13为回车键
   KeyAscii = 0 '避免计算机发出报警声
   Call Command1_Click
   Exit Sub
   End If
   If KeyAscii < 48 Or KeyAscii > 57 Then
   If KeyAscii <> 127 And KeyAscii <> 46 And KeyAscii <> 8 Then
   KeyAscii = 0
   Beep '发出报警声
   Exit Sub
   End If
   End If
   End Sub
   以上程序在Win98、VB6上,运行通过。