简易文本编辑器说明书Word格式.doc

上传人:wj 文档编号:1461139 上传时间:2023-04-30 格式:DOC 页数:30 大小:543KB
下载 相关 举报
简易文本编辑器说明书Word格式.doc_第1页
第1页 / 共30页
简易文本编辑器说明书Word格式.doc_第2页
第2页 / 共30页
简易文本编辑器说明书Word格式.doc_第3页
第3页 / 共30页
简易文本编辑器说明书Word格式.doc_第4页
第4页 / 共30页
简易文本编辑器说明书Word格式.doc_第5页
第5页 / 共30页
简易文本编辑器说明书Word格式.doc_第6页
第6页 / 共30页
简易文本编辑器说明书Word格式.doc_第7页
第7页 / 共30页
简易文本编辑器说明书Word格式.doc_第8页
第8页 / 共30页
简易文本编辑器说明书Word格式.doc_第9页
第9页 / 共30页
简易文本编辑器说明书Word格式.doc_第10页
第10页 / 共30页
简易文本编辑器说明书Word格式.doc_第11页
第11页 / 共30页
简易文本编辑器说明书Word格式.doc_第12页
第12页 / 共30页
简易文本编辑器说明书Word格式.doc_第13页
第13页 / 共30页
简易文本编辑器说明书Word格式.doc_第14页
第14页 / 共30页
简易文本编辑器说明书Word格式.doc_第15页
第15页 / 共30页
简易文本编辑器说明书Word格式.doc_第16页
第16页 / 共30页
简易文本编辑器说明书Word格式.doc_第17页
第17页 / 共30页
简易文本编辑器说明书Word格式.doc_第18页
第18页 / 共30页
简易文本编辑器说明书Word格式.doc_第19页
第19页 / 共30页
简易文本编辑器说明书Word格式.doc_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易文本编辑器说明书Word格式.doc

《简易文本编辑器说明书Word格式.doc》由会员分享,可在线阅读,更多相关《简易文本编辑器说明书Word格式.doc(30页珍藏版)》请在冰点文库上搜索。

简易文本编辑器说明书Word格式.doc

⑻退出

3模块划分

(1)系统主要包含主程序模块和其他操作模块。

其调用关系如图

(一)所示。

主函数

各操作模块

(一)

(2)文本编辑器的运行流程图如图

(二)所示。

(二)

(3)系统子模块及其功能设计:

1.文件的打开:

voidopen(chartext[]);

2.文件的保存:

voidsave(chartext[]);

3.查找文本:

voidsearch(chartext[],intl);

4.字符的匹配:

intstrindex(chartext[],chart[],inti2,intl);

5.文本的输出:

voidoutput(chartext[]);

6.删除文本:

voidDelete(charp[],intl);

7.插入文本:

voidinsert(chartext[],intl);

8.替换文本:

voidReplace(intstatus);

4主要函数说明及其N-S图

(1)对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,在程序的执行中,先是进入的主函数,在主函数中调用了菜单函数,进行功能的选择,各个模块分为多个函数来实现。

在程序中,设置了几个全局变量,来记录文本的内容等信息:

chartext[MAX]="

"

;

//文本编辑域

charname[20]="

//文件保存的位置

intstatus=0;

//显示是否保存过的状态

intntext;

//文本编辑的位置

(2)字符匹配

在这个程序中要特别注意的是字符的匹配,因为查找、插入、替换都需要用到这一步设计。

在这里我设计了一个子模块来实现匹配:

intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的位置(模式匹配)

{

inti1=l,j=0;

while(i1<

ntext&

&

j<

i2)

{

if(text[i1]==t[j]) //继续匹配下一个字符

{

j++;

i1++;

}//主串和子串依次匹配下一个字符

else //主串、子串指针回溯重新开始下一次匹配

i1=i1-j+1;

//主串从下一个位置开始匹配

j=0;

} //子串从头开始匹配

}

if(j>

=i2)

return(i1-i2);

}//返回匹配的第一个字符的下标

else

return(-1);

//模式匹配不成功}

inti1=l,j=0;

while(i1<

T if(text[i1]==t[j]) F

j++;

i1++;

i1=i1-j+1;

j=0;

if(j>

T F

return(i1-i2);

return-1;

(3)按行来实现查找

而且程序中用的顺序表存储的形式,在执行的时候考虑到在查找时,要显示是在第几行第几列的位置,但是程序并不是用二维数组来实现的,并不记录文本中每一个字符的行列号,所以如果直接一下子统计出来的话,就会出现行列号上的错误,所以在程序中使用了一下LOOP语句,来让程序一行一行的统计与显示。

当调用strindex(text,str1,t,l)函数时,得到返回值,如果a!

=-1时,得到返回的是查找的字符串的第一字符的下标,l=a+t;

t是字符的长度,hs,ls,分别记录行号与列号。

loop:

a=strindex(text,str1,t,l);

if(a!

=-1)

{

l=a+t;

}

inths=1,ls=0;

for(i=0;

i<

=a;

i++)

{

ls++;

if(text[i]=='

\n'

{

hs++;

ls=0;

}

} if(a==-1)

printf("

查找到结尾没有找到\n输入【R】将重头查找;

);

l=0;

fflush(stdin);

pd=getchar();

}

else

printf("

已经找到在第%d行第%d列,输入【R】继续查找下一处;

hs,ls);

kk+=1;

bd=getchar();

if(bd=='

R'

||bd=='

r'

gotoloop;

a=strindex(text,str1,t,l);

if(a!

=-1)

l=a+t;

inths=1,ls=0;

printf("

已经找到在第%d行第%的列

for(i=0;

i++)输入【R】继续下一处;

hs,is);

ls++;

kk+=1;

if(text[i]=='

)fflush(stdin);

T bd=getchar();

hs++;

if(a==-1)if(bd=='

T F T F

printf("

查找到结尾没有找到\n输

入【R】将重头查找;

gotoloop;

l=0;

fflush(stdin);

pd=getchar();

5程序运行数据及其结果

(1)界面

(2)打开已有文件

(3)查找具体内容

(4)删除内容

(5)插入内容

(6)替换内容

(7)保存文件

(8)退出

6课程设计心得

通过这次的实训,对之前所学的C语言与数据结构都在加深一下印象,也把之前学得不是很熟悉的数据结构都做了一次回顾。

在程序中,我用到的数据结构是顺序表,顺序表是用一组地址连续的存储单元依次存储线性表的数据元素,这种表也称为顺序存储结构或顺序映像。

在程序调试的时候,也遇到了许多问题,最严重的问题,就是程序并不是用二维数组来实现的,在文件中的字符定位问题时,我用的是先找到第一行,再使用LOOP语句来使用循环,再做下一行的定位,这样在查找的时候就是一行一行的显示的,不会出现行数与列数统计上出错的问题。

有的时候做一个程序时,如果不会很好地使用一些特别深的方法的时候,那么可以换一种思考角度,就像上面的问题,用二维数组来实现虽然会很方便地进行行号列号地定位,但是在对后面的问题处理上就会又要涉及到别的处理方法,所以在这里可以换一种思维方式,用简单的方式来思考同一个问题,就会有不同的发现了。

附录:

#include"

stdio.h"

stdlib.h"

string.h"

voidmenu();

#defineMAX10000

//文本编辑的位置

voidopen(chartext[])//文件的打开

{

system("

cls"

FILE*fp;

charpd,ch;

charname[30];

inti=0,ss=1;

printf("

输入A:

确定打开文件M:

返回主菜单"

fflush(stdin);

pd=getchar();

if(pd=='

A'

||pd=='

a'

请输入要打开文件名字(例如c:

\\a.txt)"

scanf("

%s"

name);

while((fp=fopen(name,"

r"

))==NULL)

\n打开文件失败,请重新输入要打开的文件名:

scanf("

}

system("

while(!

feof(fp))

ch=fgetc(fp);

if(ch=='

)ss++;

text[i++]=ch;

text[i]='

\0'

ntext=i;

fclose(fp);

\n文件读取成功\n文件内容为\n"

output(text);

有%d行"

ss);

if(pd=='

M'

m'

menu();

voidsave(chartext[])//文件的保存

{

charpd;

chartmp;

inti;

\n输入【A】保存;

\n"

if(!

(pd=='

))

menu();

if(name[20]==NULL)

\n请输入保存文件名(例如:

c:

\\a.txt):

w+"

文件不存在,请重新输入文件名:

\nA:

确定;

B:

取消:

while(scanf("

%c"

&

tmp)!

=EOF)

{

if(tmp=='

||tmp=='

{

for(i=0;

ntext;

i++)

fprintf(fp,"

text[i]);

fclose(fp);

status=1;

printf("

\n文件保存成功\n"

break;

}

B'

b'

}

}

intstrindex(chartext[],chart[],inti2,intl)//查找要操作的数据的位置(模式匹配)

if(text[i1]==t[j]) //继续匹配下一个字符

} //主串和子串依次匹配下一个字符

else //主串、子串指针回溯重新开始下一次匹配

//主串从下一个位置开始匹配

} //子串从头开始匹配

} //返回匹配的第一个字符的下标

//模式匹配不成功

voidsearch(chartext[],intl)//查找文本

inti,t,a=-1,kk=0;

charstr1[20],bd,pd;

原文为:

output(text);

请输入您要查找的内容"

scanf("

str1);

您查找的内容是:

%s\n"

t=strlen(str1);

inths=1,ls=0;

for(i=0;

{

ls++;

if(text[i]=='

hs++;

if(a==-1)

l=0;

kk+=1;

一共找到了%d次"

kk);

if(pd=='

{

l=0;

search(text,l);

}

voidoutput(chartext[])//文本的输出

{

现在文本的内容为:

text);

inths=1,i;

\n文本共有%d行\n"

hs);

voidDelete(charp[],intl)//删除文本

inti,a=-1,t2=0;

charx[20],px,pd,pdx,c;

p);

\n输入A执行查找删除内容"

px=getchar();

if(px=='

||px=='

\n输入您要删除的内容,以@结束:

while((c=getchar())!

='

@'

if(c=='

break;

else

x[t2++]=c;

continue;

a=strindex(p,x,t2,l);

{

ls++;

if(p[i]=='

ls=0;

if(a==-1)

{

已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;

"

fflush(stdin);

pdx=getchar();

else

你要删除的内容在第%d行第%d列\n输入【A】确定删除;

输入【B】寻找下个词;

pd=getchar();

l=t2+a;

if(pd=='

for(i=a;

p[i]=p[i+t2];

ntext=ntext-t2;

printf("

删除成功,删除后的内容为:

\n%s\n"

elseif(pd=='

gotoloop;

if(pdx=='

||pdx=='

Delete(text,l);

voidinsert(chartext[],intl)//向文本中插入内容

inti=0,t=0,t2=0,a=-1,b;

charcr[20]="

pd,x[500],c,d;

\n当前文本信息为:

\n输入您要在哪个内容前插入,以@结束:

while((c=getchar())!

)//用一个数组接收要插入在哪个内容之前

if(c=='

break;

else

cr[t++]=c;

continue;

a=strindex(text,cr,t,l);

//查找并返回要插入的位置点

inths=1,ls=0;

for(b=0;

b<

a;

b++)

if(text[b]=='

ls=0;

\n查找到结尾没有找到插入点,输入【R】查找其他;

d=getchar();

\n您要插入的位置是第%d行,第%d列之前\n"

hs,ls+1);

\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:

if(pd=='

l=a+t;

gotoloop;

elseif(pd=='

\n\n输入您要插入的内容,以@结束:

while((c=getchar())!

if(c=='

{break;

else

x[t2++]=c;

continue;

for(i=ntext;

i>

i--)

text[i+t2]=text[i

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2