完整word版家谱树.docx
- 文档编号:18223601
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:32
- 大小:22.94KB
完整word版家谱树.docx
《完整word版家谱树.docx》由会员分享,可在线阅读,更多相关《完整word版家谱树.docx(32页珍藏版)》请在冰豆网上搜索。
完整word版家谱树
家谱树
这是实训时候完全自己写的,输入出生日期的时候一定按要求去输入(以防出错),下面是老师给我们的要求:
建立输入文件以存放最初家谱中各成员的信息。
成员的信息中均应包含以下内容:
姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)
也可附加其它信息、但不是必需的。
能对修改后的家谱存盘以备以后使用。
能从文件中读出已有的家谱,形成树状关系。
家谱建立好之后,以图形方式显示出来。
显示第n代所有人的信息。
按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
按照出生日期查询成员名单。
输入两人姓名,确定其关系。
某人添加孩子。
删除某人(若其还有后代,则一并删除)。
修改某人信息。
按出生日期对家谱中所有人排序.
打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。
下面是程序代码(用文本过滤一下粘贴到工程中就可用):
#include〈stdio。
h〉
#include〈stdlib.h>
#include
#include h> #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〈Tree->data。 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;i〈Tree-〉data.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;j〈Tree—〉data.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;j〈TempTree—〉data.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他
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 家谱