文章编辑数据结构课程设计(共31页).doc

上传人:飞****2 文档编号:14548701 上传时间:2022-05-05 格式:DOC 页数:31 大小:611KB
返回 下载 相关 举报
文章编辑数据结构课程设计(共31页).doc_第1页
第1页 / 共31页
文章编辑数据结构课程设计(共31页).doc_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《文章编辑数据结构课程设计(共31页).doc》由会员分享,可在线阅读,更多相关《文章编辑数据结构课程设计(共31页).doc(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 长沙理工大学 数据结构课程设计报告 学 院 专 业 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 课程设计成绩评定学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期 指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩 指导教师签字 年 月 日课程设计任务书计算机与通信工程学院 软件工程专业 课程名称数据结构课程设计时间学生姓名指导老师题 目文章编辑主要内容:采用单链表数据结构静态存储文章,

2、以C语言实现相关程序,实现对输入的文章进行统计文章中总字符数、统计文章中空格个数、统计文章中数字个数、统计文章中英文字母数、删除文章中指定字符串、统计文章中指定字符串出现次数的文章编辑功能操作。要求:(1)通过实际项目的分析、设计、编码、测试等工作,掌握用C语言来开发和维护软件。(2)按要求编写课程设计报告书,能正确编写分析、设计、编码、测试等技术文档和用户使用手册。应当提交的文件:(1)文章编辑数据结构课程设计论文。(2)代码清单。 文章编辑 学生姓名:陈旖指导老师:陈倩诒摘 要 本课程设计主要解决了基本的文章编辑问题。对于一页按要求输入到程序执行窗口的文章,静态存储结构使用线性表中,分别完

3、成统计文章总字符数、文章中空格个数、文章中英文字母数、统计文章中英文字母数的操作和文章中某一字符串的出现的次数,并输出该次数;除以上的统计操作,还实现删除文章中指定字符串,并且将删除字符串后面的字符前移,再保存为编辑后的文章。关键字 静态存储;线性表;编辑;字符串 目 录1.引言1 1.1课程设计意义 11.2课程设计目的11.3课题要求12.设计思路与方案22.1函数流程22.2功能函数43.详细实现53.1数据结构设计53.2功能函数设计53.3函数分析64.运行环境与结果 124.1运行环境124.2运行结果125.结束语 166.参考文献 177.附录 18代码清单18专心-专注-专业

4、1引 言1.1课程设计意义在实践教学中,课程设计是一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。数据结构1是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计2及其实现等方面,加深对课程基本内容的理解3。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。1.2课程设计目的1提高对数据逻辑结构4的特点以及存储表示方式的认识,培养在具体应用中选择合

5、适的数据结构和存储结构的能力。2熟悉软件开发的基本过程,初步掌握软件开发过程的问题分析、系统设计、程序编码5、测试等阶段基本任务和技能方法。3培养自己的算法设计和算法分析能力,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。4训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的工作方法、作风和相互合作的精神。5综合运用链表6的查找、插入和删除,理论结合实际,将其运用到文章编辑这一实验中。使这些知识得到进一步巩固、加深和拓展。利用模块的思想,模块之间用指针连接,减少了不必要的麻烦。巩固加深指针的用途,理解模块的优点。加深对链表的理解,全面认识链表操作的字符串的模式匹

6、配操作。1.3课题要求课题名称:文章编辑具体要求:(1)静态存储一页文章,每行最多不超过80个字符,共N行;(2)分别统计出其中英文字母数和空格数及整篇文章总字数;(3)统计某一字符串在文章中出现的次数,并输出该次数;(4)删除某一子串,并将后面的字符前移;(5)存储结构使用线性表3,分别用几个子函数实现相应的功能。 2 设计思路与方案2.1函数流程根据课题文章编辑的详细要求,可将程序的运行分为三个模块,即文章输入和文章输出模块、指令输入和指令判断模块、执行指令操作模块。构造多个线性表,将输入的文章的每一行字符,都分别静态存储4在相应的线性表中。每个线性表的存储容量不超过80个字符。 文章输入

7、结束后,程序输出指令菜单,列出程序可以合法执行的操作指令,并选择输入合法的指令,以执行相应的指令操作。 依照课题要求,程序设计了6大功能,分别为统计文章中总字符数、统计文章中空格个数、统计文章中数字个数、统计文章中英文字母个数、删除文章中指定字符串、统计文章中指定字符串出现次数,并且为每一项功能提供相信的执行指令。程序的执行流程如图2.1所示。首先按要求输入文章,然后按照指令菜单选择要执行的指令,程序判断指令,并且执行相应的指令操作,输出指令执行结果后,重新返回指令菜单,再次等待指令输入。指令书输入和指令执行为无限循环,在用户退出程序前,程序不会自动结束。 图2.1 函数执行流程图2.2功能函

8、数 为实现6个执行指令操作,分别设计相应的功能函数,并运用C语言数据结构构造相关代码。功能函数名以功能说明如表2.2所示。表2-1 功能函数列表函数功能void CountAll()统计文章中总字符数void CountSpace()统计文章中空格个数void CountNumber()统计文章中数字个数void ConuntLetter()统计文章中英文字母数void Delstring()删除文章中指定字符串void Findstring()统计文章中指定字符串出现次数3 详细实现3.1数据结构设计(1)定义结构体:typedef struct line char *data; struc

9、t line *next;LINE; LINE为单链表存储结构。3.2功能函数设计(1)统计文章总字数:void CountAll(LINE * &head)将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中总字数; 用printf语句输出文章中总字数,调用子函数menu()。(2)统计文章中的空格数:void CountSpace(LINE * &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中空格数; 用printf语句输出文章中空格数,调用子函数menu()。(3) 统计文章中数字个数:vo

10、id CountNumber(LINE* &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中数字个数; 用printf语句输出文章中数字个数,调用子函数menu()。 (4) 统计文章中英文字母数:void CountLetter(LINE * &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中英文字母数 用printf语句输出文章中英文字母数,调用子函数menu()。(5)查找字符串的函数:void FindString(LINE * &head)将p付给表头指针;初始化count

11、为0;初始化len1,用来保存当前行的总字符数;定义整型变量len2表示待统计字符串的长度;用printf语句提醒用户输入要统计的字符串;用do-while语句遍历链表,同时用for循环和if语句找出指定字符串在文章中出现的次数;用printf语句输出指定字符串在文章中出现的总次数,调用子函数menu()。(6)删除字符串的函数:void DelString(LINE * &head) 先创建一个delstringword,其中包含两个字符串char *s和char *str,用*s表示输入的字符串,*str表示要删除的字符。这个函数的功能是找到字符串s在字符串中出现的位置并删除该字符串。 定

12、义字符串的删除函数DelString(),用do-while语句遍历链表,语句中再套用if语句,并调用delstringword()进行删除。 3.3函数分析(1)void CountAll(LINE * &head)本函数的作用是统计整篇文章的所有字符数,包括空格。返回统计结果之后会调用menu方法打印指令菜单。void CountAll(LINE * &head) LINE *p=head; int count=0; do count+=strlen(p-data); while(p=p-next)!=NULL); printf(文章总字数: %d n,count); printf(*n)

13、; printf(n); menu();(2)void CountSpace(LINE * &head)本函数的作用是统计字符串链表中的空格个数,在统计完空格个数后,调用menu方法打印指令菜单。void CountSpace(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p-data); for(int i=0;idatai=32)count+; while(p=p-next)!=NULL); printf(文章中空格个数: %d n, count); printf(*n); printf(n); menu();(3)v

14、oid CountNumber(LINE * &head) 本函数的作用是统计字符串链表中的数字个数,在统计完数字个数后,调用menu方法打印指令菜单。void CountNumber(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p-data); for(int i=0;idatai=48 & p-datainext)!=NULL); printf(文章中数字个数: %d n,count); printf(*n);printf(n); menu();(4)void CountLetter(LINE * &head)本函数

15、的作用是统计整个字符串链表中英文字母的个数。遍历完成之后会调用menu方法打印指令菜单。void CountLetter(LINE * &head) LINE *p=head; int count=0;do int Len=strlen(p-data); /计算当前data里的数据元素个数 for(int i=0;idatai=a&p-dataidatai=A&p-datainext)!=NULL); /遍历链表 printf(文章中英文字母个数: %d n, count); /返回文章里 printf(*n);printf(n); menu();(5)void FindString(LINE

16、 * &head)用户调用这个方法查找相应字符串的出现在文章中的次数。统计后调用menu()方法打印指令菜单。void FindString(LINE * &head) LINE *p=head; int count=0;int len1=0; int len2; int i,j,k; char str120; printf(n); printf(请输入要统计的字符串:); scanf(%s,str1); len2=strlen(str1); do len1=strlen(p-data); for(i=0;idatai=str10) k=0; for(j=0;jdatai+j=str1j) k

17、+; if(k=len2) count+;i=i+k-1; while(p=p-next)!=NULL); /遍历链表 printf(该字符串在文中出现的次数: %d n,count); printf(*n);printf(n); menu();(6)void DelString(LINE * &head)删除字符串的函数,通过这个函数,删除出现在字符串链表里的所有的输入的字符片段。最后调用menu方法打印指令菜单。void DelString(LINE * &head) LINE *p=head;char str20; printf(请输入要删除的字符串: ); scanf(%s,str);

18、 do if(strstr(p-data,str)!=NULL)delstringword(p-data,str);while(p=p-next)!=NULL);printf(删除指定字符串后的文章为: n);OutPut(head);printf(*n);printf(n);menu();4 运行环境与结果4.1运行环境本程序的运行环境为以Windows 7系统PC上的Visual C+ 6.0。4.2运行结果如图4.1,所示,输入一段包含汉字、英文大小写字母、阿拉伯数字、空格、特殊字符的文章,每行都不超过80个字符,以“Ctrl+E(E)”为结束符。图4.1 文章输入如图4.2所示,输入指

19、令“2”,执行“统计文章中总字符数”指令,执行结果为“399”。图4.2 统计文章中总字符数如图4.3所示,输入指令“3”,执行“统计文章中空格个数”指令,执行结果为“57”。图4.3 统计文章中空格个数如图4.4所示,输入指令“3”,执行“统计文章中数字个数”指令,执行结果为“6”。图4.4 统计文章中数字个数如图4.5所示,输入指令“4”,执行“统计文章中英文字母数”指令,包括英文大写字母和英文小写字母,执行结果为“399”。图4.5 统计文章中英文字母数如图4.6所示,输入指令“5”,执行“删除文章中指定字符串”指令,输入要删除的字符串“n”,执行结果如下。 图4.6 删除文章中指定字符

20、串如图4.7所示,输入指令“6”,执行“统计文章中指定字符串出现次数”指令,输入要统计的字符串为“printf”,执行结果为“8”。图4.7 统计文章中指定字符串出现次数如图4.8所示,输入指令“7”,输出“指令输入错误”。图4.8 指令输入错误本程序的文章为用户输入的文章,只能做即时输入的统计、编辑,而不能对已有的磁盘文件中的文章进行统计、编辑,如果引入文件流类,就可以打开磁盘文件,对其进行统计、编辑并保存,这是有待改进的。5结束语此次课程设计使我对数据结构方面的知识有了更加深入的了解,也使我认识到自己在学习编程方面还有很多的不足。今后我要多读一些编程方面的书籍,不能只拘泥于课本上的知识,并

21、注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想。同时,此次课程设计也使我对编程产生了兴趣,特别是在通过查书籍资料以及网上资源的情况下能够使程序运行成功,得到了一种成就感,相对于以前的一组人完成一个程序,此次一个人独立完成成就感更大一些。参考文献1 严蔚敏,吴伟民数据结构(C语言版)北京:清华大学出版社,20022 许卓群数据结构与算法北京:高等教育出版社,20043 金远平数据结构(C语言版) 北京:清华大学出版社,20054 殷人昆数据结构(C语言版) 北京:清华大学出版社,20015 G.PerryC+程序设计教程. 北京

22、:清华大学出版社,1994 6 严蔚敏,吴伟民数据结构习题集(C语言版)北京:清华大学出版社,2004附录代码清单:#include #include typedef struct line char *data; struct line *next;LINE; /创建链表,向里面输入文本数据void OutPut(LINE * &head) /向屏幕输出文字 LINE *p=head;/printf(:n);do printf(%sn,p-data); while(p=p-next)!=NULL); /遍历链表printf(n);void menu()printf(*编辑指令*n);prin

23、tf(1:统计文章中总字符数 n);printf(2:统计文章中空格个数 n);printf(3:统计文章中数字个数 n);printf(4:统计文章中英文字母数 n);printf(5:删除文章中指定字符串 n);printf(6:统计文章中指定字符串出现次数n);printf(*n);void Create(LINE * &head)printf (请输入文章,每行最多80个字符,以Ctrl+E(E)为结束符n);LINE *p=new LINE; /首先为链表建立一个附加表头结点 head=p; /将付给表头指针char tmp100;while(1)gets(tmp); /输入字符串i

24、f(strlen(tmp)80)printf(每行最多输入80个字符!);break;if(tmp0=5)break; /如果发现输入E,则退出输入 p=p-next=new LINE;p-data=new charstrlen(tmp)+1; /为结点分配空间 strcpy(p-data,tmp);if(tmpstrlen(tmp)-1=5) /除去最后一个控制符E p-datastrlen(tmp)-1=0;break;p-next=NULL; /最后一个指针为空head=head-next;printf(n);menu();void CountLetter(LINE * &head) /

25、统计英文字母数LINE *p=head; int count=0;do int Len=strlen(p-data); /计算当前data里的数据元素个数for(int i=0;idatai=a&p-dataidatai=A&p-datainext)!=NULL); /遍历链表printf(文章中英文字母个数: %d n, count);/返回文章里printf(*n);printf(n);menu();void CountNumber(LINE * &head) LINE *p=head;int count=0;do int Len=strlen(p-data);for(int i=0;id

26、atai=48 & p-datainext)!=NULL); printf(文章中数字个数: %d n,count);printf(*n);printf(n);menu();void CountSpace(LINE * &head) LINE *p=head; int count=0;do int Len=strlen(p-data);for(int i=0;idatai=32)count+; while(p=p-next)!=NULL); printf(文章中空格个数: %d n, count);printf(*n);printf(n);menu();void CountAll(LINE *

27、 &head) LINE *p=head; int count=0; do count+=strlen(p-data); while(p=p-next)!=NULL); printf(文章总字数: %d n,count);printf(*n);printf(n);menu();void FindString(LINE * &head) LINE *p=head;int count=0;int len1=0; int len2; int i,j,k;char str120; printf(n);printf(请输入要统计的字符串:);scanf(%s,str1);len2=strlen(str1

28、);do len1=strlen(p-data); for(i=0;idatai=str10)k=0;for(j=0;jdatai+j=str1j) k+;if(k=len2)count+;i=i+k-1; while(p=p-next)!=NULL);/遍历链表printf(该字符串在文中出现的次数: %d n,count);printf(*n);printf(n);menu();void delstringword(char *s,char *str) /删除指定的字符串 /*s为输入的字符串,*str为将要删除的字符char *p=strstr(s,str); /从字符串中寻找str第一

29、次出现的位置char tmp80;int len=strlen(s);int i=len-strlen(p);int j=i+strlen(str);int count=0;for(int m=0;mi;m+)tmpcount+=sm;for(int n=j;ndata,str)!=NULL)delstringword(p-data,str);while(p=p-next)!=NULL);printf(删除指定字符串后的文章为: n);OutPut(head);printf(*n);printf(n);menu();void main()LINE *head; int i;Create(head);for(;)printf(执行指令: );scanf(%d,&i);switch(i)case 1:CountAll(head);break;case 2:CountSpace(head);break;case 3:CountNumber(head);break;case 4:CountLetter(head);break;case 5:DelString(head);break;case 6:FindString(head);break;default:printf(指令输入错误nn);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁