数据结构家谱管理系统_第1页
数据结构家谱管理系统_第2页
数据结构家谱管理系统_第3页
数据结构家谱管理系统_第4页
数据结构家谱管理系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-作者xxxx-日期xxxx数据结构家谱管理系统【精品文档】/题目:家谱资料管理/要求:家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理软件,/实现对一个家族所有的资料进行收集整理。支持对家谱的增加,删除,更新,统计等。/#include #include #include int MATEFLAG=0;typedef struct TreeNodeint Num; /记录这个人拥有几个儿女char Name20; /记录这个人的姓名char Kind; /标示节点的种类有女G男Bstruct TreeNode * NextNode20; /记录这个人的儿女struct Tr

2、eeNode * 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);Tree-Parent =NULL;strcpy(Tree-Name,0); MainMenue(Tree);/添加新的成员void AddNew(TreeNode * Tree)SubMenue2(Tree);/输出副菜单void SubMenue2(TreeNode *Tree) char c;int num;char

4、 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=Search

5、Tree(Tree,name,20);if(Tree=NULL)printf(nnt*该家谱图中没有%s这个人的信息请确认是否输入错误*n,name);break;if(Tree-Parent=NULL&Tree-NextNode0=NULL|Tree-Parent!=NULL&Tree-Name!=Tree-Parent-NextNode0-Name)printf(nnt%s至今还没有配偶请先添加配偶,Tree-Name);break;if(Tree-Parent=NULL&(Tree-Num20|Tree-NumNum=0;if(MATEFLAG=1) Tree=Tree-Parent;N

6、ewNode=(TreeNode *)malloc(sizeof(TreeNode);printf(nnt请输入添加人员姓名:nt);scanf(%s,NewNode-Name);printf(nnt请输入添加人员性别女G男B:nt);scanf(%1s,&NewNode-Kind);num=Tree-Num;NewNode-NextNode0=(TreeNode *)malloc(sizeof(TreeNode);NewNode-NextNode0=NULL;NewNode-Num=0;NewNode-Parent=Tree;Tree-NextNodenum+1=NewNode;Tree-N

7、um=Tree-Num+1; printf(nnt-子女的信息添加成功-);break;case B: printf(nnt请输入那个人的名字:nt);scanf(%s,name);Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0|Tree-NextNode0!=NULL)printf(nnt已经有了配偶);break;if(Tree=NULL)printf(nnt*该家谱图中没有%s这个人的信息请确认是否输入错误*n,name);break;New

8、Node=(TreeNode *)malloc(sizeof(TreeNode);printf(nnt请输入添加人员姓名:nt);scanf(%s,NewNode-Name);printf(nnt请输入添加人员性别女G男B:nt);scanf(%1s,&NewNode-Kind);NewNode-Parent=Tree;Tree-NextNode0=NewNode;break;case C: printf(nnt-本项服务到此结束-);break; case n: break;default: printf(nnt-对不起!你的选择不在服务范围之内!- );printf(nt-请您再次选择所需

9、的服务项!- );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=NULL) printf(nnt*该家谱图中没有%s这个人的信息请确认是否输入错误

10、*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:修改个人的信息-*-*-*-*-*-*- );printf(nt-*-*-*-B:修改父母的信息-*-*-*-*-*-*- );printf(nt

11、-*-*-*-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,name);printf(nn

12、t是否要修改性别:如果需要就输入1不需要修改就输入0然后按Enter键继续nt); scanf(%d,&flag); if (flag=1)if(Tree-Kind=G|Tree-Kind=g)Tree-Kind=B;else Tree-Kind=G;printf(nnt个人信息修改成功);break;case B:if(Tree-Parent=NULL) /判断是不是头节点printf(nt是这个家谱图里最顶端的人没有父母信息!,name); break;if (MATEFLAG=1) /判断是不是入赘或加入此间的if(Tree-Kind=G|Tree-Kind=g) printf(nnt她

13、是嫁入此间的所以父母信息不在家谱内包括);elseprintf(nnt他是入赘此间的所以父母信息不在家谱内包括);break;if(Tree-Parent-Kind=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(name,0)!=0)strcpy(Tree-Parent-Name

14、,name);printf(nnt请输入%s要修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,Parent1);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-NextNode0-Name,name); printf(nnt-父母的信息修改成功-);break;case C:NewNode=Tree-Parent;if(NewNode=NULL) /判断是不是头节点printf(nt是这个家谱图里最顶端的人没有兄弟姐妹信息!,name); break;if (MATEFLAG=1) /判断是不是入赘或加入此间的if(T

15、ree-Kind=G|Tree-Kind=g) printf(nnt她是嫁入此间的所以兄弟姐妹信息不在家谱内包括);elseprintf(nnt他是入赘此间的所以兄弟姐妹信息不在家谱内包括);break;if(NewNode-Num=1)printf(nnt没有兄弟姐妹);break;elsefor(i=1;iNum;i+)if(NewNode-NextNodei-Name!=Tree-Name)printf(nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,NewNode-NextNodei-Name);scanf(%s,name);if(strcmp(name,

16、0)!=0)strcpy(NewNode-NextNodei-Name,name);printf(nnt是否要修改性别:如果需要就输入1不需要修改就输入0然后按Enter键继续nt);scanf(%d,&flag);if (flag=1)if(NewNode-NextNodei-Kind=G|NewNode-NextNodei-Kind=g)NewNode-NextNodei-Kind=B;else NewNode-NextNodei-Kind=G; printf(nnt-兄弟姐妹的信息修改成功-);break;case D:if(Tree-Num=0)printf(nnt至今还没有子女);b

17、reak;if (Tree-Parent !=NULL)if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0) /如果他是入赘或者是嫁入的就需用配偶节点完成修改Tree=Tree-Parent;for(i=1;iNum;i+)printf(nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,Tree-NextNodei-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-NextNodei-Name,name);printf(nnt是否要修改性别:如果需要就输入1不

18、需要修改就输入0然后按Enter键继续nt);scanf(%d,&flag);if (flag=1)if(Tree-NextNodei-Kind=G|Tree-NextNodei-Kind=g)Tree-NextNodei-Kind=B;else Tree-NextNodei-Kind=G; printf(nnt-子女的信息修改成功-);break;case E:if(Tree-Parent!=NULL)if (Tree-NextNode0=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)!=0)printf(nnt至今还没有配偶);break

19、;if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0)printf(nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,Tree-Parent-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-Name,name);elseprintf(nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,Tree-NextNode0-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree

20、-NextNode0-Name,name);elseif(Tree-NextNode0=NULL)printf(nnt至今还没有配偶);elseprintf(nnt请输入%s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,Tree-NextNode0-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-NextNode0-Name,name); printf(nnt-配偶的信息修改成功-);break;case F: printf(nnt-本项服务到此结束-);break; case n: break;default: pr

21、intf(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:在家族中

22、查找某人并输出他或(她)的相应信息-);printf(nt-C:添加新的成员-);printf(nt-D:输出整个家谱信息-);printf(nt-E:修改某个人的信息-);printf(nt-F:退出整个程序-nt);c=getchar();switch(c)case A:TreeNode * NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf(nt请输入姓名:nt);scanf(%s,Tree-Name);printf(nt请输入性别女G男B:nt);getchar();scanf(%c,&(Tree-Kind);Tree-

23、Parent=NewNode;Tree-Parent=NULL;CreatTree(Tree);printf(nt-家谱图已经建立成功-nn);printf(nnt-请按Enter键继续操作-);getchar();break;case B:if(strcmp(Tree-Name,0)=0)printf(nt家谱图的多叉树尚未建立请先建立树n);getchar();break;printf(nt请输入你要查找的人的姓名:nt);scanf(%s,name);OutPutMessage(SearchTree(Tree,name,20),name,20); printf(nnt-*-*-*-*-*

24、-*-*-*-*-*-nt);getchar();break;case C:if(strcmp(Tree-Name,0)=0)printf(nt家谱图的多叉树尚未建立请先建立树n);getchar();break;AddNew(Tree);getchar();break;case D:if(strcmp(Tree-Name,0)=0)printf(nt家谱图的多叉树尚未建立请先建立树n);getchar();break;printf(nnt整个家谱的主要信息如下:);OutPutAll(Tree);getchar();break;case E:if(strcmp(Tree-Name,0)=0)

25、printf(nt家谱图的多叉树尚未建立请先建立树n);getchar();break;Change(Tree);getchar();break;case F: printf(nnt-本次服务到此结束-);printf(nt-欢迎下次使用-);printf(nt-谢谢-nn);break;case n: break;default: printf(nnt-对不起!你的选择不在服务范围之内!-);printf(nt-请您再次选择所需的服务项!-);printf(nt-谢谢合作!-nt);getchar();break;if (c=F|c=f)break;getchar();/创建树void Cr

26、eatTree(TreeNode *Node)int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode); Node-NextNode0=NewNode;Node-NextNode0=NULL;/Node-Parent =NULL;printf(nt请输入%s的子女的数目:nt,Node-Name); scanf(%d,&(Node-Num);printf(nt请输入%s的配偶的姓名:nt,Node-Name);scanf(%s,NewNode-Name);if(Node-Num)=0&strcmp(NewNode-N

27、ame,0)=0)return ;if (Node-Kind=G|Node-Kind=g)NewNode-Kind=B;else NewNode-Kind=G;NewNode-Num=0;NewNode-NextNode0=NULL;Node-NextNode0=NewNode;Node-NextNode0-Parent=Node;for(i=1;iNum;i+)NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf(nt请输入%s的第%d子女的名字nt,Node-Name,i);scanf(%s,NewNode-Name);printf(nt请输

28、入%s的第%d子女的性别女G男B:nt,Node-Name,i);getchar();scanf(%c,&NewNode-Kind);NewNode-Num=0;NewNode-Parent=Node;Node-NextNodei=NewNode;CreatTree(Node-NextNodei);/遍历并输出树中的内容void OutPutAll(TreeNode *Tree)int i, flag=0;printf(nt-*-*-*-*-*-*-*-*-*-);printf(nt姓名:%s 性别:,Tree-Name);if (Tree-Kind=G|Tree-Kind=g)flag=1;

29、printf(女);else printf(男);if (!(Tree-NextNode0) printf(nt至今没有配偶和子女n);return; if(flag=1)printf(nt丈夫 姓名:%s,Tree-NextNode0-Name);elseprintf(nt妻子 姓名:%s,Tree-NextNode0-Name);for(i=1;iNum;i+)printf(nt第%d个子女的姓名:%s 性别:,i,Tree-NextNodei-Name,Tree-NextNodei-Kind);if (Tree-NextNodei-Kind=G|Tree-NextNodei-Kind=g

30、)printf(女);else printf(男);printf(nt);for(i=1;iNum;i+)OutPutAll(Tree-NextNodei);/在树中经过遍历查找某个人TreeNode * SearchTree(TreeNode *Tree,char name,int length)int i;TreeNode *NewNode; if(strcmp(Tree-Name,name)=0)if(length=0) MATEFLAG=1;else MATEFLAG=0;return Tree;if(Tree-NextNode0=NULL)return NULL;for(i=0;iN

31、um;i+)if (i=0) NewNode=SearchTree(Tree-NextNodei,name,0); else NewNode=SearchTree(Tree-NextNodei,name,20);if (NewNode!=NULL) return NewNode; return NULL;/输出已经查找到的人的信息void OutPutMessage(TreeNode * Tree,char name,int length) int flag=0,i;TreeNode *NewNode; printf(nnt-*-*-*-*-*-*-*-*-*-*-);if(Tree=NULL

32、)printf(nnt*该家谱图中没有%s这个人的信息请确认是否输入错误*n,name); return;printf(nnt您所要找的人已经找到信息如下所示:);printf(nnt姓名:%st性别:,name); if (Tree-Kind=G|Tree-Kind=g) flag=1; /标记他(她)的性别printf(女);else printf(男); NewNode=Tree-Parent;if (MATEFLAG=1)if(flag=1) printf(nnt她是嫁入此间的所以父母信息不在家谱内包括);printf(nt丈夫 姓名:%s,NewNode-Name);elseprintf(nnt他是入赘此间的所以父母信息不在家谱内包括);printf(nt妻子 姓名:%s,NewNode-Name);if (NewNode-Num)0) /判断他(她)是否有孩子printf(nt的孩子的信息如下:); /输出他(她)的孩子的信息for(i=1;iNum;i+)printf(nt姓名:%s 性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论