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

付费下载

下载本文档

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

文档简介

1、题目:【 2】简易文本编辑器要求:1) 具有图形菜单界面;2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3) 可正确存盘、取盘;4) 正确显示总行数。1 需求分析一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长) ,插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。2 概要设计为实现数据的有序存储, 该编辑器应该用顺序表来存储输入的信息。 顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。 其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位

2、置上也相邻; 在顺序表上可以随即存取表中的元素。 在编辑器的主界面中应有如下提示信息: 清空以前的文本信息:将用数组存的数据内容全部置为0; 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数; 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息; 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后, 提示选择向前插入信息还是向后插入信息, 如果未找到插入

3、点, 显示未找到要插入的位置; 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息; 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; 退出编辑器:显示感谢使用该软件并退出。3 详细设计void menu();void shuru(char text);void bc(char text);void dakai(char text);void dayin(char text);void chazhao(char text,int

4、l);void tihan(char text,int l);int strindex(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;/文本编辑的位置4 用户使用说明 清空以前的文本信息:将用数

5、组存的数据内容全部置为0; 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数; 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息; 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后, 提示选择向前插入信息还是向后插入信息,如果未找到插入点, 显示未找到要插入的位置; 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行

6、行移动,否则提示未找到要移动的信息; 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; 退出编辑器:显示感谢使用该软件并退出。5 调试分析/测试结果文本编辑器主界面主界面功能,如图2 2 所示。图 22 文本编辑器主界面系统功能 输入文本信息功能,如图23 所示。图 2 3 输入界面 查找文本信息,如图2 4 所示。图 2 4 查到功能界面 显示文本信息,如图25。图 254 删除操作,如图 2-6图 2 6 (删除 123)功能5 插入操作如图 2 7 所示。图 2 7 (在 789 前插入 1

7、23)界面6 替换文本内容,如图28 所示 。图 28 (替换 456 为 abc)的内容6 心得体会程序的运行结果与理论推导结果完全吻合,即该算法与程序设计满足课程设计要求。程序的主要优点是简单易懂,不存在理解上的障碍,也很自然地能想到这种解法。通过数据结构的课程设计使我们对所学知识有了更好的理解,也增强了大家的动手能力。同时也发现了自己的很多不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。该7 程序#include <stdio.h>#include <stdlib.h>#include <time.h>#inc

8、lude <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECA TEvoid 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(char text,char t,int i2,int l);void shanchu(char p,int l);voi

9、d cs(char text);void charu(char text,int l);void tuichu(int status);char textMAX=""/文本编辑域char name20=""/文件保存的位置int status=0;/显示是否保存过的状态int ntext;/文本编辑的位置/在vs 中取消warning的警告void dakai(char text)system("cls");FILE *fp;char pd,ch;char name30;int i=0;printf(" 输入 A :确定打开

10、文件 (未保存的数据将会丢失 ) 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",name);cs(text);while(!feof

11、(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");fflush(stdin);pd=getchar(

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

13、uot;,&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='0'ntext=0;status=0;int st

14、rindex(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);else/返回匹配的第一个字符的下标return(-1);/模式匹配不成功void menu()system("

15、;cls");time_t timep;time (&timep);printf("%s",ctime(&timep);printf("nnnnnnnnntttWelcom to use our TXT edition system!n");printf("nnttt欢迎您使用文本编辑器软件!n");printf("nnnnnnnnnpress Enter to continue.n");getchar();loop:system("cls");printf("

16、;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("tttt-4.插入 -n");printf("tttt-5.删除 -n");printf("tttt

17、-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'&&n<='9')switch (n)case '0': cs(text);

18、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);break;case '7': dayin(text);break;case '8': bc(text);bre

19、ak;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,bd,pd;printf(" 原文为: n");dayin(text);printf(" 请输入您要查找

20、的内容");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(" 查找到结尾没有找到 n 输入【 R】将重头查找;任意键返回主菜单 "); l=0;fflush(stdin

21、);pd=getchar();elseprintf(" 已经找到在第%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("cls");printf(" 现在文本的内容为:n");printf("

22、;%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=ntext,j=ntext;fflush(stdin);while (c=getchar()!='&#

23、39;)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=' ')zfs-;printf(" 统计:文本一共有 %d 个字符, %d 行,本次输入了 %d 个字符 ,%

24、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("n 输入您要删除的内容,以 结束: ");fflush(stdin);w

25、hile (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);pdx=getchar();elseprintf("

26、你要删除的内容在第 %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 loop;if(pdx='r'

27、|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=getchar()!='')/

28、用一个数组接收要插入在哪个内容之前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);elseprintf("

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

30、 (c='')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')

31、l=0;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=getchar();fflush(stdin);else同内容printf("nn 已经找

温馨提示

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

最新文档

评论

0/150

提交评论