当前位置:文档之家› 简易文本编辑器说明书

简易文本编辑器说明书

简易文本编辑器说明书
简易文本编辑器说明书

中北大学

课程设计说明书

学院、系:

专业:

班级:

学生姓名:学号:

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

起迄日期: 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】将重头查找;");

l=0;

fflush(stdin);

pd=getchar();

}

else

{

printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;",hs,ls);

kk+=1;

fflush(stdin);

bd=getchar();

if (bd=='R'||bd=='r')

goto loop;

}

5

(1)界面

(2)打开已有文件

(3)查找具体内容

(4)删除内容

(5)插入内容

(6)替换内容

(7)保存文件

(8)退出

6 课程设计心得

通过这次的实训,对之前所学的C语言与数据结构都在加深一下印象,也把之前学得不是很熟悉的数据结构都做了一次回顾。在程序中,我用到的数据结构是顺序表,顺序表是用一组地址连续的存储单元依次存储线性表的数据元素,这种表也称为顺序存储结构或顺序映像。在程序调试的时候,也遇到了许多问题,最严重的问题,就是程序并不是用二维数组来实现的,在文件中的字符定位问题时,我用的是先找到第一行,再使用LOOP语句来使用循环,再做下一行的定位,这样在查找的时候就是一行一行的显示的,不会出现行数与列数统计上出错的问题。有的时候做一个程序时,如果不会很好地使用一些特别深的方法的时候,那么可以换一种思考角度,就像上面的问题,用二维数组来实现虽然会很方便地进行行号列号地定位,但是在对后面的问题处理上就会又要涉及到别的处理方法,所以在这里可以换一种思维方式,用简单的方式来思考同一个问题,就会有不同的发现了。

附录:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

void open(char text[]);

void save(char text[]);

void search(char text[],int l);

int strindex(char text[],char t[],int i2,int l); void output(char text[]);

void Delete(char p[],int l);

void insert(char text[],int l);

void Replace(int status);

void menu();

#define MAX 10000

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

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

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

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

void open(char text[]) // 文件的打开

{

system("cls");

FILE *fp;

char pd,ch;

char name[30];

int i=0,ss=1;

printf("输入A:确定打开文件 M:返回主菜单");

fflush(stdin);

pd=getchar();

if (pd=='A'||pd=='a')

{

p rintf("请输入要打开文件名字(例如c:\\a.txt)");

s canf("%s",name);

w hile ((fp=fopen(name,"r"))==NULL)

{

printf("\n打开文件失败,请重新输入要打开的文件名:");

scanf("%s",name);

}

s ystem("cls");

w hile(!feof(fp))

{

ch=fgetc(fp);if(ch=='\n') ss++;

text[i++]=ch;

}

t ext[i]='\0';

n text=i;

f close(fp);

p rintf("\n文件读取成功\n文件内容为\n");

o utput(text);

p rintf("有%d行",ss);

}

if (pd=='M'||pd=='m')

menu();

}

void save(char text[]) //文件的保存

{

system("cls");

FILE *fp;

char pd;

char tmp;

int i;

printf("\n输入【A】保存;\n");

fflush(stdin);

pd=getchar();

if (!(pd=='A'||pd=='a'))

{

m enu();

}

else

{

i f(name[20]==NULL)

{

printf("\n请输入保存文件名(例如: c:\\a.txt):");

scanf("%s",name);

}

w hile ((fp=fopen(name,"w+"))==NULL)

{

printf("文件不存在,请重新输入文件名:");

scanf("%s",name);

}

p rintf("\nA:确定;B:取消:");

while(scanf("%c",&tmp)!=EOF)

{

if (tmp=='A' || tmp=='a')

{

for(i=0;i

fprintf(fp,"%c",text[i]);

fclose(fp);

status=1;

printf("\n文件保存成功\n");

break;

}

if (tmp=='B' || tmp=='b')

{

break;

}

}

}

}

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

int i1=l,j=0;

while (i1

{

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

{

j++;

i1++;

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

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

i1=i1-j+1; //主串从下一个位置开始匹配

j=0;

}//子串从头开始匹配

}

if (j>=i2)

{

r eturn(i1-i2);

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

r eturn(-1); //模式匹配不成功

}

void search(char text[],int l) //查找文本

{

system("cls");

int i,t,a=-1,kk=0;

char str1[20],bd,pd;

printf("原文为:\n");

output(text);

printf("请输入您要查找的内容");

scanf("%s",str1);

printf("您查找的内容是:%s\n",str1);

t=strlen(str1);

loop:

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

if (a!=-1)

{

l=a+t;}

int hs=1,ls=0;

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

{

l s++;

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

{

hs++;ls=0;

}

}

if (a==-1)

{

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

l=0;

f flush(stdin);

p d=getchar();

}

else

{

p rintf("已经找到在第%d行第%d列,输入【R】继续查找下一处;",hs,ls);

kk+=1;

f flush(stdin);

b d=getchar();

if (bd=='R'||bd=='r')

goto loop;

}

printf("一共找到了%d次",kk);

if (pd=='R'||pd=='r')

{

l=0;search(text,l);

}

}

void output(char text[]) //文本的输出{

system("cls");

printf("现在文本的内容为:\n");

printf("%s\n",text);

int hs=1,i;

f or (i=0;i

{

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

{

hs++;

}

}

printf("\n文本共有%d行\n",hs);

}

void Delete(char p[],int l) //删除文本{

int i,a=-1,t2=0;

char x[20],px,pd,pdx,c;

system("cls");

printf("%s",p);

printf("\n输入A执行查找删除内容");

fflush(stdin);

px=getchar();

if (px=='a'||px=='A')

{

p rintf("\n输入您要删除的内容,以@结束:");

f flush(stdin);

w hile ((c=getchar())!='@')

{

if (c=='@')

{

break;

}

else

{

x[t2++]=c;

continue;

}

}

loop:

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

i nt hs=1,ls=0;

f or (i=0;i<=a;i++)

{

ls++;

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

{

hs++; ls=0;

}

}

i f (a==-1)

{

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

l=0;

fflush(stdin);

pdx=getchar();

}

e lse

{

printf("你要删除的内容在第%d行第%d列\n 输入【A】确定删除;输入【B】寻找下个词;",hs,ls);

fflush(stdin);

pd=getchar();

l=t2+a;

if (pd=='a'||pd=='A')

{

for(i=a;i

{

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

}

ntext=ntext-t2;

printf("删除成功,删除后的内容为:\n%s\n",text);

}

else if (pd=='b'||pd=='B')

goto loop;

}

i f(pdx=='r'||pdx=='R')

Delete(text,l);

}

}

void insert(char text[],int l) //向文本中插入内容

简单文本编辑器——课程设计(delphi)

目录 1内容简介 (3) 2程序设计流程及方法 (3) 2.1 设计思路 (3) 2.2 事件响应方法 (4) 3测试结果 (5) 3.1调试方法 (5) 3.2调试过程 (5) 3.3调试结果 (6) 4分析与探讨 (8) 4.1 函数的使用 (8) 4.2 人性化设计 (9) 独立性声明 (11) 一个简单的文本编辑器

一、内容简介 为满足个人的个性需求,为此设计一个有着自己特色的文本编辑器,实现自己的特定用途。 本实例程序可以对文本进行基本的编辑;能执行基本的文件操作;同时它的状态栏具有提示信息、显示时间及当前光标位置的功能。 而重点在于熟悉Delphi中ObjectTreeView、ObjectInspector等的用法及相应的属性设置以及一些插件的使用。源代码的编写是重中之重。 开发的这个类似于“写字板”的程序,不过功能要相对简单一些。该程序的主要功能包括: 1、能执行基本的文件操作,包括新建、打开、保存一个文本文件 2、能对文本进行基本的编辑操作,包括剪切、复制、粘贴、删除、选择及查找 3、能对文本进行简单的格式化操作,包括改变文本的字体、字号、对其方式等 4、可以在状态栏显示提示信息、当前光标位置以及系统日期和时间 二、程序设计流程及方法 (一)、设计思路 基本思路:先创建一个窗体,添加菜单栏,工具栏以及状态栏,然后利用ActionManger建立一些基本指令,通过修改基本指令的属性来制作菜单和快捷键,并把它们放到菜单栏和工具栏边上。然后再添加一个ComboEx和Edit来作为字体的模式和大小的设置项,这样就建立起了一个用户界面和完成了部分功能,对于不能直接通过属性设置的功能,则通过编写时间的源代码来实现。 按照面向对象程序的设计方法,在应用程序框架下,利用VCL(Visual Compoment Library,可视化组件)进行填充,本程序将用到Delphi7提供的RichEdit、ImageList、ActionManger、ActionMainMenuBar、ActionToolBar和StatusBar组件。 在ActionManger组件中,将使用Delphi 7提供的一些标准的指令,这样可

五款最好的程序文本编辑器

多场合下我们会用到纯文本编辑器,Windows自带的记事本功能很简陋,因此我们从网友的投票提名中选取了前五个最佳的文本编辑器(实际上有六个)。这些编辑器实际上主要适合程序员使用,他们的清单如下。 Notepad++ (Windows) 优于Windows记事本的一个文本编辑器,完全免费且开源,对于不同的编程语言可以实现语法高亮,代码折叠以及宏,起可定制性非常强。 Emacs (所有平台) Emacs文本编辑器深受高级程序员的喜爱,具有内置的宏功能以及强大的键盘命令,这对于编辑代码来说真是一种享受,这个程序几乎被移植到了每一个平台,并有多个发行版,其中最流行的是GNU Emacs和XEmacs,它们是跨平台、完全免费并且开源。 UltraEdit (Windows)

UltraEdit是一个49.95美元的共享软件,也提供了友好界面的编程编辑器,支持语法高亮,代码折叠和宏,以及一大堆其他的功能,内置了对于HTML、PHP 和JavaScript等语法的支持,和其类似的一个共享软件EditPlus也不错。 TextMate (Mac OS X) 价值63美元的TextMate功能强大且更具吸引力,其界面很具吸引力,在短短几年中就获得了大量的爱好者。Windows用户如果喜欢TextMate的话可以尝试用一下类似TextMate的E Text Editor。 Vim (所有平台)

和Emacs一样,Vim以键盘宏而广受欢迎,做为著名的老牌编辑器Vi的后代,Vim很适合键盘操作的程序员的口味。Vim的可定制性很强,Windows用户可以试试gVim或gVim Portable,Mac用户则有MacVim。如果你只是需要Vim 最有特色的部分的轻量型编辑器,可以试试Cream。 TextPad (Windows) 基于Windows的共享软件TextPad售价32.5美元,它同样拥有适合程序员的多种功能,语法高亮,代码拦截以及宏,TextPad具有不错的搜索能力和易用性。

简易文本编辑器说明书

中北大学 课程设计说明书 学院、系: 专业: 班级: 学生姓名:学号: 设计题目:简易文本编辑器 起迄日期: 2016年12月16日~2016年12月29日指导教师: 日期: 2016年12月29日

1 设计目的 通过用户调查分析及实际需求,开发出一个文本编辑器,可以方便用户对文本进行编辑。系统需要实现如下基本功能: (1)具有图形菜单界面; (2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;(3)可正确存盘、取盘; (4)正确显示总行数。 2 任务概述 要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来, 显示到显示器上,并统计出行数。 ⑵查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要 调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。 ⑶删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果 找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; ⑷插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入 插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。 ⑸替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的 信息内容,否则提示未找到要被替换的信息; ⑹保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文 本中。 ⑺显示文本内容:读出文件中的所有字符,显示到显示器上。 ⑻退出 3 模块划分 (1)系统主要包含主程序模块和其他操作模块。其调用关系如图(一)所示。

java课设—文本编辑器的设计与实现

淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 面向对象课程设计 文本编辑器的设计与实现 学 号:
专业班级: 系 (院) : 设计时间: 设计地点: 计算机工程学院 2015.6.21~2014.7.4 计算机楼机房、教室、宿舍
指导教师评语:
成绩:
签名:
年 月 日

面向对象课程设计报告

1
页,共
14

1.课程设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程 后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理 论、方法和基础知识的理解,掌握使用 Java 语言进行面向对象设计的基本方法,提高运用 面向对象知识分析实际问题、解决实际问题的能力。
2.课程设计任务与要求:
课程设计可选用 NetBeans、Eclipse、JBuilder 等作为开发平台以提高开发效率,尽可能熟 练掌握其中一种集成开发环境。建议采用 UML 建模技术进行系统的分析设计,在 Visio 中画出系 统用例图和类图,并将 UML 图复制到设计报告中。 通过这次设计,要求掌握以下内容: 1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 2)类、包、接口的定义与使用 3)常用工具类与算法的实现(数组、向量、字符串、链表) 4)Java 常用标准 GUI 组件及其事件处理 5)Java 的异常处理机制 6)Java 的数据库连接技术 7)Java 的多线程技术与动画制作 8)Java 的网络编程 任务: 设计一个类似于 Windows 记事本(Notepad)的 Java 程序。可以打开、新建、保存一个文本 文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复 制、粘贴、剪切、查找、替换等) ;在文本中能够插入对象。简单文本编辑器提供给用户基本的 纯文本编辑功能, 能够将用户录入的文本存储到本地磁盘中。 能够读取磁盘中现有的纯文本文件, 以及方便用户进行需要的编辑功能。

OPT算法和简单文本编辑器

通达学院 专业课程设计I 题目1 OPT算法模拟实现 题目2 文本编辑器 专业 学生姓名 班级学号 指导教师 指导单位计算机学院、软件学院日期

OPT算法模拟实现(OS类) 一、课题内容和要求 内容:学习虚拟存储机制中页面调度算法,通过编程模拟实现页面调度的OPT算法,进一步理解页面调度的OPT算法的概念及含义,提高对OPT页面调度算法的认识,同时提高自己动手实践的能力。加深对主存与辅助存储器统一管理、逻辑地址与物理地址转换、页序列走向的装入和替换问题的理解,同时有利于对存储技术的理解。 要求:利用C语言或是C++设计编程,完成OPT算法的设计,表示页序列走向的装入和替换,算出缺页中断率。 二、概要设计 OPT算法即最佳优先算法,实质是通过调页功能和页面置换功能,陆续把即将要运行的页面调入内存,并且把暂时不运行的页面从内存在删除,置换时以页面为单位,算出缺页次数和缺页率,缺页数用diseffect 表示,页面序列数m,初始值diseffect=0,缺页率= diseffect /m。 用C语言设计OPT算法的程序,可以模拟实现算法,在理论联系实际的基础上,分析各个OPT页面置换算法的直接访问或是缺页中断,然后替换的过程。为了能实现OPT请求调页和置换功能,在VC++6.0上编程模拟实现。该算法选择永不使用的或是在最长时间内不再被访问的页面进行置换,这是理想化算法,具有最好的性能,淘汰访问串中将来再也不出现的或者是在离当前最远的位置上出现的页,这样淘汰掉该页将不会造成因需要访问该页又立即把它调入的现象。这种算法难以实现,因为它要求必须预先知道每一个进程的访问串。实验中在对操作系统的整体把握上,将操作系统的OPT算法用于实践中去,模拟出页面调度算法得出缺页率。 具体实验程序流程图如下:

几种常用网页文本编辑器总结

文本编辑器应用总结 一.lhgeditor文本编辑器 lhgeditor组件文件结构: 1. lhgeditor.js:组件的核心JS文件 2. lhgeditor.css:组件的样式表文件 3. images:组件所需的图片都在此文件夹中 以上三个文件为组件所必须的三个文件,组件包中其它以“_”开头的文件为示例的演示文件,实际使用中不需要这些文件。当然框架核心文件lhgcore.js是每个组件都必须用到的文件,记得加载组件前先要加载此文件。 lhgeditor组件使用说明: 1. 在调用组件的页面加载lhgcore.j s和lhgeditor.js两个文件。 2. 在window.onload函数里加入J.editor.add(编辑器的id).init(); 例:

二.nicEdit文本编辑器