家谱管理系统数据结构大作业2.pdf
《家谱管理系统数据结构大作业2.pdf》由会员分享,可在线阅读,更多相关《家谱管理系统数据结构大作业2.pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、./*家谱管理系统任务:实现具有下列功能的家谱管理系统功能要求:1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).实现数据的存盘和读盘。3).以图形方式显示家谱。4).显示第 n 代所有人的信息。5).按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)6).按照出生日期查询成员名单。7).输入两人姓名,确定其关系。8).某成员添加孩子。9).删除某成员(若其还有后代,则一并删除)10).修改某成员信息。11).按出生日期对家谱中所有人排序。12).打开一家谱时,提示
2、当天生日的健在成员。要求:建立至少 30 个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用稳定。测试数据及测试结果请在上交的资料中写明;*/#include#include#include#include#includemap.h#define MAXN 100#define MAXMEM 100#define Elemtype char=/树typedef struct BiTNodeint mark
3、;/标记int level;char name50;/姓名char birthday50;/生日char addressMAXN;/住址1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的。.bool marriage;/婚否(true 表示结婚,false 表示没结婚)bool live;/建在(true 表示活着,false 表示过世)bool sex;/性别(true 表示男,false 表示女)char livemassage50;/死亡日期(如果其已经死亡)Elemtype data;/struct BiTNode*lc,*rc;BiTNode,*BiTree;/树的相关操
4、作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;
5、/计数int choice;/各种选择int use;BiTree temp;struct BiTNodeListBiTree 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);elseT=(BiTree)malloc(sizeof(BiTNode);/fscanf(in,%s%s%s%d%d,nametemp,birthdaytemp,addre
6、sstemp,&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-
7、level=leveltemp;T-sex=sextemp;/printf(%smp);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-add
8、ress);if(T-marriage)printf(t已婚);if(!T-marriage)printf(t未婚);if(T-sex)%s%s%d%dn,nametemp,birthdaytemp,addresstemp,marriagetemp,livete.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(PreOr
9、derTraverse_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);PreOrd
10、erTraverse_recursion(T-rc);void ShowFamilyTree(BiTree T)/以图形的方式显示家谱int 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);elseprintf(if(T-rc)p=T-rc;ShowFamilyTree(p);void ShowNth(BiTree T)/显示第 n 代所有人的信息if(T)if(T-level=Nth)PrintInfo
11、(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)(未婚)n);.if(T-lc)if(T-lc-rc)temp=T-lc-rc;while(temp)if(strcmp(temp-name,searchname)=0)count+;printf(n此人的
12、信息为: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
13、-lc-name,T-lc-birthday,T-lc-address,T-lc-marriage,T-lc-live,T-lc-sex);if(!temp-livemassage)printf(此人还没有妻室n);elseprintf(此人妻子的信息为: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(此人孩子的
14、信息为: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;elsetemp=temp-rc;SearchByName(T-lc);SearchByName(T-rc);void SearchByBirthday(BiTree T)/按照出生日期查询成员名单if(T)if(strcmp(T-birthday
15、,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(该成员还没有结婚,不能添加孩子return;if(!T-sex)printf(不能
16、为该家谱中的女性添加孩子return;elsetemp=(BiTree)malloc(sizeof(BiTNode);printf(请输入添加孩子的姓名n);scanf(%s,temp-name);printf(请输入添加孩子的出生年月scanf(%s,temp-birthday);printf(请输入添加孩子的家庭住址scanf(%s,temp-address);printf(请输入添加孩子的婚姻状况scanf(%d,&temp-marriage);printf(请输入添加孩子的在世情况scanf(%d,&temp-live);if(!temp-live)printf(请输入添加孩子的去世时
17、间scanf(%s,temp-livemassage);printf(请输入添加孩子的性别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)n);n);n);(格式形如:2010-1-1)n);0/1(0 表示未婚,1 表示已婚)n);0/1(0 表示去世,1 表示在世)n);(格式形如:2010-1-1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 家谱 管理 系统 数据结构 作业
限制150内