数据结构课程设计简易文本编辑器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
具体的实现函数如下:
voidInsert(charinsert_str[],intlocation)
3.2
菜单显示模块的主要功能是将菜单进行显示,本模块调用menu函数,menu函数由printf函数进行格式的输出,并通过system()函数进行颜色的改变,以及清屏等操作,主要输出内容包括本设计的介绍、小组信息、主要功能及相关代号。
输出模块主要功能是输出文本内容以及总行数,主要是调用Output函数和statistics函数将文本基本信息进行打印。Output函数主要是将changed_source_str字符数组进行输出打印,changed_source_str字符数组是存储操作后的source_str字符数组;statistics函数主要是统计文本中换行和结束符的个数,并输出打印count。
char data;
struct LNode *next;
}LNode,*LinkList;
LinkList L = 0;//定义全局变量字符串的起始指针
voidmenu()//菜单显示函数,显示菜单,无传递参数,
//接调用
LinkList Init(char Init_str);//初始化函数,将资源转化为所定义的连//式结构,传入参数为所要初始化的Biblioteka Baidu本,//返回值为LinkList类型的头指针。
//求子串T的next函数修正值并存入数组nextval
{
int j=1,k=0;
nextval[0]=-1;
while(j<n2)
{
if(k==0||T[k]==T[j])
{
nextval[j]=T[k]==T[j]?nextval[k]:k;
j++;
k++;
}
else
k=nextval[k];
}
2.3
#define STRING_MAXSIZE 256//定义串的长度
#define ERR_NOMEMORY -1
charsource_str[STRING_MAXSIZE];//将文件内资源以字符串存于此变量
int len;//存储原始字符串的长度
//定义数据存储的结构,以链结构存储
typedef struct LNode{
具体的实现函数如下:
int Replace(char replaced_str[],char replace_str[])
{
int j=0;
int replaced_str_loc,replaced_str_len,reped_len,source_str_len;
LNode *p,*s,*z,*w;
}
else
{
return -1;//未找到
}
}
3.4
本模块的主要调用Replace函将输入的被替换的文本转换为替换的文本信息,并显示文本信息。Replace函数通过调用for循环得到被替换的文本的前一节点的指针*p,以及被替换文本的后一节点的指针*s,调用Init函数使替换文本初始化为连式存储并返回此链的头节点指针存于*w,for循环得到替换文本最后一位节点的指针*w。通过指针的操作将被替换的文本卸下,并连接替换文本组成新链。最终打印输出此链。
(2)能正确打开所键入的文本路径,并能够读取相应文本信息。
(3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作。
(4)能够正确对修改后的文本内容存盘。
(5)正确显示文本总行数。
以下是各功能模块的功能描述:
1
主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。
if(replaced_str_loc != -1)
{
LTmp = Init(replace_str);
p = L;
s = L;
z = LTmp->next;
w = LTmp;
for(j = 0; j < replaced_str_loc;j++)
p = p->next;
for(j = 0; j < (replaced_str_loc + replaced_str_len);j++)
3
本模块的主要功能是通过调用Search函数实现基本功能,Search函数通过读入用户输入的想要查找的文本信息,通过调用KMP算法函数返回文本中所要查找的文本信息的所处起始位置search_loc,若找不到子串,则返回-1。
获取子串的next函数如下:
void KMPGetNext(char *T,int n2,int nextval[])
voidDisplay(int len_dis);//显示函数,传入参量为所要显示的文本//长度。
voidsave();//存盘函数,将所改变的文本存入到磁盘//中,无传入参数,无返回参数
voiddelay();//延时函数
intStringLength( LinkList S );//求串长函数,传入参数为要求的串的长//度,返回参数为文本的长度
}
s_len=strlen(s);
search_len=strlen(search_str);
if(search_len <= s_len)
{
search_loc = KMPIndex(s,s_len,search_str,search_len);//利用KMP算法获取查找的位置
return search_loc;
1.5
本模块的主要功能是将需要插入的文本信息插入到指定的位置,并能够显示修改后的文本信息。
1.6
本模块的主要功能是将所要移动的模块移动到指定的相应位置,并能够显示修改后的文本信息。
1.7
本模块的主要功能是删除指定的文本。
1.8
本模块的主要功能是将存于磁盘内的文件读取,以便后续操作过程中使用。
1.9
本模块的主要功能是将改变后的文件存于磁盘,以便下次使用。
printf("*主银!!您所被替换的文本不存在哦~~*\n");
printf("**************************************\n");
}
}
3.5
本模块的主要通过调用Insert函数实现基本功能。Insert函数是将需要插入的文本信息插入到指定的位置,并显示修改后的文本信息。此函数采用边生成新节点边插入的方式完成,通过while循环得到插入位置的指针*p,将插入文本的第i位赋值给新生成的结点s->data,p的next指向新生成的结点s,依次循环直到将整个文本插入完成。
voidReplace(char bereplaced_str[],char replace_str[]);//替换函数,替换相应文本信息,传入参//量为被替换的文本信息,以及替换的文//本信息。
voidInsert(char insert_str[],int location);
//插入函数,在指定位置插入指定信息,//传入参量为需要插入的文本信息,以及//插入的相关位置。
voidstatistics();//统计行数,无传入参数,无返回值。
voidKMPGetNext(char *T,int n2,int nextval[]);
intKMPIndex(char *S,int n1,char *T,int n2);//KMP算法,求文本的位置
3.1
主函数模块的主要功能是调用menu函数初始化菜单界面,并调用Openfile函数将存于本地磁盘内的文件读出到source_str[]数组中以备后续调用,并在将字符数组初始化为链表之后进入功能按键选择,通过switch语句进行相应的功能操作并调用相关模块,实现软件功能。
1.2
菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。
文本显示模块的主要功能是将所要显示的文本信息通过传入的参量传入本模块进行显示。
输出模块主要功能是输出文本所有信息。
1.3
本模块的主要功能是通过输入想要查找的文本信息,返回文本中所要查找的文本信息的所处起始位置。
1.4
本模块的主要功能是将输入的被替换的文本替换为替换的文本信息,并能够显示文本信息。
intInput(char input_string[]);//插入函数,在默认在文本末尾插入文本,//传入参量为所要插入的文本信息,返回//值为修改后的文本信息。
voidOutput();//输出函数,输出文本所包含的信息,无//传入参量,无返回值
intSearch(charsearch_str[]);//查找函数,查找相应的字符串函数传入//参量为指定的查找文本信息,返回查找//到的参数。
成绩:
指导教师(签章):
年 月 日
简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。
基本功能如下:
(1)界面友好,易与操作。采用菜单或其它人机对话方式进行选择。
KMPGetNext(T,n2,next);
while(i<n1&&j<n2)
{
if(j==-1||S[i]==T[j])//继续比较后继字符
{
i++;
j++;
}
else//模式串向右移动
j=next[j];
}
free(next);
return (j>=n2?i-n2:-1);
}
Search函数的描述如下:
1.10
存于磁盘下的.txt文件(可自己定义)。
2
2.1
本次设计主要是运用在主模块中的switch,case语句进行调用相关函数实现文本编辑器的基本功能,运用链式存储结构,链式存储结构能够通过结点指针的next值的改变实现插入、替换、移动、删除等一系列操作;通过KMP算法实现查找功能;通过C语言自带的文件操作函数实现文件的读取与存盘等功能。
}
具体的KMP算法如下:
int KMPIndex(char *S,int n1,char *T,int n2)
//利用子串T的next函数求T在主串S中的位置
{
int i=0,j=0;
int *next=(int *)malloc(n2*sizeof(int));
if(!next) return ERR_NOMEMORY ;
s = s->next;
for(j = 0; j < reped_len;j++)
w = w->next;
p->next = z;
w->next = s->next;
Display();
return 0;
}
else
{
printf("**************************************\n");
voidMove(char bemoved_str[],int location);
//块移动函数,将文本信息中的指定信息//移动到指定位置,传入参量为需要移动//的文本块以及指定的移动位置。
voidDelete(char delete_str[]);//删除函数,删除相应的文本信息,传入//参数为指定的被删除的文本
课程设计说明书
课程名称:数据结构课程设计
专业:电子信息科学与技术班级:2012-1
设计人:
山东科技大学
2015年7月11日
山 东 科 技 大 学
课 程 设 计 任 务 书
一、课程设计题目:简易文本编辑器
二、设计原始资料:[1] 严蔚敏、吴伟民,数据结构(C语言版)清华大学出版社 2012,05 [2]孙承爱、赵卫东,程序设计基础—基于C语言 科学出版社 2010,10
int Search(char search_str[])
{
char s[STRING_MAXSIZE];
int i=0;
int search_loc,search_len,s_len;
LNode *p;
p=L->next;
while(p)//获取修改后的文本信息
{
s[i++]=p->data;
p=p->next;
三、设计应解决下列各主要问题:
____1、具有菜单图形界面;
2、具有查找、替换、插入、块移动、删除等功能;
3、可正确存盘、取盘;
4、正确显示总行数
四、设计说明书应附有下列图纸:
1、模块调用图
2、 程序流程图
五、小组分工说明:
六、命题发出日期:2015/7/4_设计完成日期:2015/7/11
指导教师评语
replaced_str_len = strlen(replaced_str); //被替换的字符的长度
reped_len = strlen(replace_str);//需要替换的字符的长度
source_str_len = strlen(source_str);//主串字符的长度
replaced_str_loc = Search(replaced_str);//被替换的字符的位置
voidInsert(charinsert_str[],intlocation)
3.2
菜单显示模块的主要功能是将菜单进行显示,本模块调用menu函数,menu函数由printf函数进行格式的输出,并通过system()函数进行颜色的改变,以及清屏等操作,主要输出内容包括本设计的介绍、小组信息、主要功能及相关代号。
输出模块主要功能是输出文本内容以及总行数,主要是调用Output函数和statistics函数将文本基本信息进行打印。Output函数主要是将changed_source_str字符数组进行输出打印,changed_source_str字符数组是存储操作后的source_str字符数组;statistics函数主要是统计文本中换行和结束符的个数,并输出打印count。
char data;
struct LNode *next;
}LNode,*LinkList;
LinkList L = 0;//定义全局变量字符串的起始指针
voidmenu()//菜单显示函数,显示菜单,无传递参数,
//接调用
LinkList Init(char Init_str);//初始化函数,将资源转化为所定义的连//式结构,传入参数为所要初始化的Biblioteka Baidu本,//返回值为LinkList类型的头指针。
//求子串T的next函数修正值并存入数组nextval
{
int j=1,k=0;
nextval[0]=-1;
while(j<n2)
{
if(k==0||T[k]==T[j])
{
nextval[j]=T[k]==T[j]?nextval[k]:k;
j++;
k++;
}
else
k=nextval[k];
}
2.3
#define STRING_MAXSIZE 256//定义串的长度
#define ERR_NOMEMORY -1
charsource_str[STRING_MAXSIZE];//将文件内资源以字符串存于此变量
int len;//存储原始字符串的长度
//定义数据存储的结构,以链结构存储
typedef struct LNode{
具体的实现函数如下:
int Replace(char replaced_str[],char replace_str[])
{
int j=0;
int replaced_str_loc,replaced_str_len,reped_len,source_str_len;
LNode *p,*s,*z,*w;
}
else
{
return -1;//未找到
}
}
3.4
本模块的主要调用Replace函将输入的被替换的文本转换为替换的文本信息,并显示文本信息。Replace函数通过调用for循环得到被替换的文本的前一节点的指针*p,以及被替换文本的后一节点的指针*s,调用Init函数使替换文本初始化为连式存储并返回此链的头节点指针存于*w,for循环得到替换文本最后一位节点的指针*w。通过指针的操作将被替换的文本卸下,并连接替换文本组成新链。最终打印输出此链。
(2)能正确打开所键入的文本路径,并能够读取相应文本信息。
(3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作。
(4)能够正确对修改后的文本内容存盘。
(5)正确显示文本总行数。
以下是各功能模块的功能描述:
1
主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。
if(replaced_str_loc != -1)
{
LTmp = Init(replace_str);
p = L;
s = L;
z = LTmp->next;
w = LTmp;
for(j = 0; j < replaced_str_loc;j++)
p = p->next;
for(j = 0; j < (replaced_str_loc + replaced_str_len);j++)
3
本模块的主要功能是通过调用Search函数实现基本功能,Search函数通过读入用户输入的想要查找的文本信息,通过调用KMP算法函数返回文本中所要查找的文本信息的所处起始位置search_loc,若找不到子串,则返回-1。
获取子串的next函数如下:
void KMPGetNext(char *T,int n2,int nextval[])
voidDisplay(int len_dis);//显示函数,传入参量为所要显示的文本//长度。
voidsave();//存盘函数,将所改变的文本存入到磁盘//中,无传入参数,无返回参数
voiddelay();//延时函数
intStringLength( LinkList S );//求串长函数,传入参数为要求的串的长//度,返回参数为文本的长度
}
s_len=strlen(s);
search_len=strlen(search_str);
if(search_len <= s_len)
{
search_loc = KMPIndex(s,s_len,search_str,search_len);//利用KMP算法获取查找的位置
return search_loc;
1.5
本模块的主要功能是将需要插入的文本信息插入到指定的位置,并能够显示修改后的文本信息。
1.6
本模块的主要功能是将所要移动的模块移动到指定的相应位置,并能够显示修改后的文本信息。
1.7
本模块的主要功能是删除指定的文本。
1.8
本模块的主要功能是将存于磁盘内的文件读取,以便后续操作过程中使用。
1.9
本模块的主要功能是将改变后的文件存于磁盘,以便下次使用。
printf("*主银!!您所被替换的文本不存在哦~~*\n");
printf("**************************************\n");
}
}
3.5
本模块的主要通过调用Insert函数实现基本功能。Insert函数是将需要插入的文本信息插入到指定的位置,并显示修改后的文本信息。此函数采用边生成新节点边插入的方式完成,通过while循环得到插入位置的指针*p,将插入文本的第i位赋值给新生成的结点s->data,p的next指向新生成的结点s,依次循环直到将整个文本插入完成。
voidReplace(char bereplaced_str[],char replace_str[]);//替换函数,替换相应文本信息,传入参//量为被替换的文本信息,以及替换的文//本信息。
voidInsert(char insert_str[],int location);
//插入函数,在指定位置插入指定信息,//传入参量为需要插入的文本信息,以及//插入的相关位置。
voidstatistics();//统计行数,无传入参数,无返回值。
voidKMPGetNext(char *T,int n2,int nextval[]);
intKMPIndex(char *S,int n1,char *T,int n2);//KMP算法,求文本的位置
3.1
主函数模块的主要功能是调用menu函数初始化菜单界面,并调用Openfile函数将存于本地磁盘内的文件读出到source_str[]数组中以备后续调用,并在将字符数组初始化为链表之后进入功能按键选择,通过switch语句进行相应的功能操作并调用相关模块,实现软件功能。
1.2
菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。
文本显示模块的主要功能是将所要显示的文本信息通过传入的参量传入本模块进行显示。
输出模块主要功能是输出文本所有信息。
1.3
本模块的主要功能是通过输入想要查找的文本信息,返回文本中所要查找的文本信息的所处起始位置。
1.4
本模块的主要功能是将输入的被替换的文本替换为替换的文本信息,并能够显示文本信息。
intInput(char input_string[]);//插入函数,在默认在文本末尾插入文本,//传入参量为所要插入的文本信息,返回//值为修改后的文本信息。
voidOutput();//输出函数,输出文本所包含的信息,无//传入参量,无返回值
intSearch(charsearch_str[]);//查找函数,查找相应的字符串函数传入//参量为指定的查找文本信息,返回查找//到的参数。
成绩:
指导教师(签章):
年 月 日
简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。
基本功能如下:
(1)界面友好,易与操作。采用菜单或其它人机对话方式进行选择。
KMPGetNext(T,n2,next);
while(i<n1&&j<n2)
{
if(j==-1||S[i]==T[j])//继续比较后继字符
{
i++;
j++;
}
else//模式串向右移动
j=next[j];
}
free(next);
return (j>=n2?i-n2:-1);
}
Search函数的描述如下:
1.10
存于磁盘下的.txt文件(可自己定义)。
2
2.1
本次设计主要是运用在主模块中的switch,case语句进行调用相关函数实现文本编辑器的基本功能,运用链式存储结构,链式存储结构能够通过结点指针的next值的改变实现插入、替换、移动、删除等一系列操作;通过KMP算法实现查找功能;通过C语言自带的文件操作函数实现文件的读取与存盘等功能。
}
具体的KMP算法如下:
int KMPIndex(char *S,int n1,char *T,int n2)
//利用子串T的next函数求T在主串S中的位置
{
int i=0,j=0;
int *next=(int *)malloc(n2*sizeof(int));
if(!next) return ERR_NOMEMORY ;
s = s->next;
for(j = 0; j < reped_len;j++)
w = w->next;
p->next = z;
w->next = s->next;
Display();
return 0;
}
else
{
printf("**************************************\n");
voidMove(char bemoved_str[],int location);
//块移动函数,将文本信息中的指定信息//移动到指定位置,传入参量为需要移动//的文本块以及指定的移动位置。
voidDelete(char delete_str[]);//删除函数,删除相应的文本信息,传入//参数为指定的被删除的文本
课程设计说明书
课程名称:数据结构课程设计
专业:电子信息科学与技术班级:2012-1
设计人:
山东科技大学
2015年7月11日
山 东 科 技 大 学
课 程 设 计 任 务 书
一、课程设计题目:简易文本编辑器
二、设计原始资料:[1] 严蔚敏、吴伟民,数据结构(C语言版)清华大学出版社 2012,05 [2]孙承爱、赵卫东,程序设计基础—基于C语言 科学出版社 2010,10
int Search(char search_str[])
{
char s[STRING_MAXSIZE];
int i=0;
int search_loc,search_len,s_len;
LNode *p;
p=L->next;
while(p)//获取修改后的文本信息
{
s[i++]=p->data;
p=p->next;
三、设计应解决下列各主要问题:
____1、具有菜单图形界面;
2、具有查找、替换、插入、块移动、删除等功能;
3、可正确存盘、取盘;
4、正确显示总行数
四、设计说明书应附有下列图纸:
1、模块调用图
2、 程序流程图
五、小组分工说明:
六、命题发出日期:2015/7/4_设计完成日期:2015/7/11
指导教师评语
replaced_str_len = strlen(replaced_str); //被替换的字符的长度
reped_len = strlen(replace_str);//需要替换的字符的长度
source_str_len = strlen(source_str);//主串字符的长度
replaced_str_loc = Search(replaced_str);//被替换的字符的位置