家谱管理系统 数据结构大作业规程指导Word文档下载推荐.docx
- 文档编号:22258607
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:28
- 大小:19.88KB
家谱管理系统 数据结构大作业规程指导Word文档下载推荐.docx
《家谱管理系统 数据结构大作业规程指导Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《家谱管理系统 数据结构大作业规程指导Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
#defineMAXN100
#defineMAXMEM100
#defineElemtypechar
==============================
//树
typedefstructBiTNode
{
intmark;
//标记
intlevel;
charname[50];
//姓名
charbirthday[50];
//生日
charaddress[MAXN];
//住址
boolmarriage;
//婚否(true表示结婚,false表示没结婚)
boollive;
//建在(true表示活着,false表示过世)
boolsex;
//性别(true表示男,false表示女)
charlivemassage[50];
//死亡日期(如果其已经死亡)
Elemtypedata;
//
structBiTNode*lc,*rc;
}BiTNode,*BiTree;
//树的相关操作
charnametemp[50];
charbirthdaytemp[50];
charaddresstemp[MAXN];
boolmarriagetemp;
boollivetemp;
//建在(true表示或者,false表示过世)
boolsextemp;
charlivemassagetemp[MAXN];
charch;
//额外使用
intleveltemp;
//人的代数
intNth;
//显示第n代人时要用
charsearchdata[50];
charsearchname[50];
intcount;
//计数
intchoice;
//各种选择
intuse;
BiTreetemp;
structBiTNodeList
BiTreedata;
BiTNodeList*next;
};
BiTNodeList*List;
//-----------
voidCreatBiTree(BiTree&
T,FILE*in)//建立双链二叉树
fscanf(in,"
%c"
&
ch);
//printf("
%c\n"
ch);
if(ch=='
@'
)
{
T=NULL;
}
else
T=(BiTree)malloc(sizeof(BiTNode));
//fscanf(in,"
%s%s%s%d%d"
nametemp,birthdaytemp,addresstemp,&
marriagetemp,&
livetemp);
%s"
nametemp);
strcpy(T->
name,nametemp);
birthdaytemp);
birthday,birthdaytemp);
addresstemp);
address,addresstemp);
%d%d%d%d"
livetemp,&
leveltemp,&
sextemp);
T->
marriage=marriagetemp;
live=livetemp;
level=leveltemp;
sex=sextemp;
%s%s%s%d%d\n"
nametemp,birthdaytemp,addresstemp,marriagetemp,livetemp);
if(!
livetemp)
{
livemassagetemp);
%s\n"
T->
live)
livemassage,livemassagetemp);
CreatBiTree(T->
lc,in);
rc,in);
}
}
voidPrintInfo(BiTreeT)
printf("
%-10s出生于:
%-10s%-10s"
T->
name,T->
birthday,T->
address);
if(T->
marriage)
\t已婚"
);
\t未婚"
sex)
\t男"
\t女"
\t健在\n"
\t去世于:
livemassage);
voidPreOrderTraverse_recursion(BiTreeT)//递归先序遍历(检查建树是否正确)
PreOrderTraverse_recursion\n"
if(T)
/*printf("
PrintInfo(T);
PreOrderTraverse_recursion(T->
lc);
rc);
voidShowFamilyTree(BiTreeT)//以图形的方式显示家谱
inti,lev;
BiTreep;
p=T;
lev=T->
level;
for(i=0;
i<
lev;
i++)
\t"
%-5s"
p->
name);
if(p->
lc)
p=T->
lc;
★*★%5s%\n"
rc)
p=p->
rc;
ShowFamilyTree(p);
(未婚)\n"
voidShowNth(BiTreeT)//显示第n代所有人的信息
level==Nth)
%-10s%-10s%-10s%5d%5d%5d\n"
address,T->
marriage,T->
live,T->
sex);
count++;
ShowNth(T->
voidSearchByName(BiTreeT)//按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
不能查询祖先信息
if(T->
lc->
temp=T->
while(temp)
if(strcmp(temp->
name,searchname)==0)
\n此人的信息为:
\n"
PrintInfo(temp);
%-10s%-10s%-10s%5d%5d%5d\n\n"
temp->
name,temp->
birthday,temp->
address,temp->
marriage,temp->
live,temp->
此人父母的信息为:
PrintInfo(T->
temp->
livemassage)
此人还没有妻室\n"
此人妻子的信息为:
PrintInfo(temp->
if(temp->
此人孩子的信息为:
temp=temp->
return;
SearchByName(T->
voidSearchByBirthday(BiTreeT)//按照出生日期查询成员名单
if(strcmp(T->
birthday,searchdata)==0)
}
SearchByBirthday(T->
voidAddChild(BiTree&
T)//某成员添加孩子
该成员还没有结婚,不能添加孩子\n"
不能为该家谱中的女性添加孩子\n"
temp=(BiTree)malloc(sizeof(BiTNode));
请输入添加孩子的姓名\n"
scanf("
请输入添加孩子的出生年月(格式形如:
2010-1-1)\n"
birthday);
请输入添加孩子的家庭住址\n"
请输入添加孩子的婚姻状况0/1(0表示未婚,1表示已婚)\n"
%d"
marriage);
请输入添加孩子的在世情况0/1(0表示去世,1表示在世)\n"
live);
请输入添加孩子的去世时间(格式形如:
请输入添加孩子的性别0/1(0表示女,1表示男)\n"
temp->
level=T->
level+1;
rc=T->
lc=NULL;
rc=temp;
孩子添加成功\n"
AddChild(T->
voidAddWife(BiTree&
T)//某成员添加妻子
该成员已有妻子,可以通过修改的方式替换该妻子\n"
请输入添加妻子的姓名\n"
请输入添加妻子的出生年月(格式形如:
请输入添加妻子的家庭住址\n"
请输入添加妻子的婚姻状况0/1(0表示未婚,1表示已婚)\n"
请输入添加妻子的在世情况(0表示去世,1表示在世)\n"
请输入添加妻子的去世时间(格式形如:
请输入添加妻子的性别0/1(0表示女,1表示男)\n"
rc=NULL;
lc=temp;
marriage=true;
妻子添加成功\n"
AddWife(T->
voidDeleteByName(BiTree&
T)//删除某成员(若其还有后代,则一并删除)
if(strcmp(T->
DeleteByName(T->
voidFixLevel(BiTreeT)
count=T->
FixLevel(T->
voidFixRelation(BiTreeT)//输入两人姓名,确定其关系
intlevo,levt;
charlevone[50],levtwo[50];
请输入第一个人的姓名\n"
searchname);
strcpy(levone,searchname);
FixLevel(T);
levo=count;
if(levo==-1)
家谱无此人,请从新进入\n"
请输入第二个人的姓名\n"
strcpy(levtwo,searchname);
levt=count;
if(levt==-1)
家谱无此人\n"
if(levo<
levt)
%s比%s大%d辈\n"
levone,levtwo,levt-levo);
elseif(levo>
levtwo,levone,levo-levt);
elseif(levo==levt)
%s和%s平辈\n"
levone,levtwo);
voidShowAmend()
1.修改姓名\n"
2.修改出生年月\n"
3.修改家庭住址\n"
4.修改婚姻状况\n"
5.修改在世情况\n"
6.修改性别\n"
7.返回上一级\n"
请输入选项(1-7):
"
voidDoAmend(BiTree&
T)
while
(1)
system("
cls"
ShowAmend();
choice);
switch(choice)
case1:
请输入修改后的姓名:
break;
case2:
请输入修改后的出生年月:
case3:
请输入修改后的住址:
case4:
请输入修改后的婚姻状况:
case5:
请输入修改后的在世情况:
请输入本人的过世时间:
case6:
请输入修改后的性别(1表示男,0表示女):
case7:
default:
输入非法,请重新输入\n"
voidAmendInfo(BiTree&
T)//修改某成员信息。
DoAmend(T);
AmendInfo(T->
voidSequence(BiTreeT)//按出生日期对家谱中所有人排序。
BiTNodeList*temp;
BiTNodeList*p;
temp=(BiTNodeList*)malloc(sizeof(BiTNodeList));
data=T;
//p=List;
//while(p->
for(p=List;
(p->
next!
=NULL)&
&
(strcmp(p->
next->
data->
bir
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 家谱管理系统 数据结构大作业规程指导 家谱 管理 系统 数据结构 作业 规程 指导