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

下载本文档

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

文档简介

课山东理程工大学计设算机学计院(数据结构)班级姓名学号指导教师计科0906赵利强0911011192孙守卿二O 年一月二十日课程设计任务书及成绩评定课题名称 文本编辑 I、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解最终使学生能够熟练应用数据结构的知识写程序。(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。2、设计题目要求:文章编辑功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;II、设计进度及完成情况日期内 谷1.10-1.11选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。1.12〜1.14创建相关数据结构,录入源程序。1.17〜1.19调试程序并记录调试中的问题,初步完成课程设计报告。1.20〜1.21上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。考核结束后将课程设计报告和源程序的电子版交班长统刻光盘上交。口、主要参考文献及资料[1]严蔚敏数据结构(C语言版)清华大学出版社1999严蔚敏数据结构题集(C语言版)清华大学出版社1999谭浩强C语言程序设计清华大学出版社与所用编程环境相配套的C语言或C++相关的资料W、成绩评定:设计成绩: (教师填写)指导老师: (签字)二o—年一月二十目录第一章概述……………1第二章系统分析………2第三章概要设计………第四章详细设计………第五章运行与测试第六章总结与心得参考文献……………第一章概述在这次课程设计中我选的题目是文本编辑,文本编辑几乎是每个使用电脑的人都会遇到的问题,特别是网络小说作家们。在文本的编辑中,我们会时常遇到文本信息的统计问题、小型子串的查找问题、子串的查找和删除问题等。如果靠人自己去观察和执行相关操作的话,不仅累人,而且很容易出错。而使用计算机程序去实现的话,则会省力不少,而且相对来说非常精确。本程序使用了较快速的查找算法(KMP),可以大大提高检索的效率,相信这可一极大的方便用户用电脑编辑文本文件。第二章系统分析1.文本编辑的基本内容为查看文本文件内容,统计内容基本信息,查找子串是否存在及其出现次数,查找并删除所有的相关子串并重新输出文本内容等等。2.文本编辑所需的数据相对简单,所以本程序仅需要使用一个文本数据文件,当然该文本文件需要和本程序在同一目录下才行。3.本程序是在终端下运行的程序,页面简洁清晰,并配有丰富的提示,即使是在终端下,其人性化依旧,对于喜欢用终端命令提示符的用户来说在编辑时会感到很惬意,对于习惯窗口形式的用户来说其人性化提示也能使用户尽快适应工作环境。4.程序执行时的命令:既然是终端了,那么程序执行时肯定是使用命令来进行操作了。虽然没有窗口那样直观,但使用却非常简单、准确,用户不用担心忘记指令,随时可以调用help指令来查看相关命令。5.测试数据。共有3组测试数据可供测试,小、大型数据及边界数据都有。第三章概要设计1、数据结构的设计对于文本编辑来说,数据结构相对简单,使用一个有较大最大长度的顺序表即可,在程序中可采用一维数组来实现。使用数组表示的顺序表来存储文本具有简洁、访问方便输出方便等特点。2、算法的设计程序的设计总体上可分为8个模块,封装在File类内。第1个模块是数据区,即程序运行需要使用的数据、文件流等。第2个模块是准备部分,即程序刚开始时应输出的信息。这里使用接口函数voidFile::Getready()实现,伪代码如下:voidFile::Getready(){cout<<〃相关信息及注意事项..〃<<endl;cout<<〃相关信息及注意事项..〃<<endl;}第3个模块是数据读取部分,即从文件中获得所需文本信息。使用接口函数voidFile::Getdata()实现,伪代码如下:voidFile::Getdata(){cin>>filename;fin.open(filename);cout<<〃正在读取数据....〃<<endl;len=0;while(fin.getline(text,81,'\n')){strcat(s,text);len+=strlen(text);s[len]='\n';s[++len]='\0';}cout<〈"数据初始化完毕..."<<endl<<endl;}第4个模块是输出文本内容部分,使用接口函数voidFile::Show_text()实现。伪代码入下:voidFile::Show_text(){cout<〈"您的输入文件内容如下:"<<endl<<endl;cout<〈"数据区线性表存储的文本内容"<<endl<<endl;}第5个模块是帮助命令模块部分,调用该模块可以在终端显示程序执行时用户可调用的所有指令,以方便用户记忆和使用。该部分使用接口函数voidFile::Help()实现,伪代码如下:voidFile::Help(){cout<〈"您可以使用以下命令"<<endl<<endl;cout<<"指令1功能及其使用方法"<<endl<<endl;cout<<"指令2功能及其使用方法"<<endl<<endl;cout<<"指令3功能及其使用方法"<<endl<<endl;cout<<"指令4功能及其使用方法"<<endl<<endl;cout<<"指令5功能及其使用方法"<<endl<<endl;}第6个模块是统计信息部分,该模块用来统计文本信息并通过终端将信息传递给用户。该部分通过接口函数voidFile::Count()实现,伪代码如下:voidFile::Count(){intcc,cp,i,cn;cc=cp=cn=0;for(i=0;i<len;i++){扫描过程中统计字母数、数字数、空格数、总字符数等相关信息。cout<〈"文章字数信息统计如下:"<<endl<<endl;cout<〈"全部字母数:"<<cc<<endl<<endl;cout<<"数字个数:"<<cn<<endl<<endl;cout<<"空格个数:"<<cp<<endl<<endl;cout<〈"文章总字数:"<<len<<endl<<endl;}第7个模块是子串查找部分,该部分会对用户在终端输入的字符串在文本中进行检索,并将其出现次数反馈给用户。该部分使用接口函数voidFile::Count_str()实现,伪代码如下:voidFile::Count_str(){inti,j,ls,ct=0;cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));//以上为数据的输入及预处理求子串的前缀函数next使用前缀函数next,用KMP算法进行匹配、查找和统计cout<<str<<"在文章中的出现次数为:"<<ct<<endl<<endl;}第8个模块是查找并删除所有子串部分。该部分会对用户在终端输入的字符串进行查找,并将原文本中所有该子串进行删除,使用接口函数voidFile::Delete_str()实现,伪代码如下:voidFile::Delete_str(){inti,j,ls,k;memset(visit,false,sizeof(visit));cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));//子串读入及数据的预处理计算前缀函数nexti=j=0;使用next函数及稍加修改的KMP算法匹配并删除原文本中所有用户输入的子串len=strlen(s);cout<<s<<endl;第四章详细设计#include<iostream>#include<fstream>#include<cstdio>#include<cstring>usingnamespacestd;constintN=80010;classFile{private:chars[N];charfilename[260];chartext[90];charstr[90];intlen,next[90];boolvisit[N];ifstreamfin;voidGetready();voidGetdata();voidShow_text();voidCount();voidCount_str();voidDelete_str();voidHelp();public:File(){cout<<"欢迎使用文章编辑工具 版权所有:SDUT计科0906zlq"<<endl<<endl;memset(s,0,sizeof(s));len=0;}voidMain_Work();~File(){cout<<"谢谢您的支持,如有建议和意见,请发送到zlqest@163.com,谢谢合作"<<endl<<endl;}};voidFile::Getready(){cout<<"请输入数据文件名(包括扩展名,只能有英文、数字和点号)"<<endl<<endl;cout<<〃注意:由于资源控制,请保证输入不超过1000行,每行不超过80个字符,查询的子串长度不得超过一行〃<<endl<<endl;cout<<〃文件名:"; /*让子串长度不超过一行是为了防止某些用户在终端中不会用Ctrl+Z来表示EOF*/}voidFile::Getdata(){cin>>filename;fin.open(filename);cout<<〃正在读取数据....〃<<endl;len=0;while(fin.getline(text,81,'\n')){strcat(s,text);len+=strlen(text);s[len]='\n';s[++len]='\0';}cout<〈〃数据初始化完毕...〃<<endl<<endl;}voidFile::Show_text(){cout<〈〃您的输入文件内容如下:〃<<endl<<endl;cout<<s<<endl<<endl;}voidFile::Help(){cout<<"您可以使用以下命令"<<endl<<endl;cout<<"count:分别统计出其中英文字母数和空格数及整篇文章总字数"<<endl<<endl;cout<<"search(+换行输入所要查找的字符串):统计某一字符串在文章中出现的次数,并输出该次数"<<endl<<endl;cout<<〃delete(+换行输入所要删除的字符串):删除某一子串,并将后面的字符前移"<<endl<<endl;cout<<〃help:查看程序命令集〃<<endl<<endl;cout<<〃exit:退出应用程序〃<<endl<<endl;}voidFile::Count(){intcc,cp,i,cn;cc=cp=cn=0;for(i=0;i<len;i++){if(s[i]>='0'&&s[i]<='9'){cn++;continue;}if(s[i]>='A'&&s[i]<='Z'){cc++;continue;}if(s[i]>='a'&&s[i]<='z'){cc++;continue;}if(s[i]==''){cp++;continue;}cout<〈"文章字数信息统计如下:"<<endl<<endl;cout<〈"全部字母数:"<<cc<<endl<<endl;cout<<"数字个数:"<<cn<<endl<<endl;cout<<"空格个数:"<<cp<<endl<<endl;cout<〈"文章总字数:"<<len<<endl<<endl;}voidFile::Count_str(){inti,j,ls,ct=0;cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));i=1;while(i<ls){j=next[i-1];while(j>-1&&str[j+1]!=str[i])j=next[j];if(j!=-1)next[i]=j+1;i++;}i=j=0;while(i<len){if(s[i]!=str[j]){j=next[j];if(j==-1){i++;j=0;

}else{i++;j++;}if(j==ls){ct++;j=0;}}cout<<str<<"在文章中的出现次数为:}voidFile::Delete_str(){inti,j,ls,k;memset(visit,false,sizeof(visit))cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));i=1;while(i<ls){j=next[i-1];while(j>-1&&str[j+1]!=str[i])if(j!=-1)next[i]=j+1;i++;}i=j=0;while(i<len)"<<ct<<endl<<endl;j="<<ct<<endl<<endl;j=next[j];if(s[i]!=str[j]){j=next[j];if(j==-1){i++;j=0;}}else{i++;j++;}if(j==ls){for(k=i-ls;k<i;k++)visit[k]=true;j=0;}}i=j=0;while(j<len){while(j<len&&visit[j])j++;if(j==len)break;s[i++]=s[j++];}s[i]='\0';len=strlen(s);cout<<s<<endl;}voidFile::Main_Work(){charorder[10];this->Getready();this->Getdata();this->Show_text();Help();cout<<"请输入指令:";while(cin>>order){cout<<endl;if(strcmp(order,"exit")==0)return;if(strcmp(order,"count")==0)Count();elseif(strcmp(order,"search")==0)Count_str();elseif(strcmp(order,"delete")==0)Delete_str();elseif(strcmp(order,"help")==0)Help();elsecout<<"非法指令,请重新输入。"<<endl<<endl;cout<<"请输入指令:";}}intmain(){FileText;Text.Main_Work();return0;}deieteC,换行输入所要删除的字符串卄删除某一子串,井将后面的字符前移help:查看程序命令集exit:退出应幷!程序请输入指令:叩口七袅章字数信息到计如题:全部字译数使用数字个数:3空格个数:上文章总字数…一请输测指数据及及其其结结aa在欢迎章中的出现编遨工;6请输请:指入数据文件名a删除子件后文本內容如下所示:b42sd3请输入指令daai.t谢谢您的支持,如商建议和意见,请发送到21QestP163_con,谢谢合作Jjc删除子串后文本內容如下所示:.欢迎使用文章编辑工具 版权所有=SDUT计科旳酩曲口请输入数据文件名〔包括扩展名,只能有英文r数字和点号)注意二由于资源控制.请保证输人不超过個阴行,每行不超过胸个字符「查询的子串长度不得遷沪亍文件名'd-fl-taS.七乂七弓的输入文件內容如下<SoRepeoplebelievethatthereai?ethreecyclesina.person1s:Lifethatstartthedayheot*sheisborn・Thes?threetitlesarethephyfica.1,enotional,andintellectualcycles,andthe^rJiavsperiodsoflensrths:23,2特.and33da.ys,respectiveli!・Thereisonepeakineachperiodof&.cycle・Atthep&akofaGyulsa.p(2)ata2.txt汶匸试数数t及终端输入t:令运行结果如下cdIngfieId.<physical,ematzonalornsenta.l>・ForeKample,ifitisthementalcurue,tfiougrhtprocesseswillbesharperandconcentrationwillheeasier・SincethethreeeyeLeshavedifferentperiods,thepea.lcsofthethreeeyelesgrenerallyoccuratdifferenttimes.Ueuouldliketodetek'ntineuhenatriplepeakoccursCthepeaksofallthreeeyelesoccurinthesameday>foranypers□n.ForeacheyeLe,youuillbegiuenthenumberofd.ai;£fromthebegrinningiofthecuprentyearatuhichoneofitspeaks<notnecessarilythefipst>occupe:.Youuillalsof?asriuenadateexppB£:E:edasthenumberofdaysfromthef?aSTinninsrofthecupp&ntyear.¥□快taskistodetepniinethenumbepoFdaysFpomthegiuendatetothenexttriplepeak.TViasriuendateienotcounted.Forexample^iFthegiuendateisandthenexttriplepeakoccuLPSondai^12,theansuepis2,n^t3_Ifatrip<epeakoccurs:onthegivendate,iFou.should,

温馨提示

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

评论

0/150

提交评论