已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
通信工程实习报告实习名称:通信工程实习实习班级:系别:通信工程教师姓名:学生:学号:一、 实习任务(2) 认识语音卡结构和功能,并初步学习掌握语音卡有关函数的使用。(6) 根据所学到的C与C+的有关知识,编写建立在语音卡基础上的程序高考成绩电话查询系统。并通过对程序的编写和修改,进一步加深对C语言与C+的认识,提高对其的掌握。(8) 预习编写程序时所需的数据库有关知识,并学习使用 Microsoft Office Access 建立数据库。(10) 学习用Microsoft Visual C+ 6.0编写MFC AppWizard应用程序,并学习相关MFC控件的使用。(13) 通过编写实用的应用程序,学习作为程序员的基本思想和素质,掌握团队合作的精神。二 、总体设计A. 功能模块1. MFC程序结构的建立。5. 语音卡相关函数的编写。包括相关变量的定义,初始化函数的编写,主程序的编写,语音卡自带函数的调用等。6. 数据库的使用。包括数据库的建立、编辑和调用。B. 程序主要功能3. 提示输入学号,输入学号后以# 结束。并将所输入的学号重复一遍。可以选择重新输入或继续进行。5. 从数据库进行学号查询,若学号错误则重新输入。7. 学号,密码输错一位可以按 * 删除。9. 密码输入以# 结束。进行学号与密码匹配,密码错误重新输入。密码错误三次播放忙音。11. 查询成绩,选择科目。单个科目逐个听取或全部收听。13. 成绩播放完毕可选择重新收听或返回上一层。若未检测到按键,则语音播放四遍后播放忙音。C. 详细设计(1) 建立MFC程序结构。使用函数m_List1.InsertColumn();以及函数m_List1.SetColumnWidth()构建工作区间。(5) 建立数据库,并编辑数据库。设定数据库名、表名,设定主键。(6) 主程序的编写。1.初始化语音卡函数的编写。2.设定时间循环。使用函数SetTimer(1,100,NULL)设定循环周期为0.1秒。并在函数OnTimer()中实现循环。并用switch/case函数和变量m_ChState进行控制。3.进行摘机检测函数的编写。包括摘机检测和播放语音welcome。提示输入学号,4.并以# 结束。5.编写接收学号的程序。通过GetDtmfCode()接收DTMF 双音多频信号,6.并在转换为相应的字符型数据后存入数组Dtmf32。写代码实现将所接收的学号播放出来。并通过让用户选择按1或2分别进行学号确认或重新输入学号。7.确认输入学号后从数据库中进行学号匹配,8.使用checkid()操作。学号匹配无误后接收密码。与接收学号方法相同9.。并进行学号密码同10.时匹配。匹配无误后进入播放成绩环节。如果错误三次则播放忙音。11.播放成绩环节。编写代码实现用户的选择:所有科目逐个播放或全部一次收听。函数getmath(),12.getenglish(),getchinese(),getlizong(),13.gettotal()从数据库中提取成绩。再编写代码将所提取的成绩播放。14.编写代码实现功能按*返回上一层和按#重复15.收听。并等待按键。若无按键则在播放语音四遍后播放忙音。16.编写挂机函数,17.将缓存清空及初始化。三 、难点与解决方法(一)循环的实现为了实现语音卡的循环使用了Settimer() 和Ontimer()函数进行计时,由于是初次接触该类函数,对其工作原理不清楚,因此程序的运行始终出错。经过请教老师得知SetTimer()函数设定了以0.1秒为周期的循环。每0.1秒从OnTimer()初始运行。因此对switch()的状态选择时应始终注意。(二)接收DTMF双音多频码并存储在本程序中,使用了GetDtmfCode()函数接收用户所输入的双音频信号并转化为数字,并用函数yzConvertDtmf()将数字转化为字符存放在字符数。在进行数码存储时,曾尝试使用Formate()函数进行转换,但并不适用于CString格式的变量,因而失败。经过商讨,使用了While()循环来实现:len=strlen(Dtmf);while(code=GetDtmfCode(m_ValidCh)!=-1)StopPlayFile(m_ValidCh);Dtmflen+=ConvertDTMF(code);从而将接收到的双音多频码存到了字符型组.Dtmf中。又考虑到将其转换为CString型字符串,故而:Dtmflen=0;赋值。从而解决了存储双音多频码的问题。(三)建立与数据库的链接由于成绩的查询时建立在数据库的基础上,因此建立与数据库的链接是关键。在建立链接关系时需要:(1)初始化COM库,引入ADO库定义文件,在stdafx.h头文件中加入语句#import c:program filescommon filessystemadomsado15.dllno_namespace rename(EOF,adoEOF)(2)在DLG头文件中定义:_ConnectionPtrm_pConnection; _CommandPtrm_pCommand;_RecordsetPtrm_pRecordset;(3)在)OnInitDialog()中加入AfxOleInit();但build函数时会被提示出现很多错误,经过询问老师得知,在复制三条语句之后必须使用Rebuild-all来建立全局的链接,否则只进行局部build程序会出错。(四)从数据库进行学号密码匹配以及提取数据由于初次使用数据库和 Microsoft Office Access ,导致不熟悉其中的函数。对查询匹配函数checkid()和getmath()使用很难上手。经过反复错误分析熟悉了其中工作原理:Checkid():m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=upc.mdb,adModeUnknown);/ m_pConnection指向所要搜寻的数据库upcSQL=SELECT * FROM student WHERE id=+ss+; /搜索数据库表student 中列id中 所有项,查询是否有与所传参数相同的项目。在进行密码与学号的同时匹配时需将SQL=语句改写为:SQL=SELECT * FROM student WHERE id=+ss+and password=+sss+;/+shoujih+此时将ss和sss导入的参数同时匹配数据库中数据,从而达到学号密码一一对应的目的。Getmath()需要将while循环中的检验匹配语句改成搜索提出数据语句:while(!m_pRecordset-adoEOF)var = m_pRecordset-GetCollect(_T(math);/搜索列math中的数据if(var.vt!=VT_NULL)str= (LPCTSTR)_bstr_t(var); m_pRecordset-MoveNext();将与导入的主键id对应的列math中的数据存入str中,从而达到提取数据的目地。(五)实现对数据的语音播放语音的逐字播放时利用switch()/case实现的,在语音播放的过程中,常常遇到本应播放的语音却未能正常执行,经过对每个问题的探索归纳总结,主要有以下几点:1、在进行后一条语音播放前为加检查前一条语音是否播放完毕,导致前一条被忽略。遇到此情况只需要在两条语音文件播放之间加上判断语句即可。if(CheckPlayEnd(m_ValidCh)stopPlayFile(m_ValidCh);2、case的跳转有误;导致语音播放的语句被忽略。此时只需要检查case判断条件即可完成纠错。(A)对学号实现语音播放主要思想是将收到的学号存入字符型数组id32中利用for()循环,以i为循环变量,将数组中的数据注意播放。一开始循环格式为for(i ;ilen; i+).但总不能达到预期的读出数据的效果经过分析终于得出错误原因。该for循环是出于时间循环OnTimer()中的,每0.1秒操作一次for循环,因此在判断循环主体时,无论是否成立,都执行一次i+,从而引起错误。经过改进,将i+放入循环主体中从而解决了问题。以下为改进后的程序代码:for(i=0;ilen-1;)if(CheckPlayEnd(m_ValidCh)topPlayFile(m_ValidCh);switch(id1i)case 0:StartPlayFile(m_ValidCh,0,0L);i+;break;case 1:StartPlayFile(m_ValidCh,1,0L);i+;break;case 2:StartPlayFile(m_ValidCh,2,0L);i+;break;case 3:StartPlayFile(m_ValidCh,3,0L);i+;break;case 4:StartPlayFile(m_ValidCh,4,0L);i+;break;case 5:StartPlayFile(m_ValidCh,5,0L);i+;break;case 6:StartPlayFile(m_ValidCh,6,0L);i+;break;case 7:StartPlayFile(m_ValidCh,7,0L);i+;break;case 8:StartPlayFile(m_ValidCh,8,0L);i+;break;case 9:StartPlayFile(m_ValidCh,9,0L);i+;break;(B)对分数实现语音播放:此阶段的播放与学号播放类似,但也有不同。即需要注意个位,十位,百位的读数。1、首先要将数据库中的CString型数据转换为整型数据,2、用到了函数atoi();3、将score=atoi()分解为百位,4、十位,5、个位 : BAI=(score/100); SHI=( (score/10)-(10*BAI) ); GE=( score-(100*BAI)-(10*SHI) );6、为了使语音能够播放连续,7、利用多个case将个位十位百位的语音播放串联起来。8、其中有几种特殊情况应注意(1)、没有百位,例如98.。(2)、没有十位,例如108或100或9。(3)、没有个位,例如110或100或0。对这几种特殊情况分别应考虑应对方法,可以用条件语句if(),通过改变不同条件下的case 0:达到正确读数的木的。例如:对于十位:case 0:if(BAI!=0)StartPlayFile(m_ValidCh,0,0L);m_ChState=15;else m_ChState=15;break; (六)实现功能“返回上一层”与“重复收听”对于一个面向电话语音的程序,实现通过接收按键达到“返回上一层”和“重复收听所选内容”是十分必须的。但其程序的编写并不是仅仅完成一个状态跳转就可以。尤其是此类建立在时间循环基础上的函数的编写,因为在状态跳转时的程序条件与将要跳转到的状态会有差别,所以跳转的同时必须将相关变量重新处理。刚开始编写代码时,仅仅用了“code=GetDtmfCode(m_ValidCh);”接受按键后就执行判断语句:if(code=12)m_ChState=19;/按# 返回上一层else if(code=11)m_ChState=9;/按* 重复收听。但是未能考虑到0.1秒的时间循环导致在状态跳转时出现差错:语音播放不了,不能重复收听,返回上一层时导致了死循环。经过反复研究,对程序作了修改,加上了语音播放判断语句if(DtmfHit(m_ValidCh)StopPlayFile(m_ValidCh);又为重复收听功能重新编写了一段代码,专门执行重复收听功能,从而解决了难题。(七)对某些函数不熟悉导致的错误(1)StartPlayFile(m_ValidCh,文件名,0L)播放语音时数用到了StartPlayFile()函数。在处理文件名的选定时,程序总是不能播放预想的文件,原来文件名是一个字符串,不能用一个变量所指向的数据代表所要播放的文件。(八)在完善函数功能上处理的问题1、学号输入时如果输错一位,怎么删除?通过接收按键时,对所收到的双音多频码进行判断,如果为 * 则将上一位赋值为0从而达到删除一位的木的。代码:,if(code!=11)Dtmflen+=ConvertDTMF(code);if(code=11)Dtmflen-1=0;/输入* 删除一位2、播放忙音(1)考虑到账户安全问题,设计程序实现输入密码错误三次,自动播放忙音。(2)考虑到特殊情况,在播放成绩完毕后,播放语句“返回上一层”四遍后未能检测到按键,则播放忙音。此阶段使用了播放忙音的函数StartPlaySignal(m_ValidCh,SIG_BUSY1)并用变量 j 记录输错次数。但出现问题:挂机再摘机之后忙音仍然继续。将变量在挂机函数中重新初始化也未能解决问题。查询资料得到函数:StartPlaySignal(m_ValidCh,SIG_STOP);用以停止忙音的播放。3、检测到按键后停止播放语音在系统播放语音时,如果用户按键,应停止播放语音,执行下一个步骤。实现功能用了两种方式:(1)While(code=GetDtmfCode(m_ValidCh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桥梁防腐涂装方案
- 起重设备基础沉降监测方案
- 2026年清洁生产审核师面试模拟题
- 2026年安全生产法规考试试题及解析
- 2026年国际旅游文化交流与合作策略测试
- 2026年会计事务所工作岗位职责解析
- 2026年退役军人志愿服务队组建与活动组织问答
- 2026年个人所得税知识全员自测题库
- 2026年网格员城市管理事件上报题库
- 数据字典维护管理办法
- 2025年Walmart FCCA质量技术验厂标准要求及评分标准
- 茅台集团品牌管理办法
- 钢板轮廓在线检测系统技术要求
- 农村公路生命安全防护工程提升项目可行性研究报告
- 高中生五一劳动节假期安全教育主题班会课件
- 配电网工程安全施工作业A票B票
- 塔架安装方案
- 2024人教版新教材初中地理七年级下册内容解读课件(深度)
- DL-T596-2021电力设备预防性试验规程
- 天津市各地区2022年中考化学一模试题汇编-实验题
- 转动设备的检修课件
评论
0/150
提交评论