1、#define MAXN 100#define MAXMEM 100#define Elemtype char=/树typedef struct BiTNode int mark;/标记 int level; char name50;/姓名 char birthday50;/生日 char addressMAXN;/住址 bool marriage;/婚否(true表示结婚,false表示没结婚) bool live;/建在(true表示活着,false表示过世) bool sex;/性别(true表示男,false表示女) char livemassage50;/死亡日期(如果其已经死亡)
2、Elemtype data;/ struct BiTNode *lc,*rc; BiTNode,*BiTree;/树的相关操作char nametemp50;char birthdaytemp50;char addresstempMAXN;bool marriagetemp;bool livetemp;/建在(true表示或者,false表示过世)bool sextemp;char livemassagetempMAXN;char ch;/额外使用int leveltemp;/人的代数int Nth;/显示第n代人时要用char searchdata50;char searchname50;i
3、nt count;/计数int choice;/各种选择int use;BiTree temp;struct BiTNodeList BiTree data; BiTNodeList *next;BiTNodeList *List;/-void CreatBiTree(BiTree &T,FILE *in)/建立双链二叉树 fscanf(in,%c,&ch); /printf(%cn,ch); if(ch = ) T = NULL; else T = (BiTree)malloc(sizeof(BiTNode); /fscanf(in,%s%s%s%d%d,nametemp,birthdayt
4、emp,addresstemp,&marriagetemp,&livetemp);%s,nametemp); strcpy(T-name,nametemp);,birthdaytemp);birthday,birthdaytemp);,addresstemp);address,addresstemp);%d%d%d%dlivetemp,&leveltemp,&sextemp); T-marriage = marriagetemp;live = livetemp;level = leveltemp;sex = sextemp;%s %s %s %d %dn,nametemp,birthdayte
5、mp,addresstemp,marriagetemp,livetemp); if(!livetemp) ,livemassagetemp);%snT-live)livemassage,livemassagetemp); CreatBiTree(T-lc,in);rc,in); void PrintInfo(BiTree T) printf(%-10s出生于:%-10s%-10s,T-name,T-birthday,T-address); if(T-marriage)t已婚);t未婚sex)t男t女t健在nt去世于:livemassage);void PreOrderTraverse_recu
6、rsion(BiTree T)/递归 先序遍历(检查建树是否正确)PreOrderTraverse_recursionn if(T) /*printf( PrintInfo(T); PreOrderTraverse_recursion(T-lc);rc);void ShowFamilyTree(BiTree T)/以图形的方式显示家谱 int i,lev; BiTree p; p = T; lev = T-level; for(i=0; iname); if(p-lc) p = T-lc; %5s%nrc) p = p-rc; ShowFamilyTree(p); (未婚)nvoid Show
7、Nth(BiTree T)/显示第n代所有人的信息level = Nth)%-10s%-10s%-10s%5d%5d%5dnaddress,T-marriage,T-live,T-sex); count+; ShowNth(T-void SearchByName(BiTree T)/按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。不能查询祖先信息 if(T-lc- temp = T- while(temp) if(strcmp(temp-name,searchname) = 0)n此人的信息为: n PrintInfo(temp);%-10s%-10s%-10s%5d%5d%5dn
8、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-void SearchByBirthday(BiTree T)/按照出生日期查询成员名单 if(strcmp(T-birthday,searchdata) = 0) SearchByBirthday(T-voi
9、d AddChild(BiTree &T)/某成员添加孩子该成员还没有结婚,不能添加孩子n不能为该家谱中的女性添加孩子n temp = (BiTree)malloc(sizeof(BiTNode);请输入添加孩子的姓名n scanf(请输入添加孩子的出生年月(格式形如: 2010-1-1)nbirthday);请输入添加孩子的家庭住址n请输入添加孩子的婚姻状况 0/1 (0表示未婚,1表示已婚)n%dmarriage);请输入添加孩子的在世情况 0/1 (0表示去世,1表示在世)nlive);请输入添加孩子的去世时间(格式形如:请输入添加孩子的性别 0/1 (0表示女,1表示男)n temp-
10、level = T-level+1;rc = T-lc = NULL;rc = temp;孩子添加成功n AddChild(T-void AddWife(BiTree &T)/某成员添加妻子该成员已有妻子,可以通过修改的方式替换该妻子n请输入添加妻子的姓名n请输入添加妻子的出生年月(格式形如:请输入添加妻子的家庭住址n请输入添加妻子的婚姻状况0/1 (0表示未婚,1表示已婚)n请输入添加妻子的在世情况(0表示去世,1表示在世)n请输入添加妻子的去世时间(格式形如:请输入添加妻子的性别 0/1 (0表示女,1表示男)nrc = NULL;lc = temp;marriage = true;妻子添
11、加成功n AddWife(T-void DeleteByName(BiTree &T)/删除某成员(若其还有后代,则一并删除) if(strcmp(T- DeleteByName(T-void FixLevel(BiTree T) count = T- FixLevel(T-void FixRelation(BiTree T)/输入两人姓名,确定其关系 int levo,levt; char levone50,levtwo50;请输入第一个人的姓名n,searchname); strcpy(levone,searchname); FixLevel(T); levo = count; if(le
12、vo = -1)家谱无此人,请从新进入n请输入第二个人的姓名n strcpy(levtwo,searchname); levt = count; if(levt = -1)家谱无此人n if(levo ,levtwo,levone,levo-levt); else if(levo = levt)%s 和 %s 平辈n,levone,levtwo);void ShowAmend()1.修改姓名n2.修改出生年月n3.修改家庭住址n4.修改婚姻状况n5.修改在世情况n6.修改性别n7.返回上一级n请输入选项(1-7): void DoAmend(BiTree &T) while(1) system
13、(cls ShowAmend();choice); switch(choice) case 1:请输入修改后的姓名: break; case 2:请输入修改后的出生年月: case 3:请输入修改后的住址: case 4:请输入修改后的婚姻状况: case 5:请输入修改后的在世情况:请输入本人的过世时间: case 6:请输入修改后的性别(1表示男,0表示女): case 7: default:输入非法,请重新输入nvoid AmendInfo(BiTree &T)/修改某成员信息。 DoAmend(T); AmendInfo(T-void Sequence(BiTree T)/按出生日期对家谱中所有人排序。 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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1