您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 纺织服装 > 家谱管理系统-数据结构大作业
....../*家谱管理系统任务:实现具有下列功能的家谱管理系统功能要求:1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).实现数据的存盘和读盘。3).以图形方式显示家谱。4).显示第n代所有人的信息。5).按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6).按照出生日期查询成员名单。7).输入两人姓名,确定其关系。8).某成员添加孩子。9).删除某成员(若其还有后代,则一并删除)。10).修改某成员信息。11).按出生日期对家谱中所有人排序。12).打开一家谱时,提示当天生日的健在成员。要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;*/#includestdio.h#includestdlib.h#includestring.h#includetime.h#includemap.h#defineMAXN100#defineMAXMEM100#defineElemtypechar==============================//树typedefstructBiTNode{intmark;//标记intlevel;charname[50];//姓名charbirthday[50];//生日charaddress[MAXN];//住址......boolmarriage;//婚否(true表示结婚,false表示没结婚)boollive;//建在(true表示活着,false表示过世)boolsex;//性别(true表示男,false表示女)charlivemassage[50];//死亡日期(如果其已经死亡)Elemtypedata;//structBiTNode*lc,*rc;}BiTNode,*BiTree;//树的相关操作charnametemp[50];//姓名charbirthdaytemp[50];//生日charaddresstemp[MAXN];//住址boolmarriagetemp;//婚否(true表示结婚,false表示没结婚)boollivetemp;//建在(true表示或者,false表示过世)boolsextemp;charlivemassagetemp[MAXN];//死亡日期(如果其已经死亡)charch;//额外使用intleveltemp;//人的代数intNth;//显示第n代人时要用charsearchdata[50];charsearchname[50];intcount;//计数intchoice;//各种选择intuse;BiTreetemp;structBiTNodeList{BiTreedata;BiTNodeList*next;};BiTNodeList*List;//-----------voidCreatBiTree(BiTree&T,FILE*in)//建立双链二叉树{fscanf(in,%c,&ch);//printf(%c\n,ch);if(ch=='@'){......T=NULL;fscanf(in,%c,&ch);}else{T=(BiTree)malloc(sizeof(BiTNode));//fscanf(in,%s%s%s%d%d,nametemp,birthdaytemp,addresstemp,&marriagetemp,&livetemp);fscanf(in,%s,nametemp);strcpy(T-name,nametemp);fscanf(in,%s,birthdaytemp);strcpy(T-birthday,birthdaytemp);fscanf(in,%s,addresstemp);strcpy(T-address,addresstemp);fscanf(in,%d%d%d%d,&marriagetemp,&livetemp,&leveltemp,&sextemp);T-marriage=marriagetemp;T-live=livetemp;T-level=leveltemp;T-sex=sextemp;//printf(%s%s%s%d%d\n,nametemp,birthdaytemp,addresstemp,marriagetemp,livetemp);if(!livetemp){fscanf(in,%s,livemassagetemp);//printf(%s\n,livemassagetemp);}if(!T-live)strcpy(T-livemassage,livemassagetemp);fscanf(in,%c,&ch);CreatBiTree(T-lc,in);CreatBiTree(T-rc,in);}}voidPrintInfo(BiTreeT){printf(%-10s出生于:%-10s%-10s,T-name,T-birthday,T-address);if(T-marriage)printf(\t已婚);if(!T-marriage)printf(\t未婚);if(T-sex)......printf(\t男);if(!T-sex)printf(\t女);if(T-live)printf(\t健在\n);if(!T-live)printf(\t去世于:%s\n,T-livemassage);}voidPreOrderTraverse_recursion(BiTreeT)//递归先序遍历(检查建树是否正确){//printf(PreOrderTraverse_recursion\n);if(T){/*printf(%-10s出生于:%-10s%-10s,T-name,T-birthday,T-address);if(T-marriage)printf(\t已婚);if(!T-marriage)printf(\t未婚);if(T-sex)printf(\t男);if(!T-sex)printf(\t女);if(T-live)printf(\t健在\n);if(!T-live)printf(\t去世于:%s\n,T-livemassage);*/PrintInfo(T);PreOrderTraverse_recursion(T-lc);PreOrderTraverse_recursion(T-rc);}}voidShowFamilyTree(BiTreeT)//以图形的方式显示家谱{inti,lev;BiTreep;p=T;if(T){lev=T-level;for(i=0;ilev;i++)printf(\t);......printf(%-5s,p-name);if(p-lc){p=T-lc;printf(★*★%5s%\n,p-name);if(p-rc){p=p-rc;ShowFamilyTree(p);}}elseprintf((未婚)\n);}if(T-rc){p=T-rc;ShowFamilyTree(p);}}voidShowNth(BiTreeT)//显示第n代所有人的信息{if(T){if(T-level==Nth){PrintInfo(T);//printf(%-10s%-10s%-10s%5d%5d%5d\n,T-name,T-birthday,T-address,T-marriage,T-live,T-sex);count++;}ShowNth(T-lc);ShowNth(T-rc);}}voidSearchByName(BiTreeT)//按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。不能查询祖先信息{if(T)......{if(T-lc){if(T-lc-rc){temp=T-lc-rc;while(temp){if(strcmp(temp-name,searchname)==0){count++;printf(\n此人的信息为:\n);PrintInfo(temp);//printf(%-10s%-10s%-10s%5d%5d%5d\n\n,temp-name,temp-birthday,temp-address,temp-marriage,temp-live,temp-sex);printf(此人父母的信息为:\n);PrintInfo(T);PrintInfo(T-lc);//printf(%-10s%-10s%-10s%5d%5d%5d\n,T-name,T-birthday,T-address,T-marriage,T-live,T-sex);//printf(%-10s%-10s%-10s%5d%5d%5d\n\n,T-lc-name,T-lc-birthday,T-lc-address,T-lc-marriage,T-lc-live,T-lc-sex);if(!temp-livemassage)printf(此人还没有妻室\n);else{printf(此人妻子的信息为:\n);PrintInfo(temp-lc);//printf(%-10s%-10s%-10s%5d%5d%5d\n\n,temp-lc-name,temp-lc-birthday,temp-lc-address,temp-lc-marriage,temp-lc-live,temp-lc-sex);if(temp-lc-rc){printf(此人孩子的信息为:\n);temp=temp-lc-rc;while(temp){PrintInfo(temp);//printf(%-10s%-10s%-10s%5d%5d%5d\n,temp-name,temp-birthday,temp-address,temp-marriage,temp-live,temp-sex);......temp=temp-rc;}}}return;}elsetemp=temp-rc;}}}SearchByName(T-lc);SearchByName(T-rc);}}voidSearchByBirthday(BiTreeT)//按照出生日期查询成员名单{if(T){if(strcmp(T-birthday,searchdata)==0){PrintInfo(T);//printf(%-10s%-10s%-10s%5d%5d%5d\n,T-name,T-birthday,T-address,T-marriage,T-live,T-sex);count++;}SearchByBirthday(T-lc);SearchByBirthday(T-rc);}}voidAddChild(BiTree&T)//某成员添加孩子{if(T){if(strcmp(T-name,searchname)==0){count++;if(!T-lc){......printf(该成员还没有结婚,不能添加孩子\n);return;}if(!T-sex){printf(不能为该家谱中的女性添加孩子\n);return;}else{temp=(BiTree)malloc(sizeof(BiTNode));printf(请输入添加孩子的姓名\n);scanf(%s,temp-name);print
本文标题:家谱管理系统-数据结构大作业
链接地址:https://www.777doc.com/doc-6918624 .html