家谱图程序.docx
《家谱图程序.docx》由会员分享,可在线阅读,更多相关《家谱图程序.docx(14页珍藏版)》请在冰豆网上搜索。
![家谱图程序.docx](https://file1.bdocx.com/fileroot1/2022-11/20/e9459b01-6334-44a4-8f0d-2757f01669a2/e9459b01-6334-44a4-8f0d-2757f01669a21.gif)
家谱图程序
家
谱
系
统
程
序
宁波大红鹰学院
#include
#include
#include
typedefstructTreeNode
{
charname[20];
charsex[10];
charspousename[20];
TreeNode*brother;
TreeNode*child;
TreeNode*parent;
}TreeNode,*TreeNodeP;
TreeNodePtreehead;
voidInterFace();
TreeNodePInite();
voidCreateFamily(TreeNodePtree);
TreeNodePAddBrother(TreeNodePtree,TreeNodePbother);
TreeNodePAddChild(TreeNodePtree,TreeNodePparents);
TreeNodePFindNode(TreeNodePtree,char*tt);
voidFindPeople(TreeNodePtree);
voidPrintfFamily(TreeNodePtree);
voidPrintfNode(TreeNodePtree);
voidPrintfAllChildren(TreeNodePtree);
voidAddMember(TreeNodePtree);
voidModification(TreeNodePtree);
voidHelp();
voidInterFace()
{
intchoice;
printf("\n----------------菜单--------------------\n");
printf("1.创建一个家谱\n");
printf("2.输出家谱中所有人\n");
printf("3.查找某个人的信息\n");
printf("4.查找某人所有孩子\n");
printf("5.在家谱中添加成员\n");
printf("6.在家谱中修改资料\n");
printf("7.与某人断绝关系\n");
printf("8.系统使用帮助\n");
printf("9.退出系统\n");
printf("------------------------------------------\n");
printf("------------------------------------------\n");
printf("输入你的选择:
");
scanf("%d",&choice);
while(choice<1||choice>8)
{
printf("请输入范围内的数字:
");
scanf("%d",&choice);
}
switch(choice)
{
case1:
{CreateFamily(treehead);break;}
case2:
{PrintfFamily(treehead);break;}
case3:
{FindPeople(treehead);break;}
case4:
{PrintfAllChildren(treehead);break;}
case5:
{AddMember(treehead);break;}
case6:
{Modification(treehead);break;}
case7:
{DelPerson(treehead);break;}
case8:
{Help();break;}
case9:
{exit(0);break;}
}
}
TreeNodePInite()
{
TreeNodePp;
char*s="sdf";
p=(TreeNodeP)malloc(sizeof(TreeNode));
printf("正在初始化一个家谱。
。
。
\n");
printf("\n请输入家谱顶端祖先的姓名:
");
scanf("%s",p->name);
strcpy(p->sex,"man");
printf("\n请输入顶端祖先配偶姓名:
");
scanf("%s",p->spousename);
p->child=NULL;
p->brother=NULL;
p->parent=NULL;
system("cls");
returnp;
}
voidCreateFamily(TreeNodePtree)
{
charflag;
fflush(stdin);
printf("\n\t给%s添加后代......",tree->name);
tree->child=AddChild(tree->child,tree);
}
TreeNodePAddBrother(TreeNodePtree,TreeNodePbrother)
{
charflag;
tree=(TreeNodeP)malloc(sizeof(TreeNode));
tree->parent=brother->parent;
printf("\n请输入%s弟弟或妹妹的姓名:
",brother->name);
scanf("%s",tree->name);
printf("\n请输入%s的性别{F/M}:
",tree->name);
scanf("%s",tree->sex);
fflush(stdin);
printf("\n请输入%s的是否有配偶{Y/N}:
",tree->name);
scanf("%c",&flag);
if(flag=='y'||flag=='Y')
{
printf("\n请输入%s的配偶姓名:
",tree->name);
scanf("%s",tree->spousename);
fflush(stdin);
printf("\n请输入%s是否添加孩子{Y/N}:
",tree->name);
scanf("%c",&flag);
if(flag=='y'||flag=='Y'){
tree->child=AddChild(tree->child,tree);
}
else
{
tree->child=NULL;
}
}else{
strcpy(tree->spousename,"");
tree->child=NULL;
}
fflush(stdin);
printf("\n请输入%s是否添加弟弟妹妹{Y/N}:
",tree->name);
scanf("%c",&flag);
if(flag=='y'||flag=='Y'){
tree->brother=AddBrother(tree->brother,tree);
}
else
{
tree->brother=NULL;
}
returntree;
}
TreeNodePAddChild(TreeNodePtree,TreeNodePparents)
{
charflag;
tree=(TreeNodeP)malloc(sizeof(TreeNode));
tree->parent=parents;
printf("\n请输入%s第一个孩子的姓名:
",parents->name);
scanf("%s",tree->name);
printf("\n请输入%s的性别{F/M}:
",tree->name);
scanf("%s",tree->sex);
fflush(stdin);
printf("\n请输入%s的是否有配偶{Y/N}:
",tree->name);
scanf("%c",&flag);
if(flag=='y'||flag=='Y')
{
printf("\n请输入%s的配偶姓名:
",tree->name);
scanf("%s",tree->spousename);
fflush(stdin);
printf("\n请输入%s是否添加孩子{Y/N}:
",tree->name);
scanf("%c",&flag);
if(flag=='y'||flag=='Y'){
tree->child=AddChild(tree->child,tree);
}
else
{
tree->child=NULL;
}
}else{
strcpy(tree->spousename,"");
tree->child=NULL;
}
fflush(stdin);
printf("\n请输入%s是否添加弟弟妹妹{Y/N}:
",tree->name);
scanf("%c",&flag);
if(flag=='y'||flag=='Y'){
tree->brother=AddBrother(tree->brother,tree);
}
else
{
tree->brother=NULL;
}
returntree;
}
voidPrintfNode(TreeNodePtree)
{
if(tree!
=NULL)
{
printf("\n孩子:
%s性别:
%s",tree->name,tree->sex);
if(strcmp(tree->spousename,"")!
=0)
{
printf("配偶:
%s",tree->spousename);
}else{
printf("配偶:
未婚");
}
if(tree->brother!
=NULL)
PrintfNode(tree->brother);
printf("\n----------------------------------------");
if(tree->child!
=NULL)
PrintfFamily(tree);
}
}
voidPrintfFamily(TreeNodePtree)
{
if(tree!
=NULL)
{
printf("\n姓名:
%s",tree->name);
if(strcmp(tree->spousename,"")!
=0)
{
printf("\n配偶:
%s",tree->spousename);
}else
printf("\n配偶:
未婚");
if(tree->parent!
=NULL)
printf("\n此人父母:
%s和%s",tree->parent->name,tree->parent->spousename);
PrintfNode(tree->child);
}
}
TreeNodePFindNode(TreeNodePtree,char*tt)
{
TreeNodePp=NULL;
if(tree!
=NULL)
{
if(strcmp(tree->name,tt)==0||strcmp(tree->spousename,tt)==0)p=tree;
else{
p=FindNode(tree->child,tt);
if(p!
=NULL)returnp;
else
p=FindNode(tree->brother,tt);
}
}
if(p!
=NULL)returnp;
elsereturnNULL;
}
voidFindPeople(TreeNodePtree)
{
chartt[20];
TreeNodePT;
printf("\n请输入要查找的人的姓名:
");
scanf("%s",tt);
T=FindNode(tree,tt);
if(T!
=NULL)
{
printf("\n姓名:
%s",T->name);
printf("\n性别:
%s",T->sex);
if(strcmp(T->spousename,"")!
=0){
printf("\n配偶:
%s",T->spousename);
}else{
printf("\n配偶:
未婚!
");
}
}else{
printf("查不到此人!
");
}
}
voidPrintfAllChildren(TreeNodePtree)
{
chartt[20];
TreeNodePT;
printf("\n请输入:
");
scanf("%s",tt);
T=FindNode(tree,tt);
if(T!
=NULL)
{
printf("\n姓名:
%s",T->name);
printf("\n性别:
%s",T->sex);
if(strcmp(T->spousename,"")!
=0){
printf("\n配偶:
%s",T->spousename);
}else{
printf("\n配偶:
未婚!
");
}
if((T=T->child)!
=NULL)
{
printf("\n孩子:
%s性别:
%s",T->name,T->sex);
if(strcmp(T->spousename,"")!
=0)
{
printf("配偶:
%s",T->spousename);
}else{
printf("配偶:
未婚");
}
}
while((T=T->brother)!
=NULL)
{
printf("\n孩子:
%s性别:
%s",T->name,T->sex);
if(strcmp(T->spousename,"")!
=0)
{
printf("配偶:
%s",T->spousename);
}else{
printf("配偶:
未婚");
}
}
}else{
printf("查不到此人!
");
}
}
voidAddMember(TreeNodePtree)
{
chartt[20],choice;
TreeNodePT;
printf("\n请输入在哪儿添加姓名:
");
scanf("%s",tt);
fflush(stdin);
T=FindNode(tree,tt);
if(T!
=NULL)
{
printf("\n姓名:
%s",T->name);
printf("\n性别:
%s",T->sex);
if(strcmp(T->spousename,"")!
=0){
printf("\n配偶:
%s",T->spousename);
}else{
printf("\n配偶:
未婚!
");
}
}else{
printf("\n没有此人!
");
return;
}
printf("\n添加成员与此人关系----------------");
printf("\n\t1.父子(女)关系");
printf("\n\t2.兄弟(姐妹)关系");
printf("\n-----------------------------------");
printf("\n请选择:
");
scanf("%d",&choice);
while(choice<1||choice>2)
{
printf("请输入范围内的数字:
");
scanf("%d",&choice);
}
if(choice==1)
{
if(strcmp(T->spousename,"")!
=0){
if(T->child!
=NULL)
{
T=T->child;
while(T->brother!
=NULL){
T=T->brother;
}
T->brother=AddBrother(T->brother,T);
}else
T->child=AddChild(T->child,T);
}else{
printf("\n此人未婚!
");
}
}
elseif(choice==2){
T->brother=AddBrother(T->brother,T);
}
}
voidModification(TreeNodePtree)
{
chartt[20],flag;
TreeNodePT;
printf("\n请输入要修改的人的姓名:
");
scanf("%s",tt);
T=FindNode(tree,tt);
if(T!
=NULL)
{
printf("\n修改前-----");
printf("\n姓名:
%s",T->name);
printf("\n性别:
%s",T->sex);
if(strcmp(T->spousename,"")!
=0){
printf("\n配偶:
%s",T->spousename);
}else{
printf("\n配偶:
未婚!
");
}
}else{
printf("\n没有此人!
");
return;
}
printf("\n修改后-----");
printf("\n姓名:
");
scanf("%s",T->name);
printf("\n性别{F/M}:
");
scanf("%s",T->sex);
fflush(stdin);
printf("\n请输入该人是否有配偶(Y/N):
");
scanf("%c",&flag);
if(flag=='y'||flag=='Y')
{
printf("\n配偶:
");
scanf("%s",T->spousename);
}elsestrcpy(T->spousename,"");
}
voidDelPerson(treehead)
{
}
voidHelp()
{
system("cls");
printf("\n本系统使用指南:
");
printf("\n------------------------------------------------------\n");
printf("\n1、使用本系统前,请仔细阅读本系统使用指南。
");
printf("\n2、严格遵守本系统使用规则。
");
printf("\n3、本系统使用规则:
");
printf("\n根据常识,在家谱中重名的情况很少,");
printf("\n所以我们输入的姓名一般也不要重名。
如");
printf("\n果有重名情况,则可以在姓名中做标记再输入。
");
printf("\n本系统没有考虑以下几种情况:
");
printf("\n1.再婚(夫妻一方去世)。
");
printf("\n2.离异(若有孩子,孩子跟外性配偶)。
");
printf("\n3.重名(若有重名,可做标记存储)");
printf("\n------------------------------------------------------\n\n");
}
intmain()
{
treehead=Inite();
while
(1)
{
InterFace();
}
}