二叉树家谱

2019-04-04 23:01

《数据结构》 课程实训报告

题 目:家谱树 完 成 人: 专业班级: 学 号: 指导教师:

年 月 日

- - 1 - -

1. 题目与要求

1.1 问题提出

本人计划编写一个家谱管理系统,主要用来管理家族成员的基本信息。

1.2 本系统涉及的知识点

结构体,数组,循环,函数,分支,指针

1.3 功能要求

1、确定整个程序的功能模块。实现程序的主界面,要对主界面的功能选择

输入进行容错处理。 2、实现单个结点信息的录入。 3、对录入日期信息进行合法性检验。

4、采用改变字体颜色的方式突出显示主界面的功能项。 5、计算从出生日期到死亡日期的实际天数

6、若家谱树为空,则新建家谱树。实现成员节点的添加。基本功能中可以 强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。 7、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先, 或者将新添加的节点作为某个现有成员的孩子。

8、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相 应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 9、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。 10、将家谱树保存到二进制文件。注意,不能保存空白节点。 11、从文件读入家谱信息,重建孩子兄弟二叉树形式的家谱。

12.从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进 行快速排序。

13、按姓名查询家谱成员并显示该成员的各项信息。 14、给出某一成员的姓名,删除该成员和该成员的所有子孙。

15、成员信息的修改。信息修改时要给出选择界面让用户选择需要修改的信 息项。基本功能中可以限定不容许修改父亲姓名和本人姓名。对日期信 息进行修改时要进行检验。

16、实现层次递进的方式显示整个家谱,显示结果应该体现家谱树的结构。

17、按各种关键字进行查询,要求给出关键字选择界面,并显示符合查询条 件的节点信息。

18、信息统计基本要求包括:平均身高,平均寿命,男女成员各多少,平均 家庭人口数目(假定每个成员构成一个家庭,该家庭的家庭成员是指成

- - 2 - -

员本人和他的孩子,即家庭人口数=孩子数+1)。要给出统计项的选择界 面.

19、查询某一成员的所有直系亲属。 20、给出某一成员的所有嫡系祖先。

21、确定两人关系。若两人辈分不等,则应指出甲是乙的多少代长辈(晚辈), 甲是否是乙的直系长辈(晚辈),若辈分相同,则应指出是亲兄弟还是多 少代的堂兄弟。

2. 功能设计

2.1 算法设计

本程序需要实现的功能要求: 1.利用switch设计如下图的主菜单

请输入选项编号(1~6)

1—新建家谱 2—成员添加 3—查找成员 4—删除成员

5—修改成员信息

6—显示家谱

7—统计操作

8—从文件读取家 谱 9—保存家谱 0—退出

图1树状家谱管理系统主菜单

选择1后,调用CreateTree函数:创建个人信息作为整个家族的祖先

- - 3 - -

选择2后,调用Add函数,判断是否存在家谱,若不存在家谱则直接创建个人信息作为整个家族的祖先,若存在则进入添加成员菜单。

.

1—增添祖先 2—增添新成员 图2添加成员菜单

(1)选择1后,首先调用CreateTree(BinTree &T,BinTree F)函数:创建个人

信息作为整个家族的祖先

最后,调用AddDegress(BinTree &T)函数:修改所有成员辈分 (2)选择2后,首先调用Value(BinTree T,char Name[len])查找到添加成员

的父亲

然后调用CreateTree(BinTree &T,BinTree F)函数:创建个人信息作为查

找到的父亲的孩子 选择3后,进入查询菜单。

1--按姓名查找 2--按出生日期查找 3--按是否健在及死亡日期查找 4--按出生地址查找 5--按家庭住址查找 6--按简历查找 7—按父亲姓名查找 8—按辈分查找 9—按身高查找 10-按年龄查找 11-查询直系亲属 12-查询嫡系祖先 13-查询两人之间的关系 - - 4 - -

14-查询某人生存天数 0-返回上一级 图3查询信息菜单

(1)首先,调用InquireName(BinTree T)函数:根据输入的姓名以及调用Value

函数定位成员节点

然后,调用Put(BinTree T)函数:显示该成员的个人信息

(2)首先,InquireBirthday(BinTree T)函数:根据输入的出生日期以及

ValueBirthday(BinTree T,Date Birth)函数定位成员节点

然后,调用Put(BinTree T)函数:显示所有符合条件成员的个人信息 (3)首先,调用InquireSW(BinTree T)函数:输入查找人是否健在

若健在,调用ValueSW(BinTree T)函数,输出所有符合条件的成员的个人

信息。

若死亡,调用ValueDie(BinTree T,Date Die)函数,输出所有符合条件的

成员的个人信息

(4)首先,调用InquireBrothadd(BinTree T)函数:根据输入的出生地址以及

ValueBrothadd(BinTree T,char Birthadd[len])函数定位符合条件的成员

然后,调用Put(BinTree T)函数:输出所有符合条件的成员的信息 (5)首先,调用InquireAddress(BinTree T)函数:根据输入的家庭住址以及

ValueAddress(BinTree T,char Vocation[len])函数定位成员节点 最后,调用Put(BinTree T)函数:显示所有符合条件的成员的个人信息 (6)首先,调用InquireVocation(BinTree T)函数:根据输入的职业以及

ValueVocation(BinTree T,char Father[len])函数定位成员节点 最后,调用Put(BinTree T)函数:显示所有符合条件的成员的个人信息 (7)首先,调用InquireFather(BinTree T)函数:根据输入的父亲姓名以及

ValueFather(BinTree T,char Father[len])函数定位

最后,调用Put(BinTree T)函数:显示所有符合条件的成员的个人信息 (8)首先,InquireDegress(BinTree T)函数:根据输入的辈分以及 ValueDegress(BinTree T,int Degress)函数定位成员

然后,调用Put(BinTree T)函数:显示所有符合条件的成员的个人信息 (9)首先,调用InquireHeight(BinTree T)函数:根据输入的身高以及

ValueHeight定位成员节点

- - 5 - -


二叉树家谱.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:1.第二代支付系统报文交换标准(概述) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: