简易文本编辑器说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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】将重头查找;");