数据结构家谱图代码.docx
《数据结构家谱图代码.docx》由会员分享,可在线阅读,更多相关《数据结构家谱图代码.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构家谱图代码
//main.cpp
#include
#include
#include
#include
#include
#include"Head.h"
voidmain()
{
HANDLEconsolehwnd;//字体颜色的改变
consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//字体颜色的改变
intchose,i;
BinTreeT;
T=NULL;
while
(1)
{
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY+FOREGROUND_RED);//字体颜色的改变
printf("***************家谱信息功能表*************\n");
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY+FOREGROUND_BLUE|FOREGROUND_GREEN);
printf("1:
新建一个根节点\n");
printf("2:
以添加成员节点构造家谱图\n");
printf("3:
家谱树的层次显示\n");
printf("4家谱树保存到文件!
\n");
printf("5:
家谱树读入文件!
\n");
printf(":
家谱信息的删除\n");
printf("6:
结束程序\n");
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY+FOREGROUND_RED);//字体颜色的改变
printf("************按以上功能表进行操作*************\n");
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY+FOREGROUND_BLUE+FOREGROUND_GREEN+FOREGROUND_RED);
for(i=1;i<=100;)
{
printf("请输入你在功能表上的选项:
");
scanf("%d",&chose);
if(1<=chose<=11)
break;
else
printf("你输入的选项不正确,请重新输入!
\n");
}
switch(chose)
{
case1:
system("cls");//在控制台程序使用清屏函数
InPut(T);//录入个人信息
printf("按任意键返回");//等待程序
system("pause");
system("cls");
break;
case2:
system("cls");
Addchild(T);//比较兄弟岁数后再添加
system("pause");
system("cls");
break;
case3:
system("cls");
LevelOutput(T);
system("pause");
system("cls");
break;
case4:
system("cls");
KCreatTree(T);//将家谱信息保存到文件中
system("pause");
system("cls");
break;
case5:
system("cls");
LCreateTree(T);//从文件中读出家谱成员的信息
system("pause");
system("cls");
break;
case6:
system("cls");
exit(0);
system("pause");
system("cls");
break;
default:
fflush(stdin);
printf("你输入的选项不正确!
\n");
printf("请从新输入菜单的选项!
\n");
system("pause");
system("cls");
}
}
}
//Head.h
#include
#include
#include
#include
#include
#defineQUEUESIZE100
typedefstructData//出生日期结构体
{
intday;
intmonth;
intyear;
}dataly;
typedefstructBiTNode//个人资料信息
{
charlive[15];//建在(T表示活着,F表示过世)
charname[20];//姓名
charsex[15];//性别
charmarriage[15];//是否已婚(Y为已婚,N为未婚)
charbirthadd[20];//出生地
charaddress[15];//家庭地址
charprofession[20];//职业
charfathername[20];//父亲姓名
intgeneration;//辈分
intmessage;//接点孩子的个数
inthight;//升高
intage;//年龄
datalybirthday;//出生日期
datalydieday;//死亡日期(如果其已经死亡)
structBiTNode*brother;//兄弟
structBiTNode*child;//孩子
structBiTNode*parent;//父母
}BiTNode,*BinTree;
typedefBinTreeQElemType;
/*typedefstruct
{
intfront;
intrear;
QElemTypeelem[QUEUESIZE];
}SqQueue;*/
typedefstructQNode
{
QElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct
{
QueuePtrfront,rear;
}LinkQueue;
intJudgeTime(BinTree);
intComepare(BinTree);
voidInPut(BinTree&T);
BinTreeLevelFind(BinTree&T,BinTreea);
voidCreatfTree(BinTree&T);
voidAddchild(BinTree&T);
voidOutPut(BinTreeT);
voidLevelOutput(BinTreeT);
voidPreOrderD(BinTreeT);
voidKCreatTree(BinTree&s);
voidKeepTTFile(BinTreeT,FILE*fp);
voidPrinfTree(BinTreep,FILE*fp);
voidLAddchild(BinTree&T,LinkQueue&S,FILE*fp);
voidLCreateTree(BinTree&T);
//function.cpp
#include"Head.h"
//*********************************************************
//*********************************************************
voidInitQueue(LinkQueue&Q)
{
if(!
(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode))))
{
exit(0);
}
Q.front->next=NULL;
return;
}
intQueueEmpty(LinkQueueQ)
{
return(Q.front->next==NULL);
}
intGetHead(LinkQueueQ,QElemType&e)
{
if(Q.front==Q.rear)
{
return0;
}
e=Q.front->next->data;
return1;
}
voidEnQueue(LinkQueue&Q,QElemTypee)
{
QueuePtrp;
if(!
(p=(QueuePtr)malloc(sizeof(QNode))))
{
exit(0);
}
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return;
}
intDeQueue(LinkQueue&Q,QElemType&e)
{
QueuePtrp;
if(Q.front==Q.rear)
return0;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return1;
}
voidQueueTraverse(LinkQueueQ)
{
QueuePtrp;
p=Q.front->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
return;
}
//****************************************************************************
//****************************************************************************
intJudgeTime(BinTreep)//判断输入的出生日期是否正确
{
if(p->birthday.year>2013||p->birthday.year<=0)
{
printf("你输入的年份错误,请重新输入!
\n");
return0;
}
if(12birthd