数据结构课设.doc_第1页
数据结构课设.doc_第2页
数据结构课设.doc_第3页
数据结构课设.doc_第4页
数据结构课设.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

学习资料收集于网络,仅供参考学 号1507030222数据结构课程设计设计说明书Gorilla管理信息系统+Gorilla图结构数据应用起止日期: 2017年 01月 09 日 至 2017年 01 月 13日学生姓名XXX班级15网络2班成绩指导教师(签字)计算机与信息工程学院2017年 01月 09日天津城建大学课程设计任务书20162017学年第 1 学期 计算机与信息工程 学院 网络工程 专业 网络2 班级课程设计名称: 数据结构课程设计 设计题目: Gorilla管理信息系统+Gorilla图结构数据应用 完成期限:自 2017 年 01月 09日至 2017 年 01月 13 日共 1 周设计依据、要求及主要内容(可另加附页):一、建立一个小型的管理信息系统:1、确认管理信息系统的主题:(一)主题词汇表:1.hippopotamus 河马 2.jackal 豺 3.kingfisher 翠鸟 4. leopard豹 5.lion 狮 6.actor 演员 7.astronaut 太空员8.policeman 警察 9.firefighter 消防员 10.mugger 强盗 11.farmer 农民 12. boss 老板 13.dancer 跳舞者 14. Ostrich 鸵鸟 15. pilot 飞行员16.hairdresser 理发师 17. Mule 骡 18.waiter 服务员 19.accountant 会计20.monk-和尚 21.dog狗 22. priest-牧师23.director- 导演24.model- 模特儿 25. singer-歌手 26.dentist-牙医 27. elephant-象 28.nurse-护士 29.navigator- 航海家 30.pilot- 飞行员31.architect建筑师 32. peacock孔雀 33.baker面包师 34.businessman商人 35. penguin企鹅 36.receptionist接待员 37.secretary-秘书 38.attorney-律师 39.judge-法官 40. rabbit兔子41.carpenter-木匠 42.painter-油漆匠 43.tailor-裁缝师 44.driver-司机 45.captain-船长 46.fisherman-渔夫 47.doctor医师 48.gardener园丁 49. chemist-药剂师 50.engineer工程师 51.scientist-科学家 52.salesperson售货员 53.photographer摄影师 54.fox狐 55.hourse 马 56.giraffe 长颈鹿 57.goat 山羊 58. Gorilla 大猩猩 59.Seagull海鸥 60.hedgehog 刺猬 61. Teacher 教师 62.professor 教授 63. cook 厨师 64.principal 校长65.singer 歌手66. monkey猴子按对应序号的后两位,每个同学获取对应词汇。(二)为每个主题词确定具有特征的信息集。例:fish:id, name, length, Weight, Color, Is_Carnivore, Is_Marine意义:编号, 名字, 长度, 体重, 颜色, 是否食肉, 是否海鱼Gorilla:num,high,weight,name,sex,position,group意义:编号, 身高, 体重, 名字, 性别, 地位,族群名struct Gorillanode/定义一个名字为Gorillanode的结构体 int num;/编号float high;/身高float weight;/体重string name;/名字char sex;/性别string position;/地位string group;/ 族群名Gorillanode *next;/定义next指针;(三)为每个主题建立一个信息管理系统要求:1.定义结构体存储每个主题词实体的数据;2.使用单向链表进行多个数据的存储;3.要求程序有主菜单,执行时显示实例为:Fish管理系统功能菜单1.增加Fish;2.删除Fish;3.修改Fish;4.查询Fish信息;5.统计Fish个数;6.输出Fish列表;7.退出;请输入你的选择(1-7):请实现以上功能。功能1 数据录入功能2 数据输出功能3统计功能功能4查询功能若查询的是未输入的信息功能5 信息修改如果修改的医生信息不存在功能6 删除信息功能7 退出二、现在考虑新的应用场景,使得产生多对多的关系,例如:Fish主题中,一条鱼与另外多条鱼存在相邻的关系;那么在Fish的基础信息之上,还需要保存相邻的Fish的信息。为此,需要额外扩充关系数据。使用邻接链表是一个很好的方式。其思想是:先开辟数组存储Fish的基本数据,然后,为每个Fish,构建链表,存储所有的关系(即指向相邻Fish的指针数据); 请按照上述思想,为你的每个主题词实体,建立邻接链表实现,并且实现以下功能:Fish图结构数据处理程序1.创建Fish图)2.按照深度遍历的方式打印所有的Fish;3.按照广度遍历的方式打印所有的Fish;4.退出V0-v1-v2V10V2vertax firsreageadjvex nextV0V1111v0V2三、直觉上,我们会认为:图的遍历的编程问题,比给定n个数字的线性序列求最大值问题更难。我们知道:面向过程编程的核心问题是:当处理完当前数据,决定下一个数据是谁。请回答下面的问题:直觉上,我们会认为:图的遍历的编程问题,比给定n个数字的线性序列求最大值问题更难。我们知道:面向过程编程的核心问题是:当处理完当前数据,决定下一个数据是谁。请回答下面的问题:1图的广度和深度优先遍历中,如何找到下一个要处理的数据? 访问到一个结点的时,看他的所有邻接点,然后再看下一个处理的数据是那个。在广度遍历中,遍历时,结点以队列的形式存储,通过被访问过的队列来找到下一个处理数据。在深度遍历时,遍历时,结点以栈的形式存储,通过被访问过的栈来找到下一个处理数据。2n个数字线性序列求最大值问题中,如何找到下一个要处理的数据? 线性序列中,数据以线性表形式存储,一个数据的最后一个域的指针指向另一个数据存储即可。 3结合前述解答,解释为何图的广度和深度优先遍历问题难度直觉上大于线性序列最大值问题。线性表中数据之间的关系是一对一的关系,一个结点和他的邻接点是固定的一个,而广度和深度优先遍历数据之间的关系是多对多,一个结点可以有多个邻接点,感觉不确定性大。四、心得和体会1.如何理解数据结构中的关系?如果说:数据结构等同于数据+关系,那么对于编程问题而言,数据更重要还是关系更重要?为什么?我感觉数据结构中的关系是数据直接的一种联系和一种相关性,把数据彼此之间建立联系,让孤立的数据变成一个整体,变成一种结构,在数据间建立关联,有助于更好的管理和处理数据。编程问题而言,我感觉关系更重要,数据只是一种元素,在没有一定的相关性时,这些数据不能做任何编程,而建立关系能让编程处理很多事情。数据之间有了关系,才会有它的意义。2.能够预先建立关系,对于编程来说很重要。能否举例说明:哪些问题无法事先建立数据的关系?括号匹配问题无法事先建立数据的关系3.做完本课程设计后,你尚存在的问题是什么?有所收获的是什么? 做完本课程设计后,我感觉我存在的问题在于如何把现实的问题能用编程更为具体的表示出来,这种把实际问题转化为计算机语言,怎么来综合起来运用,对我来说,我感觉还有点难度,但是我相信如果你用心去做,我的目前存在的问题都会解决。 通过这次课设我个人感觉收获挺大的,起初我对数据结构,学习课本时,感觉到茫然,对课本学习不透,感觉门课,没什么实际用途,其实是我自己感觉的,呵呵。之后就有了这次课设,开始我还是看不懂,没有什么头绪,不过在我坚持下来认真学习后,感觉这门课程在编程方面用处很多,功能也很强大,而且对你掌握语言编程有着极大的帮助,虽然每天晚上都是编程调试程序到半夜睡觉,开始很反感,不过我坚持下来了,感觉自己的编程能力上了一个新台阶,我对程序有了自己的见解,可以自己调试程序,并且激起我学习编程的兴趣,我们专业对计算机编程要求比较高,所以对我以后好好学习,有着极大的帮助,是这次课设给了我这种心态。这是我通过这次课设的收获。3修改Gorillanode功能的实现描述(文字描述和流程图) 这个Gorillanode的信息修改可以修改编号,但个人觉得不妥的是选择修改后无法选择单个修改某个内容,只能全部修改,而且修改的编号不能与你想修改的编号相同,这是令我感到尴尬的地方。4. 删除Gorillanode功能的实现描述(文字描述和流程图) 删除功能中,首先查找到所要删除的药剂师的注册号,删除并输出该药剂师的信息。指导教师(签字): 系主任: 陈亚东 批准日期: 2017年 01月 09日(打印时删除红色字体)(1报告正文样式:各级标题,文字字体/行距严格按照示例)(2以下各个内容请结合参考任务书中的相关分析3提交:打印稿,电子文档:doc,两个程序cpp,压缩zip,命名:10290201姓名.zip)Fish管理信息系统+Fish图结构数据应用设计报告一、Fish信息管理系统1属性集及对应意义2结构体定义3修改Fish功能的实现描述(文字描述和流程图)(文字描述:先画一个链表示意图,然后,比如要修改:id=3的结点,你应该如何从L开始动作。如果是头结点呢?又该如何修改。Yi=ni=0;Sum=0;NSum=Sum+iEndi加1)4各个功能的界面贴图(每个图都要图名)增删改5画出包含有三个数据的链表示意图二、Fish图结构数据处理程序1描述你的场景主题2画图表示你的样例数据对应的邻接链表,并在上方注明结构体的各个域名;3用自己的话,描述深度遍历或广度遍历的算法思想深度优先遍历思想(采用递归方法): 访问指定顶点n; 从n的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历; 重复上述两步,直至图中所有和n有路径相通的顶点都被访问到。 广度优先遍历思想: 访问指定顶点v; 依次访问v的各个未被访问的邻接点v1, v2, , vk; 分别从v1,v2,vk出发依次访问它们未被访问的邻接点,并使“先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问。直至图中所有与顶点v有路径相通的顶点都被访问到。4广度遍历和深度遍历在存储待处理结点的数目上,哪个更多?为什么?先比之下,深度优先遍历在存储待处理节点的数目上多一些。因为,深度优先遍历一次只遍历一个与指定节点相临界的顶点,如果在递归遍历过程中出现某一个节点的所有节点均已访问,但还有没被访问过的节点,这是需要回溯到它的上一个顶点,再对比没有被访问过的顶点,从而遍历没被访问过的顶点。而广度优先遍历,一次便可把所有与指定节点的相邻接都访问,然后再访问子节点的没被访问的顶点。因此,深度优先遍历在存储待处理节点的数目上多一些。#include/大猩猩#includeusing namespace std;struct Gorillanode/定义一个名字为Gorillanode的结构体 int num;/编号float high;/身高float weight;/体重string name;/名字char sex;/性别string position;/地位string group;/ 族群名Gorillanode *next;/定义Gorillanode结构体的next指针;class Gorilla public:void add();/增加void Delete();/删除 void modify();/修改void search();/查询int statistics();/统计void display();/输出数据 Gorilla()/新申请一个链表first=new Gorillanode;first-next=NULL;Gorilla(int d,int n);/初始化空链表Gorilla();/单链表析构函数private:Gorillanode *first;/单链表头指针;Gorilla:Gorilla()/单链表析构函数,用来释放节点的存储空间Gorillanode *p;while(first!=NULL)/释放单链表节点的每一个存储空间 first=p;/暂存被释放节点p=first-next;/p指向被释放节点的下一个节点delete first;int Gorilla:statistics()Gorillanode *p; int sum=0;p=first-next;/工作指针p初始化while(p!=NULL)p=p-next;/工作指针后移sum+;cout已录入的Gorilla的数目为:sum只endl ;return 0;void Gorilla:add()/添加Gorillanode *p=new Gorillanode;/定义名字为Gorillanode的新node,工作指针为*pint num2;float high2;float weight2;string name2;char sex2;string position2;string group2;cout*输入你要增加的Gorilla信息*endl;coutnum2;coutname2;couthigh2;coutweight2;coutsex2;coutposition2;coutgroup2;p-num=num2;p-name=name2;p-high=high2;p-weight=weight2;p-sex=sex2;p-position=position2;p-group=group2;p-next=first-next;/头插法插入first-next=p; cout*信息输入成功*next;q=first;/工作指针p指向头结点cout*输入你要删除的Gorilla信息*endl;coutnum2;while(p!=NULL)/节点p存在 if(p-num=num2)/ q-next=p-next;/摘链delete p; break;else/在表头删除q=p;p=p-next; if(p=NULL) cout*你要删除的医生信息不存在*endl;else cout*信息删除成功*next;int num1;float high1;float weight1;string name1;char sex1;string position1;string group1;display();int num3,y,m;docoutnum3; while(p!=NULL)/节点p存在if(num3=p-num)doy=0; cout请输入要修改部分的序号:endl; cout1.编号 2.高度 3.重量 4.名字 5.性别 6.地位 7.种群名 change; switch(change) case 1: cout请输入新的编号:num1; p-num=num1; break; case 2: cout请输入新的身高:high1; p-high=high1; break; case 3: cout请输入新的重量:weight1; p-weight=weight1; break; case 4: cout请输入新的名字:name1; p-name=name1; break; case 5: cout请输入新的性别:sex1; p-sex=sex1; break; case 6: cout请输入新的地位:position1; p-position=position1; break; case 7: cout请输入新的种群名:group1; p-group=group1; break; default:cout输入错误!endl;cout是否重新选择? endl;cout是,请输入1;endl;cout否,请输入任意键y;while(y=1);break; p=p-next;if(p=NULL)cout查无此ID号!endl;cout是否重新输入? 是,请输入1; 否,请输入任意键m;else cout更改成功!endl;display();cout是否继续修改? 是,请输入1; 否,请输入任意键m;while(m

温馨提示

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

评论

0/150

提交评论