1、 课 程 设 计 报 告课程设计名称:数据结构课程设计 系 : 三系 学 生 姓 名 : 朱强 班 级: 13软件 学 号: 20130311227 成 绩: 指 导 教 师: 刘杰 开 课 时 间:2014-2015学年一学期设计题目一:家谱的实现与设计一、 实习目的 通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。二、 问题描述家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下:(1)家谱祖先数据的录入(树的根结点)。(2)
2、家庭成员的添加:即添加某一人的儿女,儿女的数目由控制台端给出,然后输入相应的儿女姓名(此处儿女的姓名不能重名)。(3)家庭成员的修改:可以修改某一成员的姓名。(4)员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。(5)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。三、 需求分析 该程序所做的工作是对家族成员的的管理,为家族成员对各代成员的姓名,性别及子女情况的记录、查询提供方便。此程序规定: 1.在姓名录入时,姓名为10个字母以内的字符串;性别以M/F表示; 2.程序的输出信息主要为:输出家族成员在家族中的辈分(第几代),并能查询此
3、成员的所有子女及这一辈的所有成员。3.程序的功能主要包括:家谱祖先数据的录入、家庭成员的添加、家庭成员的修改、员的查询、家庭成员的删除;四、 概要设计系统用到的数据有:char nameMAX; char sex; /int generation;1)typedef struct node /定义data存储结构2)typedef struct ft /创建结构体3)ft *search(ft *p,char ch) / 搜索指针函数4)ft *parent(ft *p,ft *q,int *flag) /通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子 5)int
4、generation(ft *p,char ch) / 获得搜索到的成员的代目的返回值6)void saves(ft *p,char b,char c,int d) /建立家谱孩子结点 创建结点并对l赋值 保存7)void InitTree() /初始化8)void Add() /添加9)void Search() /查询10)void Change() /修改11)void Delete() /删除12)int main() /主函数各程序模块之间的调用关系:主函数12)可以调用7)至11)。五、 详细设计#include #include #include #include #define
5、 MAX 10 typedef struct node /定义data存储结构char nameMAX; /姓名char sex; /性别int generation;/代目node;typedef struct ft /创建结构体struct node l; /家谱中直系家属struct ft *lchild;/用来指向兄弟struct ft *rchild;/用来指向孩子ft;ft *root; /root是结构体ft的指针ft *search(ft *p,char ch) / 搜索指针函数ft *q;if(p=NULL) return NULL;/没有家谱,头指针下为空if(strcmp
6、(p-l.name,ch)=0)return p;/家谱不为空,头指针下有这个人if(p-lchild)q=search(p-lchild,ch);/在兄弟中找if(q) return q;/找到if(p-rchild)q=search(p-rchild,ch); /在孩子中找if(q!=NULL) return q; return NULL;/没有找到ft *parent(ft *p,ft *q,int *flag) /通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子 if(p=NULL)return NULL; /没有家谱,头指针下为空if(p-rchild=NU
7、LL)*flag=0;return NULL;elseif(p-lchild=q)*flag=1;return p;else if(p-rchild=q)*flag=-1;return p;elseif(p-lchild!=NULL)parent(p-lchild,q,*&flag);if(p-rchild!=NULL)parent(p-rchild,q,*&flag);int generation(ft *p,char ch) / 获得搜索到的成员的代目的返回值ft *q;if(p=NULL) return NULL;if(strcmpi(p-l.name,ch)=0) return p-l
8、.generation; /家谱不为空,头指针下有这个人if(p-lchild)q=search(p-lchild,ch); /在兄弟中找if(q) return q-l.generation; /找到if(p-rchild)q=search(p-rchild,ch); /在孩子中找if(q!=NULL) return q-l.generation;return NULL;void saves(ft *p,char b,char c,int d) /建立家谱孩子结点 创建结点并对l赋值 保存 for(int i=0;il.namei=bi; p-l.sex=c;p-l.generation=d
9、;void disp(ft *n) /搜索到数据的输出ft *t=NULL;printf(此人姓名:%s 性别%c 为第%d代n,n-l.name,n-l.sex,n-l.generation); printf(n);printf(此人的子女:); /子女输出if(n-rchild=NULL)printf(此人无子女!);else if(n-rchild-lchild=NULL)printf(姓名:%s 性别:%ct,n-rchild-l.name,n-rchild-l.sex); else printf(姓名:%s 性别:%ct,n-rchild-l.name,n-rchild-l.sex)
10、; t=n-rchild-lchild; while(t!=NULL) printf(姓名:%s 性别:%ct,t-l.name,t-l.sex); t=t-lchild; printf(n); printf(n); printf(此人的同辈成员:); /同辈输出if(n-lchild=NULL)printf(此人无同辈成员!);else if(n-lchild-lchild=NULL)printf(姓名:%s 性别:%ct,n-lchild-l.name,n-lchild-l.sex); else printf(姓名:%s 性别:%ct,n-lchild-l.name,n-lchild-l.
11、sex); t=n-lchild-lchild; while(t!=NULL) printf(姓名:%s 性别:%ct,t-l.name,t-l.sex); t=t-lchild; printf(n);void InitTree() /初始化char bMAX,c;int a;printf( 请输入始祖的姓名 性别:n); printf(输入姓名(不超过10个字符)n);printf(性别:M/F(男/女) n);printf(格式:XX M(姓名为XX性别男)n);free(root); /释放root (ft) 空间root=(ft *)malloc(sizeof(ft); / 创建一个f
12、t结构体大小的空间 然后强制转换为ft *类型的指针 然后赋值给root ,这时 root指向一个struct dictree结构体大小的新空间 scanf(%s %c,&b,&c);a=1; /输入姓名,性别root-rchild=NULL; /清空左右孩子root-lchild=NULL; saves(root,b,c,a); /存入结构printf(家谱重构成功!n);void Manu()printf( *n);printf( * 请选择对家谱的操作: *n);printf( * 0.退出 *n);printf( * 1.添加 *n);printf( * 2.查找 *n);printf
13、( * 3.修改 *n);printf( * 4.删除 *n);printf( * 5.重构 *n);printf( *n);void Add() /添加ft *n,*m,*t=NULL; char bMAX,c,dMAX;int i;printf(请输入要添加子女的上一辈的姓名:n); /判断是否有重名scanf(%s,&d);n=search(root,d);int a=generation(root,d);while(n=NULL)printf(此人不在家谱内,请重新输入姓名:n);scanf(%s,&d);n=search(root,d); /孩子信息添加if(n-rchild=NUL
14、L) printf(孩子姓名与性别输入:n);scanf(%s %c,&b,&c);a+;m=search(root,b);if(m!=NULL)printf(出现重名,添加失败!n);else n-rchild=(ft *)malloc(sizeof(ft); n-rchild-lchild=NULL;n-rchild-rchild=NULL;saves(n-rchild,b,c,a); printf(添加成功!n);elsen=n-rchild;while(n-lchild!=NULL)n=n-lchild;printf(孩子姓名与性别输入:n);scanf(%s %c,&b,&c);a+
15、;m=search(root,b);if(m!=NULL) printf(出现重名,添加失败!n);else t=(ft *)malloc(sizeof(ft);saves(t,b,c,a);t-lchild=NULL;t-rchild=NULL;n-lchild=t; printf(添加成功!n); void Search() /查询ft *n;char dMAX;printf(输入姓名,查找相关信息:n);scanf(%s,&d);n=search(root,d);while(n=NULL)printf(此人不存在,请再次输入:n);scanf(%s,&d);n=search(root,d
16、);disp(n);void Change() /修改char aMAX,rMAX,c;ft *n;printf(请输入要修改人的姓名:);scanf(%s,&a);n=search(root,a);while(n=NULL)printf(此人不存在,请重新输入姓名:n); scanf(%s,&a);n=search(root,a);printf(此人存在,请输入新信息:);scanf(%s %c,&r,&c);for(int i=0;il.namei=ri;n-l.sex=c;printf(修改成功!n);void Delete() /删除ft *n,*m;int flag;char dMA
17、X,aMAX;printf(请输入要删除人的姓名:);scanf(%s,a);n=search(root,a);while(n=NULL)printf(此人不存在,请重新输入姓名:n);scanf(%s,&a);n=search(root,a); printf(n); printf(此人已找到!n); printf(n);m=parent(root,n,&flag);if(flag0)m-lchild=n-lchild; printf(删除成功!n);else if(flagrchild=n-lchild; printf(删除成功!n);else if (flag = 0)root-l.gen
18、eration = NULL;root-l.sex = NULL;strcpy(root-l.name, );printf(删除成功!n);int main()system(color 5a);InitTree();for(;)system(pause);system(cls);Manu();int choice; scanf(%d,&choice);switch(choice)case 0:exit(0); break;/退出case 1:Add(); break;/添加case 2:Search(); break;/查找case 3:Change(); break;/修改case 4:De
19、lete(); break;/删除case 5:InitTree(); break;/初始化return 0;六、 测试分析建立一个家谱,输入第一代人的姓名与性别以上为,在第一代aa下添加子女:bb、cc、dd,在第二代bb下添加子女ee、ff,在cc下添加子女gg修改bb为hh,修改gg为ii,查找一下,发现已修改成功删除ee、hh,查找一下,aa子女hh、bb子女ee本身及其子代已被删除重构家谱,子女信息消除七、 使用说明 首先运行程序,包括六个选项:0.退出家谱系统. 1.家族成员的添加 2. 家族成员的查找3.家族人员姓名及性别修改4.删除家族成员信息. 5.重新建立新的家谱图 然后可
20、以根据不同的需要选择不同的选项进行操作最后退出程序。八、 运行程序过程中产生的问题及采取的措施在调试时,遇到的几个问题如下:(1)建立树时,由于新申请结点的孩子指针、兄弟指针、及双亲指针均未赋空值。而在以后的函数中对树进行递归操作时均以这些指针值中的一个或几个是否为空作为递归结束条件。从而导致调用这些函数时出现系统保护异常(使用了不安全的指针)。(2)刚开始删除结点时,只考虑到删除其本身结点的情况,而删除其孩子结点的情况未考虑到,故在删除某些结点时使树出现了“断链”现象。故在程序代码中对删除某一结点进行操作时,首先要判断此结点是否有孩子及兄弟,然后进行相应操作。(3)刚开始进行程序概要设计时,
21、曾考虑到用控制台下的文本方式作为程序界面,实际操作后发现并不理想。一方面字符形式的界面友好性较差,另一方面显示整个家谱树的信息时不方便。故考虑用VC+中MFC 类自带的树型控件显示家谱层次,而用列表控件显示家谱中的信息。用后效果不错。九、 总结和展望转眼课程设计已经结束,从选择任务到上网查找资料,到源代码的完成,再到真正的代码运行出来,我对数据结构课程设计有了更深的了解、对以前学过的知识进行了巩固和提高。数据结构是计算机程序设计的重要理论技术基础。这次课程设计运用C语言作为描述语言,对二叉树和查找进行描述,这次任务提高了我们对实际问题的解决能力,即运用所学知识对问题进行分析:了解问题的基本要求
22、,怎样将实际问题转化成学科问题的输入输出,要运用到什么知识来存储信息。虽然这次的课程设计有点困难,在网上借鉴了部分代码的情况下做的还是不够完美,有很多的基本算法思想还不是很理解,但是我没有放弃,让我学会怎样在遇到困难的时候去解决问题,去坚持。同时也让我感受到了数据结构的乐趣,坚定了我学习数据结构的决心。通过这次课程设计,体会很深刻,将一直以来学到的东西都运用到实际上来,学以致用,对所学知识有了更深刻的理解,同时还发现了许多平时在书本上没有遇见过的问题,促进了自己对知识的渴望,遇见了问题,就希望能够通过查找课外书来解决它们。刚接触题目的时候,自己就觉得程序很难,但到了自己真正开始编程的时候却发现
23、比想象中更难,很多细节的问题没有预想到,很多关系的处理想得过于简单,以至于实施起来遇到了很大的困难,花了大量的时间。同时还有一个比较深刻的体会就是要尽量多在源码上作注释,以前编一些功能简单的程序,总能很清楚每个函数和每个变量的作用,但到了做这个课程设计,由于分开了各个功能板块去实现,很多时候是做了后面就忘了前面,后来意识到这个问题,便开始在编程时加入注释,而且是越详细越好,这样做了以后,很多时候需要查看自己原来写的源代码,也能够很方便地了解了,跟上了思路,也方便以后的维护。关于这个程序的缺点方面,由于自己花的时间不是很多,再加上知识有限,编写出来的界面不够友好,在功能上还是有不完善的地方,譬如
24、说各项数据的统计还没有弄,数据的存储还不够理想等等。 总的来说,通过这次课程设计,收获还是挺多的,也发现了不少的问题,并给自己以后的学习指引了方向,知道自己缺少哪方面的知识,需要补充哪些知识等等。自己将会以这次作业为契机,看更多编程方面的书籍,不断充实自己的知识库。参考文献数据结构(C 语言版)清华大学出版社严蔚敏、吴伟民编著Primer Plus(第五版中文版)人民邮电出版社出版社Stephen Prata编著数据结构算法实现及解析西安电子科技大学出版社高一凡编著数据结构教程(第四版)清华大学出版社李春葆编著1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究2. 基于单片机的嵌入
25、式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器7. 单片机控制的二级倒立摆系统的研究8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发
26、13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO,2激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系
27、统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制32. 基于单片机系统的多功能温度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38
28、. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 46. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单
29、片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54. 基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱
30、M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压器油色谱在线监测技术研究 66. 基于单片机的膛壁温度报警系统设计 67. 基于AVR单片机的低压无功补偿控制器的设计 68. 基于单片机船舶电力推进电机监测系统 69. 基于单片机网络的振动信号的采集系统 70. 基于单片机的大容量数据存储技术的应用研究 71. 基于单片机的叠图机研究与教学方法实践 72. 基于单片机嵌入式Web服务器技术的研究及实现 73. 基于AT89S52单片机的通用数据采集系统 74. 基于单片机的多道脉冲幅度分析仪研究 75. 机器人旋转电弧传感角焊缝跟踪单片机控制系统 76. 基
31、于单片机的控制系统在PLC虚拟教学实验中的应用研究77. 基于单片机系统的网络通信研究与应用 78. 基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究79. 基于单片机的模糊控制器在工业电阻炉上的应用研究 80. 基于双单片机冲床数控系统的研究与开发 81. 基于Cygnal单片机的C/OS-的研究82. 基于单片机的一体化智能差示扫描量热仪系统研究 83. 基于TCP/IP协议的单片机与Internet互联的研究与实现 84. 变频调速液压电梯单片机控制器的研究 85. 基于单片机-免疫计数器自动换样功能的研究与实现 86. 基于单片机的倒立摆控制系统设计与实现 87. 单片机嵌
32、入式以太网防盗报警系统 88. 基于51单片机的嵌入式Internet系统的设计与实现 89. 单片机监测系统在挤压机上的应用 90. MSP430单片机在智能水表系统上的研究与应用 91. 基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用92. 单片机在高楼恒压供水系统中的应用 93. 基于ATmega16单片机的流量控制器的开发 94. 基于MSP430单片机的远程抄表系统及智能网络水表的设计95. 基于MSP430单片机具有数据存储与回放功能的嵌入式电子血压计的设计 96. 基于单片机的氨分解率检测系统的研究与开发 97. 锅炉的单片机控制系统 98. 基于单片机控制的电磁振动式播
33、种控制系统的设计 99. 基于单片机技术的WDR-01型聚氨酯导热系数测试仪的研制 100. 一种RISC结构8位单片机的设计与实现 101. 基于单片机的公寓用电智能管理系统设计 102. 基于单片机的温度测控系统在温室大棚中的设计与实现103. 基于MSP430单片机的数字化超声电源的研制 104. 基于ADC841单片机的防爆软起动综合控制器的研究105. 基于单片机控制的井下低爆综合保护系统的设计 106. 基于单片机的空调器故障诊断系统的设计研究 107. 单片机实现的寻呼机编码器 108. 单片机实现的鲁棒MRACS及其在液压系统中的应用研究 109. 自适应控制的单片机实现方法及
34、基上隅角瓦斯积聚处理中的应用研究110. 基于单片机的锅炉智能控制器的设计与研究 111. 超精密机床床身隔振的单片机主动控制 112. PIC单片机在空调中的应用 113. 单片机控制力矩加载控制系统的研究 项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文,优秀毕业论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机论文,基于单片机论文,毕业论文终稿,毕业论文初稿,本文档支持完整下载,支持任意编辑!本文档全网独一无二,放心使用,下载这篇文档,定会成功!
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100