最后,调用Put(BinTree T)函数:显示所有符合条件的成员的个人信息 (10)首先,调用InquireAge(BinTree T)函数:根据输入的年龄以及
ValueAge(BinTree T,int Age)函数定位成员
最后,调用Put(BinTree T)函数:显示所有符合条件的成员的个人信息 (11)首先,调用InquireZhixi(BinTree T)函数:根据输入的查询人姓名以及
ValueZhixi(BinTree T,char Name[len])函数定位成员节点 然后,利用结构体指针*parent、*child查找到直系亲属
最后,调用Put函数:显示指定成员的个人信息以及直系亲属的信息 (12)首先,调用InquireRoot(BinTree T)函数:根据输入的查询人姓名以及
Value(BinTree T,char Name[len])函数定位成员节点 然后,利用结构体指针*parent查找到嫡系祖先
最后,调用Put(BinTree T)函数:显示指定成员的个人信息以及嫡系祖先
的信息
(13)首先,调用RelationShip(BinTree T)函数:根据输入的姓名确定两人的
关系
(14)首先,调用Inquireday(BinTree T)函数:根据输入的查询人的姓名以及
Value(BinTree T,char Name[len])函数定位成员 然后,调用Count_day(BinTree T)函数:计算出生存天数 最后,显示指定成员的生存天数 (0)破坏循环条件:c=0; 删除成员 查询新建成员 添加 成员 家谱 出生姓家庭出生健 在 地址地址名日期及死 查找 查找 查查找 亡日 找 期查找 主菜单 修改信息 显示家谱 统计操作 读取家谱 保存家谱 退出 简历查找 父亲姓名查找 辈分查找 身高查找 年查询龄直系查亲属 找 查询嫡系祖先 成员关系查询 查询生存天数 返回上一级 图4 查询信息模块图
- - 6 - -
选择4后,调用DeleteTree(BinTree &T)函数,根据输入的删除人的姓名以及
Value(BinTree T,char Name[len])函数定位成员 然后直接删除该成员以及该成员的后代
选择5后,进入修改菜单。
1—修改姓名
2—修改出生日期
图5 修改信息菜单
(1)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员姓名,最后修改他所有孩子的父亲姓名。 (2)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员出生日期
(3)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员是否健在,若死亡则直接修改死亡日期
(4)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员出生地址
(5)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员家庭住址
(6)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员职业
(7)根据输入的姓名以及调用Value(BinTree T,char Name[len])函数定位成
员,然后直接修改成员简历
3—修改成员是否健在及及死 亡日期 4—修改出生地址 5—修改家庭住址 6—修改职业 7—修改简历 0-返回上一级 - - 7 - -
(0)破坏循环条件:c=0;
新建成员 查询删除家谱 添加 成员 成员 修改 姓名 修改出生日期 主菜单 修改信息 显示家谱 统计操作 读取家谱 保存家谱 退出 修改是否健在及死亡日期 修改出生日期 修改家庭住址 修改职业 修改简历 返回上一菜单 图6 修改信息模块图
选择6后,调用OutPutFamily(BinTree T)函数:按线序遍历显示整个家谱树。 选择7后,调用MainMenueTongji(BinTree T)函数,进入信息统计菜单,并且 计算出平均年龄、平均身高、男女人数、家庭平均人口。
1—平均年龄 2—平均身高 3—性别报告 4—平均家庭人口 5—返回上一级 图7 统计操作菜单
(1) 直接输出平均年龄 (2) 直接输出平均身高 (3) 直接输出男女人数 (4) 直接输出平均家庭人口数
- - 8 - -
(5) 破坏菜单循环条件:C=0.
选择8后,调用ReadTree(BinTree &T)函数,利用队列,采用层次遍历读取文
件中的成员信息。
选择9后,调用BaoCun(BinTree T)函数,利用队列,采用层次遍历的方式把家
谱保存为二进制文件。
选择0后,破坏循环条件:c=0,退出程序
2.2 部分模块流程图
输入出生日期 N 出生日期 是否合法 Y 保存出生日 是否健在 输入死亡日期 N Y N 死亡日期合法且 在出生日期之后 Y 保存 图8 日期信息的合法性检验流程图
- - 9 - -
输入成员信息
Y 父亲是否有添加兄弟模块
第一个孩子
N 将新输入的节点作为父 亲节点的第一 个 孩子
完成
图9添加成员孩子模块流程图
输入的成员出生比第一个孩子早?N阴影部分的实际是链表插入Y将新输入的节点作为父节点的第一个孩子,原来的第一孩子作为新输入节点的兄弟C[i]保存孩子节点,i=1时指针指向第一个孩子新输入节点的兄弟指针指向C[i-1];C[i]的兄弟指针指向新输入节点;新输入节点的出生日期比C[i]晚YC[i+1]指针指向C[i]的brother;N完成
图10添加成员兄弟模块流程图
- - 10 - -