用VB编写报分程序 桂柯 2001年 14期 我们经常在计算器上、电话里听到小姐如银铃般美妙的报数声能否由计算机自动报分呢?当然可以。既然要报分,当然要有声音,你就用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上,运行通过。