简易文本编辑器数据结构课程设计.doc_第1页
简易文本编辑器数据结构课程设计.doc_第2页
简易文本编辑器数据结构课程设计.doc_第3页
简易文本编辑器数据结构课程设计.doc_第4页
简易文本编辑器数据结构课程设计.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

海南大学信息科学技术学院数据结构课程设计报告 设计题目:简易文本编辑器专业班级:通信三班姓 名:代亮亮学 号:20111613310076指导教师:吴哲晖目 录一、 需求分析 二、 设计要求 三、 概要设计 四、 详细设计 五、 运行结果 六、 心得体会 七、 参考文献 1.需求分析:在当今的消息快速发展的年代,利用网络来传递消息已经是消息传播的唯一途径,而对一个文本的修改是我们每天都在做的事,在这广域的消息里快速的提取出对自己有用的部分,因此我设计了一个简易的文本编辑器,能够提供查找功能,替换功能。2.概要设计: 为了更有效的进行查找功能,该编辑器运用了链式存储,该存储结构的特点是逻辑关系相邻的两个元素在物理位置上并不相邻,并将输入的文本分为一个一个的链块,这样,就能大大加快了查找的元素的速度。(1) 输入并显示文本信息。(2) 在文本中对某些元素进行查找,(3) 对查找的元素替换。(4) 显示替换元素的位置。(5) 显示元素替换后的文本。(6) 退出。3.详细设计:3. 1 程序模块说明3. 1.1 程序模块为了更方便地完成字符串的查找,此程序采用串的块链式存储结构存储方式。通过主模块调用四个小模块完成文本编辑的各种功能。用户可在主模块上循环对程序进行操作。主模块查找模块替换模块编辑文本信息退出模块3.1.2 模块功能说明1.主模块:用户可编辑任一文档,输入要在文本中查找的信息。初始化一个字符串,并用串的块链式存储结构存储。2. 编辑文本信息:将用户编辑的文本信息分行输出来,并输出字符串的长度和行数。3.查找模块:遍历整个文本,查找字符串在串中的位置,并输出其所在位置,直到遍历完整个文本结束。4.替换模块:先查找你要替换的字符所在位置,然后根据用户选择是否替换该字符。5.退出模块:退出程序,等待用户下次重行运行该程序。3.2程序流程图说明3.2.1 主函数流程图开始 输入命令命令替换退出查找结束 图2.1.主程序流程图用户可根据此函数输入想要进行的操作来实现其相应的编辑文本信息、查找字符在文本中的所在位置、替换文本中的字符串及查看当前文本的字符数以及行数的信息等一系列功能。开始3.2.2 显示模块流程图输出文档的长度和行数并输出字符串统计文档的长度和行数初始化该文档用块链储存结构储存输入一个新的文档结束图2.2 显示模块流程图此模块主要实现用户所编辑的文本信息的行数和字符总个数,以及输出文本的字符信息。显示出用户所编辑的文本信息,并输出到屏幕上,为满足用户需求,此模块可循环操作。3.2.3 查找模块流程图 图2.3 查找流程图此模块主要是完成字符串的查找以及替换文本中的字符信息等功能。查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,比较下一个字符,否则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止,详见流程图2.3。3.2.4 替换模块流程图. 图2.4. 替换流程图此模块主要是完成字符串的查找以及替换文本中的字符信息等功能。查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,比较下一个字符,否则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,同样也是一直循环到读完整个文本信息为止。详见流程图2。4。3.2.5 将文本初始化 图2.5 初始化文本信息将文本信息初始化到用块链式存储的串中4 函数的描述4.1 串的初始化初始化一个空串,然后将输入的文本信息存储到此串中,因为这是采用的块链式存储,用户可以自定义行的大小即一个节点存储的字符串个数,所申请的总的节点数也就是字符的行数。4.2 查找函数查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,用for循环比较下一个字符,不同则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且再向后移一个字符,然后再从头开始和和所查找字符穿一一比较。查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。4.3 替换函数替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,若需替换,则进入for循环完成替换,然后再通过比较查找到下一个需替换的位置,同样也是一直循环到读完整个文本信息为止。4.4 串的块链存储采用串的块链式存储的优点是用户可根据自已的实际需要来定义每个节点的大小,这样可减少空间浪费,除此之外,链式存储还方便查找。5 程序测试和运行的结果为方便查阅,所以选一串比较短的字符串为例,以英文字符“ABCDEFGHIJKLMN1234567”为例,来实现下面的所有功能5.1 初始化一个串5.1.1首先用户可输入用户所需要的文本信息,如“ABCDEFGHIJKLMN1234567”程序开始运行界面如图4.1.1所示。5.1.2初始化“ABCDEFGHIJKLMN1234567”后,结果如下图4.1.2所示,分行输出文本的字符信息以及文本长度和行数。初始化一字符串5.2 查找与替换字符串4.2.1.编辑完文本后,用户可自定义查找和替换字符,选择查找和替换选项(即第二个选项),;如下图4.2.1所示。根据说明输入指令2进行查找5.2.2输入你要查找的字符串,以回车结束。如图4.2.2所示。根据提示,输入你要查找的字符,如“D”查找字符串5.2.3输入你需要替换后的的字符,如“L”5.2.4查找出所查找词在串中的第一个位置,输出该位置并弹出指令用户是否需要替换此位置的词.5.2.5根据用户选择,如输入Y;则替换掉该位置的词并接着查找下一个所查找字符的所在位置或查找结束。5.2.6若用户不需要替换该位置的字符,输入“N”程序将跳过该位置替换直接进入下一轮查找。回到主程序,查找下一个字符,或继续进行下一轮操作。6.设计心得体会: 在这学期里我们学习了数据结构这门课程,由于这次课程设计没有具体的实验题目要求,大家自由发挥,经过在网上查找资料和自己在本学期的学习情况,我选择设计一个简易的文本编辑器。通过这次课程设计我认识到了知识的学习不能只局限于课本知识,更使我明白了编码能力和实践能力的重要性,而我们以后的编码将会有更高的要求,将会有更多的设计要求,不能仅仅是从自身的考虑出发,这将大大提高编码的困难程度。而通过这次课程设计,也让我更加的熟练的掌握了Visual C 的环境和语法,熟悉了其结构,提高了自身的分析能力和编码能力。同时,通过这次课程设计,我也对大一学习的C语言进行了一次复习,再次复习了C语言的编程语法。在编码与调试过程中,我也遇到了很多的问题,有很多问题也是由于自己的粗心而使调试的时候花费了很多不必要的世界,例如有的地方少了分号,冒号,有的地方忘记了定义,有时候即使没有出现错误但是运行结果是错误的,通过与同学的交流沟通,和在书上查看相关资料,最终解决了这些问题。总之,通过这次课程设计不仅锻炼了我的实际操作能力,而且培养了严密的思维能力和严谨的态度,本次课程设计让我受益匪浅,而且加深了我对编程的兴趣。参考文献1.王昆仑、李红。数据结构与算法。北京:中国铁道出版社。 附 录(关键部分程序清单)查找和替换函数void chazhao(LString *T,char *chars,char *chars1)/所查找字符和替换后的字符Chunk *p,*q;int m=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;char u;p=q=T-head;while(1)if(c=CHUNKSIZE)q=q-next;a+;c=0;for(x=0;q-chc=charsm;x+)m+;c+;if(x=0)b=a;d=c-1;if(c=CHUNKSIZE)q=q-next;c=0;if(charsm=0)/字符查完printf(所查字符所在行位置是%d,第%d个位置开始n,b,d+1); printf(若需替换该字符,输入Y,否则输入Nn); scanf(%c,&u);fflush(stdin); if(u!=N)p=T-head; a=b;c=d; for(a1=1;a1next;q=p; for(;c1next; c=0; q-chc=chars1c2;c2+;c+;c2=0;c1=0; StrPrint(*T);/替换完毕 c=d;a=b;if(!*(q-ch+c+1+m)/串查完/ printf(查找完成,已无匹配字符n);break;elsep=T-head;for(a1=1;a1next;q=p;c=c+1;m=0;生成一个其值等于chars的串T,成功返回1,否则返回0 int StrAssign(LString *T,char *chars)int i,j,k,l,m=0;Chunk *p,*q;i=strlen(chars); / i为串的长度 if(!i) return 0;(*T).curlen=i;j=i/CHUNKSIZE;/ j为块链的结点数,块的个数 ,即行数if(i%CHUNKSIZE0)/不足一个块的,当成一个块即块数加1j+;printf(长度是%dn行数是%dn,i,j);for(k=0;knext=p; q=p; for(l=0;lchl=charsm;m+; if(!*chars) (*T).tail=q;q-next=NULL;for(;lch+l)=blank;return 1;输出字符串Tvoid StrPrint(LString T)int i=0,j;Chunk *h;h=T.head;while(iT.curlen)for(j=0;jch+j)!=blank) / 不是填补空余的字符 printf(%c,*(h-ch+j);i+;printf(n);h=h-next;printf(n);源代码#include #include #include #include #include #define CHUNKSIZE 4 #define n 26char blank = #;/ 全局变量,用于填补空余 typedef struct Chunkchar chCHUNKSIZE;struct Chunk *next;Chunk;typedef structChunk *head,*tail; int curlen;LString;void InitString(LString *T)/ 初始化(产生空串)字符串T。(*T).curlen=0;(*T).head=NULL;(*T).tail=NULL;int StrAssign(LString *T,char *chars)/ 生成一个其值等于chars的串T, 成功返回1,否则返回0 int i,j,k,l;Chunk *p,*q;i=strlen(chars); / i为串的长度 if(!i|strchr(chars,blank) / 串长为0或chars中包含填补空余的字符 return 0;(*T).curlen=i;j=i/CHUNKSIZE;/ j为块链的结点数,块的个数 if(i%CHUNKSIZE)/不足一个块的,当成一个块即块数加1j+;printf(长度是%dn行数是%dn,i,j);for(k=0;knext=p;q=p;for(l=0;lch+l)=*chars+;if(!*chars) / 最后一个链块 (*T).tail=q;q-next=NULL;for(;lch+l)=blank;return 1;int StrEmpty(LString S)if(S.curlen) return 0;elsereturn 1;void StrPrint(LString T)/ 输出字符串Tint i=0,j;Chunk *h;h=T.head;while(iT.curlen)for(j=0;jch+j)!=blank) / 不是填补空余的字符 printf(%c,*(h-ch+j);i+;printf(n);h=h-next;printf(n);void chazhao(LString *T,char *chars,char *chars1)/查找和替换函数/Chunk *p,*q;int m=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;char u;p=q=T-head;while(1)if(c=CHUNKSIZE)q=q-next;a+;c=0;for(x=0;q-chc=charsm;x+)m+;c+;if(x=0)b=a;d=c-1;if(c=CHUNKSIZE)q=q-next;c=0;if(charsm=0)/字符查完printf(所查字符所在行位置是%d,第%d个位置开始n,b,d+1); printf(若需替换该字符,输入Y,否则输入Nn); scanf(%c,&u);fflush(stdin); if(u!=N)p=T-head; a=b;c=d; for(a1=1;a1next;q=p; for(;c1next; c=0; q-chc=chars1c2;c2+;c+;c2=0;c1=0; StrPrint(*T);/替换完毕 c=d;a=b;if(!*(q-ch+c+1+m)/串查完/ printf(查找完成,已无匹配字符n);break;elsep=T-head;for(a1=1;a1next;q=p;c=c+1;m=0;void main()char s1n,s2n,s3n;/char *s3=22,*s2=aa;LString t1;int k,meum=0,L,h;printf(t=说明:首先连续输入几个字符初始化串,以回车结束.= =n); printf(t=1:查看串的信息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论