微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用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属性为“退出”。
  源程序如下:
  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上,运行通过。