ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:221.91KB ,
资源ID:5896284      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5896284.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课题数据结构二叉树家谱管理系统.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课题数据结构二叉树家谱管理系统.docx

1、课题数据结构二叉树家谱管理系统数学与计算机学院课程设计说明书课 程 名 称: 数据结构与算法课程设计 课 程 代 码: 题 目: 二叉树生成家谱 年级/专业/班: 学 生 姓 名: 学 号: 开 始 时 间: 2015 年 12 月 09 日完 成 时 间: 2015 年 12 月 29 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5) 说明书(计算书、图纸、分析报告)撰写质量(45)总 分(100)指导教师签名: 年 月 日目 录 (小三黑体,居中)摘 要随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会

2、的各个领域。计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声音、图像、表格等各种各样的信息。对于信息的处理也不再是单纯的计算,而是一些如信息存储、信息检索等非数值的计算。那么,现实世界的各种数据信息怎样才能够存储到计算机的内存之中,对存入计算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和算法设计问题。为解决现实世界中某个复杂问题,总是希望设计一个高效适用的程序。这就需要解决怎样合理地组织数据、建立合适的数据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效率。“数据结构”就是在此背景下逐步形成、发展起来

3、的。 在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直至得到正确结果。所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。这属于数值计算的一类问题。而现实生活中,更多的是非数值计算问题,如手机中的通讯录,人们对它的操作主要是查找、增加、删除或者修改电话记录。再如,人们经常在互联网上查阅各种新闻,或查阅电子地图,人们可以在某城区地图上查找自己所需的街道或店铺,其操作主要是搜索和查询。下面再来分析几个典型实例,它们的主要特点是:不同实例的数据元素之间存在不同的关系;对数据信息的处理主要有插入、删除、

4、排序、检索等。关键词:网络化;计算机;对策;二叉树引 言 课程设计的目的:通过本项课程设计,培养学生独立思考、综合运用所学有关相应知识的能力,使学生巩固数据结构课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关;为了培养学生综合运用所学知识、独立分析和解决实际问题的能力,培养创意识和创新能力,使学生获得科学研究的基础训练。为后续各门计算机课程的学习和毕业设计打下坚实基础。同时,可以利用这次机会来检验自己的c/c+/数据结构水平,提高自己的写作水平,锻炼自己的动手能力。而此次课程设计的意义在于:增强自己的动手能力,熟悉和掌握二叉树各种遍历的算法,以及递归

5、在遍历二叉树中的应用,增强自己的调试程序和测试程序的能力。1 需求分析1.1任务与分析1.建立输入文件以存放最刜家谱中各成员的信息。 2.成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡) 也可附加其它信息、但不是必需的。 3.能对修改后的家谱存盘以备以后使用。 4.能从文件中读出已有的家谱,形成树状关系。 5.家谱建立好之后,以图形方式显示出来。 6.显示第n 代所有人的信息。 7.按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 8.按照出生日期查询成员名单。 9.输入两人姓名,确定其关系。 10.给某人添加孩子。 11.删除某人(若其还

6、有后代,则一并删除)。 12.修改某人信息。 13.用括号法输出家谱成员信息 1.2测试数据1 徐朝嬴 m 1938-1-20 1 彭代芳 0 此人相当的热心 0 2 3 4 5 100002 徐廷文 m 1964-8-3 2 李太群 1 此人相当有责任心 0 6 7 100003 徐素华 w 1966-4-6 2 李奉光 1 此人很好 0 100004 徐军华 m 1969-7-8 2 曲舞 1 此人很有正义感 0 100005 徐廷国 m 1972-9-2 2 木玛 1 此人心的很善良 0 10000 6 徐光勇 m 1989-1-27 3 Nomarry 2 此人很牛逼 0 100007

7、 徐光超 m 1992-9-5 3 Nomarry 2 此人亦很牛逼 0 100002 概要设计2.1 ADT描述 1.ADT Person 数据对象:D=Pj | Pj=姓名、出生日期、婚否、地址、健在否(如过世,还应有其死亡日 期),j=0,1,2, n,其中n=0 数据关系:R= 基本操作: 无。 ADT Person2.ADT FamilytreeFile 数据对象:D=Aj | Aj 属于 Person,j=1,2,3,,n 其中n=1 数据关系:D 中每个对象用换行符隔开, R=| Aj 属于D,j=1,2,3,n 其中n=1,String 属于字符串类型,为 Aj 父亲姓名(若S

8、tring=-1,Aj 无父亲,若String=Aj 的姓名,表示家谱文件结束) 基本操作: 1 打开家谱类型文件,并建立兄弟、孩子二叉树。 2 从内存中读取兄弟、孩子二叉树,并建立家谱类型文件。 ADT FamilytreeFlie3.ADT Familytree 数据对象:D=Aj | Aj 属于Person,j=1,2,3,n 其中n=0 数据关系:V=| Aj-1,Aj 属于D,j=2,3,,n 其中n=2,且Aj-1 与Aj 为祖先与 后 代关系(parent)、后代与祖先关系(child)、兄弟之间关系(sibling) 基本操作: 1 显示某人信息。 2 修改某人信息。 3 增加

9、某人孩子。 4 删除某人。 5 通过某人查找其双亲、孩子、兄弟。 ADT Familytree2.2程序模块结构2.2.1结构体定义struct People /定义结构体Peopleint num;char name20;char sex;char borndate15;int generation;char matename20;int parent;char infor100;LinkList child;;struct Node /定义结构体Nodeint a;struct Node * next;;struct LinkList /定义链表NodePoint La;;struct T

10、ree /定义树PeoplePoint Tr;int Length;int TREE_INIT_SIZE;;2.3各功能模块void InitTree(Tree &TR); /在树已定义的情况下,初始化树TR LinkList InitLinkList(void); /在什么都没有的情况下,初始化一个带头结点的链表并返回链表L void AddLinkList(LinkList p); /对带头结点的链表pl,添加一个节点为m的节点在表头void CreatFamilyTree(Tree &TR); /在什么都没有的情况下,创建一个家谱TR。并返回TRvoid PrintPeople(Peop

11、lePoint p); / 已知某节点的指针p,输出people p 的相关信息void PrintLinkList(LinkList p); /已知链表p,输出链表p中的信息int CompareNum(PeoplePoint p,int num); /已知某节点的指针p和一个编号num,比较p的num和num,如果相等返回1,否则返回0int CompareName(PeoplePoint p,char a);/已知某节点的指针p和一个姓名a,比较p的name,如果两者相等返回1,否则返回0void TraveTreePrint(Tree TR); /已知树TR,按规定输出节点信息,根据编

12、号、姓名、孩子输出void AddPeople(Tree &TR); /已知树TR,当有人出生时,添加一个节点void MarryChange(Tree TR,char name20); /已知树TR和一个人的姓名name,因为结婚需要改变节点中的配偶一栏void Open(Tree &TR);/打开保存家谱信息的文件void Save(Tree TR);/保存家谱信息到指定文件void PrintTree(Tree TR); /输出家谱中所有成员的信息3 详细设计3.1结构体定义struct People /定义结构体Peopleint num;char name20;char sex;ch

13、ar borndate15;int generation;char matename20;int parent;char infor100;LinkList child;;struct Node /定义结构体Nodeint a;struct Node * next;;struct LinkList /定义链表NodePoint La;;struct Tree /定义树PeoplePoint Tr;int Length;int TREE_INIT_SIZE;;3.2 初始化void InitTree(Tree &TR) /在树已定义的情况下,初始化树TR People peopINIT_SIZE

14、;TR.Tr=peop;TR.Length=0;TR.TREE_INIT_SIZE=INIT_SIZE;LinkList InitLinkList(void)/在什么都没有的情况下,初始化一个带头结点的链表并返回链表L LinkList L;NodePoint Head;Head=(NodePoint)malloc(sizeof(Node);Head-a=0;Head-next=NULL;L.La=Head;return (L);void CreatFamilyTree(Tree &TR) /在什么都没有的情况下,创建一个家谱TR。并返回TR LinkList lp; TR.Tr=peop;T

15、R.Length=0;TR.TREE_INIT_SIZE=INIT_SIZE;int i=0,n,j,k,c;coutn;TR.Length=n;for(i=0;in;i+)(peopi.num)=i+1;coutpeopi.name;coutpeopi.sex;coutpeopi.borndate;coutpeopi.generation;coutpeopi.matename;coutpeopi.parent;coutpeopi.infor;LinkList L;NodePoint Head;Head=(NodePoint)malloc(sizeof(Node);Head-a=0;Head-

16、next=NULL;L.La=Head;peopi.child=L; lp=peopi.child;coutk;for(j=0;jk;j+)coutc;AddLinkList(lp,c);3.3 插入操作void AddPeople(Tree &TR)/已知树TR,当有人出生时,添加一个节点int k,c,j,m;LinkList L,L1,L2;NodePoint Head;PeoplePoint p1,p2,p3;if(TR.Length=TR.TREE_INIT_SIZE)TR.Tr=(PeoplePoint)realloc(TR.Tr,(TR.TREE_INIT_SIZE+TREEIN

17、CREMENT)*LEN);if(!TR.Tr) exit(OVERFLOW);p1=peop;p2=p1+(TR.Length);p2-num=TR.Length+1;coutname);coutp2-sex;coutp2-borndate;coutp2-generation;coutmatename);coutp2-parent;coutinfor);gets(p2-infor);Head=(NodePoint)malloc(sizeof(Node);Head-a=0;Head-next=NULL;L.La=Head;p2-child=L;L1=p2-child;coutk;for(j=0

18、;jk;j+)coutc;AddLinkList(L1,c);m=p2-parent-1;p3=p1+m;L2=p3-child;AddLinkList(L2,p2-num);TR.Length=TR.Length+1;cout添加成功n;3.4 查询操作void TraveTreePrint(Tree TR)/已知树TR,按规定输出节点信息,根据编号、姓名、孩子输出PeoplePoint p;int i,j,k,Flag;char name115,name215;p=TR.Tr;printf(根据编号查找请输入1,根据姓名查找请输入2,根据孩子查找请输入3:n);scanf(%d,&i);i

19、f(i=1)printf(请输入该节点的编号:n);scanf(%d,&k);for(j=0;jTR.Length;j+)Flag=CompareNum(p+j),k);if(Flag)PrintPeople(p+j);if(i=2)printf(请输入该人的姓名:n);gets(name1);gets(name1);for(j=0;jTR.Length;j+)Flag=CompareName(p+j),name1);if(Flag)PrintPeople(p+j);if(i=3)printf(请输入其孩子的姓名:n);gets(name2);gets(name2);for(j=0;jTR.L

20、ength;j+)if(strcmp(peopj.name,name2)=0)PrintPeople(p+(peopj.parent-1);4 调试分析在调试时,遇到的几个问题如下: 1)建立树时,由于新申请结点的孩子指针、兄弟指针、及双亲指针均未赋空值。 而在以后的函数中对树迚行递归操作时均以这些指针值中的一个或几个是否为空 作为递归结束条件。从而导致调用这些函数时出现系统保护异常(使用了不安全 的指针)。 2)刚开始初除结点时,只考虑到初除其本身结点的情况,而初除其孩子结点的 情况未考虑到,故在初除某些结点时使树出现了“断链”现象。故在程序代码中 对初除某一结点迚行操作时,首先要刞断此结点

21、是否有孩子及兄弟,然后迚行相 应操作。本程序的编译环境为Microsoft Visual C+ 6.0 ,在Windows 8下编译通过。5 用户使用说明用户在打开软件后即可使用本软件,傻瓜式操作,界面简单易懂,用户在使用本软件过程中若出现隐私泄露或受到任何损失,与作者无关。6 测试结果部分测试结果:图1:初始状态图2:创建家谱图3:添加成员图4:添加一个孩子图5:修改成员的婚姻状态图6:输出所有家谱中的成员图7:从文件读取并输出结 论通过一个学期以来的数据结构的学习,加深了我对C+程序设计语言的认识,使得我对程序的开发过程有了更深的认识,这一次的数据结构课程设计是对我学习的检验,在这次实验中

22、,我利用了各种开发工具以及建模工具,还在图书馆查过不少资料,最终解决了一个个难题。通过这次的实验,我得出了一个结论,任何一门语言的学习都是空洞的,只有在自己实验验证后才能让自己学到真正的知识。以上便是我对数据结构课程设计这门课的总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进! 附 录源码文件如下: 参考文献 1杨宝刚.开展企业管理信息化工作的步骤J.企业管理.2002.(11).12152Islamabad. Software tools for forgery detectionJ. Business line.2001. (5). 2932 3数据结构(C 语言版)清华大学出版社严蔚敏、吴伟民编著 4C 至Visual C+程序设计语言科学出版社蔡常丰、林小苹编著 5Microsoft Visual C+ 6.0 高手速成兵器工业出版社步行者工作室编著 6C+程序设计清华大学出版社谭浩强编著

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1