《淮海工学院 计算机工程学院 课程设计报告数据结构课程.doc》由会员分享,可在线阅读,更多相关《淮海工学院 计算机工程学院 课程设计报告数据结构课程.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 简单行编辑 姓 名: 侯耀生 学 号: 2012122694 专业班级: 软件工程 软件121 系 (院): 计算机工程学院 设计时间: 2013.12.232013.1.5 设计地点: 软件工程实验室、教室 成绩:指导教师评语: 签名: 年 月 日1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训
2、练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2课程设计任务与要求:任务根据教材数据结构-C语言描述(耿国华主编)和参考书数据结构题集(C语言版)(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题
3、需在18周前报课程设计指导教师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实
4、,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。 3课程设计说明书一 需求分析设计一个简单的行编辑程序,输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。存储结构使用线性表,文字中可以是大写、小写的英文字母、任何数字及标点符号。 基本要求 (1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。(4)输出形式:1)分行输出用户输入的各行字符;2)分4行输出全部字母数、数字个数、空格个数、文章总字数3)输出删除某
5、一字符串后的文章;二 概要设计1.结构体定义:typedef struct linechar *data;struct line *next;LINE;2各函数功能(1)void Create(LINE * &head)功能:创建一个链表,同时向里面输入文本数据(2)int Countwords(LINE * &head)功能:统计字母数(3)int CountNumber(LINE * &head)功能:统计数字数(4)int CountSpace(LINE * &head)功能:统计空格数(5)int CountAll(LINE * &head)功能:统计文章的总字数(6)int Find
6、String(LINE * &head,char*str)功能:统计str在文章中出现的次数(7)void delstringword(char *s,char *str)void DelString(LINE * &head,char *str)功能:删除指定的字符串(8)void OutPut(LINE * &head)功能:向屏幕输出文章系统流程图主函数 统计文章总字数统计某个字符串出现次数 统 计字母数 退出该系统 删除指定字符串 统计空格数 统计数字数三 详细设计#include #include #include 2. 定义结构体定义一个链表,文本每行以字符串形式存储,行与行之间以
7、链表存储typedef struct linechar *data;struct line *next;LINE;3. 主要难点函数的功能及其实现(1)统计str在文章中出现的次数。int FindString(LINE * &head,char*str)LINE *p=head;int count=0;int h=0;int len1=0;/保存当前行的总字符数int len2=strlen(str);/待统计字符串的长度int i,j,k;dolen1=strlen(p-data);/当前行的字符数for(i=0;idatai=str0)k=0;for(j=0;jdatai+j=strj)
8、k+;if(k=len2)count+;i=i+k-1;while(p=p-next)!=NULL);/遍历链表return count;(2)删除指定字符串void delstringword(char *s,char *str)char *p=strstr(s,str);/从字符串s中寻找str第一次出现的位置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)d
9、elstringword(p-data,str);while(p=p-next)!=NULL);/遍历链表/向屏幕输出文章void OutPut(LINE * &head)LINE *p=head;doprintf(%sn,p-data);while(p=p-next)!=NULL);/遍历链表四 设计与调试分析(1) 系统起始界面,要求输入字符串文章(2) 系统主界面(3) 统计字母数(4) 统计数字数(5) 统计空格数(6) 统计文章总字数(7) 统计某个字符串出现的次数(8) 删除指定字符串(9) 退出该系统(10) 未按指定要求输入编号五 用户手册1. 进入用户界面,输入一篇文章,可以
10、包括字母数字以及空格符,完成后按Ctrl+E键。2. 输入完成后,进入用户主界面,在选项17内进行选择。 (1)若按1键,统计该篇文章的全部字母数。 (2)若按2键,统计该篇文章的全部数字数。 (3)若按3键,统计该篇文章的全部空格数。 (4)若按4键,统计该篇文章的总字数。 (5)若按5键,统计某个字符串在文章中出现的次数。 (6)若按6键,删除该文章中的指定字符串。 (7)若按7键,退出该系统。 (8)若按8键,则返回异常,提示输入键为17键。六 测试成果七 附录(源程序清单)#include #include #include /文本每行以字符串形式存储,行与行之间以链表存储typede
11、f struct linechar *data;struct line *next;LINE;void Create(LINE * &head)printf(请输入字符串,以Ctrl+E(E)为结尾(每行最多输入80字符!):n);LINE *p=new LINE; head=p; char tmp100; while(1)gets(tmp); if(strlen(tmp)80)printf(每行最多输入80字符);break;if(tmp0=5)break;p=p-next=new LINE;p-data=new charstrlen(tmp)+1; strcpy(p-data,tmp);i
12、f(tmpstrlen(tmp)-1=5) p-datastrlen(tmp)-1=0;break;p-next=NULL; head=head-next;/统计字母数int Countwords(LINE * &head)LINE *p=head;int count=0;doint Len=strlen(p-data);for(int i=0;idatai=a&p-dataidatai=A&p-datainext)!=NULL); return count; /统计数字数int CountNumber(LINE * &head)LINE *p=head;int count=0;doint L
13、en=strlen(p-data);for(int i=0;idatai=48&p-datainext)!=NULL); return count; /统计空格数int CountSpace(LINE * &head)LINE *p=head;int count=0;doint Len=strlen(p-data);for(int i=0;idatai=32)count+;while(p=p-next)!=NULL); return count; /统计文章的总字数int CountAll(LINE * &head)LINE *p=head; int count=0;do count+=str
14、len(p-data);while(p=p-next)!=NULL); return count; /统计str在文章中出现的次数int FindString(LINE * &head,char*str)LINE *p=head;int count=0;int h=0;int len1=0; int len2=strlen(str); int i,j,k;dolen1=strlen(p-data); for(i=0;idatai=str0)k=0;for(j=0;jdatai+j=strj)k+;if(k=len2)count+;i=i+k-1;while(p=p-next)!=NULL);
15、return count;/删除指定的字符串void delstringword(char *s,char *str)char *p=strstr(s,str); 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); /向屏幕输出文章void OutPut(LINE *
16、&head)LINE *p=head;doprintf(%sn,p-data);while(p=p-next)!=NULL); /遍历链表/主函数void main()int choice;LINE *head;char str120,str220;printf(n);printf(*n); printf(*简单行编辑系统*n); printf(* 2012122694 *n); printf(*n);printf(n); Create(head); printf(输入的文章为:n);OutPut(head);printf(*n);printf(* 1.统计全部字母数 *n);printf(*
17、 2.统计数字个数 *n);printf(* 3.统计空格个数 *n);printf(* 4.统计文章总字数 *n);printf(* 5.统计某个字符串出现的次数 *n);printf(* 6.删除指定字符串 *n);printf(* 7.退出该系统 *n);printf(*n);printf(* 请输入17,选择你要的步骤 *n);printf(*n);while(1)cinchoice;switch(choice)case 1:printf(* 1.统计字母数 *n);printf(*n);printf(* 该文章的全部字母数为:%d *n,Countwords(head);printf
18、(* 请您继续进行选择 *n);printf(*n);printf(n);break;case 2:printf(* 2.统计数字数 *n);printf(*n);printf(* 该文章的数字个数:%d *n,CountNumber(head);printf(* 请您继续进行选择 *n); printf(+*n);printf(n);break;case 3:printf(* 3.统计空格数 *n);printf(*n); printf(* 该文章的空格个数: %d *n,CountSpace(head);printf(* 请您继续进行选择 *n);printf(*n);printf(n);
19、break;case 4:printf(* 4.统计文章总字数 *n);printf(*n);printf(* 该文章的总字数: %d n,CountAll(head);printf(* 请您继续进行选择 *n);printf(*n);printf(n);break; case 5:printf(* 5.统计某个字符串出现的次数 *n);printf(*n);printf(* 请输入要统计的字符串: );scanf(%s,str1); printf(*%s出现的次数为:%d *n,str1,FindString(head,str1);printf(* 请您继续进行选择 *n);printf(*
20、n);printf(n);break;case 6:printf(* 6.删除指定字符串 *n);printf(*n);printf(* 请输入要删除的某一字符串: *n);scanf(%s,str2); DelString(head,str2); printf( 删除%s后的文章为:,str2); OutPut(head);printf(* 请您继续进行选择 *n);printf(*n);printf(n); break; case 7:printf(* 7.退出该系统 *n);printf(*n); printf(* 已退出该系统 *n); printf(* 谢 谢 使 用 *n); pr
21、intf(*n);printf(n); break; default:printf(*n); printf(* 对不起,您所输入的编号不在17之间 *n); printf(* 请重新输入 *n); printf(*n);printf(n); break;if(choice=7)break;3. 课程设计心得 通过这次课程设计,使我对链表有了更深的了解,同时也使我对串的概念有了更深的理解 。在次实验的行编辑程序中,我认真分析了行编辑的各种功能模块,从而确定单链表的数据结构。单链表的每个结点开辟一个数组存储行的内容。该结构能够轻易地插入行和删除行。 通过本次实验,我对编程有了更进一步的了解,自己的
22、编辑能力也得到了一定的提高,巩固了课本的知识,加强了我敏锐的洞察能力。虽然在其中遇到了很多的问题,但是通过自己的理解及他人的帮助,终于解决了。 刚开始学的时候确实有很多地方我很不理解,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。VC查错误都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里
23、的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。在这一段努力学习的过程中,我们的编程设计有了明显的提高。 其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。只要努力去学习,就会灵活的去应用它。 通过这次试验我知道了自己的许多不足,其实这和我自身有很大的关系,在平时上课的时候 没有认真的听老师的讲解,对书上的好多基础知识还没有理解,现在想起来真是后悔莫及,我时常反省自己为啥就不能静下心来学习,总要等到设计的时候要临时抱佛脚,现在想起来真是悔不当初,通过这次课程设计我深深的得到了反省,以后要好好学习认真理解书上的知识,是自己的专业知识有更深的提高。