int SetNewName(Node *root,string NAme,string NewName); //更改姓名 (3) 实现方法:创建家谱和成员改名主要通过递归调用;增加成员和删除成员主要通过栈的非递归调用。 (4) 实现结果:
5
3、 查询模块 (1) 查询成员详细信息、查询成员的孩子以及孩子的详细信息 (2) 主要函数: int Message(Node *root,string Name); //显示该成员的基本信息 int FindChild(Node *root,string NAme); //显示孩子信息 (3) 实现方法:通过递归调用,找到成员,输出相应的信息 (4) 实现结果: 4、 显示模块 (1) 前序、中序、后序遍历家谱 (2) 主要函数: void PreOrder(Node *root); //前序递归遍历输出家谱 void InOrder(Node *root); //中序递归遍历输出家谱 void PostOrder(Node *root); //后序递归遍历输出家谱
6
(3) 实现方法:递归遍历 (4) 实现结果: 5、 文件模块 (1) 保存到文件、从文件读取 (2) 主要函数: void SaveToFile(Node *root); //保存到文件 void FileToFamilyTree( Node *root) ; //从文件中读取 (3) 实现方法:文件流 (4) 实现结果: 7
数据结构实现: 1、 生日结构体 struct BirthDay { int year; int month; int day; friend istream& operator>>(istream &is,BirthDay &b); friend ostream& operator<<(ostream &os,const BirthDay &b); }; 2、 信息结构体(家族成员的基本信息) struct Information { string name; //姓名 string birthPlace; //出生地 BirthDay birthDay; //生日 string sex; //性别 string education; //学历 string job; //工作 string father; //父亲 string spouse; //配偶
8
char life; //是否健在 }; 3、 二叉树结点结构体 struct Node { Information data; //个人信息 Node* child; //第一个孩子 Node* brother; //兄弟 }; 4、 家谱类(二叉树结构、左孩子,右兄弟) class FamilyTree { private: Node* root; Node* Creat( ); //构造函数调用 void Release(Node *root); //析构函数调用 static int Numberofpeople; //计算总人数,NumberOfPeople()调用 static int LifePeopele; //计算健在人数,LifeNum()调用 public:
FamilyTree(); //构造函数,初始化一棵树,其前序序列由键盘输入 9