简单文本编辑器设计报告.docx
《简单文本编辑器设计报告.docx》由会员分享,可在线阅读,更多相关《简单文本编辑器设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
![简单文本编辑器设计报告.docx](https://file1.bdocx.com/fileroot1/2022-10/28/9ddf09fb-d3b5-4d42-b90b-d9706d57474b/9ddf09fb-d3b5-4d42-b90b-d9706d57474b1.gif)
简单文本编辑器设计报告
简易文本编辑器
●需求分析
该简易文本编辑器具有图形菜单界面,包括打开,查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除,显示文本信息,保存文本信息等等功能并可正确存盘、取盘,正确显示总行数。
●概要设计
为实现数据的有序存储,该编辑器用字符数组来存储输入的信息。
数组是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:
在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息(包括功能的完成的基本思想):
1)清空以前的文本信息:
将用数组存的数据内容全部置为0;
2)显示当前文本信息:
遍历用数组存入的信息,并输入到外部显示器上;
3)编辑信息:
通过对数组的直接输入操作得到字符数组,这要求数组有绝对大的空间,而且每一次的输入完毕必须有相应的数组下表地址的记录,应此建立一个全局变量ntext记录;
4)查找信息:
通过循环在数组中找到所需要的信息;
5)替换文本信息:
首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;
6)插入文本信息:
首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;
7)移动文本信息:
首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;
8)删除文本信息:
首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;
9)退出编辑器:
通过确认是否保存安全退出。
10)程序中主要的函数为:
子串查找在朱串的位置,程序如下:
intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的位置(模式匹配)
{
inti1=l,j=0;
while(i1{
if(text[i1]==t[j])//继续匹配下一个字符
{
j++;
i1++;
//主串和子串依次匹配下一个字符
}
else//主串、子串指针回溯重新开始下一次匹配
{
i1=i1-j+1;//主串从下一个位置开始匹配
j=0;
//子串从头开始匹配
}
}
if(j>=i2)
{
return(i1-i2);
}//返回匹配的第一个字符的下标
else
return(-1);//模式匹配不成功
}
●详细设计
1.包括的头文件
#include"stdafx.h"
#include
#include
#include
#include
#defineMAX10000
#define_CRT_SECURE_NO_DEPRECATE//在vs中取消warning的警告
2.相关函数原型
voidmenu();
voidshuru(chartext[]);
voidbc(chartext[]);
voiddakai(chartext[]);
voiddayin(chartext[]);
voidchazhao(chartext[],intl);
voidtihan(chartext[],intl);
intstrindex(chartext[],chart[],inti2,intl);
voidshanchu(charp[],intl);
voidcs(chartext[]);
voidcharu(chartext[],intl);
voidtuichu(intstatus);
chartext[MAX]="";//文本编辑域
charname[20]="";//文件保存的位置
intstatus=0;//显示是否保存过的状态
intntext;//文本编辑的位置
3./*打开文件模块*/
voiddakai(chartext[])
{
system("cls");
FILE*fp;
charpd,ch;
charname[30];
inti=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",name);
}
cs(text);
while(!
feof(fp))
{
ch=fgetc(fp);
text[i]=ch;
i++;
}
text[i]='\0';
ntext=i;
fclose(fp);
printf("\n文件读取成功\n文件内容为\n");
dayin(text);
}
if(pd=='M'||pd=='m')
menu();
}
4./*保存模块*/
voidbc(chartext[])
{
system("cls");
FILE*fp;
charpd;
chartmp;
inti;
printf("\n输入【A】保存;任意键返回主菜单不保存\n");
fflush(stdin);
pd=getchar();
if(!
(pd=='A'||pd=='a'))
{
menu();
}
else
{
if(name[20]==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",&tmp)!
=EOF)
{
if(tmp=='A'||tmp=='a')
{
for(i=0;ifprintf(fp,"%c",text[i]);
fclose(fp);
status=1;
printf("\n文件保存成功\n");
break;
}
if(tmp=='B'||tmp=='b')
{
break;
}
}
}
}
5./*初始化模块*/
voidcs(chartext[])
{
inti;
for(i=0;i{
text[i]='\0';
}
ntext=0;
status=0;
}
intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的位置(模式匹配)
{
inti1=l,j=0;
while(i1{
if(text[i1]==t[j])//继续匹配下一个字符
{
j++;
i1++;
//主串和子串依次匹配下一个字符
}
else//主串、子串指针回溯重新开始下一次匹配
{
i1=i1-j+1;//主串从下一个位置开始匹配
j=0;
//子串从头开始匹配
}
}
if(j>=i2)
{
return(i1-i2);
}//返回匹配的第一个字符的下标
else
return(-1);//模式匹配不成功
}
6./*菜单显示模块*/
voidmenu()
{
system("cls");
time_ttimep;
time(&timep);
printf("%s",ctime(&timep));
printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcomtouseourTXTeditionsystem!
\n");
printf("\n\n\t\t\t欢迎您使用文本编辑器软件!
\n");
printf("\n\n\n\n\n\n\n\n\npressEntertocontinue...\n");
getchar();
loop:
system("cls");
printf("\n\n\n\n\t\t******************简易文本编辑器*****************\n\n");
printf("\t\t\t\t----0.清空内容--\n");
printf("\t\t\t\t----1.打开文件--\n");
if(ntext==0){
printf("\t\t\t\t----2.输入内容--\n");
}
else{
printf("\t\t\t\t----2.继续输入--\n");
}
printf("\t\t\t\t----3.查找------\n");
printf("\t\t\t\t----4.插入------\n");
printf("\t\t\t\t----5.删除------\n");
printf("\t\t\t\t----6.替换------\n");
printf("\t\t\t\t----7.显示内容--\n");
printf("\t\t\t\t----8.保存------\n");
printf("\t\t\t\t----9.退出------\n");
printf("\n\t\t*********************选项************************\n");
printf("\n\t\t\t\t输入选项0-9:
");
charn;
fflush(stdin);
n=getchar();
if(n>='0'&&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