
建立凭证的有声校验系统.doc
4页建立凭证的有声校验系统 建立凭证的有声校验系统 朱伟民 一、引言 目前所流行的会计软件基本上都是“无声”的人机交互一般都是通过键盘、鼠标、显示屏、打印机实现的事实上,在开发会计软件时,我们可以引入多媒体技术,让电脑与人以“说话”的形式进行交流,传递指令和信息,从而使电算化会计核算工作做得更有效、更迅捷、更好 在帐务系统凭证输入方式设计中,我们可以使用语音输入技术(如IBM的Via Voice)将凭证读入电脑,实现凭证语音录入由于会计核算过程中所涉及的词汇量有限,重复出现频率高,因此此项技术实现难度将远低于一般的文章语音录入在帐务系统凭证校对和帐簿信息查询中,我们可以让电脑读凭证和帐簿,实现有声校对、有声查询本文就VFP系统环境下,如何应用多媒体技术开发有声凭证校验系统,作一个介绍 二、界面设计 本系统凭证审核界面(见附图)主要涉及两个表文件:记帐凭证表和声源文件表记帐凭证表结构如下: create table pzk (rq c (8), pzh n(4),zy c(40,fy c(2),kmdm1 c(5),yjkm1 c(14),ejkm1 c (14), jf1 n (12.2),df 1 n(12.2),kmdm2 c(5),yjkm2 c(14),e-jkm2 c(14),jf2 n (12.2),df2 n(12.2),kmdm3 c(5),yjkm3 c(14),ejkm3 c(14),jf3 n(12.2),df3 n(12.2),kmdm4 c(5),yjkm4 c(14),ejkm4 c(14),jf4 n(12.2),df4 n(12.2),hidan c(8),shenhe c(8),jizhang c(8),bz c(4) 其中各字段含义分别是:日期、凭证号、摘要、科目代码、一级科目名、二级科目名、借方金额、贷方金额、制单人、审核人、记帐人、凭证标志。
其中科目代码、科目名称、借方金额、贷方金额都重复设置了四个字段,以使表中一条记录对应一张凭证 声源文件表结构如下:create table sndjd(sd-name c(11),sdpath c(20) 其中sdname中存放应发声的文字作为检索标志,sdpath中存放声音文件在磁盘中的路径,如上表所示 在表单中设计了一组命令按钮,以实现凭证审核校对所需的各项功能表单中安排的科目代码文本框的目的,主要是供系统根据文本框内的科目代码检索出对应的发声文件所用在电脑中用“录音机”通过话筒录下各数字和会计科目对应的声音文件,存入C:\zw\wav子目录中,完成声源资料的储备 三、凭证有声校验的实现 本系统凭证的有声校验是借助于Foxtoold.fll中的工具函数Regfn()和Callfn(),通过调用动态链接库Mmsystem.dll中的API函数sndPlaySound实现的在表单中安排一个“有声校验”按钮,它的功能是对表单中的凭证号、科目名称、借贷方向及金额进行朗读,以供操作者校对实现此功能的相关程序代码如下: ADD OBJECT command8 AS commandbutton WITH; &&建立“有声校验”按钮 Top=309; Left=18; Height=25; Width=65; FontSize=11; Caption=”有声校验”; Name=“Command8” PROCEDURE Init public sound1, shuju set library to foxtools.fll &&装入程序库 sound1=regfn(“sndplaysound”,“CI”,“I”,Mm-system”) &&注册函数 ENDPROC PROCEDURE Unload =callfn(sound1,””,10) &&关闭声音及程序库 set library to clea dlls sele 1 use stpz dele for kmdm1=spac(6) pack use sele 2 use sele 1 ENDPROC PROCEDURE command8.Click sele 2 =callfn(sound1,”C:\zw\wav\pzh.wav”,1) =inkey(0.5) shuju=thisform.pzh1.value do snd &&调用snd.prg读凭证号 for I=1 to 4&&循环中依次读凭证中每行的科目名,借贷方向及金额 n=str(I) nkmdm=’kmdm’+allt(’&n’)+’1’ njf=’jf’+allt(’&n’)+’1’ ndf=’df’+allt(’&b’)+’1’ kkm=’thisform.’+allt(’&nkmdm’)+’’value’ jjf=’thisform.’+allt(’&njf’)+’.value’ ddf=’thisform.’+allt(’&ndf’+’.value’ loca for sndjd.cdname=allt(&kkm) &&由科目代码找科目名声音文件路径 ddd=sndjd.sdpath =callfn(sound1,“&ddd”,1)&&读科目名 =inkey(0.5) if &jjf0 and &ddf=0 =callfn (sound1,“C:\zw\wav\d.wav”,1) &&读借方 =inkey((0.5) shuju=&jjf endif if &jjf=0 and &ddf0 =Callfn(sound1,“C:\zw\wav\c.wav”,1) &&读贷方 =inkey(0.5) shuju=&ddf endif do snd&&调用snd.prg读金额 =inkey(0.8) endfor &&以上循环中依次读凭证中每行的科目名,借贷方向及金额 ENDPROC *********snd.prg********* sele 2 if shuju>=10000 and shuju0 &&若千位为0,只读数不读位权 =callfn(sound1,”C:\zw\wav.wav,1) =inkey(0.5) endif endif if shuju>=1000 and shuju0 =callfn(sound1,“C:\zw\wav.wav”,1) =inkey(0.5) endif endif if shuju>=100 and shuju0 =callfn(sound1,“C:\zw\wav.wav”,1) =inkey(0.5) endif endif if shuju>=10 and shuju0 &&读个位 loca for sndjd.sdname=allt(str(shuju)) ddd=sndjd.sdpath =callfn(sound1,“&ddd”,1) =inkey(0.5) shuju=shuju-int(shuju) endif if shuju>0 =callfn(sound1,“C:\zw\wav\dian.wav”,1) &&读小数点 =inkey(0.5) shuju=shuju*100 loca for sndjd.sdname=allt(str (int (shuju/10))) &&十分位数 ddd=sndjd.sdpath =callfn(sound1,“&ddd”,1) =inkey(0.5) shuju=shuju-int(shuju/10)*10 endif if shuju>0 loca for sndjd.sdname=allt(str (shuju)) &&读百分位数 ddd=sndjd.sdpath =callfn(sound1,“&ddd”,1) =inkey(0.5) endif sele 1 retu 以上子程序snd.prg只读出小于十万的数,小数点后只读两位。
若要读更大范围的数,可类似地扩充程序段Inkey()函数用来间隔两次发声时间,以保持语音清晰 本系统在带有声卡和音箱的pⅡ电脑上,使用Visual Foxpro 6.0软件编程,通过实际运行检验 作者单位:上海立信会计高等专科学校 。












