完整word版家谱树.docx
- 文档编号:4874963
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:25
- 大小:20.96KB
完整word版家谱树.docx
《完整word版家谱树.docx》由会员分享,可在线阅读,更多相关《完整word版家谱树.docx(25页珍藏版)》请在冰豆网上搜索。
完整word版家谱树
家谱树
这是实训时候完全自己写的,输入出生日期的时候一定按要求去输入(以防出错),下面是老师给我们的要求:
●建立输入文件以存放最初家谱中各成员的信息。
●成员的信息中均应包含以下内容:
●姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)
●也可附加其它信息、但不是必需的。
●能对修改后的家谱存盘以备以后使用。
●能从文件中读出已有的家谱,形成树状关系。
●家谱建立好之后,以图形方式显示出来。
●显示第n代所有人的信息。
●按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
●按照出生日期查询成员名单。
●输入两人姓名,确定其关系。
●某人添加孩子。
●删除某人(若其还有后代,则一并删除)。
●修改某人信息。
●按出生日期对家谱中所有人排序。
●打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。
下面是程序代码(用文本过滤一下粘贴到工程中就可用):
#include
#include
#include
#include
#defineOK1
#defineFALSE0
#defineERROR-1
typedefintstatus;
typedefstruct{
intnum;//孩子个数
charname[20];///姓名
charsex;//性别
//boolis_spouse;//配偶是否存在
charspouse[20];//配偶的姓名,性别取反
}DataType;
typedefstructTNode{
DataTypedata;//数据域
structTNode*nextstr[10];//指针域,指向孩子
structTNode*parent;//指针域,指向父亲
}PedTNode,*PedTree;//家谱树
voidOutMenu();//输出家谱菜单
voidCreateNewPedTreeNode(PedTreeTree);//创建孩子,递归调用
voidCreatePedTree(PedTreeTree);//创建Pedigree树
voidOutOneInfor(PedTreeTree);//递归调用实现输出整个家谱树
voidOutAllPedTree(PedTreeTree);//输出整个家谱信息
//PedTreeSearchPedTree(PedTreeTree,charName[]);//在树中查找
boolSearchPedTree(PedTreeTree,charName[],PedTree*DrawTree);//在树中查找
boolSearchPedTree2(PedTreeTree,charName[],PedTree*DrawTree);//在树中查找配偶是否匹配
voidShowMenu1(PedTreeTree);//显示要查找人的信息
//voidShowSelfInfor(PedTreeTree,charName[],intLength);//显示个人信息
voidShowMenu2();//显示添加信息的菜单
intAddNewInfor(PedTreeTree);//添加新的家谱信息
voidAddChildInfor(PedTreeTree);//添加子女的信息
voidAddPouseInfor(PedTreeTree);//添加配偶信息
intChangeInfor(PedTreeTree);//修改家谱信息
voidShowMenu3();//显示修改信息的菜单
intmain()
{
charchoice;
system("color1f");
PedTNodeTreeNode;
PedTreeTree=&TreeNode;
boolflag=false;//标志是否执行建立家谱
//PedTreeTree=NULL;
while
(1)
{
fflush(stdin);//清除键盘缓冲区
system("cls");
OutMenu();
printf("\n");
printf("\t\t请您选择:
");
choice=getchar();
switch(choice)
{
case'1':
if(!
flag)
{
CreatePedTree(Tree);//创建Pedigree树
flag=true;
}
else
{
printf("\n\t\t家谱不能多次建立\n");
printf("\n\t\t按任意键继续:
");
fflush(stdin);
getch();
}
break;
case'2':
if(flag)
ShowMenu1(Tree);//显示要查找人的信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:
");
fflush(stdin);
getch();
}
break;
case'3':
if(flag)
AddNewInfor(Tree);//添加新的家谱信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:
");
fflush(stdin);
getch();
}
break;
case'4':
if(flag)
OutAllPedTree(Tree);//输出整个家谱信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:
");
fflush(stdin);
getch();
}
break;
case'5':
if(flag)
ChangeInfor(Tree);//修改家谱信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:
");
fflush(stdin);
getch();
}
break;
case'6':
return0;
}
}
//return0;
}
voidOutMenu()
{
printf("\t\t***********************\n");
printf("\t\t**\n");
printf("\t\t*家谱信息管理菜单*\n");
printf("\t\t**\n");
printf("\t\t*1:
输入家谱信息*\n");
printf("\t\t*2:
查找并输出某人信息*\n");
printf("\t\t*3:
添加新的家庭成员*\n");
printf("\t\t*4:
输出整个家谱信息*\n");
printf("\t\t*5:
修改某个人的信息*\n");
printf("\t\t*6:
退出整个程序*\n");
printf("\t\t**\n");
printf("\t\t***********************\n");
}
voidCreatePedTree(PedTreeTree)//创建Pedigree树
{
fflush(stdin);//清除键盘缓冲区
system("cls");
/*Tree=(PedTree)malloc(sizeof(PedTNode));
if(!
Tree)
{
printf("InsufficientMemory!
\n");
exit(-1);
}*/
printf("\t\t请输入姓名:
");
scanf("%s",Tree->data.name);
printf("\t\t请输入性别(G女B男):
");
//scanf("%c",&(Tree->data.sex));
fflush(stdin);
(Tree->data.sex)=getchar();
printf("\t\t请输入%s子女的个数:
",Tree->data.name);
scanf("%d",&(Tree->data.num));
printf("\t\t请输入%s配偶的名字(配偶不存在,请输入):
",Tree->data.name);
scanf("%s",Tree->data.spouse);
if(strcmp(Tree->data.spouse,"0")==0&&Tree->data.num!
=0)
{
printf("\t\t%s的配偶不存在,不能有孩子!
\n",Tree->data.name);
Tree->data.num=0;
}
Tree->parent=NULL;
for(inti=0;i
{
printf("\n");
PedTreeChildTree=(PedTree)malloc(sizeof(PedTNode));
if(!
ChildTree)
{
printf("InsufficientMemory!
\n");
exit(-1);
}
Tree->nextstr[i]=ChildTree;//指向子女
printf("\t\t请输入%s的第%d个子女的姓名:
",Tree->data.name,i+1);
scanf("%s",ChildTree->data.name);
printf("\t\t请输入%s的第%d个子女的性别(G女B男):
",Tree->data.name,i+1);
fflush(stdin);//清除键盘缓冲区
scanf("%c",&(ChildTree->data.sex));
printf("\t\t请输入%s的第%d个子女的个数:
",Tree->data.name,i+1);
scanf("%d",&(ChildTree->data.num));
printf("\t\t请输入%s的第%d个子女的配偶的姓名(配偶不存在,请输入):
",Tree->data.name,i+1);
scanf("%s",ChildTree->data.spouse);
if(strcmp(ChildTree->data.spouse,"0")==0&&ChildTree->data.num!
=0)
{
printf("\t\t%s的配偶不存在,不能有孩子!
\n",ChildTree->data.name);
ChildTree->data.num=0;
}
ChildTree->parent=Tree;//将孩子指向父母
CreateNewPedTreeNode(ChildTree);
}
fflush(stdin);//清除键盘缓冲区
printf("\n\n\t\t----家谱建造成功-----\n");
printf("\n\t\t按任意键继续:
");
getch();
}
voidCreateNewPedTreeNode(PedTreeTree)//创建孩子,递归调用
{
for(inti=0;i
{
printf("\n");
PedTreeChildTree=(PedTree)malloc(sizeof(PedTNode));
if(!
ChildTree)
{
printf("\t\tInsufficientMemory!
\n");
exit
(1);
}
Tree->nextstr[i]=ChildTree;//指向子女
printf("\t\t请输入%s的第%d个子女的姓名:
",Tree->data.name,i+1);
scanf("%s",ChildTree->data.name);
printf("\t\t请输入%s的第%d个子女的性别(G女B男):
",Tree->data.name,i+1);
fflush(stdin);//清除键盘缓冲区
scanf("%c",&(ChildTree->data.sex));
printf("\t\t请输入%s的第%d个子女的个数:
",Tree->data.name,i+1);
scanf("%d",&(ChildTree->data.num));
printf("\t\t请输入%s的第%d个子女的配偶的姓名(配偶不存在,请输入):
",Tree->data.name,i+1);
scanf("%s",ChildTree->data.spouse);
if(strcmp(ChildTree->data.spouse,"0")==0&&ChildTree->data.num!
=0)
{
printf("\t\t%s的配偶不存在,不能有孩子!
\n",ChildTree->data.name);
ChildTree->data.num=0;
}
ChildTree->parent=Tree;//将孩子指向父母
CreateNewPedTreeNode(ChildTree);
}
}
voidOutAllPedTree(PedTreeTree)//输出整个家谱信息
{
fflush(stdin);//清除键盘缓冲区
system("cls");
printf("\n\n\t\t整个家谱主要的信息如下:
\n");
printf("\t\t---***---***---***---***---***---***---\n");
//puts(Tree->data.name);
printf("\t\t姓名:
%s",Tree->data.name);
if(Tree->data.sex=='b'||Tree->data.sex=='B')
{
printf("性别:
男\n");
printf("\t\t太太姓名:
%s\n",Tree->data.spouse);
}
else
{
printf("性别:
女\n");
printf("\t\t丈夫姓名:
%s\n",Tree->data.spouse);
}
for(inti=0;i
{
printf("\t\t第%d个子女的姓名:
%s",i+1,(Tree->nextstr[i])->data.name);
if(((Tree->nextstr[i])->data.sex)=='b'||((Tree->nextstr[i])->data.sex)=='B')
printf("性别:
男\n");
else
printf("性别:
女\n");
}
for(intj=0;j
{
//if((Tree->nextstr[j])->data.num!
=0)
OutOneInfor(Tree->nextstr[j]);
}
fflush(stdin);//清除键盘缓冲区
printf("\n\t\t按任意键继续:
");
getch();
}
voidOutOneInfor(PedTreeTree)//递归调用实现输出整个家谱树
{
printf("\t\t---***---***---***---***---***---***---\n");
printf("\t\t姓名:
%s",Tree->data.name);
if(Tree->data.sex=='b'||Tree->data.sex=='B')
{
printf("性别:
男\n");
printf("\t\t太太姓名:
%s\n",Tree->data.spouse);
}
else
{
printf("性别:
女\n");
printf("\t\t丈夫姓名:
%s\n",Tree->data.spouse);
}
for(inti=0;i
{
printf("\t\t第%d个子女的姓名:
%s",i+1,(Tree->nextstr[i])->data.name);
if(((Tree->nextstr[i])->data.sex)=='b'||((Tree->nextstr[i])->data.sex)=='B')
printf("性别:
男\n");
else
printf("性别:
女\n");
}
for(intj=0;j
//if((Tree->nextstr[j])->data.num!
=0)
OutOneInfor(Tree->nextstr[j]);
}
voidShowMenu1(PedTreeTree)//显示要查找人的信息
{
PedTreeTempTree=NULL;
charName[20];
fflush(stdin);//清除键盘缓冲区
system("cls");
printf("\t\t请输入你要查找的人的姓名:
");
scanf("%s",Name);
/*if((TempTree=SearchPedTree(Tree,Name))!
=NULL)*/
if(SearchPedTree(Tree,Name,&TempTree))//在树中查找
{
printf("\n\n\t\t----*----*----*----*----*----*----*----*----*----*----\n");
if(TempTree->parent!
=NULL)
{
printf("\t\t姓名:
%s",TempTree->data.name);
if((TempTree->data.sex)=='b'||(TempTree->data.sex)=='B')
printf("性别:
男\n");
else
printf("性别:
女\n");
//输出父母亲的姓名
if((TempTree->parent->data.sex)=='b'||(TempTree->parent->data.sex)=='B')
{
printf("\t\t父亲姓名:
%s\n",TempTree->parent->data.name);
printf("\t\t母亲姓名:
%s\n",TempTree->parent->data.spouse);
}
else
{
printf("\t\t父亲姓名:
%s\n",TempTree->parent->data.spouse);
printf("\t\t母亲姓名:
%s\n",TempTree->parent->data.name);
}
}
else
{
printf("\t\t姓名:
%s",TempTree->data.name);
if((TempTree->data.sex)=='b'||(TempTree->data.sex)=='B')
printf("性别:
男\n");
else
printf("性别:
女\n");
}
//输出配偶信息
if((TempTree->data.sex)=='b'||(TempTree->data.sex)=='B')
printf("\t\t太太姓名:
%s\n",TempTree->data.spouse);
else
printf("\t\t丈夫姓名:
%s\n",TempTree->data.spouse);
//输出孩子信息
if((TempTree->data.num)!
=0)
printf("\t\t孩子信息:
\n");
for(intj=0;j
{
PedTreeChildTree;
ChildTree=TempTree->nextstr[j];
printf("\t\t姓名:
%s",ChildTree->data.name);
if((ChildTree->data.sex)=='b'||(ChildTree->data.sex)=='B')
printf("性别:
男\n");
else
printf("性别:
女\n");
}
printf("\t\t----*----*----*----*----*----*----*----*----*----*----\n\n");
}//if(SearchPedTree(Tree,Name,&TempTree))//在树中查找
elseif(SearchPedTree2(Tree,Name,&TempTree))//在配偶中查找
{
printf("\n\n\t\t----*----*----*----*----*----*----*----*----*----*----\n");
printf("\n\t\t你要找的人已找到,信息如下:
\n");
printf("\t\t姓名:
%s",TempTree->data.spouse);
if((TempTree->data.sex)=='b'||(TempTree->data.sex)=='B')
{
printf("性别:
女\n");
printf("\n\t\t她已成为本家族的媳妇,所以父母信息不存在家谱中\n");
printf("\n\t\t丈夫姓名:
%s\n",TempTree->data.name);
}
else
{
printf("性别:
男\n");
printf("\n\t\t他
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 家谱