设为首页 | 加入收藏 | 网站地图 | 在线报名 | 联系我们
首 页   我们的服务   培训的行业   短期培训   就业培训   企业培训   师资介绍   项目承包   Office内训   在线答疑
培训课程: VS.NET | ASP.NET | VB.NET | Ajax | C# | Java | J2ee | Jboss | Jsp | Struts | Hibernate | Eclipse | Spring | WebSphere | Asp | C/C++
   VC++ | PowerBuilder | Delphi | SQL Server 2000/2005 | Oracle 9i/10g/11g | Sybase | Linux | Unix | Sun Solaris | IBM Aix | 软件项目管理 | 配置管理
关于思源培训
中心简介
组织机构
企业文化
经营理念
新闻动态
媒体评价
技术支持
常见问题
位置示意
精品课程
在职短期进修提高培训 更多>>>
  VB.NET与.NET框架核心开发技术
  VS.NET企业级分布式技术
  J2EE企业级应用开发
  Hibernate/Eclipse/Spring等框架
  SQLServer2005系统管理、设计与开发
  Oracle 9i/10G管理、优化与开发
  VC++深入编程(含COM)
IT高端实用技术培训 更多>>>
  软件项目管理
  软件配置管理
  ITIL/ITSM Foundation
  网络信息安全
  HP Unix 操作系统管理
  IBM AIX操作、系统管理与维护
  Linux环境下嵌入式开发技术
项目实战、面向就业工程师培训
  JAVA软件工程师就业培训班
  微软.NET工程师就业培训班
  Java软件工程师暑假培训班
团体包班/内容定制/上门培训
  db2培训
    
首页 > 新闻动态
新闻动态
在pb中用语音读金额
《我要返回查看其它课程近期开课日期,详见课程体系表》
 

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

 
 
返回主页 | 关于我们 | 培训课程 | 在线报名 | 技术论坛 | 企业培训 | 资讯中心 | 承接项目 | 新会员注册 | 资料下载 | 招聘信息| 友情链接 | 网站地图| 联系我们
 
  版权声明:此网站相关信息如有侵犯您的版权,请及时通知我们,我们将及时加上您的版权信息或删除其内容,并向您致以诚挚的歉意。
报名咨询地址: 北京市石景山区杨庄路星宇写字楼411室(每天早晨8:30到晚上7:30全天提供咨询和报名服务,周末照常服务)
IT培训/计算机培训/电脑培训/计算机上门培训 地址: 北京市石景山区杨庄路星宇写字楼411室 邮政编码:100043
计算机培训/软件开发培训 报名咨询电话:010-51945271 51945272 51945273
电脑培训/IT培训团体/企业培训联系电话:010-51945272 51282934
MSN:ciitc@live.cn QQ:174629429 || 客服邮箱:abc@ciitc.com
Copyright© 2010 思源华创 法律顾问:刘勇律师
京ICP备09034985号