欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    家谱管理系统--数据结构大作业.doc

    • 资源ID:24143332       资源大小:458.50KB        全文页数:83页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    家谱管理系统--数据结构大作业.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date家谱管理系统-数据结构大作业家谱管理系统-数据结构大作业/* 家谱管理系统 任务:实现具有下列功能的家谱管理系统功能要求: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 BiTNodeint mark;/标记 int level; char name50;/姓名 char birthday50;/生日 char addressMAXN;/住址 bool marriage;/婚否(true表示结婚,false表示没结婚) bool live;/建在(true表示活着,false表示过世) bool sex;/性别(true表示男,false表示女) char livemassage50;/死亡日期(如果其已经死亡) Elemtype data;/ struct BiTNode *lc,*rc; BiTNode,*BiTree;/树的相关操作char nametemp50;/姓名char birthdaytemp50;/生日char addresstempMAXN;/住址bool marriagetemp;/婚否(true表示结婚,false表示没结婚)bool livetemp;/建在(true表示或者,false表示过世)bool sextemp;char livemassagetempMAXN;/死亡日期(如果其已经死亡)char ch;/额外使用int leveltemp;/人的代数int Nth;/显示第n代人时要用char searchdata50;char searchname50;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("%cn",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 %dn",nametemp,birthdaytemp,addresstemp,marriagetemp,livetemp); if(!livetemp) fscanf(in,"%s",livemassagetemp); /printf("%sn",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去世于:%sn",T->livemassage);void PreOrderTraverse_recursion(BiTree T)/递归 先序遍历(检查建树是否正确)/printf("PreOrderTraverse_recursionn");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去世于:%sn",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%5dn",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%5dnn",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%5dn",T->name,T->birthday,T->address,T->marriage,T->live,T->sex); /printf("%-10s%-10s%-10s%5d%5d%5dnn",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%5dnn",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%5dn",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%5dn",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_recursionn");if(T)if(strcmp(T->name,searchname) = 0) count+; T = NULL; return; /printf("%-10s%-10s%-10s%5d%5d%5dn",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 levone50,levtwo50; 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("tttt排序结果nn"); PrintLine(); printf("n"); while(p->next != NULL) printf(" "); PrintInfo(p->next->data); /printf("t%-10s%-10s%-10s%5d%5d%5dn",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)

    注意事项

    本文(家谱管理系统--数据结构大作业.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开