当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > PowerBuliden > 实例代码 > 正文

在pb中用语音读金额

http://www.zk168.com.cn  招考学习网 2006-4-6 13:21:33
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
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

-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·BOG压缩机在液化石油气基地的应用
·LFCB-102型微波分相差动保护的应用
·基于PB6和ORACLE8开发“劳动信息管理系统”
·利用TDC组件实现对WEB页面的交互操作
·关于SBS改性沥青配合比设计及施工技术的探讨
·PowerBuilder的分布式计算技术及其应用
·PowerBuilder和MapInfo的集成开发技术
·基于Visual Basic快速开发现场电视监控系统
·PBX濒临被取代的危机—论程控交换机的生存与发展
·ASP技术访问WEB数据库 2
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>