ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:543.01KB ,
资源ID:7014588      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7014588.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计简易文本编辑器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计简易文本编辑器.docx

1、数据结构课程设计简易文本编辑器课程设计说明书课程名称: 数据结构课程设计 专 业: 电子信息科学与技术 班级: 2012-1 设 计 人: 山 东 科 技 大 学2015年 7 月 11 日山 东 科 技 大 学课 程 设 计 任 务 书一、 课程设计题目:简易文本编辑器二、 设计原始资料: 1 严蔚敏、吴伟民,数据结构(C语言版)清华大学出版社 2012,052孙承爱、赵卫东,程序设计基础基于C语言 科学出版社 2010,10三、 设计应解决下列各主要问题:_1、具有菜单图形界面;2、具有查找、替换、插入、块移动、删除等功能;3、可正确存盘、取盘;4、正确显示总行数四、 设计说明书应附有下列

2、图纸:1、模块调用图2、 程序流程图五、 小组分工说明: 六、命题发出日期:2015/7/4 _设计完成日期:2015/7/11指导教师评语成绩: 指导教师(签章):年月日1需求分析说明简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。基本功能如下:(1)界面友好,易与操作。采用菜单或其它人机对话方式进行选择。(2)能正确打开所键入的文本路径,并能够读取相应文本信息。(3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作

3、。(4)能够正确对修改后的文本内容存盘。(5)正确显示文本总行数。以下是各功能模块的功能描述:1.1主函数模块主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。1.2菜单显示及输出子模块菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。文本显示模块的主要功能是将所要显示的文本信息通过传入的参量传入本模块进行显示。输出模块主要功能是输出文本所有信息。1.3查找功能子模块本模块的主要功能是通过输入想要查找的文本信息,返回文本中所要查找的文本信息的所处起始位置。1.4替换功能子模块本模块的主要功能是将输入的被替换的文本替换为替换的文本信息,并能

4、够显示文本信息。1.5插入功能子模块本模块的主要功能是将需要插入的文本信息插入到指定的位置,并能够显示修改后的文本信息。1.6块移动功能模块本模块的主要功能是将所要移动的模块移动到指定的相应位置,并能够显示修改后的文本信息。1.7删除功能模块本模块的主要功能是删除指定的文本。1.8读盘功能模块本模块的主要功能是将存于磁盘内的文件读取,以便后续操作过程中使用。1.9存盘功能模块本模块的主要功能是将改变后的文件存于磁盘,以便下次使用。1.10测试数据: 存于磁盘下的.txt文件(可自己定义)。2概要设计说明2.1设计思想本次设计主要是运用在主模块中的switch,case语句进行调用相关函数实现文

5、本编辑器的基本功能,运用链式存储结构,链式存储结构能够通过结点指针的next值的改变实现插入、替换、移动、删除等一系列操作;通过KMP算法实现查找功能;通过C语言自带的文件操作函数实现文件的读取与存盘等功能。2.2模块调用图2.3程序代码简介#define STRING_MAXSIZE 256 /定义串的长度#define ERR_NOMEMORY -1char source_strSTRING_MAXSIZE; /将文件内资源以字符串存于此变量int len; /存储原始字符串的长度/定义数据存储的结构,以链结构存储typedef struct LNode char data; struct

6、 LNode *next;LNode,*LinkList;LinkList L = 0; /定义全局变量字符串的起始指针void menu() /菜单显示函数,显示菜单,无传递参数,/接调用LinkList Init(char Init_str); /初始化函数,将资源转化为所定义的连/式结构,传入参数为所要初始化的文本,/返回值为LinkList类型的头指针。int Input(char input_string); /插入函数,在默认在文本末尾插入文本,/传入参量为所要插入的文本信息,返回/值为修改后的文本信息。void Output(); /输出函数,输出文本所包含的信息,无/传入参量,

7、无返回值int Search(char search_str); /查找函数,查找相应的字符串函数传入/参量为指定的查找文本信息,返回查找/到的参数。void Replace(char bereplaced_str,char replace_str); /替换函数,替换相应文本信息,传入参/量为被替换的文本信息,以及替换的文/本信息。void Insert(char insert_str,int location); /插入函数,在指定位置插入指定信息,/传入参量为需要插入的文本信息,以及/插入的相关位置。void Move(char bemoved_str,int location);/块移

8、动函数,将文本信息中的指定信息/移动到指定位置,传入参量为需要移动/的文本块以及指定的移动位置。void Delete(char delete_str); /删除函数,删除相应的文本信息,传入/参数为指定的被删除的文本void Display(int len_dis); /显示函数,传入参量为所要显示的文本/长度。void save(); /存盘函数,将所改变的文本存入到磁盘/中,无传入参数,无返回参数void delay(); /延时函数int StringLength( LinkList S ); /求串长函数,传入参数为要求的串的长/度,返回参数为文本的长度void statistics

9、(); /统计行数,无传入参数,无返回值。void KMPGetNext(char *T,int n2,int nextval);int KMPIndex(char *S,int n1,char *T,int n2); /KMP算法,求文本的位置3详细设计说明3.1主函数模块主函数模块的主要功能是调用menu函数初始化菜单界面,并调用Openfile函数将存于本地磁盘内的文件读出到source_str数组中以备后续调用,并在将字符数组初始化为链表之后进入功能按键选择,通过switch 语句进行相应的功能操作并调用相关模块,实现软件功能。3.2菜单显示及输出子模块菜单显示模块的主要功能是将菜单进

10、行显示,本模块调用menu函数,menu函数由printf函数进行格式的输出,并通过system()函数进行颜色的改变,以及清屏等操作,主要输出内容包括本设计的介绍、小组信息、主要功能及相关代号。输出模块主要功能是输出文本内容以及总行数,主要是调用Output函数和statistics函数将文本基本信息进行打印。Output函数主要是将changed_source_str字符数组进行输出打印,changed_source_str字符数组是存储操作后的source_str字符数组;statistics函数主要是统计文本中换行和结束符的个数,并输出打印count。3.3查找功能子模块本模块的主要功

11、能是通过调用Search函数实现基本功能,Search函数通过读入用户输入的想要查找的文本信息,通过调用KMP算法函数返回文本中所要查找的文本信息的所处起始位置search_loc,若找不到子串,则返回-1。获取子串的next函数如下:void KMPGetNext(char *T,int n2,int nextval)/求子串T的next函数修正值并存入数组nextval int j=1,k=0; nextval0=-1; while(jn2) if(k=0|Tk=Tj) nextvalj=Tk=Tj?nextvalk:k; j+;k+; else k=nextvalk; 具体的KMP算法如

12、下: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 ; KMPGetNext(T,n2,next); while(in1&j=n2?i-n2:-1);Search函数的描述如下:int Search(char search_str) char sSTRING_MAXSIZE; int i=0; int search_loc,search_len,

13、s_len; LNode *p; p=L-next; while(p) /获取修改后的文本信息 si+=p-data; p=p-next; s_len=strlen(s); search_len=strlen(search_str); if(search_len next; w = LTmp; for(j = 0; j next; for(j = 0; j next; for(j = 0; j next; p-next = z; w-next = s-next; Display(); return 0; else printf(*n); printf(* 主银!您所被替换的文本不存在哦*n);

14、 printf(*n); 3.5插入子模块本模块的主要通过调用Insert函数实现基本功能。Insert函数是将需要插入的文本信息插入到指定的位置,并显示修改后的文本信息。此函数采用边生成新节点边插入的方式完成,通过while循环得到插入位置的指针*p,将插入文本的第i位赋值给新生成的结点s-data,p的next指向新生成的结点s,依次循环直到将整个文本插入完成。具体的实现函数如下:void Insert(char insert_str,int location) int i,j,len_ins,source_str_len; LNode *p,*s; len_ins = strlen(in

15、sert_str); source_str_len = strlen(source_str); if(location = 0) p=L; j=0; for(i=0;ilen_ins;i+) /插入的次数 while(p&jnext; j+; s=(LinkList)malloc(sizeof(LNode); /生成新结点 s-data=insert_stri; s-next=p-next; p-next=s; p=p-next; len_ins=strlen(source_str)+len_ins; Display(); else 3.6块移动模块本模块的主要通过调用Move函数实现基本功能

16、,Move函数将所要移动的模块移动到指定的相应位置,并显示修改后的文本信息。Move函数通过改变next值来实现移动的目的。思想类似于Replace函数,首先得到块的前一位结点的指针*p,块最后一位节点的指针,要移动位置的指针*w,通过结点的next值得改变得到新链,打印输出。具体函数如下:void Move(char bemoved_str,int location) int j,bemoved_str_loc = 0,bemoved_str_len = 0,source_str_len; LNode *p,*s,*w,*temp; bemoved_str_loc = Search(bemo

17、ved_str) + 1; bemoved_str_len = strlen(bemoved_str); source_str_len = strlen(source_str); if(bemoved_str_loc) 0) if(location = 0) p = L; s = L; w = L; for(j = 0; j next; temp = p-next; for(j = 0; j next; for(j = 0; j next; p-next = s-next; s-next = w-next; w-next = temp; Display(); else ; else ; 3.7

18、删除模块本模块的主要通过调用Delete函数实现基本功能,Delete函数是删除指定的文本。并输出打印操作完成后的结果。Delete函数通过调用Search函数得到待删除文本的位置,并通过while循环得到待删除文本的前一个结点的位置指针*q和待删除文本的后一个结点的位置指针*p(如遇到换行符则将*p指针向后移动一位。),将*q的next值指向*p即得到删除后的文本。最后打印输出。具体实现函数如下:void Delete(char delete_str) int loc; /记录要删除的文本的位置 int i,j=0; int len_del; LNode *p,*q; p=L; len_de

19、l=strlen(delete_str); loc=Search(delete_str)+1; if(loc - 1) = 0) for(i=0;inext&jnext; j+; q=p-next; /删除结点 if(q-next-data= 10) q=q-next; p-next=q-next; len=strlen(source_str)-len_del; Display(); else ; 3.8读盘功能模块本模块的主要通过调用OpenFile函数实现基本功能,OpenFile函数主要实现将存于磁盘内的文件读取,以便后续操作过程中使用。OpenFile函数以只读的方式调用fopen函数

20、读取文本内容并存于字符数组source_str中,存储完后通过fclose函数将其关闭。函数实现如下void OpenFile() char ch,meng33; int i = 0,flag = 1,copy_num; FILE *fp1; printf(你猜你要输入什么样儿滴文本路径(我看这个不错f:1.txt) n); scanf(%s,way); if( (fp1 = fopen(way,r) = NULL) while(flag) printf(总统大人,您的文件不在磁盘里呢,是不是在U盘,再来一遍!n); scanf(%s,way); fp1 = fopen(way,r); if(

21、fp1 != NULL) flag = 0; else flag = 1; if( (fp1 = fopen(way,r) != NULL) while(!feof(fp1) ch = fgetc(fp1); source_stri+ = ch; source_stri = 0; for(i = 0;i strlen(source_str)-1;i+) source_stri = source_stri; source_stri = 0; for(copy_num = 0;copy_num STRING_MAXSIZE;copy_num +) changed_source_strcopy_nu

22、m = source_strcopy_num; printf(我已经把他印在脑海里了!给你看下一个画面,不要捉急.n); delay(); fclose(fp1); system( cls ) ; menu(); void delay() int i,j; for(i = 0;i 55000;i+) for(j = 0;j 11000;j+);3.9存盘功能模块本模块的主要通过调用save函数实现基本功能,save函数是将改变后的文件存于磁盘,以便下次使用。Save函数以写的方式调用fopen函数打开源文件,并调用fprintf函数将改变的字符数组changed_source_str写入到其中

23、。最后,调用fclose函数关闭本文件。函数实现如下void save() FILE * fp2; fp2=fopen(way,w); fprintf (fp2,%s,changed_source_str); fclose (fp2);3.10流程图4调试分析4.1遇到的问题 文本在改变后不能输出功能不能正确执行打印的还是没有编辑过的前文本内容。分析发现在供打印输出的字符数组没有被及时的更新,因此每次都是显示原始的信息,这就会使退出时不能将编辑过的文本正确保存。解决方法:在Display函数里将编辑过的文本重新赋值到全局变量的字符数组changed_source_str中,此问题得到解决。 执行查找功能时,输出错误信息如在含有“abcdefgh”字符的文本中查找“

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1