/*采用树型结构实现如下系统功能:
1)输入文件以存放最初家谱中各成员的信息。 成员的信息中均应包含以下内容:
姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。
2)实现数据的存盘和读盘。
3)以图形方式显示家谱。
4)显示第n代所有人的信息。
5)按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
6)按照出生日期查询成员名单。
7)输入两人姓名,确定其关系。
8)某成员添加孩子。
9)删除某成员(若其还有后代,则一并删除)。
10)修改某成员信息。
11)按出生日期对家谱中所有人排序。
12)打开一家谱时,提示当天生日的健在成员。
测试要求:
1)建立至少10个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。
2)对界面的要求是:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
注:有关文件的操作我做的不好,另外图形化界面做的不太好,增加孩子的时候空格不好控制,这是CodeBlocks的硬伤
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<fstream>
#define MAXSIZE 100
using namespace std;
typedef struct Infomation{
char name[20];
char birth[20];
int wedding;
char add[20];
int health;
char death_date[20];
}Info;
typedef struct bnode{
Info person;
struct bnode *lchild,*rchild;
}BNode,*BiTree;
typedef struct{ //循环队列的定义
BiTree queue[MAXSIZE];
int front,rear;
}Queue;
void InitQ(Queue &Q) //初始化
{
Q.front=Q.rear=0;
}
void EnQueue(Queue &Q,BiTree e) //入队
{
Q.rear=(Q.rear+1)%MAXSIZE;
Q.queue[Q.rear]=e;
}
void DeQueue(Queue &Q,BiTree &e) //出队
{
Q.front=(Q.front+1)%MAXSIZE;
e=Q.queue[Q.front];
}
int QEmpty(Queue Q) //判队空
{
return Q.front==Q.rear;
}
int QFull(Queue Q) //判队满
{
if((Q.rear+1)%MAXSIZE==Q.front)
return 1;
return 0;
}
void new_left(BiTree p,Info info)
{
BiTree q=(BiTree)malloc(sizeof(BNode));
q->person=info;
q->lchild=q->rchild=NULL;
p->lchild=q;
}
void new_right(BiTree p,Info info)
{
BiTree q=(BiTree)malloc(sizeof(BNode));
q->person=info;
q->lchild=q->rchild=NULL;
p->rchild=q;
}
BiTree create()
{
struct Infomation human[11]={
{"John","19000511",1,"nefu",0,"19800401"},
{"Jack","19200721",1,"hit",0,"19900402"},
{"Mary","19230526",1,"mit",0,"19981221"},
{"Tom","19440501",1,"bit",0,"20080419"},
{"Lily","19480711",0,"nefu",0,"20010201"},
{"Ben","19480505",1,"hit",0,"20070401"},
{"June","19490541",1,"baidu",0,"20141111"},
{"Mark","19600430",0,"nefu",1,"I am alive!"},
{"Lucy","19760301",0,"jingdong",1,"I am alive!"},
{"Steven","19770519",1,"alibaba",1,"I am alive!"},
{"Ann","20000101",0,"nefu",1,"I am alive!"}};
BiTree bt;
bt=(BiTree)malloc(sizeof(BNode));
bt->person=human[0];
bt->lchild=bt->rchild=NULL;
new_left(bt,human[1]);
new_right(bt,human[2]);
new_left(bt->lchild,human[3]);
new_right(bt->lchild,human[4]);
new_left(bt->rchild,human[5]);
new_right(bt->rchild,human[6]);
new_left(bt->lchild->lchild,human[7]);
new_right(bt->lchild->lchild,human[8]);
new_left(bt->rchild->rchild,human[9]);
new_right(bt->rchild->rchild->lchild,human[10]);
return bt;
}
void output(BiTree p)//输出某结点的信息
{
printf("%-7s%-7s%7d%12s%10d%17s\n",p->person.name,p->person.birth,p->person.wedding,p->pe