完整word版家谱树.docx

上传人:b****3 文档编号:4874963 上传时间:2022-12-11 格式:DOCX 页数:25 大小:20.96KB
下载 相关 举报
完整word版家谱树.docx_第1页
第1页 / 共25页
完整word版家谱树.docx_第2页
第2页 / 共25页
完整word版家谱树.docx_第3页
第3页 / 共25页
完整word版家谱树.docx_第4页
第4页 / 共25页
完整word版家谱树.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

完整word版家谱树.docx

《完整word版家谱树.docx》由会员分享,可在线阅读,更多相关《完整word版家谱树.docx(25页珍藏版)》请在冰豆网上搜索。

完整word版家谱树.docx

完整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;idata.num;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;idata.num;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;idata.num;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;jdata.num;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;idata.num;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;jdata.num;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;jdata.num;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他

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1