数据结构(二叉树)家谱管理系统 下载本文

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,当有人出生时,添加一个节点