家谱管理系统设计报告_第1页
家谱管理系统设计报告_第2页
家谱管理系统设计报告_第3页
家谱管理系统设计报告_第4页
家谱管理系统设计报告_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

目录第一章绪论 2第二章 需求分析 32.1题目 32.2设计任务 32.3数据测试 3第三章概要设计 33.1设计思想 33.2实现方法 4第四章具体设计 44.1功能构想 44.2界面设计 44.3增长成员 54.3.1添加子女 54.3.2添加配偶 54.4修改成员 64.4.1修改个人信息 64.4.2修改父母信息 64.4.3修改兄弟姐妹的信息 64.4.4修改子女的信息 7第五章调试分析 7第六章测试结果 9致谢 10参考文献 11附录 11第一章绪论目前,很多家庭家谱丢失,家庭一些关系混乱,为了避免这一问题,制定一家谱程序。家谱用于记录某家族历代家族成员的情况与关系,实现对一个家族所有的资料进行收集整理。支持对家谱的存储、更新、查询、记录等操作。并用计算机永久储存家族数据,方便随时调用。需求分析2.1题目家谱管理系统2.2设计任务系统总体说明:以树形结构存储家族信息,只考虑三代(祖父,父亲,叔叔,姑姑,自己,兄弟姐妹,堂兄弟姐妹),只考虑每个人有0或者1个兄弟姐妹的情况。注意每个结点结构。记录记录家族成员人数,查询家族成员辈份。完毕功能的具体说明:1.输入家族成员情况,建立树结构(涉及创建二叉树);2.记录家族成员人数和每一个家庭成员人数(涉及树的遍历);3.查询家族成员辈份情况(任意输入两个家庭成员,查询他们的关系,父子,祖孙,兄弟,堂兄弟,共同的祖先)。4.选做,考虑每个人有多个兄弟姐妹的情况。2.3数据测试测试的数据有:田迎新陈瑞英田紫藤田紫恒孙超李美霖……..第三章概要设计3.1设计思想创建一棵树,存储家庭关系,数据类型有intNum;//记录这个人拥有几个儿女 charName[20];//记录这个人的姓名 charSex;//标示节点的种类有女(0)男(1) structTreeNode*NextNode[20];//记录这个人的儿女 structTreeNode*Parent;//记录这个节点的父节点3.2实现方法完毕功能的函数有voidCreatTree(TreeNode*Tree);//创建树voidOutPutAll(TreeNode*Tree);//遍历并输出树中的内容voidfirstoftxt();//写入文献的开始信息voidofAll(TreeNode*Tree);//写入文献函数voidifAll();//读取文献的函数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);//输出已经查找到的人的信息第四章具体设计4.1功能构想构想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步构想是要先实现最基本的几项功能,其中数据操作的有:增长成员,修改成员资料,删除成员;数据存取的有:打开家谱,新建家谱,保存家谱;数据查询的有:查看某代信息,按姓名查找,查当作员关系,等等。4.2界面设计cout<<"\n\n\t*****请选择你的操作****"; cout<<"\n\t1:输入家谱信息建立多叉树"; cout<<"\n\t2:在家族中查找某人并输出他或(她)的相应信息"; cout<<"\n\t3:添加新的成员"; cout<<"\n\t4:输出整个家谱信息"; cout<<"\n\t5:修改某个人的信息";cout<<"\n\t6:家谱信息存入文献"; cout<<"\n\t7:读取家谱信息文献"; cout<<"\n\t8:退出整个程序\n\t";if(选择1){CreatTree(TreeNode*Tree);}Elseif(选择2){OutPutMessage(TreeNode*Tree,charname[],intlength);}Elseif(选择3){AddNew(TreeNode*Tree);}Elseif(选择4){OutPutAll(TreeNode*Tree);}Elseif(选择5){Change(TreeNode*Tree);}Elseif(选择6){ofAll(TreeNode*Tree);}Elseif(选择7){ifAll();}Else{exit(0);}4.3增长成员4.3.1添加子女 NewNode=newTreeNode;cout<<"\n\n\t请输入添加人员姓名:"; cin>>NewNode->Name; cout<<"\n\n\t请输入添加人员性别女(0)男(1):"; cin>>NewNode->Sex; num=Tree->Num; NewNode->NextNode[0]=newTreeNode; NewNode->NextNode[0]=NULL; NewNode->Num=0; NewNode->Parent=Tree; Tree->NextNode[num+1]=NewNode; Tree->Num=Tree->Num+1; cout<<"\n\n\t子女的信息添加成功";4.3.2添加配偶 NewNode=newTreeNode; cout<<"\n\n\t请输入添加人员姓名:"; cin>>NewNode->Name; cout<<"\n\n\t请输入添加人员性别女(0)男(1):"; cin>>NewNode->Sex; NewNode->Parent=Tree; Tree->NextNode[0]=NewNode;4.4修改成员4.4.1修改个人信息cout<<"\n\n\t请输入修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n";cin>>name;if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);cout<<"\n\n\t是否要修改性别:(假如需要就输入'1',不需要修改就输入'0'然后按Enter键继续):\n";cin>>flag;if(flag==1){ if(Tree->Sex=='0') Tree->Sex='1'; elseTree->Sex='0';}4.4.2修改父母信息cout<<"\n\n\t请输入"<<Parent[0]<<"要修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n";cin>>name;if(strcmp(name,"0")!=0) strcpy(Tree->Parent->Name,name);cout<<"\n\n\t请输入"<<Parent[1]<<"要修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n";cin>>name;if(strcmp(name,"0")!=0) strcpy(Tree->Parent->NextNode[0]->Name,name);4.4.3修改兄弟姐妹的信息cout<<"\n\n\t请输入"<<NewNode->NextNode[i]->Name<<"修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n";cin>>name;if(strcmp(name,"0")!=0) strcpy(NewNode->NextNode[i]->Name,name); cout<<"\n\n\t是否要修改性别(假如需要就输入'1'不需要修改就输入'0'然后按Enter键继续):\n";cin>>flag;if(flag==1){ if(NewNode->NextNode[i]->Sex=='0') NewNode->NextNode[i]->Sex='1'; elseNewNode->NextNode[i]->Sex='0';}4.4.4修改子女的信息cout<<"\n\n\t请输入"<<Tree->NextNode[i]->Name<<"修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n";cin>>name;if(strcmp(name,"0")!=0) strcpy(Tree->NextNode[i]->Name,name);cout<<"\n\n\t是否要修改性别(假如需要就输入'1',不需要修改就输入'0'然后按Enter键继续):\n";cin>>flag;if(flag==1){ if(Tree->NextNode[i]->Sex=='0') Tree->NextNode[i]->Sex='1'; else Tree->NextNode[i]->Sex='0';}第五章调试分析1.进入系统2.建立家谱3.查看信息4.添加成员5.修改信息第六章测试结果父亲姓名田迎新母亲姓名陈瑞英姐姐田紫藤姐夫孙超本人田紫恒李美霖致谢感谢孙红艳老师辛劳教导与教导,让我学到了很多知识,提高了很大的能力。与此同时,也感谢老师为我辛劳验收课设,耐心讲解,让我也受益匪浅。此后,我一定会努力学习,用我的实际行动来回报家长,感谢我的老师,为学校争光,努力为我们的国家,奉献出一份微薄的奉献!参考文献[1]《数据结构》C++语言版严蔚敏吴伟民编著清华大学出版社2023[2]《数据库数据结构软件工程课程设计指导及习题解答》徐志才方贤文刘士喜编北京师范大学出版社2023[3]《C++语言程序设计》何钦铭颜晖主编高等教育出版社2023附录#include<iostream.h>#include<string.h>#include<stdio.h>//getchar可以将键入的信息存到缓冲区,按Enter键将进行输入#include<stdlib.h>//system的头文献,exit的头文献#include<fstream.h>intMATEFLAG=0;typedefstructTreeNode{ intNum;//记录这个人拥有几个儿女 charName[20];//记录这个人的姓名 charSex;//标示节点的种类有女(0)男(1) structTreeNode*NextNode[20];//记录这个人的儿女 structTreeNode*Parent;//记录这个节点的父节点}TreeNode;voidCreatTree(TreeNode*Tree);//创建树voidOutPutAll(TreeNode*Tree);//遍历并输出树中的内容voidfirstoftxt();//写入文献的开始信息voidofAll(TreeNode*Tree);//写入文献函数voidifAll();//读取文献的函数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=newTreeNode; Tree->Parent=NULL; strcpy(Tree->Name,"0");MainMenue(Tree);}//添加新的成员voidAddNew(TreeNode*Tree){ SubMenue2(Tree);}//输出副菜单voidSubMenue2(TreeNode*Tree){charc; intnum; charname[20]; TreeNode*NewNode; while(1) { system("cls"); cout<<"\t"; cout<<"\n\n\t*****请选择你的操作****"; cout<<"\n\t***1:添加某个人的子女的信息****"; cout<<"\n\t***2:添加某个人配偶的信息-*****"; cout<<"\n\t***3:退出-*********\n\t"; cout<<"请输入:"; cin>>c; switch(c) { case'1': cout<<"\n\n\t请输入那个人的名字:"; cin>>name; Tree=SearchTree(Tree,name,20); if(Tree==NULL) { cout<<"\n\n\t****该家谱图中没有"<<name<<"这个人的信息,请确认是否输入错误*****\n"; break; } if(Tree->Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode[0]->Name) { cout<<"\n\n\t"<<Tree->Name<<"至今还没有配偶请先添加配偶!"; break; } if(Tree->Parent==NULL&&(Tree->Num>20||Tree->Num<0)) Tree->Num=0; if(MATEFLAG==1) Tree=Tree->Parent; NewNode=newTreeNode; cout<<"\n\n\t请输入添加人员姓名:"; cin>>NewNode->Name; cout<<"\n\n\t请输入添加人员性别女(0)男(1):"; cin>>NewNode->Sex; num=Tree->Num; NewNode->NextNode[0]=newTreeNode; NewNode->NextNode[0]=NULL; NewNode->Num=0; NewNode->Parent=Tree; Tree->NextNode[num+1]=NewNode; Tree->Num=Tree->Num+1; cout<<"\n\n\t子女的信息添加成功"; break; case'2': cout<<"\n\n\t请输入那个人的名字:"; cin>>name; Tree=SearchTree(Tree,name,20); if(Tree->Parent!=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0||Tree->NextNode[0]!=NULL) { cout<<"\n\n\t已有了配偶"; break; } if(Tree==NULL) { cout<<"\n\n\t****该家谱图中没有"<<name<<"这个人的信息,请确认是否输入错误*****\n"; break; } NewNode=newTreeNode; cout<<"\n\n\t请输入添加人员姓名:"; cin>>NewNode->Name; cout<<"\n\n\t请输入添加人员性别女(0)男(1):"; cin>>NewNode->Sex; NewNode->Parent=Tree; Tree->NextNode[0]=NewNode; break; case'3': cout<<"\n\n\t本项服务到此结束"; break; case'\n': break; default: cout<<"\n\n\t对不起!你的选择不在服务范围之内!"; cout<<"\n\t请您再次选择所需的服务项!"; cout<<"\n\t谢谢合作!\n\t";break; } if(c=='3') break; }}//修改某个人的信息voidChange(TreeNode*Tree){charname[20]; TreeNode*NewNode; cout<<"\n\t请输入你要修改的人的信息:";cin>>name; NewNode=SearchTree(Tree,name,20); if(NewNode==NULL){ cout<<"\n\n\t****该家谱图中没有"<<name<<"这个人的信息,请确认是否输入错误*****\n"; return; } else { SubMenue1(NewNode); }}//输出副菜单voidSubMenue1(TreeNode*Tree){ charc; intflag,i; charname[20]; charParent[2][20]; TreeNode*NewNode; while(1) { system("cls"); cout<<"\t"; cout<<"\n\n\t*****请选择你的操作****"; cout<<"\n\t***1:修改个人的信息******"; cout<<"\n\t***2:修改父母的信息******"; cout<<"\n\t***3:修改兄弟姐妹的信息*****"; cout<<"\n\t***4:修改子女的信息******"; cout<<"\n\t***5:修改配偶的信息******"; cout<<"\n\t***6:退出-*********\n\t"; cout<<"请输入:"; cin>>c; switch(c) { case'1': cout<<"\n\n\t请输入修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Name,name); cout<<"\n\n\t是否要修改性别:(假如需要就输入'1',不需要修改就输入'0'然后按Enter键继续):\n"; cin>>flag; if(flag==1) { if(Tree->Sex=='0') Tree->Sex='1'; elseTree->Sex='0'; } cout<<"\n\n\t个人信息修改成功!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'2': if(Tree->Parent==NULL) //判断是不是头节点 { cout<<"\n\t是这个家谱图里最顶端的人没有父母信息!"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } if(MATEFLAG==1) //判断是不是入赘或加入此间的 { if(Tree->Sex=='0') { cout<<"\n\n\t她是嫁入此间的所以父母信息不在家谱内涉及!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); } else { cout<<"\n\n\t他是入赘此间的所以父母信息不在家谱内涉及!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); } break; } if(Tree->Parent->Sex=='0') { strcpy(Parent[0],"母亲"); strcpy(Parent[1],"父亲"); } else { strcpy(Parent[0],"父亲"); strcpy(Parent[1],"母亲"); } cout<<"\n\n\t请输入"<<Parent[0]<<"要修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->Name,name); cout<<"\n\n\t请输入"<<Parent[1]<<"要修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->NextNode[0]->Name,name); cout<<"\n\n\t父母的信息修改成功"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'3': NewNode=Tree->Parent; if(NewNode==NULL) //判断是不是头节点 { cout<<"\n\t是这个家谱图里最顶端的人没有兄弟姐妹信息!"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar();break; } if(MATEFLAG==1) //判断是不是入赘或加入此间的 { if(Tree->Sex=='0') {cout<<"\n\n\t她是嫁入此间的所以兄弟姐妹信息不在家谱内涉及!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); } else {cout<<"\n\n\t他是入赘此间的所以兄弟姐妹信息不在家谱内涉及!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); } break; } if(NewNode->Num==1) { cout<<"\n\n\t没有兄弟姐妹!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } else { for(i=1;i<=NewNode->Num;i++) { if(NewNode->NextNode[i]->Name!=Tree->Name) { cout<<"\n\n\t请输入"<<NewNode->NextNode[i]->Name<<"修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(NewNode->NextNode[i]->Name,name); cout<<"\n\n\t是否要修改性别(假如需要就输入'1'不需要修改就输入'0'然后按Enter键继续):\n"; cin>>flag; if(flag==1) { if(NewNode->NextNode[i]->Sex=='0') NewNode->NextNode[i]->Sex='1'; elseNewNode->NextNode[i]->Sex='0'; } } } } cout<<"\n\n\t兄弟姐妹的信息修改成功"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'4': if(Tree->Num==0) { cout<<"\n\n\t至今还没有子女!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); 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++) { cout<<"\n\n\t请输入"<<Tree->NextNode[i]->Name<<"修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->NextNode[i]->Name,name); cout<<"\n\n\t是否要修改性别(假如需要就输入'1',不需要修改就输入'0'然后按Enter键继续):\n"; cin>>flag; if(flag==1) { if(Tree->NextNode[i]->Sex=='0') Tree->NextNode[i]->Sex='1'; else Tree->NextNode[i]->Sex='0'; } } cout<<"\n\n\t子女的信息修改成功"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'5': if(Tree->Parent!=NULL) { if(Tree->NextNode[0]==NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)!=0) { cout<<"\n\n\t至今还没有配偶!"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } if(strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0) { cout<<"\n\n\t请输入"<<Tree->Parent->Name<<"修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->Name,name); } else { cout<<"\n\n\t请输入"<<Tree->NextNode[0]->Name<<"修改的姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->NextNode[0]->Name,name); } } else { if(Tree->NextNode[0]==NULL) { cout<<"\n\n\t至今还没有配偶!"; } else { cout<<"\n\n\t请输入"<<Tree->NextNode[0]->Name<<"修改的姓名(假如不需要修改就输入'0'然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->NextNode[0]->Name,name); } } cout<<"\n\n\t配偶的信息修改成功"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'6': cout<<"\n\n\t本项服务到此结束"; break; default: cout<<"\n\n\t对不起!你的选择不在服务范围之内!"; cout<<"\n\t请您再次选择所需的服务项!"; cout<<"\n\t谢谢合作!"<<endl; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } if(c=='6') break; }}//输出主菜单voidMainMenue(TreeNode*Tree){ charc; charname[20]; while(1) { system("cls"); cout<<"\t"; cout<<"\n\n\t*****请选择你的操作****"; cout<<"\n\t1:输入家谱信息建立多叉树"; cout<<"\n\t2:在家族中查找某人并输出他或(她)的相应信息"; cout<<"\n\t3:添加新的成员"; cout<<"\n\t4:输出整个家谱信息"; cout<<"\n\t5:修改某个人的信息";cout<<"\n\t6:家谱信息存入文献"; cout<<"\n\t7:读取家谱信息文献"; cout<<"\n\t8:退出整个程序\n\t"; cout<<"请输入:"; cin>>c; switch(c) { case'1'://输入家谱信息建立多叉树 TreeNode*NewNode; NewNode=newTreeNode; cout<<"\n\t请输入姓名:"; cin>>Tree->Name; cout<<"\n\t请输入性别女(0)男(1):"; cin>>Tree->Sex; Tree->Parent=NewNode; Tree->Parent=NULL; CreatTree(Tree); cout<<"\n\t家谱图已经建立成功\n\n"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'2'://在家族中查找某人并输出他或(她)的相应信息 if(strcmp(Tree->Name,"0")==0) { cout<<"\n\t家谱图的多叉树尚未建立请先建立树\n"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } cout<<"\n\t请输入你要查找的人的姓名:"; cin>>name; OutPutMessage(SearchTree(Tree,name,20),name,20); cout<<"\n\n\t**********\n\t";cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'3'://添加新的成员 if(strcmp(Tree->Name,"0")==0) {cout<<"\n\t******家谱图的多叉树尚未建立请先建立树******\n"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } AddNew(Tree); cout<<"\n按Enter键继续操作......"<<endl;getchar();break; case'4'://输出整个家谱信息 if(strcmp(Tree->Name,"0")==0) {cout<<"\n\t******家谱图的多叉树尚未建立请先建立树******\n"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } cout<<"\n\n\t整个家谱的重要信息如下:"; OutPutAll(Tree); cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'5'://修改某个人的信息 if(strcmp(Tree->Name,"0")==0) {cout<<"\n\t******家谱图的多叉树尚未建立请先建立树******\n"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } Change(Tree); cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'6'://家谱信息存入文献 if(strcmp(Tree->Name,"0")==0) {cout<<"\n\t******家谱图的多叉树尚未建立请先建立树******\n"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break;} firstoftxt(); ofAll(Tree); cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; case'7'://读取家谱信息文献 ifAll(); cout<<"\n请按Enter键继续操作......"<<endl; getchar(); break; case'8'://退出整个程序 cout<<"\n\n\t本次服务到此结束"; cout<<"\n\t欢迎下次使用"; cout<<"\n\t谢谢\n\n"; exit(0);break; default: cout<<"\n\n\t对不起!你的选择不在服务范围之内!"; cout<<"\n\t请您再次选择所需的服务项!"; cout<<"\n\t谢谢合作!\n\t"; cout<<"\n按Enter键继续操作......"<<endl; getchar(); break; } }}//创建树voidCreatTree(TreeNode*Node){ inti; intflag; TreeNode*NewNode; NewNode=newTreeNode;Node->NextNode[0]=NewNode; Node->NextNode[0]=NULL; cout<<"\n\t请输入"<<Node->Name<<"的配偶的姓名:"; cin>>NewNode->Name; cout<<"\n\t请输入"<<Node->Name<<"的子女的数目:";cin>>Node->Num; if((Node->Num)==0&&strcmp(NewNode->Name,"0")==0) return; if(Node->Sex=='0') NewNode->Sex='1'; else NewNode->Sex='0'; NewNode->Num=0; NewNode->NextNode[0]=NULL; Node->NextNode[0]=NewNode; Node->NextNode[0]->Parent=Node; for(i=1;i<=Node->Num;i++) { NewNode=newTreeNode; cout<<"\n\t请输入"<<Node->Name<<"的第"<<i<<"子女的名字:"; cin>>NewNode->Name; cout<<"\n\t请输入"<<Node->Name<<"的第"<<i<<"子女的性别女(0)男(1):"; cin>>NewNode->Sex; NewNode->Num=0; NewNode->Parent=Node; Node->NextNode[i]=NewNode; CreatTree(Node->NextNode[i]); }}//遍历并输出树中的内容voidOutPutAll(TreeNode*Tree){ inti,flag=0; cout<<"\n\t****************************"; cout<<"\n\t姓名:"<<Tree->Name<<"性别:"; if(Tree->Sex=='0') { flag=1; cout<<"女"; } else cout<<"男"; if(!(Tree->NextNode[0])) { cout<<"\n\t******至今没有配偶和子女******\n"; return; }if(flag==1) cout<<"\n\t丈夫姓名:"<<Tree->NextNode[0]->Name; else cout<<"\n\t妻子姓名:"<<Tree->NextNode[0]->Name; for(i=1;i<=Tree->Num;i++) { cout<<"\n\t第"<<i<<"个子女的姓名:"<<Tree->NextNode[i]->Name<<"性别:"; if(Tree->NextNode[i]->Sex=='0') cout<<"女"; else cout<<"男"; } cout<<"\n\t"; for(i=1;i<=Tree->Num;i++) { OutPutAll(Tree->NextNode[i]); }}//家谱信息存入文献voidfirstoftxt(){ fstreamoutf("D:\\f1.txt",ios::out|ios::trunc); if(!outf) { cerr<<"打开文献错误!"<<endl; return; } else { outf<<"\n\n\t******整个家谱的重要信息如下:"<<endl; } outf.close();}voidofAll(TreeNode*Tree){ fstreamoutf("D:\\f1.txt",ios::out|ios::ate|ios::app); if(!outf) { cerr<<"打开文献错误!"<<endl; return; } else { inti,flag=0; outf<<"\n\t****************************"; outf<<"\n\t姓名:"<<Tree->Name<<"性别:"; if(Tree->Sex=='0') { flag=1; outf<<"女"; } else outf<<"男"; if(!(Tree->NextNode[0])) { outf<<"\n\t******至今没有配偶和子女******\n"; return; }if(flag==1) outf<<"\n\t丈夫姓名:"<<Tree->NextNode[0]->Name; else outf<<"\n\t妻子姓名:"<<Tree->NextNode[0]->Name; for(i=1;i<=Tree->Num;i++) {outf<<"\n\t第"<<i<<"个子女的姓名:"<<Tree->NextNode[i]->Name<<"性别:"; if(Tree->NextNode[i]->Sex=='0') outf<<"女"; else outf<<"男"; } outf<<"\n\t"; for(i=1;i<=Tree->Num;i++) { ofAll(Tree->NextNode[i]); } } outf.close(); cout<<"\n\t******家谱信息存入文献成功!**********"<<endl;}//读取家谱信息voidifAll(){ chars[100]; ifstreaminf("D:\\f1.txt",ios::in);if(!inf) { cerr<<"文献打开错误!"<<endl; return; } inf.getline(s,100); cout<<s<<'\n'; while(!inf.eof()) { inf.getline(s,100); cout<<s<<'\n'; } inf.close(); cout<<"\n\t*********家谱信息文献读取成功!**********"<<endl;}//在树中通过遍历查找某个人TreeNode*SearchTree(TreeNode*Tree,charname[],intlength){ inti; TreeNode*NewNode; if(strcmp(Tree->Name,name)==0) { if(length==0) MATEFLAG=1; else MATEFLAG=0; returnTree; } if(Tree->NextNode[0]==NULL) returnNULL; for(i=0;i<=Tree->Num;i++) { if(i==0) NewNode=SearchTree(Tree->NextNode[i],name,0); else NewNode=SearchTree(Tree->NextNode[i],name,20); if(NewNode!=NULL) returnNewNode; } returnNULL;}//输出已经查找到的人的信息voidOutPutMessage(TreeNode*Tree,charname[],intlength){ intflag=0,i; TreeNode*NewNode; cout<<"\n\n\t*********

温馨提示

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

评论

0/150

提交评论