数据结构课设文章编辑_第1页
数据结构课设文章编辑_第2页
数据结构课设文章编辑_第3页
数据结构课设文章编辑_第4页
数据结构课设文章编辑_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课设文章编写数据结构课设文章编写企业标准化工作小组#Q8QGGQT-*****8-GNQGJ8-MHHGN#课程设计报告课程设计题目:文章编辑专业:信息工程班级:***-*****学生姓名:指导教师:、实验目的及要求:任务:输入一页文字,程序可以统计出文字、数字、空格的个数。静态储藏一页文章,每行最多不高出80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;2)统计某一字符串在文章中出现的次数,并输出该次数;3)删除某一子串,并将后边的字符前移。储藏结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:1)分行输出用户输入的各行字符;2)分4行输出“全部字母数"、"数字个数"、"空格个数"、"文章总字数"3)输出删除某一字符串后的文章;实验时间、地址:一、大纲设计(实验思路)1.问题解析本程序是对一段英文文章的内容进行办理,储藏方式采用链式储藏。对于文本的输入,采用头插法将文本信息储藏到链表已申请好的储藏空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已储藏的文章进行般配,字母数、空格数、数字数直接经过比较即可获取;对于文本内容的办理,查找部分仍是使用循环对已储藏的文章进行般配,判断需要查找的字符也许字符串可否与文章中某部分内容相同,若是存在相同的记录相同的个数及地址并输出个数及地址。删除部分先使用程序的查找功能对文章中需要删除的字符也许字符串进行查找,尔后对其进行删除。数据结构选择本程序是对输入的文字进行操作,故使用的数据结构为单链表操作。依照第一部分的问题解析有该链表操作有3部分:还有全局变量*head,作为文章的头指针。创办结构体:typedefstructlist{chardata;程图(1)主框架:(2)文章内容统计子菜单(3)文章内容办理子菜单(4)使用函数列表及关系图函数名:1、CreatWord()文本输入函数,对文本的内容进行输入2、PrintWord()当前文本内容输出函数,将当前储藏在链表中的文本内容输出5、CountWord()文章内容统计函数,对储藏在链表中文本内容进行统计6、SearchWord()文章内容查找函数7、DeleteWord()文章内容删除函数8、Bmenu()文本内容办理菜单函数9、AboutWord()显示作者信息的函数10、menu()主菜单函数11、main()主函数关系图:二、详细设计(实验过程)1、数据结构定义typedefstructlist{chardata;/*记录一行字符*/intlength;/*记录一行字符长度*/structlist*next;/*后继指针*/structlist*pre;/*前趋指针*/introw;/*记录整篇文章的行数*/}LinkList;2、全局变量定义LinkList*head;/*定义全局变量*head,文章首行头指针*/intNUM,C,N;/*定义全局变量,Num用来记录行号,C用来记录子串在主串中出现的总次数*/3、函数说明1)CreatWord()文本创办函数LinkList*CreatWord(){LinkList*temp;charch;inti,j;head-next=(LinkList*)malloc(sizeof(LinkList));/head-pre=NULL;temp=head-next;/temp-pre=NULL;temp-length=0;for(i=0;ii++)temp-data[i]='\0';printf("\t\t****************************************************\n");printf("\t\t****创办文本****\n");printf("\t\t****************************************************\n");printf("\t\t请输入文章(输入#号结束):\n\n");for(j=0;jLink_Size;j++){for(i=0;ii++){ch=getchar();temp-data[i]=ch;temp-length++;if(ch=='#'){NUM=j;break;}}if(ch=='#'){temp-length=i;temp-next=NULL;break;}temp-next=(LinkList*)malloc(sizeof(LinkList));temp-next-pre=temp;temp=temp-next;for(i=0;ii++)temp-data[i]='\0';}temp-row=NUM+1;system("cls");return(temp);}说明:a、定义LinkList指针变量*temp:LinkList*temp;b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;c、申请动向储藏空间:head-next=(LinkList*)malloc(sizeof(LinkList));d、首行头指针的前驱指针为空:head-pre=NULL;首行指针:temp=head-next;首行指针的前驱指针也为空:temp-pre=NULL;定义没输入字符时文章长度为0:temp-length=0;初始化为字符串结束标志,防范出现乱码:for(i=0;ii++)temp-data[i]='\0';e、利用循环进行文本输入for(j=0;jLINK_INIT_SIZE;j++).\n");printf("\t\t");fflush(stdin);getchar();}}}说明:a、定义指针变量temp:LinkList*temp;b、定义记录文本行数变量j,每行字符数i;c、定义记录文本大写字母数、小写字母数、空格数、数字数和总字数的变量:intWORD=0,word=0,space=0,num=0,sum=0;d、将指针temp指向链表表头:temp=head-next;利用循环对链表中信息进行般配判断,将大写字母数、小写字母数、空格数、数字数和总字数统计出来:for(j=0;j=NUM;j++){for(i=0;(i80)(temp-data[i])!='#';i++){ch=temp-data[i];if((ch='A')(ch='Z'))WORD++;elseif((ch='a')(ch='z'))word++;elseif((ch='0')(ch='9'))num++;elseif(ch=='')space++;}sum=WORD+word+num;}e、本程序对统计项目设计了菜单。菜单的编写使用while语句进行循环操作。文本内容统计部分到此结束。4)SearchWord()文章内容查找函数voidSearchWord(char*str1,LinkList*temp){charData;inti,j,k=0,sum=0;intl=1;temp=head-next;strcpy(Data,str1);for(i=0;i=NUM;i++){for(j=0;jj++){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\t第%d次出现在第%d行第%d列\n",l,i+1,j);l++;k=0;continue;}}temp=temp-next;}printf("\n\t\t\t字符串总合出现次数为:%d\n\n",sum);C=sum;N=i*80+j;}说明:a、定义一个数组,用来记录需要查找的字符内容:charData;b、定义定义文本行数变量j,每行字符数i,记录字符出现的次数变量:inti,j,m=0.,sum=0;c、对形参中定义的指针变量进行操作,使其指向链表表头:temp=head-next;d、使用拷贝函数,将形参中str1的值赋给Data:strcpy(Data,str1);e、利用循环进行查找操作:for(i=0;i=NUM;i++)/*利用循环进行查找操作*/{for(j=0;jj++){if((temp-data[j])==Data[k])k++;/*将输入的查找字符与链表中信息比较,找到第一个相同的字符*/elseif(Data[k]!='\0'){j=j-k;/*从主串第j-k个地址重新查找*/k=0;}if(Data[k]=='\0'){sum++;/*此字符出现的次数加1*/j=j-k+1;/*j记录下该字符串出现的地址*/printf("\t\t\t第%d次出现在第%d行第%d列\n",l,i+1,j);l++;k=0;continue;}}temp=temp-next;/*指向下一行*/}文本内容查找部分到此结束。5)DeleteWord()文章内容删除函数voidDeleteWord(char*str2){charData;LinkList*temp,*term;inti,j,a,k,m,y,num;strcpy(Data,str2);for(y=0;yy++){num=80;k=0,m=0;temp=head;for(i=0;i=NUM;i++){term=temp;temp=temp-next;for(j=0;jj++){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;}for(;i=NUM;i++){for(;jj++){if(j+1k){term-data[80-k+num]=temp-data[j+1];}else{temp-data[j-k+1]=temp-data[j+1];}}term=temp;temp=temp-next;j=0;}}}说明:a、定义一个数组用来储藏需要删除的字符也许字符串:charData;b、定义指针变量:LinkList*temp,*term;c、定义整形变量用来控制行数、字符数:inti,j,k,m,y,num;d、使用拷贝函数讲形参中需要删除的字符或字符串赋值给已定义的数组:strcpy(Data,str2);f、使用循环进行删除操作:for(y=0;yy++){num=80;k=0,m=0;temp=head;for(i=0;i=NUM;i++)/*使用循环进行删除操作*/{term=temp;temp=temp-next;for(j=0;jj++){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;}/*第一是使用循环查找到需要删除字符也许字符串的字符数以及字符也许字符串的地址,以便于删除*/for(;i=NUM;i++){for(;jj++){if(j+1k){term-data[80-k+num]=temp-data[j+1];/*删除的字符串不在最后一行,将下一行的字符(由temp指向)前移到前行*/}else{temp-data[j-k+1]=temp-data[j+1];/*当要删除的字符串在最后一行只要将最后一行的字符前移*/}}term=temp;temp=temp-next;/*在使用循环,从查找到的字符也许字符串开始进行删除,在一行删除达成此后,转至下一行进行删除*/j=0;}}文本内容删除部分到此达成。(6)Bmenu()文章内容办理菜单函数voidBmenu(LinkList*temp){charstr1;charstr2;intt;do/*利用{printf("\n");

dowhile

循环来控制主菜单显示

*/printf("\n\t\t****************************************************\n");printf("\t\t****文章内容办理子菜单****\n");printf("\t\t****************************************************\n");printf("\t\t****1、查找文章中的字符也许字符串****\n");printf("\t\t****2、删除文章中的字符也许字符串****\n");printf("\t\t****3、显示当前文章内容****\n");printf("\t\t****4、返回主菜单****\n");printf("\t\t****5、直接退出系统****\n");printf("\t\t****************************************************\n");printf("\t\t请选择:");scanf("%d",if((t5)||(t1)){printf("\t\t对不起,无此功能!请回车重新选择!...\n");printf("\t\t");fflush(stdin);getchar();}else{switch(t){case1:system("cls");printf("\n");printf("\n\t\t****************************************************\n");printf("\t\t****文章内容办理子菜单****\n");printf("\t\t****************************************************\n");printf("\n\t\t\t请输入您需要查找的字符或字符串:");getchar();gets(str1);printf("\n");SearchWord(str1,temp);printf("\n\t\t按回车键连续");getchar();getchar();system("cls");break;case2:system("cls");printf("\n");printf("\n\t\t****************************************************\n");printf("\t\t****文章内容办理子菜单****\n");printf("\t\t****************************************************\n");printf("\n\t\t\t请输入您需要删除的字符或字符串:");getchar();gets(str2);printf("\n");SearchWord(str2,temp);DeleteWord(str2);printf("\t\t\t删除%s后的文章为:",str2);PrintWord();printf("\n\t\t按回车键连续");getchar();getchar();system("cls");break;case3:system("cls");printf("\n\n\t\t****************************************************\n");printf("\t\t****文章内容办理子菜单****\n");printf("\t\t****************************************************\n");PrintWord();printf("\n\n\t\t按回车键连续");getchar();getchar();system("cls");break;}if(t==4){system("cls");break;}if(t==5)exit(0);}}while(1);}说明:用do-while语句来制作文章内容办理菜单,用switch语句来选择实现功能。(7)AboutWord()相关性息voidAboutWord(){printf("\n\n\n\n\n\n\n\n");printf("\t****************************************************************\n");printf("\t****本系统由chevis制作部分功能则是模拟其他程序能力有限***\n");printf("\t****感谢使用!***\n");printf("\t****************************************************************\n");printf("\n");}8)menu()主菜单voidmenu(){intt;LinkList*temp;do{printf("\n");printf("\n");printf("\n");printf("\t\t****************************************************\n");printf("\t\t****简单的文章编写器****\n");printf("\t\t****************************************************\n");printf("\t\t*********主菜单*********\n");printf("\t\t****************************************************\n");printf("\t\t****1、文章内容输入****\n");printf("\t\t****2、显示当前文章内容****\n");printf("\t\t****3、文章内容统计子菜单****\n");printf("\t\t****4、文章内容办理子菜单****\n");printf("\t\t****5、程序相关****\n");printf("\t\t****6、退出文章编写器****\n");printf("\t\t****************************************************\n");printf("\t\t!!!注:第一次运行本程序时请选择1功能进行输入!!!\n");printf("\t\t****************************************************\n");printf("\t\t请输入相应数字:");scanf("%d",if((t6)||(t1)){printf("\t\t对不起,无此功能!请回车重新选择!...\n");printf("\t\t");fflush(stdin);getchar();}else{switch(t){case1:system("cls");printf("\n");temp=CreatWord();break;case2:system("cls");PrintWord();printf("\n");printf("\n");printf("\n\t\t按回车键连续");getchar();getchar();system("cls");break;case3:system("cls");CountWord();break;case4:system("cls");Bmenu(temp);break;case5:system("cls");AboutWord();printf("\n\t\t按回车键连续");getchar();getchar();system("cls");break;}if(t==6)break;}}while(1);}说明:用do-while语句来制作文章内容办理菜单,用switch语句来选择实现功能。(9)main()主函数voidmain(){head=(LinkList*)malloc(sizeof(LinkList));menu();}说明:/*先为head申请储藏空间,尔后创办指针变量temp,尔后直接在主菜单函数中进行其他操作*/三、上机调试上机调试过程中遇到的问题及解决方法:a)由于本程序的操作大部分都为经常使用的查找、删除,基本的算法及代码都可以经过查找资料获取,故没有出现多大的问题。错误主若是在于删除等子函数中复杂操作过程中出现的小问题。b)删除及查找过程中需要在子函数中定义一个数组变量,用来储藏输入的信息,尔后用来与链表中的信息进行比较以达到删除也许查找。另为达到将输入的信息赋值给子函数中定义的数组,特使用了strcpy()函数。c)为了将程序界面更加的圆满,做了3个菜单。清屏函数使用system(“cls),”背景字体颜色编写了一个color函数。d)一开始编写程序时,在保存、读取这一部分考虑到方便就采用了以节点为单位来储藏。由于文件储藏的限制性,以节点储藏发生错误。今后采用了单个字符储藏和读取来保证文本的保存和读

温馨提示

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

最新文档

评论

0/150

提交评论