家谱管理系统-数据结构大作业.pdf

上传人:tbuqq 文档编号:5172953 上传时间:2020-02-14 格式:PDF 页数:18 大小:202.01KB
返回 下载 相关 举报
家谱管理系统-数据结构大作业.pdf_第1页
第1页 / 共18页
家谱管理系统-数据结构大作业.pdf_第2页
第2页 / 共18页
家谱管理系统-数据结构大作业.pdf_第3页
第3页 / 共18页
家谱管理系统-数据结构大作业.pdf_第4页
第4页 / 共18页
家谱管理系统-数据结构大作业.pdf_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《家谱管理系统-数据结构大作业.pdf》由会员分享,可在线阅读,更多相关《家谱管理系统-数据结构大作业.pdf(18页珍藏版)》请在三一文库上搜索。

1、. . /* 家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但 不是必需的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。 9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。 11)

2、.按出生日期对家谱中所有人排序。 12).打开一家谱时,提示当天生日的健在成员。 要求: 建立至少30 个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。 测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的 稳定。 测试数据及测试结果请在上交的资料中写明; */ #include #include #include #include #include“map.h“ #define MAXN

3、 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;/

4、 死亡日期(如果其已经死亡) Elemtype data;/ struct BiTNode *lc,*rc; BiTNode,*BiTree; / 树的相关操作 char nametemp50;/ 姓名 char birthdaytemp50;/ 生日 char addresstempMAXN;/ 住址 bool marriagetemp;/ 婚否( true 表示结婚,false 表示没结婚) bool livetemp;/ 建在( true 表示或者,false 表示过世) bool sextemp; char livemassagetempMAXN;/ 死亡日期(如果其已经死亡) cha

5、r ch;/ 额外使用 int leveltemp;/ 人的代数 int Nth;/ 显示第n 代人时要用 char searchdata50; char searchname50; int count;/ 计数 int choice;/ 各种选择 int use; BiTree temp; struct BiTNodeList BiTree data; BiTNodeList *next; ; BiTNodeList *List; /- void CreatBiTree(BiTree /printf(“%cn“,ch); if(ch = ) . . T = NULL; fscanf(in,“

6、%c“, else T = (BiTree)malloc(sizeof(BiTNode); /fscanf(in,“%s%s%s%d%d“,nametemp,birthdaytemp,addresstemp, fscanf(in,“%s“,nametemp); strcpy(T-name,nametemp); fscanf(in,“%s“,birthdaytemp); strcpy(T-birthday,birthdaytemp); fscanf(in,“%s“,addresstemp); strcpy(T-address,addresstemp); fscanf(in,“%d%d%d%d“,

7、 T-marriage = marriagetemp; T-live = livetemp; T-level = leveltemp; T-sex = sextemp; /printf(“%s %s %s %d %dn“,nametemp,birthdaytemp,addresstemp,marriagetemp,livete mp); if(!livetemp) fscanf(in,“%s“,livemassagetemp); /printf(“%sn“,livemassagetemp); if(!T-live) strcpy(T-livemassage,livemassagetemp);

8、fscanf(in,“%c“, CreatBiTree(T-lc,in); CreatBiTree(T-rc,in); void PrintInfo(BiTree T) printf(“%-10s 出生于:%-10s%-10s“,T-name,T-birthday,T-address); if(T-marriage) printf(“t 已婚 “); if(!T-marriage) printf(“t 未婚 “); if(T-sex) . . printf(“t 男“); if(!T-sex) printf(“t 女“); if(T-live) printf(“t 健在n“); if(!T-l

9、ive) printf(“t 去世于 :%sn“,T-livemassage); void PreOrderTraverse_recursion(BiTree T)/ 递归先序遍历(检查建树是否正确) /printf(“PreOrderTraverse_recursionn“); if(T) /*printf(“%-10s 出生于 :%-10s%-10s“,T-name,T-birthday,T-address); if(T-marriage) printf(“t 已婚“); if(!T-marriage) printf(“t 未婚“); if(T-sex) printf(“t 男“); if

10、(!T-sex) printf(“t 女“); if(T-live) printf(“t 健在n“); if(!T-live) printf(“t 去世于 :%sn“,T-livemassage);*/ PrintInfo(T); PreOrderTraverse_recursion(T-lc); PreOrderTraverse_recursion(T-rc); void ShowFamilyTree(BiTree T)/以图形的方式显示家谱 int i,lev; BiTree p; p = T; if(T) lev = T-level; for(i=0; iname); if(p-lc)

11、p = T-lc; printf(“ %5s%n“,p-name); if(p-rc) p = p-rc; ShowFamilyTree(p); else printf(“ (未婚)n“); if(T-rc) p = T-rc; ShowFamilyTree(p); void ShowNth(BiTree T)/ 显示第n 代所有人的信息 if(T) if(T-level = Nth) PrintInfo(T); /printf(“%-10s%-10s%-10s%5d%5d%5dn“,T-name,T-birthday,T-address,T-marriage,T-live,T- sex);

12、count+; ShowNth(T-lc); ShowNth(T-rc); void SearchByName(BiTree T)/按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信 息)。不能查询祖先信息 if(T) . . if(T-lc) if(T-lc-rc) temp = T-lc-rc; while(temp) if(strcmp(temp-name,searchname) = 0) count+; printf(“n 此人的信息为: n“); PrintInfo(temp); /printf(“%-10s%-10s%-10s%5d%5d%5dnn“,temp-name,tem

13、p-birthday,temp-address,temp- marriage,temp-live,temp-sex); printf(“ 此人父母的信息为: n“); PrintInfo(T); PrintInfo(T-lc); /printf(“%-10s%-10s%-10s%5d%5d%5dn“,T-name,T-birthday,T-address,T-marriage,T-live,T- sex); /printf(“%-10s%-10s%-10s%5d%5d%5dnn“,T-lc-name,T-lc-birthday,T-lc-address,T-lc-m arriage,T-lc-

14、live,T-lc-sex); if(!temp-livemassage) printf(“ 此人还没有妻室n“); else printf(“ 此人妻子的信息为: n“); PrintInfo(temp-lc); /printf(“%-10s%-10s%-10s%5d%5d%5dnn“,temp-lc-name,temp-lc-birthday,temp-lc-add ress,temp-lc-marriage,temp-lc-live,temp-lc-sex); if(temp-lc-rc) printf(“ 此人孩子的信息为: n“); temp = temp-lc-rc; while(

15、temp) PrintInfo(temp); /printf(“%-10s%-10s%-10s%5d%5d%5dn“,temp-name,temp-birthday,temp-address,temp- marriage,temp-live,temp-sex); . . temp = temp-rc; return; else temp = temp-rc; SearchByName(T-lc); SearchByName(T-rc); void SearchByBirthday(BiTree T)/ 按照出生日期查询成员名单 if(T) if(strcmp(T-birthday,search

16、data) = 0) PrintInfo(T); /printf(“%-10s%-10s%-10s%5d%5d%5dn“,T-name,T-birthday,T-address,T-marriage,T-live,T- sex); count+; SearchByBirthday(T-lc); SearchByBirthday(T-rc); void AddChild(BiTree if(!T-lc) . . printf(“ 该成员还没有结婚,不能添加孩子n“); return; if(!T-sex) printf(“ 不能为该家谱中的女性添加孩子n“); return; else temp

17、 = (BiTree)malloc(sizeof(BiTNode); printf(“ 请输入添加孩子的姓名n“); scanf(“%s“,temp-name); printf(“ 请输入添加孩子的出生年月(格式形如: 2010-1-1)n“); scanf(“%s“,temp-birthday); printf(“ 请输入添加孩子的家庭住址n“); scanf(“%s“,temp-address); printf(“ 请输入添加孩子的婚姻状况0/1 (0 表示未婚,1 表示已婚)n“); scanf(“%d“, printf(“ 请输入添加孩子的在世情况0/1 (0 表示去世,1 表示在世)

18、n“); scanf(“%d“, if(!temp-live) printf(“ 请输入添加孩子的去世时间(格式形如: 2010-1-1)n“); scanf(“%s“,temp-livemassage); printf(“ 请输入添加孩子的性别0/1 (0 表示女,1 表示男 )n“); scanf(“%d“, temp-level = T-level+1; temp-rc = T-lc-rc; temp-lc = NULL; T-lc-rc = temp; printf(“ 孩子添加成功n“); return; AddChild(T-lc); AddChild(T-rc); void Ad

19、dWife(BiTree if(T-lc) printf(“ 该成员已有妻子,可以通过修改的方式替换该妻子n“); return; else temp = (BiTree)malloc(sizeof(BiTNode); printf(“ 请输入添加妻子的姓名n“); scanf(“%s“,temp-name); printf(“ 请输入添加妻子的出生年月(格式形如: 2010-1-1)n“); scanf(“%s“,temp-birthday); printf(“ 请输入添加妻子的家庭住址n“); scanf(“%s“,temp-address); printf(“ 请输入添加妻子的婚姻状况0

20、/1 (0 表示未婚,1 表示已婚)n“); scanf(“%d“, printf(“ 请输入添加妻子的在世情况(0 表示去世,1 表示在世)n“); scanf(“%d“, if(!temp-live) printf(“ 请输入添加妻子的去世时间(格式形如: 2010-1-1)n“); scanf(“%s“,temp-livemassage); printf(“ 请输入添加妻子的性别0/1 (0 表示女,1 表示男 )n“); scanf(“%d“, temp-level = T-level; temp-lc = NULL; temp-rc = NULL; T-lc = temp; T-ma

21、rriage = true; printf(“ 妻子添加成功n“); return; AddWife(T-lc); AddWife(T-rc); void DeleteByName(BiTree if(T) if(strcmp(T-name,searchname) = 0) count+; T = NULL; return; /printf(“%-10s%-10s%-10s%5d%5d%5dn“,T-name,T-birthday,T-address,T-marriage,T-live,T- sex); DeleteByName(T-lc); DeleteByName(T-rc); void

22、FixLevel(BiTree T) if(T) if(strcmp(T-name,searchname) = 0) count = T-level; FixLevel(T-lc); FixLevel(T-rc); void FixRelation(BiTree T)/ 输入两人姓名,确定其关系 int levo,levt; char levone50,levtwo50; printf(“ 请输入第一个人的姓名n“); scanf(“%s“,searchname); strcpy(levone,searchname); FixLevel(T); levo = count; if(levo =

23、-1) printf(“ 家谱无此人,请从新进入n“); return; . . printf(“ 请输入第二个人的姓名n“); scanf(“%s“,searchname); strcpy(levtwo,searchname); FixLevel(T); levt = count; if(levt = -1) printf(“ 家谱无此人n“); return; if(levo levt) printf(“%s 比%s 大%d 辈 n“,levtwo,levone,levo-levt); else if(levo = levt) printf(“%s 和%s 平辈n“,levone,levt

24、wo); void ShowAmend() printf(“1. 修改姓名n“); printf(“2. 修改出生年月n“); printf(“3. 修改家庭住址n“); printf(“4. 修改婚姻状况n“); printf(“5. 修改在世情况n“); printf(“6. 修改性别n“); printf(“7. 返回上一级n“); printf(“ 请输入选项(1-7): “); void DoAmend(BiTree ShowAmend(); scanf(“%d“, switch(choice) case 1: printf(“ 请输入修改后的姓名: “); scanf(“%s“,T

25、-name); break; . . case 2: printf(“ 请输入修改后的出生年月: “); scanf(“%s“,T-birthday); break; case 3: printf(“ 请输入修改后的住址: “); scanf(“%s“,T-address); break; case 4: printf(“ 请输入修改后的婚姻状况: “); scanf(“%d“, break; case 5: printf(“ 请输入修改后的在世情况: “); scanf(“%d“, if(!T-live) printf(“ 请输入本人的过世时间: “); scanf(“%s“,T-livem

26、assage); break; case 6: printf(“ 请输入修改后的性别(1 表示男,0 表示女): “); scanf(“%d“, case 7: return; default: printf(“ 输入非法,请重新输入n“); break; void AmendInfo(BiTree DoAmend(T); return; AmendInfo(T-lc); . . AmendInfo(T-rc); void Sequence(BiTree T)/按出生日期对家谱中所有人排序。 if(T) BiTNodeList *temp; BiTNodeList *p; temp = (Bi

27、TNodeList *)malloc(sizeof(BiTNodeList); temp-data = T; /p = List; /while(p-) for(p=List; (p-next!=NULL) temp-next = p-next; p-next = temp; Sequence(T-lc); Sequence(T-rc); void PrintSequence(BiTree T) BiTNodeList *p; p = List; Sequence(T); printf(“tttt 排序结果nn“); PrintLine(); printf(“n“); while(p-next

28、 != NULL) printf(“ “); PrintInfo(p-next-data); /printf(“t%-10s%-10s%-10s%5d%5d%5dn“,p-next-data-name,p-next-data-birthday,p-n ext-data-address,p-next-data-marriage,p-next-data-live,p-next-data-sex); p = p-next; printf(“n“); PrintLine(); . . void LocateTime() time_t t=time(0); strftime(birthdaytemp,6

29、4,“%Y-%m-%d“,localtime( void BirthToday(BiTree T)/ 打开一家谱时,提示当天生日的健在成员。 if(T) if(strcmp(T-birthday,birthdaytemp) = 0) count+; printf(“%sn“,T-name); BirthToday(T-lc); BirthToday(T-rc); void ShowMenu() PrintBat(); printf(“n“); PrintLine(); printf(“n“); printf(“ttt 欢迎进入家谱管理系统nn“); printf(“ 1.显示今天生日成员2.显

30、示家谱n“); printf(“ 3.显示第n 代所有人的信息4.按姓名查找成员n“); printf(“ 5.按出生日期查找成员6.为成员添加孩子n“); printf(“ 7.为成员添加妻子8.删除成员n“); printf(“ 9.修改成员信息10.确定两个人的关系n“); printf(“ 11.按出生年月排序家谱成员12.退出程序n“); printf(“n“); PrintLine(); printf(“n“); printf(“ 已经从文件读入初始家谱信息,请输入您的操作(1-12): “); int main(void) int choice; FILE *in; in = f

31、open(“7.out“,“r“); . . BiTree T; CreatBiTree(T,in); /PreOrderTraverse_recursion(T); while(1) system(“cls“); ShowMenu(); scanf(“%d“, getchar(); system(“cls“); switch(choice) case 1: LocateTime(); count = 0; BirthToday(T); if(count = 0) printf(“ 今天家谱中没有成员过生日n“); system(“pause“); break; case 2: ShowFam

32、ilyTree(T); system(“pause“); break; case 3: printf(“ 请输入需要查询第几代人: “); count = 0; scanf(“%d“, ShowNth(T); if(count = 0) printf(“ 第 %d 代尚未有人。n“,Nth); system(“pause“); break; case 4: printf(“ 请输入要查询人的姓名: “); scanf(“%s“,searchname); if(strcmp(T-name,searchname) = 0) printf(“ 此人为家谱的祖先,其信息为:n“); printf(“%

33、-10s%-10s%-10s%5d%5d%5dn“,T-name,T-birthday,T-address,T-marriage,T-live,T-s ex); printf(“ 他妻子的信息为: n“); . . printf(“%-10s%-10s%-10s%5d%5d%5dn“,T-lc-name,T-lc-birthday,T-lc-address,T-lc-marri age,T-lc-live,T-lc-sex); temp = T-lc; if(temp-rc) printf(“ 他孩子的信息为:n“); temp = temp-rc; while(temp) printf(“%

34、-10s%-10s%-10s%5d%5d%5dn“,temp-name,temp-birthday,temp-address,temp-ma rriage,temp-live,temp-sex); temp = temp-rc; else count = 0; SearchByName(T); if(count = 0) printf(“ 对不起,不能检测这个人的信息n“); system(“pause“); break; case 5: printf(“ 请输入要查询人的生日: “); count = 0; scanf(“%s“,searchdata); SearchByBirthday(T

35、); if(count = 0) printf(“%s 没有人过生日。n“,searchdata); system(“pause“); break; case 6: count = 0; printf(“ 请输入要添加孩子成员的姓名: “); scanf(“%s“,searchname); AddChild(T); if(count = 0) printf(“ 没有这个人n“); system(“pause“); break; case 7: . . count = 0; printf(“ 请输入要添加妻子成员的姓名: “); scanf(“%s“,searchname); AddWife(T

36、); if(count = 0) printf(“ 没有这个人n“); system(“pause“); break; case 8: count = 0; printf(“ 请输入要删除成员的姓名: “); scanf(“%s“,searchname); DeleteByName(T); if(count = 0) printf(“ 没有这个人n“); system(“pause“); break; case 9: count = 0; printf(“ 请输入要修改人的姓名: “); scanf(“%s“,searchname); AmendInfo(T); if(count = 0) p

37、rintf(“ 没有这个人n“); system(“pause“); break; case 10: FixRelation(T); system(“pause“); break; case 11: count = 0; List = (BiTNodeList *)(malloc(sizeof(BiTNodeList); List-next = NULL; PrintSequence(T); system(“pause“); break; case 12: return; system(“pause“); break; default: printf(“ 输入数据有误,请重新输入n“); break; . .

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1