通信程序设计实习报告

上传人:1666****666 文档编号:37255277 上传时间:2021-11-02 格式:DOC 页数:12 大小:48.01KB
收藏 版权申诉 举报 下载
通信程序设计实习报告_第1页
第1页 / 共12页
通信程序设计实习报告_第2页
第2页 / 共12页
通信程序设计实习报告_第3页
第3页 / 共12页
资源描述:

《通信程序设计实习报告》由会员分享,可在线阅读,更多相关《通信程序设计实习报告(12页珍藏版)》请在装配图网上搜索。

1、通信工程程序设计实习报告 经过为期十天的通信实习,我认识到了很多程序设计方面的东西,也学到了很多专业方面的知识。从一开始上课时,我初步了解到了这几天的程序设计实习到底该做些什么,要做到什么样的程度,有些什么样的要求和内容。在老师所提供的几个选题中我们小组选择了现阶段使用的较多的语音查询系统“10086”,来进行我们的设计。第一天实习,是比较手忙脚乱的,也是毫无头绪的,都是没头苍蝇乱撞。鉴于第一次在机房里头旁边还有个电话机,我还是有点小激动的,首先便把东进语音卡小玩了一下。平常编程时,编的都是一些比较小的程序,只是些简单的算法。在编语音卡程序时,我发现平常我们所学的东西好像实用性非常差,我的实践

2、能力的缺乏。花了一天的时间,我就了解了一下语音卡使用的一部份内容,着重练习了MFC控件的使用。主要学习了如何添加按钮框,怎样实现点击按钮之后的内容的显示,以及按钮之间的内容的传递等。这一天的程序设计实习让我非常的担忧,我感觉我会的东西实在太少了,实在是不足以驾驭这样的实习,不过见大家都是这样,心情也没有那么差。之后,我们便做了语音卡的放音,一开始我们先自己试着做,但是实在是由于对这个东西的了解太少了,搞了半天也实在是不知道从何处下手。然后我就试着从老师所给的语音卡实习指导书和DBDK编程参考手册中寻找解决方法,遇到不知道的问题或者不明白的东西就百度或者询问老师,开始我们找到了BOOL WINA

3、PI StartPlayFile ( WORD wChnlNo, LPSTR FileName, DWORD StartPos )这个函数,但是对于函数的参数不了解,介于当时没有讲List,所以对于这样一个函数还是不知道从何下手的,上网百度后也没有找到比较好的讲解,正当我们手足无措的时候,老师给我们发过来一个示例,我们试运行了,直观地了解到了这个程序的功能。不过在运行时并没有直接的听到放音的效果,这下子又有点懵了,老师运行的时候明明是好的,怎么到了我们这儿就不行了呢?试了几次依然是什么声音都没有,我们便又开始寻找原因,对照函数看函数中的各个参数的意义,在看到通道号的时候,我们看了会儿才知道原来

4、是通道号错了,是我们的通道号和老师所使用的机子不一样导致的,之后我们修改了,便运行正常。当时感觉就是轻松啊,就一个放音就折腾了我们这么长时间,实在是令人费解。在这个过程中使用到的List控件,在对于UpdateData中的返回值及其含义在第一天的实习中我们就已经有了些许的了解。当返回值为TRUE时,表示将控件的内容保存到变量中;当返回值为FALSE时,表示将表示将变量的内容保存到控件中。当然在这个放音的制作过程当中,我们也运用到了列表框,这使得编写程序变得简单,而且很多功能也易于实现,显得更加简洁,这样会使得整个界面更加人性化。在做语音卡放音的整个过程中,我们还遇到了一些比较重要的问题。1.

5、如何收号?通过如下这样的一个函数来收号,前面的GetDtmfCode()函数的返回值是-1和116之间的数字,当有号收进去之后,则while判断成立,就继续进行下一个数字的录入,否则依然播放提示音要求用户的输入。while(code=GetDtmfCode(m_ValidCh)!=-1)Dtmflen+=ConvertDTMF(code);m_List1.SetItemText(m_ValidCh,2,收号);2. 收号之后在计算机中的存储与识别问题?计算机中数字的存储是用ASCII码值来表示的,所以我们需要用到函数来进行数值的转换,以适应计算机的运行要求。因为GetDtmfCode()函数的

6、返回值是这样表示的: 19:19键。 10:0 键。 11:*键。 12:键。 13:A 键。 14:B键。 15:C键。 16:D 键。所以我们可以用这样的函数来进行转换:char CMy2Dlg:ConvertDTMF(int ch)char c;switch(ch) case 10:c = 0;break;case 11:c = *;break;case 12:c = #;break; case 13: case 14: case 15: c=ch-13+a; break; case 0: c=d; break;default:c = ch + 0;/change DTMF from n

7、umber to ASCIIreturn c;3. DTMF缓存区的清空的相关问题?在每次收号的时候都要做到对Dtmf缓存区的清空,只有这样才能准确的判断到底收了几位数,以便程序作出正确的响应,而不至于是程序无法进行。还有就是Dtmf缓存区他也有一定的长度,如果输入的数字过多,会导致在列表框里显示的时候,出现数字的乱码等问题,不能达到预期的结果。4. 如何做到按键的时候停止语音的播放?我们可以设置在用户输入一个数字的时候则停止语音的播放,可以用if语句来判断,如果Dtmf的长度大于0,则停止语音的播放,但是收号继续,当收号的长度达到指定之时,则继续下一阶段的提示音的播放。5. 用户摘机之后电话

8、需要做出什么样的反应?只是我们会使用到OffHookDetect()函数,当函数返回值为0时,表明用户未摘机,此时继续发送振铃音;若函数返回值为1,表明用户摘机,就停止对用户发送振铃音。然后则开始10086客户服务热线的欢迎词以及相关服务的提示音。做完这个之后,我们便开始着手下一步的操作。当输入手机号码时,我们便会需要匹配,来确认数据库中是否有这样的手机号码,以防在接下来的操作中做无用功。遇到这样的问题,在一年的学习中,老师进场在一些这类的问题中提到数据库的使用,理所当然,我们首先想到的便是使用数据库,但是说会说,对数据库这个东西的使用确实不会的,所以我们便想到了数组,毕竟这东西是老生常谈的了

9、。我们开始建立了个haoma12的数组,只是做了个最简单的只匹配一个手机号码的程序,用strcmp(Dtmf,haoma)进行比较,当函数值为零时,则提示输入密码,并进行密码的匹配,否则用m_ChState继续回到上一步。程序如下:if(strcmp(haoma,Dtmf)=0)StartPlayFile(m_ValidCh,shurumima,0L);m_ChState=18;strcpy(mima,);elsestrcpy(mima,);m_ChState=19;但是鉴于在实际使用中的电话号码不可能只有这么一点点,所以我们必须要导入数据库,将程序与数据库连接,通过数据库来实现号码与密码的匹

10、配,这样才能大量的减少代码,提高代码的利用率,不至于拖沓冗长。在实验过程中我们连接的是Access数据库,所以我们在程序编写的时候需要添加文件的打开命令,使我们能够在匹配密码时进入数据库调用。m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=myphone.mdb,adModeUnknown);。但是我们在导入数据库之后,并不是说我们就能够直接运用数据库里面的数,我们还需要将数据库里面的数取出来,并且转换成适合vc+使用的形式才可以。在匹配密码时编写这样的函数来获取数据库中的密码:CString CMy2Dlg:get

11、mima(CString ss)variant_t var;/CString strName,strAge;CString SQL,str;str=;int hh=0;char*STRSQL;/SQL=SELECT * FROM phone WHERE phonenum=+shoujih+and password=+mima+;/+shoujih+SQL=SELECT * FROM phone WHERE phonenum=+ss+;STRSQL=SQL.GetBuffer(SQL.GetLength(); /AfxOleInit();m_pConnection.CreateInstance(

12、_uuidof(Connection);try m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=myphone.mdb,adModeUnknown);m_pRecordset.CreateInstance(_uuidof(Recordset);m_pRecordset-Open(STRSQL, m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);while(!m_pRecordset-adoEOF)/hh=1;var =

13、 m_pRecordset-GetCollect(_T(mima);if(var.vt!=VT_NULL)str= (LPCTSTR)_bstr_t(var); m_pRecordset-MoveNext(); m_pRecordset-Close(); m_pRecordset = NULL; if(m_pConnection-State)m_pConnection-Close(); m_pConnection= NULL;catch(_com_error *e)AfxMessageBox(e-ErrorMessage();return str;同样以后的话费,余额中也是如此。只有这样才能将

14、数据库中存储的字符串转换成程序中所要使用到的字符形式。当我们将密码从数据库中取出来,我们要做的就是将密码与相对应的号码进行匹配,从而进行下一步的操作,从相应的号码中取出相应的话费及余额的值提供给用户。密码匹配的程序代码如下:js=getmima(Dtmf); if(strcmp(mima,js)=0) /字符串比较是否相等,进行密码的匹配 m_List1.SetItemText(m_ValidCh,2,密码匹配上了); m_ChState=18; strcpy(mima,); else m_List1.SetItemText(m_ValidCh,2,密码不存在); strcpy(mima,);

15、 m_ChState=19; 当我们做完密码的匹对之后,我们便开始着手下一步的操作,将话费和余额通过语音读出来呈现给用户。这中间有涉及到几个比较重要的问题:1. 如何将话费和余额读出来?我们先用东进语音卡录入语音,然后将话费和余额读出来。这中间又会遇到两个问题:(1).如何将数据库中的数转换成为适合vc+的形式我们可以适应atoi函数进行转换,从而进行编辑。(2).如何将从数据库中取出来的书拆分成一个个的数字case 20:m=atoi(str2); if(m=100) n=1; else if(m=10) n=2;else n=3;if(m=0)StartPlayFile(m_ValidCh

16、,0,0L);m_ChState=24;a=m/100;b=(m-a*100)/10;c=(m-a*100-b*10); m_ChState=21;break;case 26:m=atoi(str3); if(m=100) n=1; else if(m=10) n=2;else n=3;if(m=0)StartPlayFile(m_ValidCh,0,0L);m_ChState=24;a=m/100;b=(m-a*100)/10;c=(m-a*100-b*10); m_ChState=21;break;(3).如何将数字按照人们的读数习惯读出来?(主要是解决如何将数值中存在的“0”按照人们的习

17、惯读通顺)case 21:if(n=1) k=a;if(n=2) k=b;if(n=3) k=c; m_ChState=22;if(n=4) m_ChState=24;break;case 22: if(k=0&c!=0&b!=0)|(k=0&c!=0) StartPlayFile(m_ValidCh,0,0L); /解决个位数十位数均为零和只有个位数为零时的读数问题 if(k=1) StartPlayFile(m_ValidCh,1,0L); if(k=2) StartPlayFile(m_ValidCh,2,0L); if(k=3) StartPlayFile(m_ValidCh,3,0L

18、); if(k=4) StartPlayFile(m_ValidCh,4,0L); if(k=5) StartPlayFile(m_ValidCh,5,0L); if(k=6) StartPlayFile(m_ValidCh,6,0L); if(k=7) StartPlayFile(m_ValidCh,7,0L); if(k=8) StartPlayFile(m_ValidCh,8,0L); if(k=9) StartPlayFile(m_ValidCh,9,0L); m_ChState=23; break; case 23: if(CheckPlayEnd(m_ValidCh) StopPl

19、ayFile(m_ValidCh);m_ChState=24; break;case 24: if(n=1)StartPlayFile(m_ValidCh,百,0L); if(n=2&b!=0)StartPlayFile(m_ValidCh,十,0L);/解决十位数为零的读数问题 if(n=3)StartPlayFile(m_ValidCh,元,0L); if(n=4)StartPlayFile(m_ValidCh,结束语,0L); n+; m_ChState=25; break;case 25: if(CheckPlayEnd(m_ValidCh) StopPlayFile(m_ValidC

20、h);m_ChState=21; if(n=5) m_ChState=5;n=1; break; case 5: if(CheckPlayEnd(m_ValidCh)StopPlayFile(m_ValidCh);m_ChState=8;break;2. 如果用户没有听清楚,我们该怎么办?当用户没有听清楚时可以要求系统重新读一遍,以满足用户的需求。免得用户重新拨打浪费时间。在用户听完后,我们可以再放一段提示音,然后收号,当code=12时,我们则将m_ChState=22。这样就能够重新来读一遍了。3. 如何让用户选择自己所需要收听的内容,话费还是余额? while(code=GetDtmfC

21、ode(m_ValidCh)!=-1) Dtmflen+=ConvertDTMF(code);m_List1.SetItemText(m_ValidCh,2,收号);if(code=1) m_ChState=4;i=4; break;else if(code=2) m_ChState=6; i=6; break;else if(code=3)m_ChState=7;i=7;break;4. 当用户收听完毕之后,我们该是提示用户接下来该返回到上一层菜单,还是什么也不说直接断线?按照客户服务热线对用户提供的比较人性化的服务,我们必须做到更加友好的界面。程序如下:while(code=GetDtmf

22、Code(m_ValidCh)!=-1)m_List1.SetItemText(m_ValidCh,2,收号); if(code=11) m_ChState=12; else if(code=12) m_ChState=i; else if(code=10) StartPlayFile(m_ValidCh,xiexie,0L); m_List1.SetItemText(m_ValidCh,2,感谢); Dtmflen=0; break;做到这儿,我们已经做的差不多了,只是有点小问题需要自己来修正一下。在这次通信程序设计实习中,我学到了很多东西,在这次设计实习中,我充分的将大一所学的C语言和C+结合到实际的应用中,在平常学习的基础上有了更深的了解和更加清晰的认识,不再像平常上课时的实验题那样针对性强,而是更加综合,更加要求我对所学内容的整合以及联系,这样会得到更加好的锻炼。通过这次在学校里的语音卡的实习,让我对通信这门专业有了稍微具体直观地认识,也会对我以后职业道路的专业知识以及实战经验方面的积累起到很大的作用。在这次实习中,我在遇到不会的问题以及记得不太清楚的问题时,就及时地想办法解答问题,这样对于知识的了解及消化有着相当好的帮助,能让自己更加好的掌握有关的知识。这次专业实习不仅让我体会到团队精神的重要性,更让我对自己所要学习的专业有了更加清醒地认识。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!