• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
在pb中用语音读金额
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
在pb中用语音读金额
软件发布 在pb中用语音读金额
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> PB教程 >> 在pb中用语音读金额

在pb中用语音读金额

添加时间: 2006-2-21 20:37:43  作者: PowerBuilder教程  阅读次数:622   来源: http://www.d9soft.com

       

  1、将金额转换成大写金额;
  2、根据大写金额依次朗读出来;

    为此,需要完成以下内容:
  1、分别录制各WAV文件:0,1,2,3,4,5,6,7,8,9,元,角,分,拾,佰,仟,万,亿,整
  2、在工程中声明两个External 函数(Windows的API函数),用于发声;
         Function boolean sndPlaySoundA (string SoundName, uint Flags) Library "WINMM.DLL"
         Function uint waveOutGetNumDevs () Library "WINMM.DLL"
  3、新建一函数用于在程序中调用发声:
         Function PlaySound(string as_filename,integer ai_option) returns integer

  该函数的代码如下:
        uint lui_numdevs
        lui_numdevs = WaveOutGetNumDevs()
        If lui_numdevs > 0 Then
     sndPlaySoundA(as_filename,ai_option)
        return 1
        Else
    return -1
        End If

  4、新建一函数用于将小写金额转换成大写金额:
        Function xx2dx(Decimal ls) returns string

  代码实现如下:
  string dx_sz,dx_dw,str_int,str_dec,dx_str,fu,a,b,b2,c,d,result
  long num_int,num_dec,len_int,i,a_int,pp

  dx_sz = "零壹贰叁肆伍陆柒捌玖"
  dx_dw = "万仟佰拾亿仟佰拾万仟佰拾元" 
    /*处理小于零情况*/
  if ls<0 then
     ls = ls*(-1)
     fu = "负"
  else
       fu = ""
  end if

    /*取得整数及整数串*/
  dx_str = string(ls)
  if (ls>0) and (ls<1) then dx_str = "0"+dx_str
  pp = pos(dx_str,".")
  if pp>0 then
    str_int = mid(dx_str,1,pos(dx_str,".")-1)
  else
    str_int = dx_str
  end if
  num_int = long(str_int)

    /*取得小数及小数串*/
  if (ls>0) and (ls<1) then
    num_dec = ls * 100
  else
    num_dec = (ls - num_int) * 100
  end if
  str_dec = string(num_dec)
  len_int = len(str_int)
  dx_str = "" 
   /*转换整整部分*/
  for i = 1 to len_int
      /*a为小写数字字符,b为对应的大写字符,c为对应大写单位,d为当前大写字符串的最后一个汉字*/
     a= mid(str_int,i,1)
     a_int = long(a)
     b = mid(dx_sz,(a_int*2)+1,2)
     c = mid(dx_dw,((13 - len_int +i - 1)*2+1),2)
     if dx_str<>"" then
       d=mid(dx_str,len(dx_str)-1,2)
     else
        d= ""
     end if

     if (b="零") and ((d="零") or (b=b2) or (c="元") or (c="万") or (c="亿")) then  b = ""
     if (a="0") and (c<>"元") and (c<>"万") and (c<>"亿") then c=""
     if ((c="元") or (c="万") or (c="亿")) and (d="零") and (a="0") then
        dx_str = mid(dx_str,1,len(dx_str)-2)
        d=mid(dx_str,len(dx_str)-1,2)
        if ((c="元") and (d="万")) or ((c="万") and (d="亿")) then c = ""
     end if 
      dx_str = dx_str + b+ c
      b2 = b
  next

    /*处理金额小于1的情况*/
    if len(dx_str) <= 2 then dx_str= ""
    /*转换小数部分*/
    if (num_dec<10) and (ls>0) then
      a_int = long(str_dec)
      b = mid(dx_sz,(a_int*2+1),2)
      if num_dec = 0 then dx_str = dx_str + "整"
      if num_dec > 0 then dx_str = dx_str +"零"+b+"分"
    end if
 
    if num_dec >= 10 then
      a_int = long(mid(str_dec,1,1))
      a = mid(dx_sz,(a_int*2+1),2)
      a_int = long(mid(str_dec,2,1))
      b = mid(dx_sz,(a_int*2+1),2)
      if a<>"零" then a = a+"角"
      if b <> "零" then
    b = b+"分"
      else
   b= ""
      end if
      dx_str = dx_str + a + b
    end if
    if ls= 0 then dx_str = "零元整"
    dx_str = fu+dx_str
 
    result = dx_str
  return result
  5、声明一函数,用于最终调用:
        Function MyReadMoney(Decimal AMoney)
       
  代码实现如下:
  integer i,count
         string ls_dxje

  ls_dxje = xx2dx(Amoney)

  count = len(ls_dxje)

  for i= 1 to count step 2
   CHOOSE CASE mid(ls_dxje,i,2)
   CASE "零"
    playsound("0.wav",0)   
   CASE "壹"
    playsound("1.wav",0)   
   CASE "贰"
    playsound("2.wav",0)   
   CASE "叁"
    playsound("3.wav",0)   
   CASE "肆"
    playsound("4.wav",0)   
   CASE "伍"
    playsound("5.wav",0)   
   CASE "陆"
    playsound("6.wav",0)   
   CASE "柒"
    playsound("7.wav",0)   
   CASE "捌"
    playsound("8.wav",0)   
   CASE "玖"
    playsound("9.wav",0)   
   CASE "拾"
    playsound("十.wav",0)   
   CASE "佰"
    playsound("佰.wav",0)   
   CASE "仟"
    playsound("仟.wav",0)   
   CASE "万"
    playsound("万.wav",0)   
   CASE "亿"
    playsound("亿.wav",0)   
   CASE "元"
    playsound("元.wav",0)   
   CASE "角"
    playsound("角.wav",0)   
   CASE "分"
    playsound("分.wav",0)   
   CASE "整"
    playsound("整.wav",0)   
   END CHOOSE
  next

  6、在程序中,可以任意调用此函数。当然,可以适当加入出错处理一类的代码。
  7、备注:如果不能发声,应检查声音文件是否在可执行文件的同一路径,最好是在函数MyReadMoney中,对各wav文件直接加上路径如C:\temp

 

上下文章:

 

上一篇文章: PB代码优化 下一篇文章: PB动态报表的实现

相关文章:

  • 解决摄像头内置语音功能的烦扰
  • Cisco语音与IP通信:计算机桌面应用
  • V3mail:语音、视频邮件于一身
  • C#中用API实现MP3等音频文件的播放类
  • 语音合成与识别技术在C#中的应用

相关软件:

  • 超级语音计算器 2008 2.97
  • QQ语音打字专家 2.3
  • QQ语音聊天王 V2006
  • 语音精灵 2008 1.5
  • MyReader 语音阅读器 2.6.098
  • CycStream外语音频写读机 2.8.5.371

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • 第一章 什么是PowerBuilder
  • 第二章 PowerBuilder 入门之创建新...
  • 第二章 PowerBuilder 入门之定义表...
  • 第二章 PowerBuilder 入门之向数据...
  • 第二章 PowerBuilder 入门之向表中...
  • 第二章 PowerBuilder 入门之创建第...
  • 第二章 PowerBuilder 入门之创建应...
  • 第二章 PowerBuilder 入门之创建第...
  • 第二章 PowerBuilder 入门之创建数...
  • 第二章 PowerBuilder 入门之运行应...

PB教程阅读排行

  • 第二章 PowerBuilder 入门之创建新...
  • 第一章 什么是PowerBuilder
  • 第二章 PowerBuilder 入门之定义表...
  • 第二章 PowerBuilder 入门之向数据...
  • 第二章 PowerBuilder 入门之创建第...
  • 第二章 PowerBuilder 入门之创建应...
  • 第二章 PowerBuilder 入门之向表中...
  • 第二章 PowerBuilder 入门之创建数...
  • 第二章 PowerBuilder 入门之运行应...
  • 第二章 PowerBuilder 入门之创建第...

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有