1、完整word版数据结构家谱管理系统/题目:家谱资料管理/要求:家谱用于记录某家族历代家族成员的情况与关系.现编制一个家谱资料管理软件,/实现对一个家族所有的资料进行收集整理。支持对家谱的增加,删除,更新,统计等。/#include stdio.h#include stdlib.h#include int MATEFLAG=0;typedef struct TreeNode int Num; /记录这个人拥有几个儿女 char Name20; /记录这个人的姓名 char Kind; /标示节点的种类有女G男B struct TreeNode * NextNode20; /记录这个人的儿女 st
2、ruct 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(TreeNod
3、e * Tree);void OutPutMessage(TreeNode * Tree,char name,int length);/主函数void main() TreeNode *Tree; Tree=(TreeNode )malloc(sizeof(TreeNode)); TreeParent =NULL; strcpy(Tree-Name,0”); MainMenue(Tree);/添加新的成员void AddNew(TreeNode Tree) SubMenue2(Tree);/输出副菜单void SubMenue2(TreeNode *Tree) char c; int num;
4、 char name20; TreeNode NewNode; getchar(); while(1) system(cls”); printf(t”); printf(nnt -*-请选择你的操作-* ); printf(nt-*-A:添加某个人的子女的信息-*-*-*-*- ”); printf(”nt-*-B:添加某个人配偶的信息-*- ); printf(nt-*-*-C:退出-*-*-*-nt); c=getchar(); switch(c) case A: printf(nnt请输入那个人的名字:nt); scanf(s,name); Tree=SearchTree(Tree,na
5、me,20); if(Tree=NULL) printf(”nnt*该家谱图中没有s这个人的信息请确认是否输入错误*n,name); break; if(Tree-Parent=NULL&Tree-NextNode0=NULLTreeParent!=NULL&Tree-Name!=TreeParentNextNode0-Name) printf(”nnt%s至今还没有配偶请先添加配偶”,TreeName); break; if(TreeParent=NULL(TreeNum20|TreeNumNum=0; if(MATEFLAG=1) Tree=Tree-Parent; NewNode=(Tr
6、eeNode *)malloc(sizeof(TreeNode); printf(”nnt请输入添加人员姓名:nt”); scanf(%s”,NewNodeName); printf(nnt请输入添加人员性别女G男B:nt); scanf(”1s”,NewNodeKind); num=TreeNum; NewNodeNextNode0=(TreeNode *)malloc(sizeof(TreeNode)); NewNode-NextNode0=NULL; NewNode-Num=0; NewNodeParent=Tree; Tree-NextNodenum+1=NewNode; TreeNu
7、m=TreeNum+1; printf(”nnt-子女的信息添加成功-); break; case B: printf(”nnt请输入那个人的名字:nt); scanf(”s,name); Tree=SearchTree(Tree,name,20); if(Tree-Parent!=NULLstrcmp(TreeName,Tree-Parent-NextNode0Name)=0|Tree-NextNode0!=NULL) printf(nnt已经有了配偶”); break; if(Tree=NULL) printf(”nnt*该家谱图中没有s这个人的信息请确认是否输入错误*n,name); b
8、reak; NewNode=(TreeNode *)malloc(sizeof(TreeNode); printf(nnt请输入添加人员姓名:nt”); scanf(”%s,NewNodeName); printf(nnt请输入添加人员性别女G男B:nt”); scanf(”%1s”,&NewNodeKind); NewNode-Parent=Tree; TreeNextNode0=NewNode; break; case C: printf(”nnt-本项服务到此结束-”); break; case n: break; default: printf(”nnt-对不起!你的选择不在服务范围之
9、内!- ”); printf(nt-请您再次选择所需的服务项!- ); printf(nt-谢谢合作!-nt”); break; if (c=C|c=c) /? break; printf(”nnt-请按Enter键继续操作-”); getchar(); getchar(); /修改某个人的信息void Change(TreeNode * Tree) char name20; TreeNode NewNode; printf(nt请输入你要修改的人的信息:nt”); scanf(”%s,name); NewNode=SearchTree(Tree,name,20); if(NewNode=NU
10、LL) printf(nnt*该家谱图中没有%s这个人的信息请确认是否输入错误*n”,name); return; else SubMenue1(NewNode); /输出副菜单void SubMenue1(TreeNode * Tree) char c; int flag,i; char name20; char Parent220; TreeNode NewNode; getchar(); while(1) system(”cls”); printf(t); printf(”nnt -*-请选择你的操作-*- ”); printf(”nt-*-*-A:修改个人的信息-*-*- ); pri
11、ntf(nt*-B:修改父母的信息-*-*-*-*- ); printf(”nt-*-C:修改兄弟姐妹的信息-*-*- ); printf(”nt-D:修改子女的信息-*-*- ”); printf(”nt-*-E:修改配偶的信息-*-*-*- ”); printf(”nt-*-F:退出-*-*-*-*-*-*-nt); c=getchar(); switch(c) case A: printf(nnt请输入修改的姓名:如果不需要修改就输入0然后按Enter键继续nt”); scanf(”s”,name); if(strcmp(name,”0)!=0) strcpy(Tree-Name,nam
12、e); printf(”nnt是否要修改性别:如果需要就输入1不需要修改就输入0然后按Enter键继续nt”); scanf(”%d”,flag); if (flag=1) if(TreeKind=G|TreeKind=g) TreeKind=B; else TreeKind=G; printf(”nnt个人信息修改成功”); break; case B: if(Tree-Parent=NULL) /判断是不是头节点 printf(”nt是这个家谱图里最顶端的人没有父母信息!,name); break; if (MATEFLAG=1) /判断是不是入赘或加入此间的 if(TreeKind=G|
13、TreeKind=g) printf(nnt她是嫁入此间的所以父母信息不在家谱内包括”); else printf(nnt他是入赘此间的所以父母信息不在家谱内包括); break; if(Tree-ParentKind=G|Tree-Parent-Kind=g) strcpy(Parent0,母亲”); strcpy(Parent1,”父亲); else strcpy(Parent0,父亲); strcpy(Parent1,母亲); printf(nnt请输入s要修改的姓名:如果不需要修改就输入0然后按Enter键继续nt”,Parent0); scanf(s,name); if(strcmp
14、(name,”0”)!=0) strcpy(TreeParentName,name); printf(nnt请输入%s要修改的姓名:如果不需要修改就输入0然后按Enter键继续nt”,Parent1); scanf(”s,name); if(strcmp(name,”0)!=0) strcpy(TreeParentNextNode0Name,name); printf(”nnt-父母的信息修改成功-”); break; case C: NewNode=TreeParent; if(NewNode=NULL) /判断是不是头节点 printf(nt是这个家谱图里最顶端的人没有兄弟姐妹信息!”,n
15、ame); break; if (MATEFLAG=1) /判断是不是入赘或加入此间的 if(Tree-Kind=GTree-Kind=g) printf(nnt她是嫁入此间的所以兄弟姐妹信息不在家谱内包括); else printf(”nnt他是入赘此间的所以兄弟姐妹信息不在家谱内包括”); break; if(NewNodeNum=1) printf(nnt没有兄弟姐妹); break; else for(i=1;iNum;i+) if(NewNode-NextNodei-Name!=Tree-Name) printf(”nnt请输入s修改的姓名:如果不需要修改就输入0然后按Enter键继
16、续nt”,NewNode-NextNodei-Name); scanf(”%s”,name); if(strcmp(name,”0”)!=0) strcpy(NewNodeNextNodei-Name,name); printf(nnt是否要修改性别:如果需要就输入1不需要修改就输入0然后按Enter键继续nt”); scanf(”d,flag); if (flag=1) if(NewNodeNextNodeiKind=G|NewNodeNextNodei-Kind=g) NewNodeNextNodei-Kind=B; else NewNode-NextNodei-Kind=G; print
17、f(nnt-兄弟姐妹的信息修改成功-”); break; case D: if(TreeNum=0) printf(nnt至今还没有子女”); break; if (TreeParent !=NULL) if (strcmp(Tree-Name,Tree-ParentNextNode0-Name)=0) /如果他是入赘或者是嫁入的就需用配偶节点完成修改 Tree=Tree-Parent; for(i=1;iKind=G|Tree-NextNodeiKind=g) Tree-NextNodeiKind=B; else TreeNextNodei-Kind=G; printf(”nnt-子女的信息
18、修改成功-); break; case E: if(TreeParent!=NULL) if (TreeNextNode0=NULL&strcmp(TreeName,Tree-ParentNextNode0-Name)!=0) printf(nnt至今还没有配偶”); break; if (strcmp(TreeName,Tree-ParentNextNode0Name)=0) printf(”nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,TreeParentName); scanf(s,name); if(strcmp(name,0)!=0) strcpy(T
19、ree-Parent-Name,name); else printf(”nnt请输入s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt”,Tree-NextNode0Name); scanf(”%s,name); if(strcmp(name,0”)!=0) strcpy(TreeNextNode0Name,name); else if(Tree-NextNode0=NULL) printf(”nnt至今还没有配偶); else printf(”nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,TreeNextNode0Name); scanf(”%s,
20、name); if(strcmp(name,0”)!=0) strcpy(TreeNextNode0-Name,name); printf(”nnt-配偶的信息修改成功-); break; case F: printf(”nnt-本项服务到此结束-”); break; case n: break; default: printf(”nnt-对不起!你的选择不在服务范围之内!-”); printf(nt-请您再次选择所需的服务项!-); printf(nt-谢谢合作!-nt); break; if (c=F|c=f) break; printf(”nnt-请按Enter键继续操作-”); getchar(); getchar(); /输出主菜单void MainMenue(TreeNode *Tree) char c; char name20; while(1) system(”cls); printf(”t”); printf(”nnt -*-请选择你的操作*-”); printf(nt-A:输入家谱信息建立多叉树-”); printf(”nt-B:在家族中查找某人并输出他或(她)的相应信息-); printf(nt-C:添加新的成员-); printf(nt-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1