c语言 朗读文章.doc_第1页
c语言 朗读文章.doc_第2页
c语言 朗读文章.doc_第3页
c语言 朗读文章.doc_第4页
c语言 朗读文章.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计 序号: 2 学号: 10461202 课 程 设 计设计课程名称: c语言程序设计 题 目: 朗读文章 学 生 姓 名: 王利 学 院(系): 数理学院 专业班级:电科102 指 导 教 师: 周天彤 专业技术职务: 讲师 设计时间:2011年6 月13 日 2011 年 6 月 25 日 2011.6内容提要 本报告是有关朗读文章的课程设计,本报告包括系统的主要功能、任务书的基本要求与内容,系统的功能结构图以及详细的c语言程序代码,最后是个人的心得体会。 目录主要功能2基本要求与内容3功能结构图4c语言程序代码 5使用说明10心得体会11 系统的主要功能现代计算机技术中有一种叫做计算机朗读的技术,能够把段落文章朗读出来,而不是简单的朗读一个一个字母,计算机朗读技术为人机交互开辟了新天地,某些阅读困难的地方都可以使用它。微软公司的ms speech sdk是一款兼具语音朗读(tts,text to speech)和语音识别(sr,speech recognition)的开发包。 程序需要实现以下功能:1 直接朗读文章2 屏蔽词处理3 朗读整个目录 内容与基本要求内容: 打开指定的文件,并依次将按照句子为单位从文件中读出,每读一行句子,就在屏幕上显示,并使用tts读出,朗读文章时,如遇到括号则跳过括号内的内容,统计括号内的字数,并以“此处省略xx字”形式读出。其次要求能够依据给出的一组屏蔽词,在朗读文章时,屏幕显示将屏蔽词用括号括起来,最后保存在新的文件里。最后给出一个目录并依次朗读该目录下所有的文本文件(txt文件)。基本要求:(1) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;(2) 在第一个功能中,规定所有句子长度不超过1024字节。在使用该功能时,用户需输入所要朗读的文章的文件名。(3) 在第二个功能中,所有屏蔽词总数不超过1000个,并保存在maskword.dat文件中。该文件是纯文本文件,各个屏蔽词以空格分开,并由课程设计者自行提供。该文件可vc+自带文本编辑器创建和修改。也可由记事本创建强制修改后缀名而来。在使用该功能时,用户需输入所要朗读文章的文件名和屏蔽处理后的文件名。(4) 在第三个功能中,不要求变更目录,就直接读取当前目录下的所有文件即可。但是需要依据功能二从当前目录下读取maskword.dat文件做屏蔽词处理。功能结构框图程序代码#include#include#include#include#include#include#include#include#include #include int scanfsentence(file *fp,char sentence);int ignoreread(char sentence);int stringsearch(char areastring,char objectstring);void ignoreprint(char sentence,char charpointer50100,int num);void ignorestore(file *fp,char sentence,char charpointer50100,int num);ccomptr pvoice;hresult hr;int initvoice();void speak(char *txt);void releasevoice();int onlyread();int skipwords();int readfiles();int main()if(!initvoice()return 1;char ch;loop:printf(nnt请按任意键开始n);getch();system(cls);printf(*n);printf(* 1: 只读文章 *n);printf(* 2: 屏蔽词处理 *n);printf(* 3: 朗读目录 *n);printf(* 4: 退出 *n);printf(*n);printf( n);printf( n);printf(请选择输入选项 1 2 3 4 : );while(ch=getch()printf(n);switch(ch)case 1: onlyread();goto loop;case 2: skipwords();goto loop;case 3: readfiles();goto loop;case 4: releasevoice();return 0;goto loop;int onlyread()file *fp;char sentence1024;char filename50;printf(请输入等待朗读的文件的名称(包括后缀)n);gets(filename);if( (fp=fopen(filename,r)=null)printf(文件打开失败.);getch();return 1;while(scanfsentence(fp,sentence)=0)printf(%s,sentence);ignoreread(sentence);return 0;int skipwords()char sentence1024;int i;int num;char charpointer50100;file *fp;file *frp;file *fmp;char fileread50;char fileresult50;printf(请输入等待朗读的文件的名称(包括后缀)n);gets(fileread);if( (fp=fopen(fileread,r)=null)printf(文件打开失败.);getch();return 1;printf(请输入保存屏蔽处理结果的文件的名称(包括后缀)n);gets(fileresult);if( (frp=fopen(fileresult,w)=null)printf(文件创建失败.);getch();return 1;if( (fmp=fopen(maskword.dat,w)=null)printf(文件创建失败.);getch();return 1;printf(请输入需要屏蔽的词的数目n);scanf(%d%*c,&num);for(i=0;inum;i+)gets(charpointeri);fprintf(fmp,%dn,num);for(i=0;inum;i+)fprintf(fmp,%s,charpointeri);if(inum-1)fprintf(fmp, );elsefprintf(fmp,n);fclose(fmp);while(scanfsentence(fp,sentence)=0)ignoreprint(sentence,charpointer,num);ignorestore(frp,sentence,charpointer,num);ignoreread(sentence);return 0;int readfiles()int i;char filename50;char charpointer50100;char sentence1024;char filesname50;int num;char ch;file *fmp;file *fp;struct _finddata_t c_file;long hfile;printf(请输入文件夹名n);gets(filesname);if( (fmp=fopen(maskword.dat,r)=null)printf(文件打开失败.);getch();return 1;fscanf(fmp,%d,&num);while(ch=fgetc(fmp)!=n);for(i=0;innn,c_);strcpy(filename,c_);if( (fp=fopen(filename,r)=null)printf(文件打开失败.);getch();return 1;while(scanfsentence(fp,sentence)=0)ignoreprint(sentence,charpointer,num);ignoreread(sentence);fclose(fp);while(_findnext(hfile,&c_file)=0)printf(nnn第%2d个文件t文件名:t%snn开始朗读 nnn,i+,c_);strcpy(filename,c_);if( (fp=fopen(filename,r)=null)printf(文件打开失败.);getch();return 1;while(scanfsentence(fp,sentence)=0)ignoreprint(sentence,charpointer,num);ignoreread(sentence);fclose(fp);_findclose(hfile);return 0;/ 以下为自定义公共函数/句子读取函数int scanfsentence(file *fp,char sentence)int j;char getachar; / 获取的字符int i=0; / 句子的字节序号for(j=0;j0)str+;amount+;if(*str0)str+;amount+;if(*str0)str+;str+;amount+;str+;sprintf(ignoreamount,此处省略%d个字,amount);speak(ignoreamount);ignoreread(str);while(*str+);if(found=0)speak(sentence);return 0;/ 用于判断 参数 1 是否 以 参数 2 为开头,是返回 1,否返回 0int stringsearch(char areastring,char objectstring)int i;int len;len=strlen(objectstring);for(i=0;ilen;i+)if(areastringi!=objectstringi)return 0;return 1;void ignoreprint(char sentence,char charpointer50100,int num)int i;int j=0;while(sentencej)for(i=0;inum;i+)if(stringsearch(sentence+j,charpointeri)=1)printf(%s),charpointeri);j+=(strlen(charpointeri);break;printf(%c,sentencej);j+;void ignorestore(file *fp,char sentence,char charpointer50100,int num)int i;int j=0;while(sentencej)for(i=0;inum;i+)if(stringsearch(sentence+j,charpointeri)=1)fprintf(fp,(%s),charpointeri);j+=(strlen(charpointeri);break;fprintf(fp,%c,sentencej);j+;/ 以下为语音相关函数定义/初始化语音阅读工具int initvoice()ccomptr penum;ccomptr pvoicetoken;int i;:coinitialize(null);if(failed(hr=spenumtokens(spcat_voices,llanguage=804,null,&penum)return 0;for(i=0;inext(1,&pvoicetoken,null);if(failed(hr=pvoice.cocreateinstance(clsid_spvoice)return 0;if(failed(hr=pvoice-setvoice(pvoicetoken)return 0;return 1;/语音读字符串void speak(char *txt)cspdynamicstring s(txt);pvoice-speak(s,0,0);/释放缓冲void releasevo

温馨提示

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

评论

0/150

提交评论