家谱标准管理系统数据结构大作业.doc
《家谱标准管理系统数据结构大作业.doc》由会员分享,可在线阅读,更多相关《家谱标准管理系统数据结构大作业.doc(27页珍藏版)》请在咨信网上搜索。
/* 家谱管理系统 任务:实现含有下列功效家谱管理系统 功效要求: 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("请输入添加孩子出生年月(格式形如: -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("请输入添加孩子逝世时间(格式形如: -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("请输入添加妻子出生年月(格式形如: -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("请输入添加妻子逝世时间(格式形如: -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")- 配套讲稿:
如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。
关于本文