数据结构家谱管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//////////////////////////////////////////////////////////// ///////////////////

//题目:家谱资料管理

//要求:家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理软件,

//实现对一个家族所有的资料进行收集整理。支持对家谱的增加,删除,更新,统计等。

//////////////////////////////////////////////////////////// ///////////////////

#include

#include

#include

int MATEFLAG=0;

typedef struct TreeNode

{

int Num; //记录这个人拥有几个儿女

char Name[20]; //记录这个人的姓名

char Kind; //标示节点的种类有女G男B

struct TreeNode * NextNode[20]; //记录这个人的儿女struct TreeNode * Parent; //记录这个节点的父节点

}TreeNode;

void CreatTree(TreeNode *Tree);

void OutPutAll(TreeNode *Tree);

TreeNode * SearchTree(TreeNode *Tree,char name[],int length);

void MainMenue(TreeNode *Tree);

void SubMenue1(TreeNode * Tree);

void SubMenue2(TreeNode *Tree);

void Change(TreeNode * Tree);

void AddNew(TreeNode * Tree);

void OutPutMessage(TreeNode * Tree,char name[],int length);

//主函数

void main()

{

TreeNode *Tree;

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

Tree->Parent =NULL;

strcpy(Tree->Name,"0");

MainMenue(Tree);

}

//添加新的成员

void AddNew(TreeNode * Tree)

{

SubMenue2(Tree);

}

//输出副菜单

void SubMenue2(TreeNode *Tree)

{

char c;

int num;

char name[20];

TreeNode * NewNode;

getchar();

while(1)

{

system("cls");

printf("\t");

printf("\n\n\t ---*****---请选择你的操作---****--- ");

printf("\n\t---*---*---*---A:添加某个人的子女的信息---*---*---*---*---- ");

printf("\n\t---*---*---*---B:添加某个人配偶的信息-*---*---*---*---*---- ");

printf("\n\t---*---*---*---C:退出-*---*---*---*---*---*---*---*---*----\n\t");

c=getchar();

switch(c)

{

case 'A':

printf("\n\n\t请输入那个人的名字:\n\t");

scanf("%s",name);

Tree=SearchTree(Tree,name,20);

if(Tree==NULL)

{

printf("\n\n\t****该家谱图中没有%s这个人的信息请确认是否输入错误*****\n",name);

break;

}

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

{

printf("\n\n\t%s至今还没有配偶请先添加配偶",Tree->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));

printf("\n\n\t请输入添加人员姓名:\n\t");

scanf("%s",NewNode->Name);

printf("\n\n\t请输入添加人员性别女G男B:\n\t");

scanf("%1s",&NewNode->Kind);

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;

printf("\n\n\t-------------子女的信息添加成功----------------");

break;

case 'B':

printf("\n\n\t请输入那个人的名字:\n\t");

相关文档
最新文档