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

上传人:11****ws 文档编号:2423699 上传时间:2019-05-12 格式:DOCX 页数:15 大小:23.33KB
下载 相关 举报
家谱管理系统(含源代码).docx_第1页
第1页 / 共15页
家谱管理系统(含源代码).docx_第2页
第2页 / 共15页
家谱管理系统(含源代码).docx_第3页
第3页 / 共15页
家谱管理系统(含源代码).docx_第4页
第4页 / 共15页
家谱管理系统(含源代码).docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

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

2、char Name20; /保存此人姓名char Kind; /保存此人性别,男 M,女 Fstruct TreeNode * NextNode20; /保存此人的儿女,NextNode0里存放配偶的地址struct TreeNode * Parent; /保存此节点的父节点TreeNode;void CreatTree(TreeNode *Tree);/创建树void OutPutAll(TreeNode *Tree);/输出树TreeNode * SearchTree(TreeNode *Tree,char name,int length);void MainMenu(TreeNode *

3、Tree);void SubMenue1(TreeNode * Tree);void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree);void AddNew(TreeNode * 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“)

4、;MainMenu(Tree);/显示主菜单/添加新的成员void AddNew(TreeNode * Tree)SubMenue2(Tree);/添加新成员界面/显示添加家庭信息的界面void SubMenue2(TreeNode *Tree)char c;int num;char name20;TreeNode * NewNode;getchar();while(1)system(“cls“);printf(“请选择你的操作n“);printf(“A:添加某个人的子女的信息n“);printf(“B:添加某个人配偶的信息n“);printf(“C:退出n“);printf(“请选择相应功能

5、:n“);c=getchar();switch(c)case A: /添加子女信息printf(“请输入那个人的名字:n“);scanf(“%s“,name);Tree=SearchTree(Tree,name,20);/在家谱里查找这个人if(Tree=NULL)printf(“该家谱图中没有%s 这个人的信息请确认是否输入错误n“,name);break;if(Tree-Parent=NULLbreak;if(Tree-Parent=NULLif(MATEFLAG=1)Tree=Tree-Parent;NewNode=(TreeNode *)malloc(sizeof(TreeNode);

6、printf(“请输入添加人员姓名:n“);scanf(“%s“,NewNode-Name);printf(“请输入添加人员性别女 F 男 M:n“);scanf(“%1s“,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+1;printf(“子女的信息添加成功n“);break;case B:printf(

7、“请输入那个人的名字:n“);scanf(“%s“,name);Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULLbreak;if(Tree=NULL)printf(“该家谱图中没有%s 这个人的信息请确认n“,name);break;NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf(“请输入添加人员姓名:n“);scanf(“%s“,NewNode-Name);printf(“请输入添加人员性别女 F 男 M:n“);scanf(“%1s“,NewNode-Parent=Tree;Tree-

8、NextNode0=NewNode;break;case C:printf(“本项服务到此结束n“);break;case n:break;default:printf(“对不起 !你的选择错误n“);break;if (c=C|c=c)break;printf(“请按 Enter 键继续操作n“);getchar();getchar();/修改某个人的信息void Change(TreeNode * Tree)char name20;TreeNode * NewNode;printf(“请输入你要修改的人的信息:n“);scanf(“%s“,name);NewNode=SearchTree(

9、Tree,name,20);if(NewNode=NULL)printf(“该家谱图中没有%s 这个人的信息请确认是否输入错误n“,name);return;elseSubMenue1(NewNode);/输出副菜单void SubMenue1(TreeNode * Tree)char c;int flag,i;char name20;char Parent220;TreeNode * NewNode;getchar();while(1)system(“cls“);printf(“请选择你的操作n“);printf(“A:修改个人的信息n“);printf(“B:修改父母的信息n“);prin

10、tf(“C:修改兄弟姐妹的信息n“);printf(“D:修改子女的信息n“);printf(“E:修改配偶的信息n“);printf(“F:退出n“);c=getchar();switch(c)case A:printf(“请输入修改的姓名:如果不需要修改就输入0然后按 Enter 键继续n“);scanf(“%s“,name);if(strcmp(name,“0“)!=0)strcpy(Tree-Name,name);printf(“是否要修改性别:如果需要就输入1不需要修改就输入0然后按 Enter 键继续n“);scanf(“%d“,if (flag=1)if(Tree-Kind=F|

11、Tree-Kind=f)Tree-Kind=M;else Tree-Kind=F;printf(“个人信息修改成功n“);break;case B:if(Tree-Parent=NULL) /判断是不是头节点printf(“是这个家谱图里最顶端的人没有父母信息!n“,name);break;if (MATEFLAG=1) /判断是不是入赘或加入此间的if(Tree-Kind=F|Tree-Kind=f)printf(“她是嫁入此间的所以父母信息不在家谱内包括n“);elseprintf(“他是入赘此间的所以父母信息不在家谱内包括n“);break;if(Tree-Parent-Kind=F|T

12、ree-Parent-Kind=f)strcpy(Parent0,“母亲“);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 键继续n“,Parent1);scanf(

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

14、“他是入赘此间的所以兄弟姐妹信息不在家谱内包括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(“是否要修改性别:如果需要

15、就输入1不需要修改就输入0然后按 Enter 键继续 n“);scanf(“%d“,if (flag=1)if(NewNode-NextNodei-Kind=G|NewNode-NextNodei-Kind=g)NewNode-NextNodei-Kind=B;else NewNode-NextNodei-Kind=G;printf(“兄弟姐妹的信息修改成功n“);break;case D:if(Tree-Num=0)printf(“至今还没有子女n“);break;if (Tree-Parent !=NULL)if (strcmp(Tree-Name,Tree-Parent-NextNode

16、0-Name)=0) /如果他是入赘或者是嫁入的就需用配偶节点完成修改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“,if (flag=1)if(Tree-NextNodei

17、-Kind=F|Tree-NextNodei-Kind=f)Tree-NextNodei-Kind=M;else Tree-NextNodei-Kind=F;printf(“子女的信息修改成功n“);break;case E:if(Tree-Parent!=NULL)if(Tree-NextNode0=NULLbreak;if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0)printf(“nnt 请输入%s 修改的姓名:如果不需要修改就输入0然后按Enter 键继续 nt“,Tree-Parent-Name);scanf(“%s“,name);

18、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 键继续

19、 nt“,Tree-NextNode0-Name);scanf(“%s“,name);if(strcmp(name,“0“)!=0)strcpy(Tree-NextNode0-Name,name);printf(“配偶的信息修改成功n“);break;case F:printf(“本项服务到此结束n“);break;case n:break;default:printf(“对不起 !你的选择错误n“);break;if (c=F|c=f)break;printf(“请按 Enter 键继续操作n“);getchar();getchar();/输出主菜单void MainMenu(TreeNod

20、e *Tree)char c;/用于接受用户输入的选项char name20;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)case 1: TreeNode

21、 * NewNode; NewNode=(TreeNode *)malloc(sizeof(TreeNode);/建立新节点 printf(“请输入姓名:“); scanf(“%s“,Tree-Name);/给节点姓名赋值 printf(“ 请输入性别(女 F,男M):“); getchar();/给性别赋值 scanf(“%c“, / Tree-Parent=NewNode; Tree-Parent=NULL; CreatTree(Tree); printf(“家谱图已经建立成功n“); printf(“请按 Enter 键继续操作n“); getchar(); break; case 2:

22、 if(strcmp(Tree-Name,“0“)=0) printf(“家谱图还未建立请先建立n“); getchar(); break; printf(“请输入你要查找的人的姓名:n“); scanf(“%s“,name);OutPutMessage(SearchTree(Tree,name,20),name,20); getchar(); break; case 3: if(strcmp(Tree-Name,“0“)=0) printf(“家谱图还未建立请先建立n“); getchar(); break; AddNew(Tree); getchar(); break; case 4: i

23、f(strcmp(Tree-Name,“0“)=0) printf(“家谱图还未建立请先建立n“); getchar(); break; printf(“整个家谱的主要信息如下:n“);OutPutAll(Tree);getchar();break;case 5:if(strcmp(Tree-Name,“0“)=0)printf(“家谱图还未建立请先建立n“);getchar();break;Change(Tree);getchar();break;case 6:printf(“本程序结束, 欢迎下次使用。n“);exit(0);break;case n:break;default:printf(“您输入错误, 请重新输入。n“);getchar();break;getchar();/创建树void CreatTree(TreeNode *Node)int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode);Node-NextNode0=NewNode;/ Node-NextNode0=NULL;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。