这是实训时候完全自己写的,输入出生日期的时候一定按要求去输入(以防出错),下面是老师给我们的要求: ● 成员的信息中均应包含以下内容:
●姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)
●也可附加其它信息、但不是必需的。
● 能对修改后的家谱存盘以备以后使用。
●能从文件中读出已有的家谱,形成树状关系。
●家谱建立好之后,以图形方式显示出来。
●显示第 n代所有人的信息。
●按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 ●按照出生日期查询成员名单。
●输入两人姓名,确定其关系。
●某人添加孩子。
●删除某人(若其还有后代,则一并删除)。
●修改某人信息。
●按出生日期对家谱中所有人排序。
●打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。
下面是程序代码(用文本过滤一下粘贴到工程中就可用):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define OK 1
#define砂浆回收 FALSE 0
#define ERROR -1
typedef int status;
typedef struct {
int num;//孩子个数
char name[20];///姓名
char sex;//性别
//bool is_spouse;//配偶是否存在
char spouse[20];//配偶的姓名,性别取反
}DataType;
typedef struct TNode{
DataType data;//数据域
struct TNode* nextstr[10];//指针域,指向孩子
struct TNode* parent;//指针域,指向父亲
}PedTNode,*PedTree;//家谱树
void OutMenu();//输出家谱菜单
void CreateNewPedTreeNode(PedTree Tree);//创建孩子,递归调用
void CreatePedTree(PedTree Tree);//创建Pedigree树
void导线测量法 OutOneInfor(PedTree Tree);//递归调用实现输出整个家谱树
void OutAllPedTree(PedTree Tree);//输出整个家谱信息
//PedTree SearchPedTree(PedTree Tree,char Name[]);//在树中查
bool SearchPedTree(PedTree Tree,char Name[],PedTree* DrawTree);//在树中查
bool SearchPedTree2(PedTree Tree,char Name[],PedTree* DrawTree);//在树中查配偶是否匹配
void ShowMenu1(PedTree Tree);//显示要查人的信息
//void ShowSelfInfor(PedTree Tree,char Name[],int Length);//显示个人信息
void ShowMenu2();//显示添加信息的菜单
int AddNewInfor(PedTree Tree);//添加新的家谱信息
void AddChildInfor(PedTree Tree);//添加子女的信息
void AddPouseInfor(PedTree Tree);//添加配偶信息
int ChangeInfor(PedTree Tree);//修改家谱信息
void ShowMenu3();//显示修改信息的菜单
int main()
{
char choice;
system("color 1f");
PedTNode TreeNode;
PedTree Tree=&TreeNode;
bool flag=false;//标志是否执行建立家谱
//PedTree Tree=NULL;
while(1)
{
fflush(stdin);//清除键盘缓冲区
system("cls");
OutMenu();
printf("\n");
printf("\t\t请您选择:");
choice=getchar();
switch(choice)
{
case '1':
if(!flag)
{
CreatePedTree(Tree);//创建Pedigree树
flag=true;
}
else
{
printf("\n\t\t家谱不能多次建立\n");
printf("\n\t\t按任意键继续:");
fflush(stdin);
getch();
}
break;
case '2':
if(flag)
ShowMenu1(Tree);//显示要查人的信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:");
fflush(stdin);
getch();
}
break;
case '3':
if(flag)
AddNewInfor(Tree);//添加新的家谱信息
else
{曼越橘
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:");
fflush(stdin);
getch();
}
break;
case '4':
if(flag)
OutAllPedTree(Tree);//输出整个家谱信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:");
fflush(stdin);
getch();
}
break;
两票系统 case '5':
if(flag)
ChangeInfor(Tree);//修改家谱信息
else
{
printf("\n\t\t家谱未建立,请您先建立家谱\n");
printf("\n\t\t按任意键继续:");
fflush(stdin);
getch();
}
break;
case '6':
return 0;
}
}
//return 0;
}
void OutMenu()
{
printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t\t* *\n");
printf("\t\t* 家谱信息管理菜单 *\n");
printf("\t\t* *\n");
printf("\t\t* 1:输入家谱信息 *\n");
printf("\t\t* 2:查并输出某人信息 *\n");
printf("\t\t* 3:添加新的家庭成员 *\n");
printf("\t\t* 4:输出整个家谱信息 *\n");
printf("\t\t* 5:修改某个人的信息 *\n");
printf("\t\t* 6:退出整个程序 *\n");
printf("\t\t* *\n");
printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");
}
void CreatePedTree(PedTree Tree)//创建Pedigree树
{
fflush(stdin);//清除键盘缓冲区
system("cls");
/*Tree=(PedTree)malloc(sizeof(PedTNode));
if(!Tree)
{
printf("Insufficient Memory!\n");
exit(-1);
}*/
printf("\t\t请输入姓名:");
scanf("%s",Tree->data.name);
printf("\t\t请输入性别(G女B男):");
//scanf("%c",&(Tree->data.sex));
fflush(stdin);
三元催化清洗剂配方 (Tree->data.sex)=getchar();
printf("\t\t请输入%s子女的个数:",Tree->data.name);
scanf("%d",&(Tree->data.num));
printf("\t\t请输入%s配偶的名字(配偶不存在,请输入):",Tree->data.name);
scanf("%s",Tree->data.spouse);
if(strcmp(Tree->data.spouse,"0")==0 && Tree->data.num!=0)
{
printf(颗粒级配"\t\t%s的配偶不存在,不能有孩子!\n",Tree->data.name);
Tree->data.num=0;
}
Tree->parent=NULL;
for(int i=0;i<Tree->data.num;i++)
{
printf("\n");
PedTree ChildTree=(PedTree)malloc(sizeof(PedTNode));
if(!ChildTree)
{
printf("Insufficient Memory!\n");
exit(-1);
}
Tree->nextstr[i]=ChildTree;//指向子女
printf("\t\t请输入%s的第%d个子女的姓名:",Tree->data.name,i+1);