简易文本编辑器数据结构课设_第1页
简易文本编辑器数据结构课设_第2页
简易文本编辑器数据结构课设_第3页
简易文本编辑器数据结构课设_第4页
简易文本编辑器数据结构课设_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、沈阳理工大学课程设计专用纸摘 要当下C+语言是一门重要的课程学习,学会运用并结合其他的知识一起解题是一件值得我们重视的,数据结构是一门结合C+知识的重要课程,因此我们要学会将平时课本的知识运用到我们现实生活当中,这样才能让我们所学的知识更加深刻。简易文本编辑器的问题就是一个例子,传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。计算机信息管理为人们的生活、工作提供了方便,提高了效率。“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。关键词:简易文本编辑器,数据结构,顺序表。 目 录一、需求分析11.1问题描述11.2基

2、本任务1二、概要设计12.1主界面设计12.2数据结构设计1三、详细设计23.1清空内容模块23.2打开文件模块23.3输入模块23.4插入模块23.5删除模块23.6替换模块23.7显示模块23.8保存模块33.9系统层次图3四、测试结果34.1文本编辑器主界面34.2系统功能4五、调试分析7六、心得体会8七、参考文献9八、程序源代码1023一、需求分析1.1问题描述 传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。计算机信息管理为人们的生活、工作提供了方便,提高了效率。“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用

3、程序。1.2基本任务 通过用户调查分析及实际需求,系统需要实现如下基本任务:(1) 输入数据信息建立文本;(2) 打开文本读取已保存的信息;(3) 插入新的信息到文本中;(4) 删除不再需要的文本信息;(5) 替换不需要的文本信息;(6) 显示所有的文本信息;(7) 保存所输入、插入、替换过的文本信息;(8) 清空文本信息。二、概要设计2.1主界面设计为了实现简易文本编辑器的各项功能,设计一个含有多个菜单项的主控菜单模块以操作系统的各项功能,进而方便用户使用系统。2.2数据结构设计为实现数据的有序存储,该编辑器应该用顺序存储结构来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连

4、续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。三、 详细设计3.1清空内容模块清空以前的文本信息,将用数组存的数据内容全部置为0。3.2打开文件模块确认打开文件并提示未保存的数据将会丢失,如果未选择打开文件,则返回主菜单。3.3输入模块输入文本信息,从主菜单中选择输入,提示输入内容,并统计文本字符数和行数。3.4插入模块插入文本信息,首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置。3.5删除模块删除文本

5、信息,首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息。3.6替换模块替换文本信息,首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息。3.7显示模块显示当前文本信息,遍历用数组存入的信息,并输入到外部显示器上。3.8保存模块 保存当前信息,并提示输入文件名,确认保存之后提示保存成功。3.9系统层次图简易文本编辑器清空内容输入保存显示替换删除插入打开文件图3-1 系统层次图四、测试结果4.1文本编辑器主界面主界面功能,如图41所示。图41 文本编辑器主界面4.2

6、系统功能 输入文本信息功能,如图42所示。图42 输入界面 查找文本信息,如图43所示。 图43查找功能界面 显示文本信息,如图44所示。图44显示文本界面插入操作,如图45所示。图45插入功能界面删除操作,如图46所示。图46删除功能界面替换文本内容,如图47所示。图47 替换功能界面文件保存,如图48所示。图48 保存功能界面五、调试分析程序设计没有按照一定的流程来,导致程序臃肿,可重复利用率太低,比如程序中的chazhao函数,在替换,删除等的过程中可以充分利用到,从而减少代码的长多,提高可读性和减少时间的复杂性,设计开始的时候没有充分考虑到,到最后无法在短时间内修改完成;程序的选择语句

7、运行比较的多,当初是为了程序的安全和便捷,选择了较多的选择,确认步骤,这样一来使得程序中的选择语句比较的多,比较乱。这个在概要设计中没有充分的理清思路,导致程序的可读性较差。六、心得体会这是第一次比较全面的设计一个可执行多种功能的程序的课程设计,暴露出较多的知识点的缺乏,比如文件的打开与保存等。程序的运行结果与理论推导结果基本吻合,即该算法与程序设计基本满足课程设计要求。该程序的优点是简单易懂,不存在理解上的障碍,很自然地能想到这种解法。但是该程序比较臃肿,可重复利用率低,还有待修改和完善。通过这次数据结构的课程设计使我对所学知识有了更好的理解,增强了自己的动手能力,但同时也发现了自己的不足之

8、处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。通过这个实验,使我基本操作有了一定的思路,知道该从哪里着手去完成一项功能编译,也让我学会了如何通过书籍查阅到自己想要的信息,并有一个思维方向去解决编译时出现的问题,提高了我的编程效率,我想这对我以后的学习会有很大的帮助,会让我有信心去完成下一个实验。七、参考文献1严蔚敏 吴伟名 编著,数据结构,清华大学出版社,2007年9月2谭浩强 编著,c语言程序设计,清华大学出版社3钱能C+程序设计教程(第二版)M 北京:清华大学出版社,2005八、程序源代码#include <stdio.h>#include

9、 <stdlib.h>#include <time.h>#include <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECATE/在vs中取消warning的警告void menu(); void shuru(char text);void bc(char text); void dakai(char text);void dayin(char text);void chazhao(char text,int l);void tihan(char text,int l);int strindex

10、(char text,char t,int i2,int l);void shanchu(char p,int l);void cs(char text);void charu(char text,int l);void tuichu(int status);char textMAX=""/文本编辑域char name20=""/文件保存的位置int status=0;/显示是否保存过的状态int ntext;/文本编辑的位置 void dakai(char text)system("cls"); FILE *fp;char pd,c

11、h;char name30;int i=0;printf("输入A:确定打开文件(未保存的数据将会丢失) M:返回主菜单");fflush(stdin);pd=getchar();if (pd='A'|pd='a')printf("请输入要打开文件名字(例如c:a.txt)");scanf("%s",name);while (fp=fopen(name,"r")=NULL)printf("n打开文件失败,请重新输入要打开的文件名:");scanf("%s

12、",name);cs(text);while(!feof(fp)ch=fgetc(fp);texti=ch;i+; texti='0' ntext=i; fclose(fp);printf("n文件读取成功n文件内容为n");dayin(text); if (pd='M'|pd='m')menu(); void bc(char text)system("cls");FILE *fp;char pd;char tmp;int i;printf("n输入【A】保存;任意键返回主菜单不保存n&

13、quot;); fflush(stdin);pd=getchar();if (!(pd='A'|pd='a')menu();else if(name20=NULL)printf("n请输入保存文件名(例如: c:a.txt):");scanf("%s",name);while (fp=fopen(name,"w+")=NULL)printf("文件不存在,请重新输入文件名:");scanf("%s",name); printf("nA:确定;B:取消:&

14、quot;); while(scanf("%c",&tmp)!=EOF)if (tmp='A' | tmp='a') for(i=0;i<ntext;i+) fprintf(fp,"%c",texti); fclose(fp);status=1;printf("n文件保存成功n");break;if (tmp='B' | tmp='b')break; void cs(char text)int i;for (i=0;i<ntext;i+)texti=&

15、#39;0'ntext=0;status=0; int strindex(char text,char t,int i2,int l) /查找要操作的数据的位置(模式匹配)int i1=l,j=0;while (i1<ntext&&j<i2)if (texti1=tj) /继续匹配下一个字符j+;i1+;/主串和子串依次匹配下一个字符else /主串、子串指针回溯重新开始下一次匹配i1=i1-j+1; /主串从下一个位置开始匹配j=0;/子串从头开始匹配if (j>=i2)return(i1-i2); /返回匹配的第一个字符的下标elsereturn(

16、-1); /模式匹配不成功void menu()system("cls");time_t timep; time (&timep);printf("%s",ctime(&timep);printf("信息与计算科学 1209010314 范亚飞n");printf("nnnnnnnnntttWelcom to use our TXT edition system!n");printf("nnttt 欢迎您使用文本编辑器软件!n");printf("nnnnnnnnnpr

17、ess Enter to continue.n");getchar();loop:system("cls");printf("nnnntt*简易文本编辑器*nn");printf("tttt-0.清空内容-n");printf("tttt-1.打开文件-n");if (ntext=0)printf("tttt-2.输入内容-n"); else printf("tttt-2.继续输入-n");printf("tttt-3.查找-n");printf

18、("tttt-4.插入-n");printf("tttt-5.删除-n");printf("tttt-6.替换-n");printf("tttt-7.显示内容-n");printf("tttt-8.保存-n");printf("tttt-9.退出-n");printf("ntt*选项*n");printf("ntttt输入选项0-9:");char n;fflush(stdin);n=getchar();if(n>='0&

19、#39;&&n<='9')switch (n)case '0': cs(text);break;case '1': dakai(text);break;case '2': shuru(text);break;case '3': chazhao(text,0);break;case '4': charu(text,1);break;case '5': shanchu(text,0);break;case '6': tihan(text,0);bre

20、ak;case '7': dayin(text);break;case '8': bc(text);break;case '9': tuichu(status);default : break;elseprintf("n输入有误,请重新输入:");fflush(stdin);n=getchar();system("pause");goto loop;void chazhao(char text,int l)system("cls");int i,t,a=-1;char pattern20

21、,bd,pd;printf("原文为:n");dayin(text);printf("请输入您要查找的内容");scanf("%s",pattern);printf("您查找的内容是:%sn",pattern);t=strlen(pattern);loop:a=strindex(text,pattern,t,l);if (a!=-1)l=a+t;int hs=1,ls=0;for (i=0;i<=a;i+)ls+;if (texti='n')hs+;ls=0; if (a=-1)printf(

22、"查找到结尾没有找到n输入【R】将重头查找;任意键返回主菜单");l=0;fflush(stdin);pd=getchar(); else printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;任意键返回主菜单",hs,ls);fflush(stdin);bd=getchar(); if (bd='R'|bd='r') goto loop; if (pd='R'|pd='r') l=0;chazhao(text,l);void dayin(char text)system(&

23、quot;cls");printf("现在文本的内容为:n");printf("%sn",text); int hs=1,i;for (i=0;i<ntext;i+)if (texti='n')hs+; printf("n文本共有%d行n",hs);void shuru(char text)system("cls");printf("请输入内容(输入结束输入并返回主菜单):n");printf("%s",text);char c;int i=n

24、text,j=ntext;fflush(stdin); while (c=getchar()!='')texti=c;i+;ntext=i;continue;int cout=0,zf=0,h=1,hs=1,zfs=0;for(;cout<ntext;cout+)zf+;if(textcout='n')h+;zf-;if(textcout=' ')zf-;for(cout=j;cout<ntext;cout+)zfs+;if(textcout='n')hs+;zfs-;if(textcout=' ')z

25、fs-;printf("统计:文本一共有%d个字符,%d行,本次输入了%d个字符,%d行n",zf,h,zfs,hs);void shanchu(char p,int l)int i,a=-1,t2=0;char x20,px,pd,pdx,c;system("cls");printf("%s",p);printf("n输入【A】执行查找删除内容;任意键返回主菜单:");fflush(stdin);px=getchar();if (px='a'|px='A')printf("

26、;n输入您要删除的内容,以结束:");fflush(stdin);while (c=getchar()!='')if (c='')break;elsext2=c;t2+;continue;loop:a=strindex(p,x,t2,l);int hs=1,ls=0;for (i=0;i<=a;i+)ls+;if (pi='n')hs+; ls=0; if (a=-1)printf("已查找结束,您要删除的内容不存在n输入【R】重新输入要删除的内容;其他键将返回主菜单:");l=0;fflush(stdin);

27、pdx=getchar(); else printf("你要删除的内容在第%d行第%d列n 输入【A】确定删除;输入【B】寻找下个词;其他键将返回主菜单:",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if (pd='a'|pd='A')for(i=a;i<ntext;i+)pi=pi+t2;ntext=ntext-t2;printf("删除成功,删除后的内容为:n%sn",text);else if (pd='b'|pd='B')goto loo

28、p;if(pdx='r'|pdx='R')shanchu(text,l);void charu(char text,int l) /向文本中插入内容system("cls");int i=0,t=0,t2=0,a=-1,b;char cr20="",pd,x500,c,d;printf("n当前文本信息为:n");printf("%s",text);printf("n输入您要在哪个内容前插入,以结束:");fflush(stdin);while (c=getcha

29、r()!='') /用一个数组接收要插入在哪个内容之前if (c='')break;elsecrt=c;t+;continue;loop:a=strindex(text,cr,t,l); /查找并返回要插入的位置点int hs=1,ls=0;for (b=0;b<a;b+)ls+;if (textb='n')hs+;ls=0;if (a=-1)printf("n查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单:n");l=0;fflush(stdin);d=getchar();fflush(stdin);e

30、lseprintf("n您要插入的位置是第%d行,第%d列之前n【A】.不是此位置向后继续找插入点n【B】.在此位置插入n按其他键返回菜单n请选择:",hs,ls+1);fflush(stdin);pd=getchar(); if (pd='a'|pd='A')l=a+t;goto loop;else if (pd='b'|pd='B')printf("nn输入您要插入的内容,以结束:");fflush(stdin);while (c=getchar()!='')if (c=

31、'')break;elsext2=c;t2+;continue;for (i=ntext;i>=a;i-)texti+t2=texti;for (i=0;i<t2;i+)texti+a=xi;ntext=ntext+t2;printf("n当前文本信息为:n");for (i=0;i<=ntext-1;i+)printf("%c",texti);printf("n文本插入成功n");fflush(stdin);getchar();if (d='r'|d='R')l=0;

32、charu(text,l);status=0;void tihan(char p,int l) /内容替换int t=0,t1=0,i,a,b;char c,th20,d,d1,bth20;int i2;system("cls");printf("n当前文本信息为:n");for (i2=0;i2<=ntext-1;i2+)printf("%c",pi2);printf("n输入要被替换的内容,以结束:");fflush(stdin);while (c=getchar()!='') /t指替换前内容的长度if (c='')break;elsebtht=c;t+;continue;loop:a=strindex(p,bth,t,l); /查找要被替换的内容的位置int hs=1,ls=0;for (b=0;b<a;b+)ls+;if (pb='n')hs+;ls=0;if (a=-1)printf("n查找到结尾没有找到要被替换的内容n输入【R】查找其他内容,按其他键返回主菜单键n");l=0;d=ge

温馨提示

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

评论

0/150

提交评论