void MarryChange(Tree TR,char name[20]); //已知树TR和一个人的姓名name,因为结婚需要改变节点中的配偶一栏
void Open(Tree &TR);//打开保存家谱信息的文件 void Save(Tree TR);//保存家谱信息到指定文件
void PrintTree(Tree TR); //输出家谱中所有成员的信息
3 详细设计
3.1结构体定义
struct People //{
int num;
char name[20]; char sex;
char borndate[15]; int generation; char matename[20]; int parent;
char infor[100]; LinkList child; };
struct Node //{
int a;
struct Node * next; };
struct LinkList //{
NodePoint La; };
struct Tree //{
PeoplePoint Tr; int Length;
int TREE_INIT_SIZE; };
定义结构体People 定义结构体Node 定义链表 定义树 3.2 初始化
void InitTree(Tree &TR) //在树已定义的情况下,初始化树TR {
People peop[INIT_SIZE]; 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; TR.Length=0;
TR.TREE_INIT_SIZE=INIT_SIZE; int i=0,n,j,k,c;
cout<<\请输入家谱中一共有多少人\\n\
cin>>n; TR.Length=n; for(i=0;i (peop[i].num)=i+1; cout<<\请输入该人的姓名:\\n\cin>>peop[i].name; cout<<\请输入该人的性别:\\n\cin>>peop[i].sex; cout<<\请输入该人的出生日期:\\n\cin>>peop[i].borndate; cout<<\请输入该人是第几代人:\\n\cin>>peop[i].generation; cout<<\请输入其配偶的姓名,如无则输入Nomarry\\n\cin>>peop[i].matename; cout<<\请输入其双亲的编号:\\n\cin>>peop[i].parent; cout<<\请输入该人相关的备注信息:\\n\cin>>peop[i].infor; LinkList L; NodePoint Head; Head=(NodePoint)malloc(sizeof(Node)); Head->a=0; Head->next=NULL; L.La=Head; peop[i].child=L; lp=peop[i].child; cout<<\请输入其孩子的个数:\\n\cin>>k; for(j=0;j cout<<\请输入孩子的编号:\\n\cin>>c; AddLinkList(lp,c); } } } 3.3 插入操作 开始 输入成员信 息 判断格式是否正确 是 AddLinkLi st(L1,c); 结束 void AddPeople(Tree &TR) //已知树TR,当有人出生时,添加一个节点 否