您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 家谱管理系统(含源代码)
实用文档文案大全家谱管理系统——C语言(数据结构)目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。排答疑和辅导。完整代码:#includestdio.h#includestdlib.h#includestring.hintMATEFLAG=0;//是否入赘或嫁入这家的,1表示为是,0表示否typedefstructTreeNode//树节点定义{intNum;//保存此人儿女个数charName[20];//保存此人姓名charKind;//保存此人性别,男M,女FstructTreeNode*NextNode[20];//保存此人的儿女,NextNode[0]里存放配偶的地址structTreeNode*Parent;//保存此节点的父节点}TreeNode;voidCreatTree(TreeNode*Tree);//创建树voidOutPutAll(TreeNode*Tree);//输出树TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);voidMainMenu(TreeNode*Tree);voidSubMenue1(TreeNode*Tree);voidSubMenue2(TreeNode*Tree);voidChange(TreeNode*Tree);voidAddNew(TreeNode*Tree);voidOutPutMessage(TreeNode*Tree,charname[],intlength);//主函数voidmain(){TreeNode*Tree;//产生根节点Tree=(TreeNode*)malloc(sizeof(TreeNode));Tree-Parent=NULL;strcpy(Tree-Name,0);MainMenu(Tree);//显示主菜单}//添加新的成员voidAddNew(TreeNode*Tree){SubMenue2(Tree);//添加新成员界面}//显示添加家庭信息的界面实用文档文案大全voidSubMenue2(TreeNode*Tree){charc;intnum;charname[20];TreeNode*NewNode;getchar();while(1){system(cls);printf(请选择你的操作\n);printf(A:添加某个人的子女的信息\n);printf(B:添加某个人配偶的信息\n);printf(C:退出\n);printf(请选择相应功能:\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==NULL&&Tree-NextNode[0]==NULL||Tree-Parent!=NULL&&Tree-Name!=Tree-Parent-NextNode[0]-Name){printf(至今还没有配偶请先添加配偶\n,Tree-Name);break;}if(Tree-Parent==NULL&&(Tree-Num20||Tree-Num0))Tree-Num=0;if(MATEFLAG==1)Tree=Tree-Parent;NewNode=(TreeNode*)malloc(sizeof(TreeNode));printf(请输入添加人员姓名:\n);scanf(%s,NewNode-Name);printf(请输入添加人员性别女F男M:\n);scanf(%1s,&NewNode-Kind);num=Tree-Num;NewNode-NextNode[0]=(TreeNode*)malloc(sizeof(TreeNode));实用文档文案大全NewNode-NextNode[0]=NULL;NewNode-Num=0;NewNode-Parent=Tree;Tree-NextNode[num+1]=NewNode;Tree-Num=Tree-Num+1;printf(子女的信息添加成功\n);break;case'B':printf(请输入那个人的名字:\n);scanf(%s,name);Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULL&&strcmp(Tree-Name,Tree-Parent-NextNode[0]-Name)==0||Tree-NextNode[0]!=NULL){printf(已经有了配偶\n);break;}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-Kind);NewNode-Parent=Tree;Tree-NextNode[0]=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();实用文档文案大全}}//修改某个人的信息voidChange(TreeNode*Tree){charname[20];TreeNode*NewNode;printf(请输入你要修改的人的信息:\n);scanf(%s,name);NewNode=SearchTree(Tree,name,20);if(NewNode==NULL){printf(该家谱图中没有%s这个人的信息请确认是否输入错误\n,name);return;}else{SubMenue1(NewNode);}}//输出副菜单voidSubMenue1(TreeNode*Tree){charc;intflag,i;charname[20];charParent[2][20];TreeNode*NewNode;getchar();while(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){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,&flag);if(flag==1){if(Tree-Kind=='F'||Tree-Kind=='f')Tree-Kind='M';elseTree-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);}else{printf(他是入赘此间的所以父母信息不在家谱内包括\n);}break;}if(Tree-Parent-Kind=='F'||Tree-Parent-Kind=='f'){strcpy(Parent[0],母亲);strcpy(Parent[1],父亲);}else{strcpy(Parent[0],父亲);strcpy(Parent[1],母亲);}实用文档文案大全printf(请输入%s要修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n,Parent[0]);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-Name,name);printf(请输入%s要修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n,Parent[1]);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-NextNode[0]-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);}else{printf(他是入赘此间的所以兄弟姐妹信息不在家谱内包括\n);}break;}if(NewNode-Num==1){printf(没有兄弟姐妹\n);break;}else{for(i=1;i=NewNode-Num;i++){if(NewNode-NextNode[i]-Name!=Tree-Name){实用文档文案大全printf(请输入%s修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n,NewNode-NextNode[i]-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(NewNode-NextNode[i]-Name,name);printf(是否要修改性别:如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续\n);scanf(%d,&flag);if(flag==1){if(NewNode-NextNode[i]-Kind=='G'||NewNode-NextNode[i]-Kind=='g')NewNode-NextNode[i]-Kind='B';elseNewNode-NextNode[i]-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[0]-Name)==0)//如果他是入赘
本文标题:家谱管理系统(含源代码)
链接地址:https://www.777doc.com/doc-5559160 .html