《程序设计-文本编辑器的设计与实现(共35页).doc》由会员分享,可在线阅读,更多相关《程序设计-文本编辑器的设计与实现(共35页).doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 程序设计报告(2014/2015学年 第一学期)题 目:文档编辑器的设计与实现 专 业 组长 学号姓名 组员 学号姓名 指 导 教 师 指 导 单 位 日 期 成 员 分 工 组 长()对文件操作功能(查找,删除,插入)的代码编写,报告中概要设计与代码调试问题部分的撰写 组 员()统计功能代码的编写,翻阅书籍查找资料,报告中课程设计总结及需求分析部分的撰写 组 员()可操作的主菜单及主函数部分代码的编写,报告整体的撰写及测试数据及其结果分析,制图等 评 分 细 则 评分项优秀优优秀 优秀 优秀 优秀 良好 及格 差 遵守机房规章制度 上机时的表现 学习态度 程序准备
2、情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 简 单 评 语 教师签名 年 月 日 评 分 等 级 备注评分等级分为五种:优秀,良好,中等,及格,不及格文档编辑器的设计与实现一 课题内容与要求 文档编辑器系统是对一个文本内容进行各种常规操作,例如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组来实现字符串操作的功能。 基本要求: (1)首先文件标准化处理:如果句子有前导空格和后导空格,则删除这些空格,单词与单词之间只保留一个空格。 (2)统计功能:可方便地统计出文
3、档中所有出现次数最多和最少的字符串。 (3)查找与替换功能:能够查找任意一个字符串在文档中出现的次数,并可以选择全部或有选择地将其替换为另一个字符串。 (4)显示功能:编辑完成后可以显示编辑后的文档。(5)抽取功能:根据要求将文件中的某一类字符抽取,并存入另外的文件,如抽取所有的数字、抽取所有的字母等。 编辑 退出 统计 主菜单 输入继续上次输入重新输入大写字母个数小写字母个数数字的个数标点符号个数空格的个数所有字数查找字符串删除字符串插入字符串显示当前内容二 需求分析图一:文档编辑器系统的功能框架图(1)提供可操作的主菜单:输出个菜单,用于显示若干个可选的功能选项。根据输入的选项来运行不同的
4、功能,运行不同的函数。(2)进行文本信息的载入:选择输入方式,输入文本内容,提供可操作文本。(3)统计数据功能:输出第二子菜单,用于显示若干个可选的功能选项。根据输入的选项来运行不同的功能,运行不同的函数。(4)编辑数据功能:输出个菜单,用于显示若干个可选的功能选项。根据输入的选项来运行查找、删除、插入、显示当前文本等不同的功能,运行不同的函数。(5)退出程序:退出当前程序。三 概要设计本程序共有11个函数1、HeadWord() 标题函数,即一个输出标题,永远出现在程序的最顶端。 2、CreatWord() 文本输入函数,实现对文本的内容进行输入;3、PrintWord() 当前文本内容输出
5、函数,实现文本内容输出; 4、CountWord() 文章内容统计函数,文本内容进 行统计,包括对文本内容中的大写字母、小写字母、数字、标点符号、空格以及文章所有字 数的个数的统计;5、SearchWord() 文章内容查找函数,实现查找部分;6、DeleteWord() 文章内容删除函数,实现删除部分;7、InsertWord() 文章内容插入函数,实现插入部分; 8、Bmenu() 第二子菜单函数,实现子菜单功能; 9、AboutWord() 显示作者信息的函数;10、menu() 主菜单函数,实现可操作菜单;11、main()主函数。(1)查找功能: 开始 申请访问输入要查找的字符判断是
6、否存在记录位置 输出 结束 否是图二:查找功能图(2)插入功能 开始 创建空间输入要插入的字符或字符串输入要插入的位置计算出插入字符串的长度n将要插入位置之后的字符串向后移n位插入要插入的字符或者字符串 结束图三:插入功能图 开始输入字符串查找所输入字符串所在的位置能否找到将其后字符串向前移动覆盖之 结束否是(3)删除功能图四:删除功能图开始申请访问输入要统计的内容查找符合条件的字符字符统计个数输出统计个数 结束(4)统计功能图五:统计功能图四 源程序代码#include#include#include#include#include#include#includeusing namespac
7、e std;#define Link_Size 100int NUM,C,N;typedef struct list char data80; int length; struct list *next; struct list *pre; int row; LinkList;LinkList *head;void HeadWord()/system(cls); couttt*n;couttt* 欢迎使用简单的文本编辑器 *n;coutnext=(LinkList *)malloc(sizeof(LinkList); head-pre=NULL; temp=head-next; temp-pr
8、e=NULL; temp-length=0; for(i=0;idatai=0;cout继续上次输入(输入#号结束):n;for(j=0;jLink_Size;j+) for(i=0;idatai=ch; temp-length+; if(ch=#) NUM=j; break; if(ch=#) temp-length=i; temp-next=NULL; break; temp-next=(LinkList *)malloc(sizeof(LinkList) ; temp-next-pre=temp; temp=temp-next; for(i=0;idatai=0;ofstream oco
9、ut;ocout.open(f:/text.txt,ios:app);ocoutdata;ocout.close(); LinkList *temp; char ch; temp-row=NUM+1;system(cls);return temp;LinkList *CreatWord() int i,j; head-next=(LinkList *)malloc(sizeof(LinkList); head-pre=NULL; temp=head-next; temp-pre=NULL; temp-length=0; for(i=0;idatai=0;cout开始创建文本,请输入文章(输入#
10、号结束):n;for(j=0;jLink_Size;j+) for(i=0;idatai=ch; temp-length+; if(ch=#) NUM=j; break; if(ch=#) temp-length=i; temp-next=NULL; break; temp-next=(LinkList *)malloc(sizeof(LinkList) ; temp-next-pre=temp; temp=temp-next; for(i=0;idatai=0;ofstream ocout;ocout.open(f:/text.txt);ocoutdata;ocout.close();tem
11、p-row=NUM+1;system(cls);return temp;void PrintWord()ifstream icin;icin.open(f:/text.txt);char tt100=0;icin.getline(tt,100,0);coutttnext; for(j=0;j=NUM;j+) for(i=0;(idatai)!=#;i+) ch=temp-datai; if(ch=A)&(ch=a)&(ch=0)&(ch=9) num+; else if(ch= ) space+; else if(ch=33|ch=34|ch=39|ch=44|ch=46|ch=58|ch=5
12、9|ch=63) punct+; sum=WORD+word+num; while(1) coutn; HeadWord(); couttt*n; couttt* 文章内容统计菜单 *n; couttt*n; couttt* 1、文章中大写字母的个数 *n; couttt* 2、文章中小写字母的个数 *n; couttt* 3、文章中数字的个数 *n; couttt* 4、文章中标点符号的个数 *n; couttt* 5、文章中空格的个数 *n; couttt* 6、文章中所有字数 *n; couttt* 7、退出返回主菜单 *n; couttt* 8、直接退出本系统 *n; couttt*n
13、; coutt; switch(t) case 1: system(cls); HeadWord(); cout文章中大写字母的个数:WORDendl; cout按回车键继续;getchar();getchar();system(cls); break; case 2: system(cls); HeadWord(); cout文章中小写字母的个数:wordendl; cout按回车键继续;getchar();getchar();system(cls);break; case 3: system(cls); HeadWord(); cout文章中数字的个数:numendl; cout按回车键继
14、续;getchar();getchar();system(cls);break; case 4: system(cls); HeadWord(); cout文章中标点符号的个数:punctendl; cout按回车键继续;getchar();getchar();system(cls); break; case 5: system(cls); HeadWord(); cout文章中空格的个数:spaceendl; cout按回车键继续;getchar();getchar();system(cls); break; case 6: system(cls); HeadWord(); cout文章中所
15、有字数:sumendl; coutnext; strcpy(Data,str1); for(i=0;i=NUM;i+) for(j=0;jdataj)=Datak) k+; else if(Datak!=0)j=j-k;k=0; if(Datak=0) sum+;j=j-k+1;coutttt第l次出现在第i+1行第j+1next; coutttt字符串总共出现次数为:sumendl; C=sum;N=i*80+j; void DeleteWord(char *str2) char Data20; LinkList *temp,*term; int i,j,k,m,y,num; strcpy(
16、Data,str2); for(y=0;yC;y+) num=80;k=0,m=0; temp=head; for(i=0;inext; for(j=0;jdataj)=Datak) k+; else if(Datak!=0) j=j-k;k=0; if(Datak=0) num=j;break; if(num80) break; for(;i=NUM;i+) for(;j80;j+) if(j+1data80-k+num=temp-dataj+1; elsetemp-dataj-k+1=temp-dataj+1; term=temp; temp=temp-next; j=0; LinkLis
17、t * InsertWord(LinkList *temp) char Data20; int h,l; couttt请输入要插入的字符或字符串:row;int j;if(insertRow=row)for(m=temp-length-1;m=(i%80)&n0;m-)temp-datam+n=temp-datam;for(m=(i%80),j=0;mdatam=Dataj; elseint r=0;for(int p=insertRow; plength-1-r;m=0&n0;m-)temp-datam+n=temp-datam;a=temp;temp = temp-pre;temp-len
18、gth = 80;for(m = temp-length-n,j=0;mlength;m+,j+)a-dataj=temp-datam;for(m=temp-length-n-1;m=(i%80);m-) temp-datam+n=temp-datam;for(m=(i%80),j=0;mdatam =Dataj;return temp;void Bmenu(LinkList *temp) char str120;char str220;int a;doHeadWord();coutntt*n;couttt* 文章内容处理菜单 *n;couttt*n;couttt* 1、查找文章中的字符或者字
19、符串 *n;couttt* 2、删除文章中的字符或者字符串 *n;couttt* 3、向文章中插入字符或者字符串 *n;couttt* 4、显示当前文章内容 *n;couttt* 5、返回主菜单 *n;couttt* 6、直接退出系统 *n;couttt*n;couta;switch(a)case 1: system(cls); HeadWord(); coutttt请输入您需要查找的字符或字符串:; getchar(); gets(str1); SearchWord(str1,temp); cout按回车键继续;getchar();getchar();system(cls); break;c
20、ase 2: system(cls); HeadWord(); coutttt请输入您需要删除的字符或字符串:; getchar(); gets(str2); SearchWord(str2,temp); DeleteWord(str2); coutttt删除 %s 后的文章为:str2endl; PrintWord(); cout按回车键继续;getchar();getchar();system(cls); break;case 3: system(cls); HeadWord(); InsertWord(temp); coutttt插入字符或字符串后文章为:; PrintWord(); c
21、out按回车键继续;getchar();getchar();system(cls); break;case 4: system(cls); HeadWord(); PrintWord(); cout按回车键继续;getchar();getchar();system(cls); break;if(a=5) system(cls); break;if(a=6) exit(0); while(1); void AboutWord() coutnntt 关 于 n; couttt*n;couttt* 谢谢使用 *n; couttt*n;coutn;void menu(LinkList *temp)in
22、t t;doHeadWord();printf(n);couttt*n;couttt* 主菜单 *n;couttt*n;couttt* 1、文章内容输入 *n;couttt* 2、显示当前文章内容 *n;couttt* 3、进入文章内容统计菜单 *n;couttt* 4、进入文章内容处理菜单 *n;couttt* 5、关于 *n;couttt* 6、退出文本编辑器 *n;couttt*n;couttt* 注:第一次运行本程序时请选择1号功能 *n;couttt*n;coutt;if(t6)&(t1) cout对不起,无此功能,请输入正确的功能序号!n;elseswitch(t) case 1:
23、 system(cls); couttt*继续上次输入还是重新输入?*endl; couts; switch(s) case 1:HeadWord();temp=LoadWord(); break; case 2:HeadWord();temp=CreatWord(); break; case 2: system(cls); PrintWord(); printf(n); cout按回车键继续; getchar(); getchar(); system(cls); break;case 3: system(cls); CountWord(); break; case 4: system(cls
24、); Bmenu(temp); break;case 5: system(cls); HeadWord(); AboutWord();cout按回车键继续;getchar();getchar();system(cls);break;if(t=6) break;while(1);int main()head=(LinkList *)malloc(sizeof(LinkList);LinkList *temp;menu(temp);return 0;五 测试结果及数据分析运行程序后,主菜单如图所示:图2 主菜单欲输入文本,输入1,按Enter键,出现下图:图3 选择输入方式:1:继续输入;2:重新输入输入2,按Enter键,出现下图:图4 创建文本输入文章内容,以#号键结束,按Enter键,出现下图:图5 主菜单输入3,按Enter键,进入文章内容统计菜单,如下图:图6 文章内容统计菜单输入1,按Enter键,出现下图:图7 输出文章中大写字母个数按Enter键继续,输入2出现下图:图8输出文章中小写字母个数按Enter键继续,出现下图:图9 输入3,按Enter键继续,出现下图:图10 输出文章中数字个数按Enter键继续,出现下图: