家谱管理方案计划系统-数据结构大课后复习_第1页
家谱管理方案计划系统-数据结构大课后复习_第2页
家谱管理方案计划系统-数据结构大课后复习_第3页
家谱管理方案计划系统-数据结构大课后复习_第4页
家谱管理方案计划系统-数据结构大课后复习_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

!-/* 家谱管理系统任务:实现具有下列功能的家谱管理系统功能要求:1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:谢谢阅读姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。谢谢阅读2).实现数据的存盘和读盘。3).以图形方式显示家谱。4).显示第n代所有人的信息。5).按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。感谢阅读6).按照出生日期查询成员名单。7).输入两人姓名,确定其关系。8).某成员添加孩子。9).删除某成员(若其还有后代,则一并删除)。10).修改某成员信息。11).按出生日期对家谱中所有人排序。12).打开一家谱时,提示当天生日的健在成员。要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。感谢阅读测试数据及测试结果请在上交的资料中写明;*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include"map.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;i<lev;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);printf("请输入添加孩子的出生年月(格式形如:2010-1-1)\n");精品文档放心下载scanf("%s",temp->birthday);感谢阅读printf("请输入添加孩子的家庭住址\n");scanf("%s",temp->address);感谢阅读printf("请输入添加孩子的婚姻状况0/1(0表示未婚,1表示已婚)\n");scanf("%d",&temp->marriage);精品文档放心下载printf("请输入添加孩子的在世情况0/1(0表示去世,1表示在世)\n");精品文档放心下载scanf("%d",&temp->live);if(!temp->live){printf("请输入添加孩子的去世时间(格式形如:2010-1-1)\n");scanf("%s",temp->livemassage);精品文档放心下载}printf("请输入添加孩子的性别0/1(0表示女,1表示男)\n");感谢阅读scanf("%d",&temp->sex);temp->level=T->level+1;temp->rc=T->lc->rc;temp->lc=NULL;T->lc->rc=temp;printf("孩子添加成功\n");return;}}AddChild(T->lc);AddChild(T->rc);}}voidAddWife(BiTree&T)//某成员添加妻子谢谢阅读{if(T)!-{if(strcmp(T->name,searchname)==0)精品文档放心下载{count++;if(T->lc){printf("该成员已有妻子,可以通过修改的方式替换该妻子\n");return;谢谢阅读}else{temp=(BiTree)malloc(sizeof(BiTNode));感谢阅读printf("请输入添加妻子的姓名\n");scanf("%s",temp->name);printf("请输入添加妻子的出生年月(格式形如:2010-1-1)\n");精品文档放心下载scanf("%s",temp->birthday);谢谢阅读printf("请输入添加妻子的家庭住址\n");scanf("%s",temp->address);精品文档放心下载printf("请输入添加妻子的婚姻状况0/1(0表示未婚,1表示已婚)\n");scanf("%d",&temp->marriage);感谢阅读printf("请输入添加妻子的在世情况(0表示去世,1表示在世)\n");谢谢阅读scanf("%d",&temp->live);if(!temp->live){printf("请输入添加妻子的去世时间(格式形如:2010-1-1)\n");scanf("%s",temp->livemassage);感谢阅读}printf("请输入添加妻子的性别0/1(0表示女,1表示男)\n");感谢阅读scanf("%d",&temp->sex);temp->level=T->level;temp->lc=NULL;temp->rc=NULL;T->lc=temp;T->marriage=true;printf("妻子添加成功\n");return;}}AddWife(T->lc);AddWife(T->rc);}}voidDeleteByName(BiTree&T)//删除某成员(若其还有后代,则一并删除)精品文档放心下载!-{//printf("PreOrderTraverse_recursion\n");感谢阅读if(T){if(strcmp(T->name,searchname)==0)感谢阅读{count++;T=NULL;return;}//printf("%-10s%-10s%-10s%5d%5d%5d\n",T->name,T->birthday,T->address,T->marriage,T->live,T->sex);精品文档放心下载DeleteByName(T->lc);DeleteByName(T->rc);}}voidFixLevel(BiTreeT){if(T){if(strcmp(T->name,searchname)==0)谢谢阅读{count=T->level;}FixLevel(T->lc);FixLevel(T->rc);}}voidFixRelation(BiTreeT)//输入两人姓名,确定其关系精品文档放心下载{intlevo,levt;charlevone[50],levtwo[50];谢谢阅读printf("请输入第一个人的姓名\n");scanf("%s",searchname);strcpy(levone,searchname);感谢阅读FixLevel(T);levo=count;if(levo==-1){printf("家谱无此人,请从新进入\n");return;!-}printf("请输入第二个人的姓名\n");scanf("%s",searchname);strcpy(levtwo,searchname);谢谢阅读FixLevel(T);levt=count;if(levt==-1){printf("家谱无此人\n");return;}if(levo<levt)printf("%s比%s大%d辈\n",levone,levtwo,levt-levo);elseif(levo>levt)谢谢阅读printf("%s比%s大%d辈\n",levtwo,levone,levo-levt);elseif(levo==levt)谢谢阅读printf("%s和%s平辈\n",levone,levtwo);谢谢阅读}voidShowAmend(){printf("1.修改姓名\n");printf("2.修改出生年月\n");printf("3.修改家庭住址\n");printf("4.修改婚姻状况\n");printf("5.修改在世情况\n");printf("6.修改性别\n");printf("7.返回上一级\n");printf("请输入选项(1-7):");}voidDoAmend(BiTree&T){while(1){system("cls");ShowAmend();scanf("%d",&choice);switch(choice){case1:printf("请输入修改后的姓名:");scanf("%s",T->name);break;!-case2:printf("请输入修改后的出生年月:");scanf("%s",T->birthday);break;case3:printf("请输入修改后的住址:");scanf("%s",T->address);break;case4:printf("请输入修改后的婚姻状况:");scanf("%d",&T->marriage);break;case5:printf("请输入修改后的在世情况:");scanf("%d",&T->live);if(!T->live){printf("请输入本人的过世时间:");scanf("%s",T->livemassage);精品文档放心下载}break;case6:printf("请输入修改后的性别(1表示男,0表示女):");scanf("%d",&T->sex);感谢阅读case7:return;default:printf("输入非法,请重新输入\n");break;}}}voidAmendInfo(BiTree&T)//修改某成员信息。谢谢阅读{if(T){if(strcmp(T->name,searchname)==0)精品文档放心下载{count++;DoAmend(T);return;}AmendInfo(T->lc);!-AmendInfo(T->rc);}}voidSequence(BiTreeT)//按出生日期对家谱中所有人排序。精品文档放心下载{if(T){BiTNodeList*temp;BiTNodeList*p;temp=(BiTNodeList*)malloc(sizeof(BiTNodeList));精品文档放心下载temp->data=T;//p=List;//while(p->)for(p=List;(p->next!=NULL)&&(strcmp(p->next->data->birthday,temp->data->birthday)<0);p=p->next);temp->next=p->next;精品文档放心下载p->next=temp;Sequence(T->lc);Sequence(T->rc);}}voidPrintSequence(BiTreeT)谢谢阅读{BiTNodeList*p;p=List;Sequence(T);printf("\t\t\t\t排序结果\n\n");谢谢阅读PrintLine();printf("\n");while(p->next!=NULL){printf(" ");PrintInfo(p->next->data);//printf("\t%-10s%-10s%-10s%5d%5d%5d\n",p->next->data->name,p->next->data->birthday,p->next->data->address,p->next->data->marriage,p->next->data->live,p->next->data->sex);谢谢阅读p=p->next;}printf("\n");PrintLine();}!-voidLocateTime(){time_tt=time(0);strftime(birthdaytemp,64,"%Y-%m-%d",localtime(&t));感谢阅读}voidBirthToday(BiTreeT)//打开一家谱时,提示当天生日的健在成员。谢谢阅读{if(T){if(strcmp(T->birthday,birthdaytemp)==0)精品文档放心下载{count++;printf("%s\n",T->name);}BirthToday(T->lc);BirthToday(T->rc);}}voidShowMenu(){PrintBat();printf("\n");PrintLine();printf("\n");printf("\t\t\t欢迎进入家谱管理系统\n\n");printf("1.显示今天生日成员2.显示家谱\n");printf("3.显示第n代所有人的信息4.按姓名查找成员\n");printf("5.按出生日期查找成员6.为成员添加孩子\n");printf("7.为成员添加妻子8.删除成员\n");printf("9.修改成员信息10.确定两个人的关系\n");printf("11.按出生年月排序家谱成员12.退出程序\n");printf("\n");PrintLine();printf("\n");printf(" 已经从文件读入初始家谱信息,请输入您的操作(1-12):");谢谢阅读}intmain(void){intchoice;FILE*in;in=fopen("7.out","r");!-BiTreeT;CreatBiTree(T,in);//PreOrderTraverse_recursion(T);精品文档放心下载while(1){system("cls");ShowMenu();scanf("%d",&choice);getchar();system("cls");switch(choice){case1:LocateTime();count=0;BirthToday(T);if(count==0)printf("今天家谱中没有成员过生日\n");system("pause");break;case2:ShowFamilyTree(T);system("pause");break;case3:printf("请输入需要查询第几代人:");count=0;scanf("%d",&Nth);ShowNth(T);if(count==0)printf("第%d代尚未有人。\n",Nth);感谢阅读system("pause");break;case4:printf("请输入要查询人的姓名:");scanf("%s",searchname);if(strcmp(T->name,searchname)==0)精品文档放心下载{printf("此人为家谱的祖先,其信息为:\n");感谢阅读printf("%-10s%-10s%-10s%5d%5d%5d\n",T->name,T->birthday,T->address,T->marriage,T->live,T->sex);谢谢阅读printf("他妻子的信息为:\n");!-printf("%-10s%-10s%-10s%5d%5d%5d\n",T->lc->name,T->lc->birthday,T->lc->address,T->lc->marriage,T->lc->live,T->lc->sex);精品文档放心下载temp=T->lc;if(temp->rc){pri

温馨提示

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

评论

0/150

提交评论