家谱管理系统--数据结构大作业.doc
《家谱管理系统--数据结构大作业.doc》由会员分享,可在线阅读,更多相关《家谱管理系统--数据结构大作业.doc(17页珍藏版)》请在咨信网上搜索。
/* 家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 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” #define MAXN 100 #define MAXMEM 100 #define Elemtype char ============================== //树 typedef struct BiTNode { int mark;//标记 int level; char name[50];//姓名 char birthday[50];//生日 char address[MAXN];//住址 bool marriage;//婚否(true表示结婚,false表示没结婚) bool live;//建在(true表示活着,false表示过世) bool sex;//性别(true表示男,false表示女) char livemassage[50];//死亡日期(如果其已经死亡) Elemtype data;// struct BiTNode *lc,*rc; }BiTNode,*BiTree; //树的相关操作 char nametemp[50];//姓名 char birthdaytemp[50];//生日 char addresstemp[MAXN];//住址 bool marriagetemp;//婚否(true表示结婚,false表示没结婚) bool livetemp;//建在(true表示或者,false表示过世) bool sextemp; char livemassagetemp[MAXN];//死亡日期(如果其已经死亡) char ch;//额外使用 int leveltemp;//人的代数 int Nth;//显示第n代人时要用 char searchdata[50]; char searchname[50]; int count;//计数 int choice;//各种选择 int use; BiTree temp; struct BiTNodeList { BiTree data; BiTNodeList *next; }; BiTNodeList *List; //--—————-—-— void CreatBiTree(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); } } void PrintInfo(BiTree 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); } void PreOrderTraverse_recursion(BiTree T)//递归 先序遍历(检查建树是否正确) { //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); } } void ShowFamilyTree(BiTree T)//以图形的方式显示家谱 { int i,lev; BiTree p; 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); } } else printf(” (未婚)\n"); } if(T-〉rc) { p = T-〉rc; ShowFamilyTree(p); } } void ShowNth(BiTree T)//显示第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); } } void SearchByName(BiTree T)//按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。不能查询祖先信息 { 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; } else temp = temp-〉rc; } } } SearchByName(T—>lc); SearchByName(T-〉rc); } } void SearchByBirthday(BiTree T)//按照出生日期查询成员名单 { 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); } } void AddChild(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); } } void AddWife(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); } } void DeleteByName(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); } } void FixLevel(BiTree T) { if(T) { if(strcmp(T—>name,searchname) == 0) { count = T—>level; } FixLevel(T->lc); FixLevel(T->rc); } } void FixRelation(BiTree T)//输入两人姓名,确定其关系 { int levo,levt; char levone[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); else if(levo > levt) printf("%s 比 %s 大 %d 辈\n",levtwo,levone,levo—levt); else if(levo == levt) printf(”%s 和 %s 平辈\n”,levone,levtwo); } void ShowAmend() { printf("1。修改姓名\n”); printf("2。修改出生年月\n”); printf("3.修改家庭住址\n"); printf(”4。修改婚姻状况\n”); printf(”5。修改在世情况\n"); printf("6.修改性别\n”); printf(”7.返回上一级\n”); printf(”请输入选项(1-7): ”); } void DoAmend(BiTree &T) { while(1) { system("cls”); ShowAmend(); scanf(”%d”,&choice); switch(choice) { case 1: printf(”请输入修改后的姓名: ”); scanf("%s",T->name); break; case 2: printf(”请输入修改后的出生年月: "); scanf("%s",T—〉birthday); break; case 3: printf(”请输入修改后的住址: "); scanf("%s",T—>address); break; case 4: printf("请输入修改后的婚姻状况: "); scanf(”%d",&T—〉marriage); break; case 5: printf(”请输入修改后的在世情况: ”); scanf(”%d”,&T->live); if(!T->live) { printf("请输入本人的过世时间: ”); scanf(”%s",T—>livemassage); } break; case 6: printf("请输入修改后的性别(1表示男,0表示女): "); scanf("%d”,&T->sex); case 7: return; default: printf("输入非法,请重新输入\n"); break; } } } void AmendInfo(BiTree &T)//修改某成员信息。 { if(T) { if(strcmp(T—>name,searchname) == 0) { count++; DoAmend(T); return; } AmendInfo(T->lc); AmendInfo(T—〉rc); } } void Sequence(BiTree T)//按出生日期对家谱中所有人排序. { 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); } } void PrintSequence(BiTree T) { 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(); } void LocateTime() { time_t t=time(0); strftime(birthdaytemp,64,"%Y-%m—%d”,localtime(&t)); } void BirthToday(BiTree T)//打开一家谱时,提示当天生日的健在成员。 { if(T) { if(strcmp(T—〉birthday,birthdaytemp) == 0) { count++; printf(”%s\n”,T->name); } BirthToday(T—〉lc); BirthToday(T—〉rc); } } void ShowMenu() { 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”);- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 家谱 管理 系统 数据结构 作业
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文