家谱管理系统数据结构大作业Word下载.docx

上传人:b****6 文档编号:22075246 上传时间:2023-02-02 格式:DOCX 页数:28 大小:19.46KB
下载 相关 举报
家谱管理系统数据结构大作业Word下载.docx_第1页
第1页 / 共28页
家谱管理系统数据结构大作业Word下载.docx_第2页
第2页 / 共28页
家谱管理系统数据结构大作业Word下载.docx_第3页
第3页 / 共28页
家谱管理系统数据结构大作业Word下载.docx_第4页
第4页 / 共28页
家谱管理系统数据结构大作业Word下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

家谱管理系统数据结构大作业Word下载.docx

《家谱管理系统数据结构大作业Word下载.docx》由会员分享,可在线阅读,更多相关《家谱管理系统数据结构大作业Word下载.docx(28页珍藏版)》请在冰豆网上搜索。

家谱管理系统数据结构大作业Word下载.docx

map.h"

#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->

n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1