数据结构家谱管理系统.docx
- 文档编号:30689686
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:30
- 大小:24.21KB
数据结构家谱管理系统.docx
《数据结构家谱管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构家谱管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
数据结构家谱管理系统
///////////////////////////////////////////////////////////////////////////////
//题目:
家谱资料管理
//要求:
家谱用于记录某家族历代家族成员的情况与关系。
现编制一个家谱资料管理软件,
//实现对一个家族所有的资料进行收集整理。
支持对家谱的增加,删除,更新,统计等。
///////////////////////////////////////////////////////////////////////////////
#include h> #include〈stdlib。 h〉 #include intMATEFLAG=0; typedefstructTreeNode { intNum;//记录这个人拥有几个儿女 charName[20];//记录这个人的姓名 charKind;//标示节点的种类有女G男B structTreeNode*NextNode[20];//记录这个人的儿女 structTreeNode*Parent;//记录这个节点的父节点 }TreeNode; voidCreatTree(TreeNode*Tree); voidOutPutAll(TreeNode*Tree); TreeNode*SearchTree(TreeNode*Tree,charname[],intlength); voidMainMenue(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"); MainMenue(Tree); } //添加新的成员 voidAddNew(TreeNode*Tree) { SubMenue2(Tree); } //输出副菜单 voidSubMenue2(TreeNode*Tree) { charc; intnum; charname[20]; TreeNode*NewNode; getchar(); while (1) { system("cls"); printf("\t"); printf(”\n\n\t—--*****—--请选择你的操作—--****——-”); printf("\n\t——-*——-*—--*———A: 添加某个人的子女的信息——-*——-*—--*-——*-——-”); printf(”\n\t———*——-*———*---B: 添加某个人配偶的信息—*—-—*———*—-—*———*————"); printf("\n\t———*———*———*--—C: 退出—*---*——-*———*———*——-*--—*-—-*———*————\n\t”); c=getchar(); switch(c) { case’A': printf(”\n\n\t请输入那个人的名字: \n\t"); scanf("%s",name); Tree=SearchTree(Tree,name,20); if(Tree==NULL) { printf("\n\n\t****该家谱图中没有%s这个人的信息请确认是否输入错误*****\n”,name); break; } if(Tree—〉Parent==NULL&&Tree—〉NextNode[0]==NULL||Tree—〉Parent! =NULL&&Tree-〉Name! =Tree—〉Parent—〉NextNode[0]—〉Name) { printf(”\n\n\t%s至今还没有配偶请先添加配偶",Tree—〉Name); break; } if(Tree-〉Parent==NULL&&(Tree-〉Num>20||Tree-〉Num<0)) Tree->Num=0; if(MATEFLAG==1) Tree=Tree-〉Parent; NewNode=(TreeNode*)malloc(sizeof(TreeNode)); printf(”\n\n\t请输入添加人员姓名: \n\t"); scanf(”%s”,NewNode-〉Name); printf(”\n\n\t请输入添加人员性别女G男B: \n\t”); 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\n\t——-———————--—子女的信息添加成功—--—————---——--—”); break; case’B': printf(”\n\n\t请输入那个人的名字: \n\t”); 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\n\t已经有了配偶”); break; } if(Tree==NULL) { printf(”\n\n\t****该家谱图中没有%s这个人的信息请确认是否输入错误*****\n",name); break; } NewNode=(TreeNode*)malloc(sizeof(TreeNode)); printf("\n\n\t请输入添加人员姓名: \n\t”); scanf("%s”,NewNode—>Name); printf(”\n\n\t请输入添加人员性别女G男B: \n\t”); scanf(”%1s",&NewNode—>Kind); NewNode—〉Parent=Tree; Tree-〉NextNode[0]=NewNode; break; case'C’: printf("\n\n\t—————-————---—-—本项服务到此结束-————--——————-———”); break; case’\n’: break; default: printf("\n\n\t—-———-——对不起! 你的选择不在服务范围之内! —-——---——”); printf("\n\t——-—-——————请您再次选择所需的服务项! -———-——-——--—”); printf("\n\t-———--——————————-—谢谢合作! ---———————--——-----———\n\t”); break; } if(c==’C’||c==’c')//? ? break; printf(”\n\n\t——------—-——--请按Enter键继续操作——-—-——---—--—"); getchar(); getchar(); } } //修改某个人的信息 voidChange(TreeNode*Tree) { charname[20]; TreeNode*NewNode; printf("\n\t请输入你要修改的人的信息: \n\t”); scanf(”%s",name); NewNode=SearchTree(Tree,name,20); if(NewNode==NULL) { printf(”\n\n\t****该家谱图中没有%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(”\t”); printf(”\n\n\t--—*****—-—请选择你的操作—-—****---"); printf("\n\t-—-*—-—*-——*——-A: 修改个人的信息-—-*--—*-—-*———*—-—*——-*————”); printf(”\n\t-—-*—--*—--*---B: 修改父母的信息—--*—-—*—-—*——-*———*—-—*——--"); printf(”\n\t-—-*—-—*---*—--C: 修改兄弟姐妹的信息——-*-—-*——-*-——*———*—-—-”); printf("\n\t—--*—-—*—-—*—-—D: 修改子女的信息-——*———*——-*-——*-—-*——-*————"); printf(”\n\t——-*-—-*———*---E: 修改配偶的信息-——*-——*-—-*—--*-——*--—*—--—”); printf(”\n\t———*——-*-—-*———F: 退出—*--—*-—-*-—-*-—-*-——*-—-*———*———*—---\n\t”); c=getchar(); switch(c) { case’A’: printf("\n\n\t请输入修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t”); scanf(”%s”,name); if(strcmp(name,”0”)! =0) strcpy(Tree-〉Name,name); printf(”\n\n\t是否要修改性别: 如果需要就输入’1’不需要修改就输入’0'然后按Enter键继续\n\t”); scanf(”%d”,&flag); if(flag==1) { if(Tree—〉Kind==’G’||Tree-〉Kind==’g’) Tree—〉Kind='B'; elseTree->Kind=’G’; } printf(”\n\n\t个人信息修改成功”); break; case'B’: if(Tree—〉Parent==NULL)//判断是不是头节点 { printf(”\n\t是这个家谱图里最顶端的人没有父母信息! ”,name); break; } if(MATEFLAG==1)//判断是不是入赘或加入此间的 { if(Tree-〉Kind==’G'||Tree—〉Kind==’g’) { printf("\n\n\t她是嫁入此间的所以父母信息不在家谱内包括"); } else { printf(”\n\n\t他是入赘此间的所以父母信息不在家谱内包括"); } break; } if(Tree-〉Parent-〉Kind=='G’||Tree—>Parent—>Kind==’g') { strcpy(Parent[0],”母亲”); strcpy(Parent[1],”父亲"); } else { strcpy(Parent[0],”父亲”); strcpy(Parent[1],"母亲"); } printf(”\n\n\t请输入%s要修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t”,Parent[0]); scanf(”%s”,name); if(strcmp(name,”0")! =0) strcpy(Tree—〉Parent—>Name,name); printf("\n\n\t请输入%s要修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t”,Parent[1]); scanf(”%s",name); if(strcmp(name,”0”)! =0) strcpy(Tree—〉Parent—〉NextNode[0]-〉Name,name); printf("\n\n\t——-—-——————-—父母的信息修改成功——————-———--——-—"); break; case’C’: NewNode=Tree-〉Parent; if(NewNode==NULL)//判断是不是头节点 { printf(”\n\t是这个家谱图里最顶端的人没有兄弟姐妹信息! ",name); break; } if(MATEFLAG==1)//判断是不是入赘或加入此间的 { if(Tree—〉Kind=='G’||Tree-〉Kind==’g') { printf(”\n\n\t她是嫁入此间的所以兄弟姐妹信息不在家谱内包括"); } else { printf(”\n\n\t他是入赘此间的所以兄弟姐妹信息不在家谱内包括"); } break; } if(NewNode-〉Num==1) { printf(”\n\n\t没有兄弟姐妹"); break; } else { for(i=1;i<=NewNode->Num;i++) { if(NewNode—〉NextNode[i]—〉Name! =Tree->Name) { printf("\n\n\t请输入%s修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t”,NewNode—>NextNode[i]—〉Name); scanf(”%s”,name); if(strcmp(name,"0")! =0) strcpy(NewNode—〉NextNode[i]—>Name,name); printf("\n\n\t是否要修改性别: 如果需要就输入’1’不需要修改就输入’0'然后按Enter键继续\n\t”); 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\n\t—-——--——-—--兄弟姐妹的信息修改成功—-————-—————-”); break; case’D': if(Tree->Num==0) { printf(”\n\n\t至今还没有子女”); break; } if(Tree->Parent! =NULL) if(strcmp(Tree->Name,Tree—〉Parent—>NextNode[0]—〉Name)==0)//如果他是入赘或者是嫁入的就需用配偶节点完成修改 { Tree=Tree—〉Parent; } for(i=1;i〈=Tree—〉Num;i++) { printf(”\n\n\t请输入%s修改的姓名: 如果不需要修改就输入‘0'然后按Enter键继续\n\t”,Tree—>NextNode[i]—〉Name); scanf("%s”,name); if(strcmp(name,”0”)! =0) strcpy(Tree-〉NextNode[i]—〉Name,name); printf(”\n\n\t是否要修改性别: 如果需要就输入'1’不需要修改就输入’0’然后按Enter键继续\n\t”); scanf("%d”,&flag); if(flag==1) { if(Tree—〉NextNode[i]-〉Kind==’G’||Tree->NextNode[i]—〉Kind=='g’) Tree->NextNode[i]-〉Kind='B’; elseTree—〉NextNode[i]—〉Kind=’G’; } } printf(”\n\n\t——-———-—-————-—子女的信息修改成功----—-——---——--—”); break; case'E’: if(Tree—>Parent! =NULL) { if(Tree—〉NextNode[0]==NULL&&strcmp(Tree->Name,Tree—〉Parent-〉NextNode[0]—〉Name)! =0) { printf(”\n\n\t至今还没有配偶”); break; } if(strcmp(Tree—〉Name,Tree—〉Parent-〉NextNode[0]—〉Name)==0) { printf("\n\n\t请输入%s修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t",Tree-〉Parent—〉Name); scanf("%s”,name); if(strcmp(name,"0”)! =0) strcpy(Tree->Parent—〉Name,name); } else { printf(”\n\n\t请输入%s修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t”,Tree—>NextNode[0]—>Name); scanf(”%s",name); if(strcmp(name,"0”)! =0) strcpy(Tree-〉NextNode[0]-〉Name,name); } } else { if(Tree-〉NextNode[0]==NULL) printf(”\n\n\t至今还没有配偶"); else { printf(”\n\n\t请输入%s修改的姓名: 如果不需要修改就输入‘0’然后按Enter键继续\n\t",Tree—〉NextNode[0]—〉Name); scanf("%s”,name); if(strcmp(name,”0”)! =0) strcpy(Tree->NextNode[0]->Name,name); } } printf(”\n\n\t————--—-———-———配偶的信息修改成功--—-——---—-—————”); break; case'F’: printf(”\n\n\t———-———-—-—-—--—本项服务到此结束----——--———-—————”); break; case’\n': break; default: printf(”\n\n\t——---———对不起! 你的选择不在服务范围之内! -——----—-”); printf("\n\t-—-———-————请您再次选择所需的服务项! —————-—-—-—-—”); printf(”\n\t-——-—--——----———-—谢谢合作! ————-—----—---————--——\n\t”); break; } if(c=='F’||c==’f’) break; printf("\n\n\t—-——------—-——请按Enter键继续操作———-—--————---”); getchar(); getchar(); } } //输出主菜单 voidMainMenue(TreeNode*Tree) { charc; charname[20]; while (1) { system(”cls"); printf(”\t”); printf("\n\n\t—-—*****——-请选择你的操作———****-——”); printf(”\n\t———-—————-—---A: 输入家谱信息建立多叉树—-————————-—--———-———-"); printf(”\n\t-—-————-——————B: 在家族中查找某人并输出他或(她)的相应信息——-—”); printf("\n\t—-—-——-———---—C: 添加新的成员-————--—--—--——-—————————-———-—-”); printf(”\n\t—-———-——————-—D: 输出整个家谱信息——-—-—----————-—---——--——--—”); printf("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 家谱 管理 系统