简易文本编辑器说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中北大学

课程设计说明书

学院、系:

专业:

班级:

学生姓名:学号:

设计题目:简易文本编辑器

起迄日期: 2016年12月16日~2016年12月29日指导教师:

日期: 2016年12月29日

1 设计目的

通过用户调查分析及实际需求,开发出一个文本编辑器,可以方便用户对文本进行编辑。系统需要实现如下基本功能:

(1)具有图形菜单界面;

(2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;(3)可正确存盘、取盘;

(4)正确显示总行数。

2 任务概述

要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。

为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息:

⑴显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来,

显示到显示器上,并统计出行数。

⑵查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要

调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。

⑶删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果

找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;

⑷插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入

插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。

⑸替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的

信息内容,否则提示未找到要被替换的信息;

⑹保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文

本中。

⑺显示文本内容:读出文件中的所有字符,显示到显示器上。

⑻退出

3 模块划分

(1)系统主要包含主程序模块和其他操作模块。其调用关系如图(一)所示。

图(一)

(2)文本编辑器的运行流程图如图(二)所示。

图(二)

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

1.文件的打开:void open(char text[]);

2.文件的保存:void save(char text[]);

3.查找文本:void search(char text[],int l);

4.字符的匹配:int strindex(char text[],char t[],int i2,int l);

5.文本的输出:void output(char text[]);

6.删除文本:void Delete(char p[],int l);

7.插入文本:void insert(char text[],int l);

8.替换文本:void Replace(int status);

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

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

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

char text[MAX]=""; //文本编辑域

char name[20]=""; //文件保存的位置

int status=0; //显示是否保存过的状态

int ntext; //文本编辑的位置

(2)字符匹配

在这个程序中要特别注意的是字符的匹配,因为查找、插入、替换都需要用到这一步设计。在这里我设计了一个子模块来实现匹配:

int strindex(char text[],char t[],int i2,int l) //查找要操作的数据的位置(模式匹配) {

int i1=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); //模式匹配不成功}

(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;}

int hs=1,ls=0;

for (i=0;i<=a;i++)

{

ls++;

if (text[i]=='\n')

{

hs++;ls=0;

}

} if (a==-1)

{

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

相关文档
最新文档