家谱管理系统(含源代码)

上传人:小** 文档编号:179862648 上传时间:2023-01-03 格式:DOC 页数:17 大小:72.50KB
收藏 版权申诉 举报 下载
家谱管理系统(含源代码)_第1页
第1页 / 共17页
家谱管理系统(含源代码)_第2页
第2页 / 共17页
家谱管理系统(含源代码)_第3页
第3页 / 共17页
资源描述:

《家谱管理系统(含源代码)》由会员分享,可在线阅读,更多相关《家谱管理系统(含源代码)(17页珍藏版)》请在装配图网上搜索。

1、家谱管理系统一一C语言(数据结构)目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。排答疑和辅导。完整代码:#include#include#includeintMATEFLAG=0;/是否入赘或嫁入这家的,1表示为是,0表示否typedefstructTreeNode/树节点定义intNum;/保存此人儿女个数charName20;/

2、保存此人姓名charKind;保存此人性别,男M,女FstructTreeNode*NextNode20;保存此人的儿女,NextNode0里存放配偶的地址structTreeNode*Parent;/保存此节点的父节点TreeNode;voidCreatTree(TreeNode*Tree);创建树voidOutPutAII(TreeNode*Tree);/输出树TreeNode*SearchTree(TreeNode*Tree,charname,intlength);voidMainMenu(TreeNode*Tree);voidSubMenue1(TreeNode*Tree);voidS

3、ubMenue2(TreeNode*Tree);voidChange(TreeNode*Tree);voidAddNew(TreeNode*Tree);voidOutPutMessage(TreeNode*Tree,charname,intIength);/主函数voidmain()TreeNode*Tree;/产生根节点Tree=(TreeNode*)maIIoc(sizeof(TreeNode);Tree-Parent=NULL;strcpy(Tree-Name,0);MainMenu(Tree);/显示主菜单/添加新的成员voidAddNew(TreeNode*Tree)SubMenue

4、2(Tree);添加新成员界面/显示添加家庭信息的界面voidSubMenue2(TreeNode*Tree)charc;intnum;charname20;TreeNode*NewNode;getchar();while(1)system(cls);printf(请选择你的操作n);printf(A:添加某个人的子女的信息n);printf(B:添加某个人配偶的信息n);printf(C:退出n);printf(请选择相应功能:n);c=getchar();switch(c)caseA:/添加子女信息printf(请输入那个人的名字:n);scanf(%s,name);Tree=Search

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

6、Node=(TreeNode*)malloc(sizeof(TreeNode);printf(请输入添加人员姓名:n);scanf(%s,NewNode-Name);printf(请输入添加人员性别女F男M:n);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-Num=Tree-Num+

7、1;printf(子女的信息添加成功n);break;caseB:printf(请输入那个人的名字:n);scanf(%s,name);Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0|Tree-NextNode0!=NULL)printf(已经有了配偶n);break;if(Tree=NULL)printf(该家谱图中没有s这个人的信息请确认n,name);break;NewNode=(TreeNode*)malloc(sizeof(TreeNod

8、e);printf(请输入添加人员姓名:n);scanf(%s,NewNode-Name);printf(请输入添加人员性别女F男M:n);scanf(%1s,&NewNode-Kind);NewNode-Parent=Tree;Tree-NextNode0=NewNode;break;caseC:printf(本项服务到此结束n);break;casen:break;default:printf(对不起!你的选择错误n);break;if(c=C|c=c)break;printf(请按Enter键继续操作n);getchar();getchar();/修改某个人的信息voidChange(T

9、reeNode*Tree)charname20;TreeNode*NewNode;printf(请输入你要修改的人的信息:n);scanf(%s,name);NewNode=SearchTree(Tree,name,20);if(NewNode=NULL)printf(该家谱图中没有s这个人的信息请确认是否输入错误n,name);return;elseSubMenue1(NewNode);/输出副菜单voidSubMenue1(TreeNode*Tree)charc;intflag,i;charname20;charParent220;TreeNode*NewNode;getchar();wh

10、ile(1)system(cls);printf(请选择你的操作n);printf(A:修改个人的信息n);printf(B:修改父母的信息n);printf(C:修改兄弟姐妹的信息n);printf(D:修改子女的信息n);printf(E:修改配偶的信息n);printf(F:退出n);c=getchar();switch(c)caseA:printf(请输入修改的姓名:如果不需要修改就输入0然后按Enter键继续n);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Name,name);printf(是否要修改性别:如果需要就输入1不需要修

11、改就输入0然后按Enter键继续n);scanf(%d,&flag);if(flag=1)if(Tree-Kind=F|Tree-Kind=f)Tree-Kind=M;elseTree-Kind=F;printf(个人信息修改成功n);break;caseB:if(Tree-Parent=NULL)/判断是不是头节点printf(是这个家谱图里最顶端的人没有父母信息!n,name);break;if(MATEFLAG=1)/判断是不是入赘或加入此间的if(Tree-Kind=F|Tree-Kind=f)printf(她是嫁入此间的所以父母信息不在家谱内包括n);elseprintf(他是入赘此

12、间的所以父母信息不在家谱内包括n);break;if(Tree-Parent-Kind=F|Tree-Parent-Kind=f)strcpy(ParentO,母亲);strcpy(Parent1,父亲);elsestrcpy(Parent0,父亲);strcpy(Parent1,母亲);printf(请输入s要修改的姓名:如果不需要修改就输入0然后按Enter键继续n,Parent0);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-Name,name);printf(请输入s要修改的姓名:如果不需要修改就输入0然后按Enter键

13、继续n,Parent1);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-NextNode0-Name,name);printf(父母的信息修改成功n);break;caseC:NewNode=Tree-Parent;if(NewNode=NULL)/判断是不是头节点printf(是这个家谱图里最顶端的人没有兄弟姐妹信息!n,name);break;if(MATEFLAG=1)/判断是不是入赘或嫁入这家的if(Tree-Kind=F|Tree-Kind=f)printf(她是嫁入此间的所以兄弟姐妹信息不在家谱内包括n);elsepr

14、intf(他是入赘此间的所以兄弟姐妹信息不在家谱内包括n);break;if(NewNode-Num=1)printf(没有兄弟姐妹n);break;elsefor(i=1;iNum;i+)if(NewNode-NextNodei-Name!=Tree-Name)printf(请输入s修改的姓名:如果不需要修改就输入0然后按Enter键继续n,NewNode-NextNodei-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(NewNode-NextNodei-Name,name);printf(是否要修改性别:如果需要就输入1不需要修改就输入

15、0然后按Enter键继续n);scanf(%d,&flag);if(flag=1)if(NewNode-NextNodei-Kind=G|NewNode-NextNodei-Kind=g)NewNode-NextNodei-Kind=B;elseNewNode-NextNodei-Kind=G;printf(兄弟姐妹的信息修改成功n);break;caseD:if(Tree-Num=0)printf(至今还没有子女n);break;if(Tree-Parent!=NULL)if(strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0)/如果他是入赘或者是嫁

16、入的就需用配偶节点完成修改Tree=Tree-Parent;for(i=1;iNum;i+)printf(请输入s修改的姓名:如果不需要修改就输入0然后按Enter键继续n,Tree-NextNodei-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-NextNodei-Name,name);printf(是否要修改性别:如果需要就输入1不需要修改就输入0然后按Enter键继续n);scanf(%d,&flag);if(flag=1)if(Tree-NextNodei-Kind=F|Tree-NextNodei-Kind=f)Tree

17、-NextNodei-Kind=M;elseTree-NextNodei-Kind=F;printf(子女的信息修改成功n);break;caseE:if(Tree-Parent!=NULL)if(Tree-NextNode0=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)!=0)printf(至今还没有配偶n);break;if(strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0)printf(nnt请输入s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt,Tree-Parent-Nam

18、e);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-NextNode0-Name,name);elseif(Tree-NextNode0=NULL)printf(至今还没有配偶n);elseprintf(nnt请输入s修改的姓名:如果不需要修改就输入0然后按Enter键继续nt

19、,Tree-NextNode0-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-NextNode0-Name,name);printf(配偶的信息修改成功n);break;caseF:printf(本项服务到此结束n);break;casen:break;default:printf(对不起!你的选择错误n);break;if(c=F|c=f)break;printf(请按Enter键继续操作n);getchar();getchar();/输出主菜单voidMainMenu(TreeNode*Tree)charc;用于接受用户输入的选

20、项charname20;while(1)system(cls);清屏printf(*欢迎进入家谱管理系统nnn);printf(菜单nn);printf(输入家谱信息1n);printf(查找家族成员2n);printf(添加家族成员3n);printf(输出家谱信息4n);printf(修改成员信息5n);printf(退出6n);printf(nnn);printf(请选择相应的功能:n);c=getchar();switch(c)caseT:TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode);/建立新节点printf(请

21、输入姓名:);scanf(%s,Tree-Name);给节点姓名赋值printf(请输入性另U(女F,男M):);getchar();给性别赋值scanf(%c,&(Tree-Kind);/Tree-Parent=NewNode;Tree-Parent=NULL;CreatTree(Tree);printf(家谱图已经建立成功n);printf(请按Enter键继续操作n);getchar();break;case2:if(strcmp(Tree-Name,O)=O)printf(家谱图还未建立请先建立n);getchar();break;printf(请输入你要查找的人的姓名:n);scan

22、f(%s,name);OutPutMessage(SearchTree(Tree,name,2O),name,2O);getchar();break;case3:if(strcmp(Tree-Name,0)=0)printf(家谱图还未建立请先建立n);getchar();break;AddNew(Tree);getchar();break;case4:if(strcmp(Tree-Name,0)=0)printf(家谱图还未建立请先建立n);getchar();break;printf(整个家谱的主要信息如下:n);OutPutAll(Tree);getchar();break;case5:

23、if(strcmp(Tree-Name,0)=0)printf(家谱图还未建立请先建立n);getchar();break;Change(Tree);getchar();break;case6:printf(本程序结束,欢迎下次使用。n);exit(0);break;casen:break;default:printf(您输入错误,请重新输入。n);getchar();break;getchar();/创建树voidCreatTree(TreeNode*Node)inti;TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode);N

24、ode-NextNode0=NewNode;/Node-NextNode0=NULL;printf(请输入s的子女的数目:n,Node-Name);scanf(%d,&(Node-Num);printf(请输入s的配偶的姓名:n,Node-Name);scanf(%s,NewNode-Name);if(Node-Num)=0&strcmp(NewNode-Name,0)=0)return;if(Node-Kind=F|Node-Kind=f)自动填写其配偶的性别NewNode-Kind=M;elseNewNode-Kind=F;NewNode-Num=0;NewNode-NextNode0=N

25、ULL;Node-NextNode0=NewNode;Node-NextNode0-Parent=Node;for(i=1;iNum;i+)NewNode=(TreeNode*)malloc(sizeof(TreeNode);printf(请输入s的第d子女的名字n,Node-Name,i);scanf(%s,NewNode-Name);printf(请输入s的第d子女的性别女F男M:n,Node-Name,i);getchar();scanf(%c,&NewNode-Kind);NewNode-Num=0;NewNode-Parent=Node;Node-NextNodei=NewNode;

26、CreatTree(Node-NextNodei);/遍历并输出树中的内容voidOutPutAll(TreeNode*Tree)inti,flag=O;/flag记录节点的性别printf(%s性另ij:,Tree-Name);if(Tree-Kind=F|Tree-Kind=f)flag=1;printf(”女n);elseprintf(”男n);if(!(Tree-NextNodeO)printf(至今没有配偶和子女n);return;if(flag=1)/flag=1表示性别为女printf(丈夫的姓名:sn,Tree-NextNode0-Name);elseprintf(妻子的姓名:

27、sn,Tree-NextNode0-Name);for(i=1;iNum;i+)printf(第4个子女的姓名另iJ:,i,Tree-NextNodei-Name,Tree-NextNodei-Kind);if(Tree-NextNodei-Kind=F|Tree-NextNodei-Kind=f)printf(”女n);elseprintf(”男n);for(i=1;iNum;i+)OutPutAll(Tree-NextNodei);/在树中经过遍历查找某个人TreeNode*SearchTree(TreeNode*Tree,charname,intlength)inti;TreeNode*

28、NewNode;if(strcmp(Tree-Name,name)=0)if(length=0)MATEFLAG=1;elseMATEFLAG=0;returnTree;if(Tree-NextNode0=NULL)returnNULL;for(i=0;iNum;i+):%s性if(i=0)NewNode=SearchTree(Tree-NextNodei,name,0);elseNewNode=SearchTree(Tree-NextNodei,name,20);if(NewNode!=NULL)returnNewNode;returnNULL;/输出已经查找到的人的信息voidOutPut

29、Message(TreeNode*Tree,charname,intlength)intflag=0,i;/flag标记性别TreeNode*NewNode;if(Tree=NULL)printf(该家谱图中没有s这个人n,name);return;printf(您找的人信息如下:n);printf(%s性别:,name);if(Tree-Kind=F|Tree-Kind=f)flag=1;标记的性别printf(女n);elseprintf(”男n);NewNode=Tree-Parent;父母信息放到NewNode里if(MATEFLAG=1)此人为这家人的伴侣if(flag=1)性别为女printf(她是嫁入这家的,所以父母信息不在家谱内包括n);printf(丈夫的姓名:sn,NewNode-Name);else/性别为男

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!