




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北水利水电大学NorthChinaInstituteofWaterConservancyandHydroelectricPower课程设计题目文章编辑系统院系信息工程学院专业计算机科学与技术专业姓名温大帅学号39指导教师杨彬2014年6月27日目录TOC\o"1-5"\h\z\o"CurrentDocument"问题描述 2\o"CurrentDocument"需求分析 2\o"CurrentDocument"功能描述 2\o"CurrentDocument"系统框架图 3\o"CurrentDocument"概要设计 3\o"CurrentDocument"3.1数据结构 3\o"CurrentDocument"程序模块 3\o"CurrentDocument"模块之间的调用关系以及算法设计 4\o"CurrentDocument"详细设计 5\o"CurrentDocument"4.1主程序设计算法 5\o"CurrentDocument"编码调试 17\o"CurrentDocument"5.1当输入字符刚好80个字符数时: 175.2当输入字符数超过80个时,出现错误: 17\o"CurrentDocument"5.3输入一篇文本: 18\o"CurrentDocument"5.4浏览输入的文本: 19\o"CurrentDocument"5.5文本字符的统计: 19\o"CurrentDocument"5.6指定字符的统计: 20\o"CurrentDocument"5.7指定字符串e的删除: 205.8退出系统: 21总结 错误!未定义书签。\o"CurrentDocument"7.参考文献: 218.附录: 22课程设计:文章编辑系统1.问题描述静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格、字母的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。基本要求(1) 分别统计出其中英文字母数和空格数及整篇文章总字数;(2) 统计某一字符串在文章中出现的次数,并输出该次数;(3) 查找出文章中某一段文字,并用其他文字进行替换;(4) 删除某一子串,并将后面的字符前移。输出形式:(1) 分行输出用户输入的各行字符;(2) 分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";(3) 查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果;(4) 输出删除某一字符串后的文章;2.需求分析随着社会的进步,文章编辑系统越来越受到广泛的关注,它的实用性越来越强,对各行各业具有普遍的实用价值。比如今天主流门户网站的新闻编辑系统就是文章编辑系统的一个非常成熟的应用,再者,在各公司、企业,工厂,文章编辑系统都频繁地被利用,在这些公司企业中,追求高性能、高效率的文章编辑,特别是一些管理类系统,比如数据库管理系统,以及公司企业内部的各种各样的管理系统(包括人事管理系统、物流管理系统,流程管理系统等),这也要求高性能的文章编辑系统的需要迫在眉睫。功能描述本系统适应基本的文章编辑系统的全部功能。(1)输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。(2)分别统计出其中英文字母数和空格数及整篇文章总字数;(3)统计某一字符串在文章中出现的次数,并输出该次数;
(4)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能。输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。系统框架图文章编辑系统V删除子串,输出文本V删除子串,输出文本图2.13.概要设计数据结构本次课程设计采用线性存储类型,由于在线性表中链表的操作更为的灵活多变,可以频繁的插入与删除操作,所以采用线性链表更为的合适,在设计中可以为表添加、删除、修改、查询等操作。程序模块输入模块、统计模块、删除模块、输出模块
3.3模块之间的调用关系以及算法设计由输入模块输入文本,在计算机中保存,然后由统计模块对输入文本进行统计,统计输入文本的总字符数,以及各种字符数,接着由删除模块对某一字符子串就行删除,最后由输出模块输出删除后的文本。图3.14.详细设计主程序设计算法在主程序算法中,首先定义线性链表LINE*head,在这种算法中实现统计、删除功能,简历main函数,在main函数中先判断是否要覆盖已有的文本,如果不是,则跳出函数,printf("新建文本要覆盖已有文本,是否继续输入?(Y/N)\n");if(ch=='n'||ch=='N')break;,如果是就创建链表,elseif(ch=='y'||ch=='Y')Create(head);break;然后再根据每个功能模块的ID去转入相应的操作,实现相对应的功能。voidmain(){LINE*head;charsch[20];charreh[20];charID[10];charch;chartmp_sch[20];chartmp_rch[20];printf("请输入功能序号:");scanf("%s",ID);while(1){if(strcmp(ID,"1")==0)printf("新建文本要覆盖已有文本,是否继续输入?(Y/N)\n");getchar();scanf("%c",&ch);//清屏操作//清屏操作if(ch=='n'||ch=='N')break;elseif(ch=='y'||ch=='Y')Create(head);break;}elseif(strcmp(ID,"2")==0){system("cls");OutPutTxt(head);break;}elseif(strcmp(ID,"3")==0){system("cls");OutPutTxt(head);printf("\n");Count(head);break;elseif(strcmp(ID,"4")==0){system("cls");printf("请输入要统计的字符串:");scanf("%s",sch);printf("\n");OutPutTxt(head);printf("\n");printf("出现的次数为:%d\n",Find_Word(head,sch));break;}elseif(strcmp(ID,"5")==0){system("cls");printf("请输入要删除的某一字符串:");scanf("%s",tmp_sch);printf("\n");OutPutTxt(head);Del_String(head,tmp_sch);printf('删除后”);OutPutTxt(head);break;}elseif(strcmp(ID,"6")==0){printf('你确定要退出系统吗?(Y/N)\n'');getchar();scanf("%c",&ch);system("cls");if(ch=='n'||ch=='N')break;elseif(ch=='y'||ch=='Y')exit(0);}else{system("cls");printf("您输入字母有错,请重新输入\n\n");break;}}输入模块主要算法本模块是一个创建链表的模块,主要是对数据的输入操作,首先输入文本,判断是否正确输入,并以Ctrl+F结尾,当最后一个字符出现Ctrl+F时,说明文章输入结束,控制文章的结束,并且每行最多输入80字符,否则出现错误提示。voidCreate(LINE*&head){printf("请输入一页文章,以Ctrl+F为结尾(每行最多输入80字符):\n");LINE*p=newLINE;/*首先为链表建立一个附加表头结点*/head=p;/*将p付给表头指针*/charch[100];while(1){gets(ch);/*输入字符串!*/if(strlen(ch)>80){printf("每行最多输入80字符");break;}if(ch[0]==5)break;/*如果发现输入八F,则退出输入*/9p=p->next=newLINE;/*为结点分配空间/*为结点分配空间*/strcpy(p->data,ch);讦(ch[strlen(ch)-1]==5) /*除去最后一个控制符八F*/{p->data[strlen(ch)-1]='\0';break;}}p->next=NULL; /*最后的一个指针为空*/head=head->next;}统计模块主要算法在统计模块中主要实现对文本总字符数、数字数、空格数、某一字符数的数符统计,分别建立函数去实现相应的的功能,同时,在主函数main中去调用,达到自己的目的。、统计文本总字符数此函数通过Count_All_Word(LINE*&head)来实现,通过do_while语句去控制,通过count去计数,结果返回countintCount_AII_Word(LINE*&head)/统计文章的总字数{LINE*p=head;do{count+=strlen(p->data);}while((p=p->next)!=NULL);returncount;}、统计英文字母个数此功能通过Count_Letter(LINE*&head)来实现,通过do_while语句去控制,在do_while中通过for循环来进行控制符合字符要求的操作:for(i=0;i<Len;i++)if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;通过count去计数,由while语句结束操作;intCount_Letter(LINE*&head)/统计字母数{LINE*p=head;intcount=0;intLen;inti;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;while((p=p->next)!=NULL);returncount;}、统计数字个数此功能通过函数Count_Num(LINE*&head)实现数字的统计,在函数中也使用do_while语句去控制语句的操作,在do_while语句中使用for循环实现对数字的查找,并通过count实现对查找的数进行统计。intCount_Num(LINE*&head)/统计数字个数{LINE*p=head;intcount=0;intLen;inti;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>=48&&p->data[i]<=57)count++;}while((p=p->next)!=NULL);、统计空格出现次数此功能是通过函数Count_Space(LINE*&head)实现,在函数中同样使用do_while语句去控制操作的正常进行,在do_while中通过for循环语句查找空格数,并通过count计数。intCount_Space(LINE*&head)/统计空格数{LINE*p=head;intasc_space=32;intcount=0;inti;intLen;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]==asc_space)count++;}while((p=p->next)!=NULL);returncount;}、统计某一字串出现次数此功能通过函数Find_Word(LINE*&head,char*sch)来实现,在函数中使用do_while语句,在do_while语句中通过二个for循环去实现某一字符串出现的次数,通过count去计数,统计数据。intFind_Word(LINE*&head,char*sch)//统计sch在文章中出现的次数{LINE*p=head;intcount=0;intlen1=0;intlen2=strlen(sch);inti,j,k;do{lenl二strlen(p->data);〃当前行的字符数for(i=0;i<len1;i++){if(p->data[i]==sch[0]){k=0;for(j=0;j<=len2-1;j++)if(p->data[i+j]==sch[j])k=k+1;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);删除模块主要算法此功能通过函数voidDel_String(LINE*&head,char*sch)来实现,在函数中,通过调用voiddel_string_word(char*s,char*sch)函数实现删除操作功能;voiddel_string_word(char*s,char*sch){char*p=strstr(s,sch);chartmp[80];intlen=strlen(s);intk,kk;inti=len-strlen(p);intj=i+strlen(sch);intcount=0;for(k=0;k<i;k++)tmp[count++]=s[k];for(kk=j;kk<len;kk++)tmp[count++]=s[kk];tmp[count]='\0';strcpy(s,tmp);}voidDel_String(LINE*&head,char*sch)/删除指定的字符串{LINE*p=head;do{while(strstr(p->data,sch)!=NULL)del_string_word(p->data,sch);}while((p=p->next)!=NULL);}输出模块主要算法此功能通过函数OutPutTxt(LINE*&head)来实现,通过do_while控制正常进行,最后,通过printf去输出统计结果。voidOutPutTxt(LINE*&head)//向屏幕输出文章{LINE*p=head;printf("文本文件输出如下所示:");do{printf("%s\n",p->data);}while((p=p->next)!=NULL);}voidCount(LINE*&head){printf("文本统计信息结果:\n");printf("全部字母数:%d\n",Count_Letter(head));printf("数字个数:%d\n",Count_Num(head));printf("空格个数:%d\n",Count_Space(head));
printf("文本总字数:%d\n",Count_AII_Word(head));printf("\n");}5.编码调试当输入字符刚好80个字符数时:幘输人一页文章,以佻订+F为结尾C每行最多输入朗字符〉:kfhdiughdfjksglhdfjklshgdfjklshgdfjklshjkdsahfdklsafdsklahfdsaklfdsalfdhsdsads^F「新建文本2•浏览输入文本
史文本字符统计4.指定字符串的统计「指定字符串的删除「退 岀穆输人.功能序号:图5.15.2当输入字符数超过80个时,出现错误:请输入一页文章,以CW1+F为结尾<每行最多输入盹字符〉:jhasgkfyudsfgydu67s5fd6saf9dsayfd9sa0yfdsaf78dsa5fsdafgdsahfdx$tt$A&dgjfdklg}ikdfljlf;sgjfdslgfdlshgdfjksgfsdAFeFF"?每行最多输入盹字符Pfessanykeytocontinne图5.25.3输入一篇文本:请辆人一贝又草,以CWF方箔尾£母仃巅多痢人盹子付〉:helloueleonetotheuniuersityofhuabeishuilishuidianOurschoo1hasalonghistoryandcultureshehasasuperiorgeographicalpositionhistorybackground,here,i/oucanrealiseyourdream43124637821944965472dhjgdJ1sadafgfAz$#Az$#Az23AF「新建文本鑒浏览输入文本証文本字符统计4•指定字符串的统计皐指定字符串的删除「退 岀请输入功能序号:5.4浏览输入的文本:文本文件输岀如下所示:helloueleonetotheuniuersityofhuabeishuilishuidianOurschoolhasalonghistoryandcultureshehasasuperiorgeographicalpositionhistorybackground,here,poucanpealiaeyourdreain43124637821944965472dhjffdhsadafgfAz$#^$#Ax23「新建文本2-浏览输入文本取文本字符统计4-指定字符串的统计「指定字符串的删除「退 出请输入功能序号:文本字符的统计:文本文件输出如下所示:hellouelcometotheuniuersityofliuabeishuilisliuidian3urschoolhasalonghistoryandcultureshehasasuperiorgeographicalpositionEistorybackground,here,</oucanrealiEeyourdream3124637821944965472dhjg(ihsadafgfAz$ttAz$#Az23本部字星I-:-■ZZ.1本部字星I-:-■ZZ.1:数
计荔W-
0«总弄4吉7£.t=1息:本文A输览浏除删的串符字定指图5.5指定字符的统计:文本文件输岀如下所示:hellouelcometotheuniuersityofhuabeishui1ishuidianUurschoolhasalonghistoryandculturesheliasasuperiorgeographica1positionhistorybackground,here,i/oucanrealiaeyourdream43124637821944965472dhjgdhsadafgfAx$ttAx$ttAx23土现的次数为:15「新建文本2-浏览输入文本取文本字符统计4.指定字符串的统计「指定字符串的删除「退 岀訂输入功能序号: 图5.65.7指定字符串e的删除:删除后文本为代不翅牛输蛍如下所示: hllowlcomtothuniursityofhuabishui1ishuidianOurschoo1hasalonghistoryandcultursbhasasupriorgographicalpositionhistorybackgroundj.hr,youcanraliayourdram43124637821944965472dhjgdhsadafgfAz$#Az$#Az23「新建文本鑒浏览输入文本皐文本字符统计4•指定字符串的统计皐指定字符串的删除氣退 岀图5.75.8退出系统:删除后文本为:文本文件输岀如下所示:hlloulcomtothuniursityofhuabishuilishuidianOurschoo1hasalonghistoryandculturshhasasupriorgographicalpositionhistorybackground,hr,youcanrailsyourdram43124637821944965472dhjgdhsadafgfAz$#^$ttAx23「新建文本議浏览输入文本史文本字符统计4.指定字符串的统计皐指定字符串的删除6-退 岀疇蘿Ml黒离⑺图5.86.参考文献:、严蔚敏陈文博数据结构及应用算法教程,清华大学出版社ISBN码:7-302-04012-5、李春葆数据结构习题与解析(第2版)清华大学出版社ISBN码:7-302-07652-9、唐策善数据结构高等教育出版社ISBN码:7-04-005265-2、百度百科7.附录:#include<string.h>#include<stdio.h>#include<stdlib.h>#include<conio.h>typedefstructline{char*data;structline*next;}LINE;{printf("请输入一页文章,以Ctrl+F为结尾(每行最多输入80字符):\n");LINE*p=newLINE;/*首先为链表建立一个附加表头结点*/head=p; /*将p付给表头指针*/charch[100];while(1){gets(ch); /*输入字符串!*/if(strlen(ch)>80){printf("error!每行最多输入80字符”);break;}if(ch[0]==6)break; /*如果发现输入AF,则退出输入*/p=p->next=newLINE;p->data=newchar[strlen(ch)+1]; /*为结点分配空间*/strcpy(p->data,ch);if(ch[strlen(ch)-1]==6) /*除去最后一个控制符AF*/{p->data[strlen(ch)-1]='\0';break;p->next=NULL; /*最后的一个指针为空*/head=head->next;}/**文本字数统计**/intCount_Space(LINE*&head)//统计空格数{LINE*p=head;intasc_space=32;intcount=0;inti;intLen;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]==asc_space)count++;}while((p=p->next)!=NULL);returncount;}LINE*p=head;intcount=0;intLen;inti;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>=48&&p->data[i]<=57)count++;}while((p=p->next)!=NULL);returncount;}intCount_AII_Word(LINE*&head)/统计文章的总字数{LINE*p=head;intcount=0;do{count+=strIen(p->data);}whiIe((p=p->next)!=NULL);returncount;}LINE*p=head;intcount=0;intLen;inti;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;}while((p=p->next)!=NULL);returncount;}intFind_Word(LINE*&head,char*sch)//统计sch在文章中出现的次数{LINE*p=head;intcount=0;intlen1=0;intlen2=strlen(sch);inti,j,k;do{Ien1二strlen(p->data);〃当前行的字符数for(i=0;i<len1;i++){if(p->data[i]==sch[0]){k=0;for(j=0;j<=len2-1;j++)if(p->data[i+j]==sch[j])k=k+1;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);returncount;}/**指定字串的删除**/voiddel_string_word(char*s,char*sch){char*p=strstr(s,sch);chartmp[80];intlen=strlen(s);intk,kk;inti=len-strlen(p);intj=i+strlen(sch);intcount=0;for(k=0;k<i;k++)tmp[count++]=s[k];for(kk=j;kk<len;kk++)tmp[count++]=s[kk];tmp[count]='\0';strcpy(s,tmp);}voidDel_String(LINE*&head,char*sch)/删除指定的字符串{LINE*p=head;do{while(strstr(p->data,sch)!=NULL)del_string_word(p->data,sch);}while((p=p->next)!=NULL);}/**输出文本**/voidOutPutTxt(LINE*&head)//向屏幕输出文章{LINE*p=head;printf("文本文件输出如下所示:");do{printf("%s\n",p->data);}while((p=p->next)!=NULL);}voidCount(LINE*&head){printf("文本统计信息结果:\n");printf("全部字母数:%d\n",Count_Letter(head));printf("数字个数:%d\n",Count_Num(head));printf("空格个数:%d\n",Count_Space(head));printf("文本总字数:%d\n",Count_AII_Word(head));p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 郑州房票协议书
- 资金入股协议书
- 签订结算协议书
- 找人办工作合同协议书
- 政府街道办调解协议书
- 电脑劳务协议书
- 贷款还款协议书
- 小防控单元联防协议书
- 现货代理协议书
- 租地续租协议书
- 竣工结算审计服务投标方案(2024修订版)(技术方案)
- 某药业公司管理制度汇编
- 旅游经济学知到智慧树章节测试课后答案2024年秋海南师范大学
- 《佛与保险》课件
- 第7课《全球航路的开辟和欧洲早期殖民扩张》中职高一下学期高教版(2023)世界历史全一册
- 小学语文跨学科整合教学方案
- 高空作业规程及标准
- 急性创伤的现场急救和评估
- “燃气安全我知道”知识竞赛考试题及答案
- 水质监测服务投标方案(技术标)
- 2025年中考作文试题预测及范文
评论
0/150
提交评论