c语言 朗读文章.doc

上传人:土8路 文档编号:10303177 上传时间:2021-05-07 格式:DOC 页数:22 大小:258KB
返回 下载 相关 举报
c语言 朗读文章.doc_第1页
第1页 / 共22页
c语言 朗读文章.doc_第2页
第2页 / 共22页
c语言 朗读文章.doc_第3页
第3页 / 共22页
c语言 朗读文章.doc_第4页
第4页 / 共22页
c语言 朗读文章.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《c语言 朗读文章.doc》由会员分享,可在线阅读,更多相关《c语言 朗读文章.doc(22页珍藏版)》请在三一文库上搜索。

1、 序号: 2 学号: 10461202 课 程 设 计设计课程名称: C语言程序设计 题 目: 朗读文章 学 生 姓 名: 王利 学 院(系): 数理学院 专业班级:电科102 指 导 教 师: 周天彤 专业技术职务: 讲师 设计时间:2011年6 月13 日 2011 年 6 月 25 日 2011.6内容提要 本报告是有关朗读文章的课程设计,本报告包括系统的主要功能、任务书的基本要求与内容,系统的功能结构图以及详细的C语言程序代码,最后是个人的心得体会。 目录主要功能2基本要求与内容3功能结构图4C语言程序代码 5使用说明10心得体会11 系统的主要功能现代计算机技术中有一种叫做计算机朗读

2、的技术,能够把段落文章朗读出来,而不是简单的朗读一个一个字母,计算机朗读技术为人机交互开辟了新天地,某些阅读困难的地方都可以使用它。微软公司的Ms Speech SDK是一款兼具语音朗读(TTS,Text To Speech)和语音识别(SR,Speech Recognition)的开发包。 程序需要实现以下功能:1 直接朗读文章2 屏蔽词处理3 朗读整个目录 内容与基本要求内容: 打开指定的文件,并依次将按照句子为单位从文件中读出,每读一行句子,就在屏幕上显示,并使用TTS读出,朗读文章时,如遇到括号则跳过括号内的内容,统计括号内的字数,并以“此处省略XX字”形式读出。其次要求能够依据给出的

3、一组屏蔽词,在朗读文章时,屏幕显示将屏蔽词用括号括起来,最后保存在新的文件里。最后给出一个目录并依次朗读该目录下所有的文本文件(TxT文件)。基本要求:(1) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;(2) 在第一个功能中,规定所有句子长度不超过1024字节。在使用该功能时,用户需输入所要朗读的文章的文件名。(3) 在第二个功能中,所有屏蔽词总数不超过1000个,并保存在MaskWord.dat文件中。该文件是纯文本文件,各个屏蔽词以空格分开,并由课程设计者自行提供。该文件可VC+自带文本编辑器创建和修改。也可由记事本创建强制修改后

4、缀名而来。在使用该功能时,用户需输入所要朗读文章的文件名和屏蔽处理后的文件名。(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

5、 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 m

6、ain()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

7、;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)

8、=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(

9、请输入保存屏蔽处理结果的文件的名称(包括后缀)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(f

10、Mp,%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;ch

11、ar 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_file.name);strcpy(FileName,c_file.name);if( (fp=fope

12、n(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_file.name);strcpy(FileName,c_file.name);if( (fp=fopen(FileName,r)=NUL

13、L)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(

14、*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)

15、;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

16、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;CComP

17、tr 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)CSp

18、DynamicString s(Txt);pVoice-Speak(s,0,0);/释放缓冲void ReleaseVoice()pVoice.Release();CoUninitialize(); 心得体会通过这次课程设计,第一,我明白自己要学的东西还很多,不能局限于课本上的知识,应该多多翻阅有关本课程的其它书籍,拓宽自己的知识面。第二,做事要一丝不苟,要有恒心,有毅力。写程序往往因为一个小小的疏忽而导致程序无法运行,并且很多时候检查很多遍都检查不出来,这时候就需要我们有耐心,逐字逐句检查,相信最后一定会排查错误。第三,我也明白了团队合作的重要性,在合作的过程中会从队友身上学到很多东西,提高办事效率。总之,通过这次课程设计我还是收获颇多的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1