2024年6月2日发(作者:)

家谱管理系统

一一

C语言(数据结构)

目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关

系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生

重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成

家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。

排答疑和辅导。

完整代码:

#include

#include

#include

intMATEFLAG=0;//是否入赘或嫁入这家的,1表示为是,0表示否

typedefstructTreeNode//树节点定义

{

intNum;//保存此人儿女个数

charName[20];//保存此人姓名

charKind;〃保存此人性别,男M,女F

structTreeNode*NextNode[20];〃保存此人的儿女,NextNode[0]里存放配偶的地址

structTreeNode*Parent;//保存此节点的父节点

}TreeNode;

voidCreatTree(TreeNode*Tree);〃创建树

voidOutPutAII(TreeNode*Tree);//输出树

TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);

voidMainMenu(TreeNode*Tree);

voidSubMenue1(TreeNode*Tree);

voidSubMenue2(TreeNode*Tree);

voidChange(TreeNode*Tree);

voidAddNew(TreeNode*Tree);

voidOutPutMessage(TreeNode*Tree,charname[],intIength);

//主函数

voidmain()

{

TreeNode*Tree;//产生根节点

Tree=(TreeNode*)maIIoc(sizeof(TreeNode));

Tree->Parent=NULL;

MainMenu(Tree);//显示主菜单

}

//添加新的成员

voidAddNew(TreeNode*Tree)

{

SubMenue2(Tree);〃添加新成员界面

}

//显示添加家庭信息的界面

voidSubMenue2(TreeNode*Tree)

{

charc;

intnum;

charname[20];

TreeNode*NewNode;getchar();

while(1)

{

请选择你的操作添加某个人的子女的信息添加某个人配偶的信息退出

请选择相应功能:

c=getchar();

switch(c)

{

case'A'://添加子女信息请输入那个人的名字

Tree=SearchTree(Tree,name,20);〃在家谱里查找这个人if(Tree==NULL)

{

该家谱图中没有

$这个人的信息请确认是否输入错误

break;

}

if(Tree->Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!=NULL&&Tree->Name!=Tr

ee->Parent->NextNode[0]->Name)

{

至今还没有配偶请先添加配偶

break;

}

if(Tree->Parent==NULL&&(Tree->Num>20||Tree->Num<0))

Tree->Num=0;

if(MATEFLAG==1)

Tree=Tree->Parent;

NewNode=(TreeNode*)malloc(sizeof(TreeNode));请输入添加人员姓名

请输入添加人员性别女F男

num=Tree->Num;

NewNode->NextNode[0]=(TreeNode*)malloc(sizeof(TreeNode));

NewNode->NextNode[0]=NULL;

NewNode->Num=0;

NewNode->Parent=Tree;

Tree->NextNode[num+1]=NewNode;

Tree->Num=Tree->Num+1;

子女的信息添加成功

break;

case'B':

请输入那个人的名字