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

上传人:豆**** 文档编号:24143332 上传时间:2022-07-03 格式:DOC 页数:83 大小:458.50KB
返回 下载 相关 举报
家谱管理系统--数据结构大作业.doc_第1页
第1页 / 共83页
家谱管理系统--数据结构大作业.doc_第2页
第2页 / 共83页
点击查看更多>>
资源描述

《家谱管理系统--数据结构大作业.doc》由会员分享,可在线阅读,更多相关《家谱管理系统--数据结构大作业.doc(83页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、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 代所

2、有人的信息。5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6). 按照出生日期查询成员名单。7). 输入两人姓名,确定其关系。8). 某成员添加孩子。9). 删除某成员(若其还有后代,则一并删除)。10).修改某成员信息。11).按出生日期对家谱中所有人排序。12).打开一家谱时,提示当天生日的健在成员。要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法

3、数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;*/#include#include#include#include#includemap.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

4、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表示过

5、世)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)/建立双链

6、二叉树 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,bir

7、thdaytemp); 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);

8、 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已婚);

9、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)

10、; 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

11、i,lev; BiTree p; p = T; if(T) lev = T-level; for(i=0; iname); 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

12、%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)

13、; /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-b

14、irthday,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

15、); 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

16、(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

17、); 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(%

18、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; pri

19、ntf(孩子添加成功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

20、-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(请输入添加妻子的

21、性别 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)

22、 = 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)/输入两

23、人姓名,确定其关系 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)

24、 printf(家谱无此人n); return; 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(请输入选项

25、(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(请输入修改后的婚姻状况:

26、 ); 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

27、) 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

28、-next-data-birthday,temp-data-birthday)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%-

29、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)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

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

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