您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 简易文本编辑器任务书课程设计报告
中北大学数据结构课程设计说明书学生姓名:张兴凯学号:1021011547学院:软件学院专业:软件工程题目:简易文本编辑器成绩指导教师何志英2011年12月20日11.设计目的简易文本编辑器2.设计内容和要求1)具有图形菜单界面;2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3)可正确存盘、取盘;4)正确显示总行数。3.本设计所采用的数据结构本程序是对输入的文字进行操作,故使用的数据结构为单链表操作线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。另有全局变量*head,作为文章的头指针。在文章内容创建部分中使用线性表的链式存储,并使用全局变量对文本的各种信息进行存储;文章的内容统计、删除、查找、插入都采用链表操作完成。4.功能模块详细设计4.1详细设计思想本程序所定义函数的设计思想:CreatWord()文本内容输入函数定义LinkList指针变量*temp:LinkList*temp;定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;申请动态存储空间:head-next=(LinkList*)malloc(sizeof(LinkList));首行头指针的前驱指针为空:head-pre=NULL;利用循环进行文本输入PrintWord()当前文本输出函数定义文本行数变量j,每行字符数i:inti,j;2定义指针变量:LinkList*p;将指针p指向链表表头:p=head-next;利用循环输出链表中信息:for(j=0;j=NUM&&p!=NULL;j++){=for(i=0;(i80)&&(p-data[i])!='#';i++){=printf(%c,p-data[i]);}p=p-next;SearchWord()文本内容查找函数定义一个数组,用来记录需要查找的字符内容:charData[20];定义定义文本行数变量j,每行字符数i,记录字符出现的次数变量:利用循环进行查找操作,核心算法为:if((temp-data[i])==Data[k])k++;//将输入的查找字符与链表中信息比较,找到第一个相同的字符elseif(Data[k]!='\0'){i=i-k;k=0;}////从主串第i-k个位置重新查找if(Data[k]=='\0'){sum++;//此字符出现的次数加1i=i-k+1;//i记录下该字符串出现的位置printf(\t\t第%d次出现在第%d行第%d列\n,l,j+1,i);l++;k=0;continue;}temp=temp-next;//指向下一行DeleteWord()文本内容删除函数定义一个数组用来存储需要删除的字符或者字符串:charData[20];定义指针变量:LinkList*temp,*term;使用VC++中拷贝函数讲形参中需要删除的字符或字符串赋值给已定义的数组:strcpy(Data,str2);3使用循环进行删除操作:其核心算法为:for(j=0;j=NUM;j++){for(i=0;i80;i++){if((temp-data[i])==Data[k])k++;elseif(Data[k]!='\0'){i=i-k;k=0;}if(Data[k]=='\0'){num=i;break;}}if(num80)break;}首先是使用循环查找到需要删除字符或者字符串的字符数以及字符或者字符串的位置,以便于删除;for(;j=NUM;j++){for(;i80;i++){if(i+1k){term-data[80-k+num]=temp-data[i+1];}//删除的字符串不在最后一行,将下一行的字符(由temp指向)前移到前行elsetemp-data[i-k+1]=temp-data[i+1];}//当要删除的字符串在最后一行只要将最后一行的字符前移term=temp;temp=temp-next;j=0;}//在使用循环,从查找到的字符或者字符串开始进行删除,在一行删除完毕之后,转至下一行进行删除。本程序所定义的函数:1、HeadWord()标题函数,即一个输出标题,永远出现在程序的最顶端。2、save()文件存储函数3、load()文件读取函数4、CreatWord()文本输入函数5、PrintWord()当前文本内容输出函数46、SearchWord()文章内容查找函数7、DelWord()文章内容删除函数8、InsertWord()文章内容插入函数9、Replace()文章内容替换函数10、Bmenu()第二子菜单函数11、menu()主菜单函数12、main()主函数4.2运行结果(1)执行完menu()主菜单函数后的结果(2)输入文章内容的结果5(3)读取当前文本内容信息(4)进入文本内容处理菜单6(5)查找文章中字符或者字符串(6)显示当前文章内容7(7)返回主菜单4.3核心代码#includestdafx.h#includestdio.h#includeconio.h#includemalloc.h#includestring.h#includeiostream.h#includestdlib.h#defineLink_Size100intNUM,C,N,hang;/*定义全局变量,Num用来记录行号,C用来记录子串在主串中出现的总次数*/#defineMAXLEN80charbuffer[MAXLEN],fname[120];char*lineptr[Link_Size];;FILE*fp;intmodified=0,/*正文被修改标志*/last;/*当前正文行数*/char*chpt;/*输入命令行字符指针*/typedefstruct_list/*行表结构*/{8chardata[80];/*记录一行字符*/intlength;/*记录一行字符长度*/struct_list*next;/*后继指针*/struct_list*pre;/*前趋指针*/introw;/*记录整篇文章的行数*/}LinkList;LinkList*head;/*定义全局变量*head,文章首行头指针*/voidHeadWord(){printf(\t\t****************************************************\n);printf(\t\t****欢迎使用简单的文本编辑器****\n);printf(\t\t****************************************************\n);}intsave(char*fname){inti;FILE*fp;charname[80];if(!*fname){printf(filename:);gets(name);}elsestrcpy(name,fname);if((fp=fopen(name,wb))==NULL)return0;for(i=0;ilast;i++){9fputs(lineptr[i],fp);free(lineptr[i]);}fclose(fp);printf(file%salreadysaved.,name);getch();return1;}intload(char*fname){FILE*fp;charch,*p;inti;if((fp=fopen(fname,rb))==NULL)return0;while(!feof(fp)){ch=getc(fp);if(ch=='\x09')for(i=0;i8;i++,p++)*p='\x20';elseif(ch!='\n'&&ch!=EOF){*p=ch;p++;}}*p='\0';fclose(fp);}LinkList*CreatWord(){10LinkList*temp;charch;inti,j;/*记录文本行数变量j,记录每行字符数变量i*/head-next=(LinkList*)malloc(sizeof(LinkList));head-pre=NULL;temp=head-next;temp-pre=NULL;temp-length=0;for(i=0;i80;i++)temp-data[i]='\0';printf(开始创建文本,请输入文章(按#结束):\n);for(j=0;jLink_Size;j++){for(i=0;i80;i++){ch=getchar();temp-data[i]=ch;temp-length++;if(ch=='\n')hang++;if(ch=='#'){NUM=j;break;}}if(ch=='#'){temp-length=i;temp-next=NULL;11break;}temp-next=(LinkList*)malloc(sizeof(LinkList));temp-next-pre=temp;temp=temp-next;for(i=0;i80;i++)temp-data[i]='\0';}temp-row=NUM+1;system(cls);returntemp;}voidPrintWord(){inti,j;/*记录文本行数变量j,记录每行字符数变量i*/LinkList*p;p=head-next;system(cls);HeadWord();printf(\n当前文章的内容是:);for(j=0;j=NUM&&p!=NULL;j++){for(i=0;(i80)&&(p-data[i])!='#';i++){printf(%c,p-data[i]);}p=p-next;}printf(\n当前文章行数为:%d\n,hang);}12voidSearchWord(char*str1,LinkList*temp){charData[20];inti,j,k=0,sum=0;intl=1;temp=head-next;strcpy(Data,str1);for(i=0;i=NUM;i++){for(j=0;j80;j++){if((temp-data[j])==Data[k])k++;elseif(Data[k]!='\0'){j=j-k;k=0;}if(Data[k]=='\0'){sum++;j=j-k+1;printf(\t\t第%d次出现在第%d行第%d列\n,l,i+1,j+1);l++;k=0;continue;}}temp=temp-next;}13printf(\t\t\t字符串总共出现次数为:%d\n\n,sum);C=sum;N=i*80+j;}voidDelWord(char*str2){charData[20];LinkList*temp,*term;inti,j,k,m,y,num;strcpy(Data,str2);for(y=0;yC;y++){num=80;k=0,m=0;temp=head;for(i=0;i=NUM;i++){term=temp;temp=temp-next;for(j=0;j80;j++){if((temp-data[j])==Data[k])k++;elseif(Data[k]!='\0'){j=j-k;k=0;}if(Data[k]=='\0'){num=j;break;}}if(num80)break;14}for(;i=NUM;i++){for(;j80;j++){if(j+1k){term-data[80-k+num]=temp-data[j+1];}elsetemp-data[j-k+1]=temp-data[j+1];}term=temp;temp=temp-next;j=0;}}}LinkList*InsertWor
本文标题:简易文本编辑器任务书课程设计报告
链接地址:https://www.777doc.com/doc-5499660 .html