摘要
当下C++语言是一门重要的课程学习,学会运用并结合其他的知识一起解题是一件值得我们重视的,数据结构是一门结合C++知识的重要课程,因此我们要学会将平时课本的知识运用到我们现实生活当中,这样才能让我们所学的知识更加深刻。简易文本编辑器的问题就是一个例子,传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。计算机信息管理为人们的生活、工作提供了方便,提高了效率。“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
关键词:简易文本编辑器,数据结构,顺序表。
目录
一、需求分析 (1)
1.1问题描述 (1)
1.2基本任务 (1)
二、概要设计 (1)
2.1主界面设计 (1)
2.2数据结构设计 (1)
三、详细设计 (2)
3.1清空内容模块 (2)
3.2打开文件模块 (2)
3.3输入模块 (2)
3.4插入模块 (2)
3.5删除模块 (2)
3.6替换模块 (2)
3.7显示模块 (2)
3.8保存模块 (3)
3.9系统层次图 (3)
四、测试结果 (3)
4.1文本编辑器主界面 (3)
4.2系统功能 (4)
五、调试分析 (7)
六、心得体会 (8)
七、参考文献 (9)
八、程序源代码 (10)
一、需求分析
1.1问题描述
传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。计算机信息管理为人们的生活、工作提供了方便,提高了效率。“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
1.2基本任务
通过用户调查分析及实际需求,系统需要实现如下基本任务:
(1)输入数据信息建立文本;
(2)打开文本读取已保存的信息;
(3)插入新的信息到文本中;
(4)删除不再需要的文本信息;
(5)替换不需要的文本信息;
(6)显示所有的文本信息;
(7)保存所输入、插入、替换过的文本信息;
(8)清空文本信息。
二、概要设计
2.1主界面设计
为了实现简易文本编辑器的各项功能,设计一个含有多个菜单项的主控菜单模块以操作系统的各项功能,进而方便用户使用系统。
2.2数据结构设计
为实现数据的有序存储,该编辑器应该用顺序存储结构来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
三、详细设计
3.1清空内容模块
清空以前的文本信息,将用数组存的数据内容全部置为0。
3.2打开文件模块
确认打开文件并提示未保存的数据将会丢失,如果未选择打开文件,则返回主菜单。
3.3输入模块
输入文本信息,从主菜单中选择输入,提示输入内容,并统计文本字符数和行数。
3.4插入模块
插入文本信息,首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置。
3.5删除模块
删除文本信息,首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息。
3.6替换模块
替换文本信息,首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息。
3.7显示模块
显示当前文本信息,遍历用数组存入的信息,并输入到外部显示器上。
3.8保存模块
保存当前信息,并提示输入文件名,确认保存之后提示保存成功。
3.9系统层次图
图3-1 系统层次图
四、测试结果
4.1文本编辑器主界面
主界面功能,如图4—1所示。
图4—1 文本编辑器主界面
4.2系统功能
⑴输入文本信息功能,如图4—2所示。
图4—2 输入界面
⑵查找文本信息,如图4—3所示。
图4—3查找功能界面
⑶显示文本信息,如图4—4所示。
图4—4显示文本界面⑷插入操作,如图4—5所示。
图4—5插入功能界面
⑸删除操作,如图4—6所示。
图4—6删除功能界面⑹替换文本内容,如图4—7所示。
图4—7 替换功能界面
⑺文件保存,如图4—8所示。
图4—8 保存功能界面
五、调试分析
程序设计没有按照一定的流程来,导致程序臃肿,可重复利用率太低,比如程序中的chazhao函数,在替换,删除等的过程中可以充分利用到,从而减少代码的长多,提高可读性和减少时间的复杂性,设计开始的时候没有充分考虑到,到最后无法在短时间内修改完成;
程序的选择语句运行比较的多,当初是为了程序的安全和便捷,选择了较多的选择,确认步骤,这样一来使得程序中的选择语句比较的多,比较乱。这个在概要设计中没有充分的理清思路,导致程序的可读性较差。
六、心得体会
这是第一次比较全面的设计一个可执行多种功能的程序的课程设计,暴露出较多的知识点的缺乏,比如文件的打开与保存等。程序的运行结果与理论推导结果基本吻合,即该算法与程序设计基本满足课程设计要求。该程序的优点是简单易懂,不存在理解上的障碍,很自然地能想到这种解法。但是该程序比较臃肿,可重复利用率低,还有待修改和完善。
通过这次数据结构的课程设计使我对所学知识有了更好的理解,增强了自己的动手能力,但同时也发现了自己的不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。通过这个实验,使我基本操作有了一定的思路,知道该从哪里着手去完成一项功能编译,也让我学会了如何通过书籍查阅到自己想要的信息,并有一个思维方向去解决编译时出现的问题,提高了我的编程效率,我想这对我以后的学习会有很大的帮助,会让我有信心去完成下一个实验。
七、参考文献
[1]严蔚敏吴伟名编著,《数据结构》,清华大学出版社,2007年9月
[2]谭浩强编著,《c语言程序设计》,清华大学出版社
[3]钱能.C++程序设计教程(第二版)[M] .北京:清华大学出版社,2005
八、程序源代码
#include
#include
#include
#include
#define MAX 10000
#define _CRT_SECURE_NO_DEPRECA TE //在vs中取消warning的警告void menu();
void shuru(char text[]);
void bc(char text[]);
void dakai(char text[]);
void dayin(char text[]);
void chazhao(char text[],int l);
void tihan(char text[],int l);
int strindex(char text[],char t[],int i2,int l);
void shanchu(char p[],int l);
void cs(char text[]);
void charu(char text[],int l);
void tuichu(int status);
char text[MAX]=""; //文本编辑域
char name[20]=""; //文件保存的位置
int status=0; //显示是否保存过的状态
int ntext; //文本编辑的位置
void dakai(char text[])
{
system("cls");
FILE *fp;
char pd,ch;
char name[30];
int i=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();
}
void bc(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'))
{
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;i fprintf(fp,"%c",text[i]); fclose(fp); status=1; printf("\n文件保存成功\n"); break; } if (tmp=='B' || tmp=='b') { break; } } } } void cs(char text[]) { int i; for (i=0;i { text[i]='\0'; } ntext=0; status=0; } 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); //模式匹配不成功 } void menu() { system("cls"); time_t timep; time (&timep); printf("%s",ctime(&timep)); printf("信息与计算科学1209010314 范亚飞\n"); printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n"); printf("\n\n\t\t\t 欢迎您使用文本编辑器软件!\n"); printf("\n\n\n\n\n\n\n\n\npress Enter to continue...\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:"); char n; 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(text,0);break; case '6': tihan(text,0);break; case '7': dayin(text);break; case '8': bc(text);break; case '9': tuichu(status); default : break; } } else { printf("\n输入有误,请重新输入:"); fflush(stdin); n=getchar(); } system("pause"); goto loop; } void chazhao(char text[],int l) { system("cls"); int i,t,a=-1; char pattern[20],bd,pd; printf("原文为:\n"); dayin(text); printf("请输入您要查找的内容"); scanf("%s",pattern); printf("您查找的内容是:%s\n",pattern); t=strlen(pattern); loop: a=strindex(text,pattern,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); fflush(stdin); bd=getchar(); if (bd=='R'||bd=='r') goto loop; } if (pd=='R'||pd=='r') {l=0;chazhao(text,l);} } void dayin(char text[]) { system("cls"); printf("现在文本的内容为:\n"); printf("%s\n",text); int hs=1,i; for (i=0;i { if (text[i]=='\n') { hs++; } } printf("\n文本共有%d行\n",hs); } void shuru(char text[]) { system("cls"); printf("请输入内容(输入@结束输入并返回主菜单):\n"); printf("%s",text); char c; int i=ntext,j=ntext; fflush(stdin); while ((c=getchar())!='@') { text[i]=c; i++; ntext=i; continue; } int cout=0,zf=0,h=1,hs=1,zfs=0;
数据结构课程设计文章编辑附录中有全部代码 GE GROUP system office room 【GEIHUA16H-GEIHUA GEIHUA8Q8-
课程设计任务书专业名称:计算机科学与技术(软件工程) 课程名称:数据结构课程设计 设计题目:文章编辑问题 起止时间:2013年6 月24 日至2013年7 月12 日 问题描述 静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。 基本要求 (1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)查找出文章中某一段文字,并用其他文字进行替换; (4)删除某一子串,并将后面的字符前移。输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";
(3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果; (4)输出删除某一字符串后的文章; 实现提示 存储结构使用线性表,分别用几个子函数实现相应的功能,并且使用菜单的形式,可以选择所要进行的操作(查找、替换、删除、统计等)。
文章编辑系统 1概要设计 本次课程设计的题目是文章编辑系统,本系统的功能描述如下:用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。 1.新建文本 2.浏览输入文本 3.文本字符统计 4.指定字符串统计 5.指定字符串删除 6.指定字符串替换 7.退出系统 本系统包含七个功能模块,分别为:新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指
数据结构文本编辑器文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-
数据结构课程设计报告 一.需求分析 1.题目及要求 名称:简单的文本编辑器 内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。 要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一字符或者子串,并将后面的字符前移。 (4)插入某一字符或者子串。 (5)查找某一字符或者子串。 存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和 范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章。 通过题目及其要求可知,本程序应实现以下功能: (1)文章内容的输入:包括字母、标点符号、数字等; (2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以 及文章所有字数的个数的统计; (3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作, 其中在查找的过程中统计出该字符或字符串在文章中出现的次数; 2.问题分析 本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同
细数几款免费好用的在线HTML编辑器 先普及一下基本知识:什么叫在线HTML编辑器?说得简单点,在线HTML编辑器就是在网上发帖子、写博客的那个带编辑功能的框框,可以进行图文排版等操作。当年本菜鸟做网站的时候,曾经自己用javascript编写过一个比较简单的在线HTML编辑器,用于文本内容的排版。但是因为水平有限,很多功能都无法实现。后来有了eWebEditor,功能确实强大,但这个编辑器是个收费的软件,并且正因为功能强大,也就显得过重,一些轻量的场合不是太适用。那有没有既免费、又功能强大、还能适应轻量场合的在线HTML编辑器呢?答案肯定是有的。这首先要感谢这些年来有一批奉献精神的程序猿们不断推进共享软件的开发,让我们得以享受他们的成果。一、百度出品的UEditorUEditor是由百度web 前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。特别要说的是,头条号后台发布文章的编辑器就是用的UEditor!百度UEditorUEditor还有一个轻量版的,叫做UMeditor,简称UM。UM是为满足广大门户网站对于简单发帖框,或者回复框需求所定制的在线HTML编辑器。主要特点是容量和加载速度上的改变,主文件的代码量为139k,而且放弃了使用传统的iframe模式,采用了
div的加载方式,以达到更快的加载速度和零加载失败率。UM的第一个使用者是百度贴吧,以经受贴吧每天几亿的pv 的考验,功能设计应当是最优化的了。当然随着代码的减少,UM的功能对于UE来说还是有所减少,但也有增加,比如拖拽图片上传,chrome的图片拖动改变大小等。百度UEditor界面二、xhEditor开源HTML编辑器xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化HTML编辑器,基于网络访问并且兼容IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+。xhEditor完全基于Javascript 开发,可以应用在任何的服务端语言环境下,例如:PHP、ASP、https://www.wendangku.net/doc/e56416740.html,、JA V A等。可以在CMS、博客、论坛、商城等互联网平台上完美的嵌入运行,能够非常灵活简单的和您的系统实现完美的无缝衔接。 主要特点:精简迷你:初始加载4个文件,包括:1个js(50k)+2个css(10k)+1个图片(5k),总共65k。若js和css文件进行gzip压缩传输,可以进一步缩减为24k左右。使用简单:简单的调用方式,加一个class属性就能将textarea变成一个功能丰富的可视化编辑器。无障碍访问:提供WAI-ARIA全面支持,全键盘精细操作,全程语音向导,提供完美无障碍访问体验,充分满足残疾人的上网需求。内置Ajax上传:内置强大的Ajax上传,包括HTML4和HTML5上传支持(多文件上传、真实上传进度及文件拖放上传),剪切板上传及远程抓
#include
} p->next=NULL; return head; } /****输出文章*****/ Lstring *OutPut(Lstring *head) { Lstring *p=head; do { printf("%s\n",p->ch); } while((p=p->next)!=NULL); return head; } /****统计字母的个数*****/ int Alphabet(Lstring *head) { Lstring *p=head; int count=0; do { int Len; Len=strlen(p->ch); for(int i=0;i
Ueditor在线编辑器配置示例 1.简介 UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。 2.下载 首页地址:https://www.wendangku.net/doc/e56416740.html,/website/index.html,点击下载,可以根据需要下载php、aps、jsp、.net版本。由于1.4版本和1.3版本内容变更较大,本例中使用了最新版本1.4.3.1 jsp utf-8 版本进行测试。 3.配置 下载ueditor后,放入系统的js库中,由于本例的相同功能的ewebeitor 放在webroot下,本例中也直接放入的webroot下,结构图如下:
首先配置通用配置的控制器路径,文件名为:ueditor.config.js。此文件配置需要对应下载的版本,即jsp版对应修改: serverUrl: URL + "jsp/controller.jsp" 修改了通用配置后,还需要修改对应的上传文件、图片等路径,我们需要根据我们配置的版本去设置对应目录的内容,jsp版本如下:
实际配置如下图: 下面还有对应图片、视频的配置,与图片配置类似。 4.问题 4.1jar问题
需要的jar都已在ueditor中包含,直接拷贝至项目的lib中并加入classpath中即可。 1.4.3版本需要commons-io- 2.4.jar支持。所以在buildpath中需要将该包放置靠前。 4.2拦截器问题 对于使用了Struts2或配置了其他拦截器的,需要将该请求放行如Struts2一般配置为: 对于此类会拦截jsp的请求的配置,可以根据项目需要, 1.改为*.action,*.do之类的请求匹配 2.加入自己的拦截器,如本例所配置的 com.linewell.core.filter.ExtendStrutsPrepareFilter中, 不解的可以参照: https://www.wendangku.net/doc/e56416740.html,/krysml/article/details/9006533