二叉树的应用:利用C语言编写简单的家谱管理系统

/*采用树型结构实现如下系统功能:
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
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值