数据结构_家谱管理系统方案
数据结构 家族管理系统

数据结构家族管理系统1、系统概述1.1 系统目标家族管理系统旨在帮助家族成员进行家族信息的管理和交流,实现家族历史的追溯、成员关系的维护、活动和资源的共享等功能。
1.2 系统功能- 成员管理:记录家族成员的个人信息、与家族的关系、所在分支等,并支持添加、删除和修改成员信息。
- 家族关系管理:维护家族成员之间的关系,包括父子关系、婚姻关系等,并支持关系的添加、解除和修改。
- 家族历史追溯:记录家族的起源、重要事件、名人等信息,支持查看家族历史的时间线和详细信息。
- 活动管理:管理家族活动的信息,包括活动时间、地点、参与人员等,并支持活动的创建、修改和删除。
- 资源共享:提供家族成员之间共享资源的平台,包括照片、视频、文档等,并支持、和评论。
1.3 系统用户- 家族成员:系统的主要用户,可以查看和编辑个人信息,管理家族关系,参与家族活动等。
- 管理员:负责系统的运行和维护,拥有对成员信息的修改和删除权限。
2、数据结构设计2.1 成员信息- 成员ID:唯一标识符- 姓名:成员姓名- 性别:成员性别- 出生日期:成员出生日期- 地质:成员地质- 方式号码:成员联系方式- 电子邮箱:成员电子邮箱- 家族分支:成员所属的家族分支2.2 家族关系- 成员1ID:成员1的唯一标识符- 成员2ID:成员2的唯一标识符- 关系类型:成员1与成员2之间的关系类型2.3 家族历史- 事件ID:唯一标识符- 事件名称:事件的名称- 事件描述:事件的详细描述- 事件日期:事件发生的日期2.4 家族活动- 活动ID:唯一标识符- 活动名称:活动的名称- 活动描述:活动的详细描述- 活动日期:活动的日期- 活动地点:活动的地点- 参与成员:参与该活动的成员列表2.5 资源- 资源ID:唯一标识符- 资源名称:资源的名称- 资源类型:资源的类型(照片、视频、文档等)- 资源路径:资源存储的路径- 时间:资源的时间- 成员:该资源的成员3、系统模块设计3.1 成员管理模块- 添加成员:向系统中添加新的家族成员信息。
数据结构家谱管理系统

数据结构家谱管理系统该系统采用数据结构的概念和原理,以树形结构来描述家族关系。
每一个结点代表一个家族成员,包括姓名、性别、出生日期、死亡日期等基本信息,并且能够记录配偶和子女的信息。
通过构建家族树,用户可以清晰地了解家族人员之间的血缘关系和世代关系。
系统的主要功能包括:1.成员管理:用户可以添加、删除和修改家族成员的信息。
系统提供友好的界面,以便用户能够直观地操作。
用户可以输入成员的基本信息,如姓名、性别、出生日期等,并且可以添加配偶和子女的信息。
2.成员查找:用户可以根据姓名、出生日期等条件,对成员进行查询操作。
系统将根据用户输入的条件,快速找到符合条件的成员,并将其信息展示给用户。
用户可以通过查找功能,方便地找到特定成员的详细信息。
3.家族树展示:通过家族树展示功能,用户可以直观地了解家族的基本结构和成员关系。
系统将家族成员按照世代排列,通过树状图展示。
用户可以通过点击树中的结点,进一步查看该成员的详细信息。
4.信息统计:系统可以根据用户需要,进行一些基本的统计分析。
比如,系统可以统计家族的总人数、男女比例、平均寿命等信息,以便用户了解家族的整体情况。
5. 数据导出:为了方便用户保存和共享家族信息,系统提供数据导出功能。
用户可以将家族信息导出为Excel、CSV等格式的文件,以便在其他应用程序中使用。
总之,数据结构家谱管理系统通过数据结构的概念和原理,提供了一种直观、高效的方式来管理家族的信息。
它可以帮助用户了解家族结构、查找成员、进行统计分析,并方便地将数据导出保存。
希望这个系统能够帮助用户更好地管理和维护家族的信息,传承家族的文化和价值观。
数据结构-家谱管理系统

数据结构-家谱管理系统数据结构家谱管理系统在当今数字化的时代,信息管理变得越来越重要,而家谱作为家族历史和传承的重要记录,也需要一种有效的管理方式。
一个高效的家谱管理系统能够帮助我们更好地保存、查询和分析家族信息,增强家族成员之间的联系和认同感。
接下来,让我们深入探讨一下家谱管理系统所涉及的数据结构和功能。
首先,我们来了解一下什么是数据结构。
简单来说,数据结构是指数据元素之间的关系和组织方式。
在家谱管理系统中,我们需要选择合适的数据结构来存储和操作家族成员的信息。
一种常见的数据结构选择是树形结构。
家谱本身就具有天然的层次关系,从祖先开始,逐渐分支到子孙后代。
我们可以将每个家族成员看作一个节点,通过父子关系将节点连接起来,形成一棵家族树。
这种树形结构能够清晰地展示家族的分支和传承关系。
为了实现树形结构,我们可以使用链表或者数组来存储节点信息。
链表的优点是插入和删除节点比较方便,适合家族成员信息的动态变化。
而数组则可以更高效地随机访问节点,但在插入和删除操作时可能需要移动大量元素。
在家谱管理系统中,每个家族成员的节点应该包含哪些信息呢?至少要包括姓名、性别、出生日期、婚姻状况等基本信息。
此外,还可以添加照片、个人简介、联系方式等扩展信息,以丰富家族成员的资料。
除了存储家族成员的信息,家谱管理系统还需要提供强大的查询功能。
用户可能想要查找特定姓名的家族成员,或者查找某个时间段出生的成员,甚至是查找具有特定亲属关系的成员。
为了实现这些查询功能,我们可以在数据结构中建立索引,例如按照姓名建立哈希索引,按照出生日期建立排序索引等。
这样可以大大提高查询的效率。
另外,家族关系的计算也是家谱管理系统的一个重要功能。
比如,计算两个家族成员之间的亲属关系远近,判断是否存在共同的祖先等。
这需要我们在树形结构的基础上进行深度优先搜索或者广度优先搜索等算法的应用。
在数据存储方面,我们可以选择将家谱数据存储在本地文件中,如XML 或者 JSON 格式,也可以选择将数据存储在数据库中,如关系型数据库 MySQL 或者非关系型数据库 MongoDB。
数据结构家谱管理系统

数据结构家谱管理系统公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]宁波大红鹰学院信息工程学院课程设计报告项目名称:家谱查询系统项目组长:白钰琦项目成员:徐程凯、徐海域、项鸿伟班级名称:10计科1班专业名称:计算机科学与技术完成时间: 2012年12月1日信息工程学院制目录一、案例描述...................................................1、总体描述................................................2、模块描述................................................二、设计思路...................................................三、程序设计...................................................1、数据结构描述............................................2、主函数及其流程图........................................3、源程序..................................................四、调试与分析.................................................1、主菜单..................................................2、显示家谱信息............................................3、显示家谱中第n代人所有信息..............................4、按姓名查找某人并相应输出................................5、按出生日期查找家谱成员信息..............................6、为家谱中成员添加孩子信息................................7、为家谱中成员添加妻子信息................................8、删除家谱中成员及其后代信息..............................9、修改家谱中成员信息......................................10、确定家谱中两个成员关系.................................11、按出生年月排序家谱.....................................五、设计总结...................................................1、完成情况................................................2、心得体会................................................一、案例描述1、总体描述家谱管理系统是查询家谱信息必不可少的一部分,利用家谱管理系统可以清楚的查询到家族成员的详细信息。
家谱管理系统数据结构

{ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #define MAXS 100 #define Elemtype char typedef struct BiTNode {int mark; int level; char name[50]; char birthday[50]; char address[MAXS]; Elemtype data; struct BiTNode*lc,*rc; }BiTNode,*BiTree; char nametemp[50];〃 姓名 char birthdaytemp[50];〃 生日 char addresstemp[MAXS];〃 地址 char ch; int leveltemp; int Nth;char searchdata[50]; char searchname[50]; int count; BiTree temp;BiTree CreateBiTree(FILE *fp); void Printlnfo(BiTree T); void PreOrderTS(BiTree T); void ShowNth(BiTree T); void SearchByName(BiTree T); void SearchByBirthday(BiTree T); void AddChild(BiTree T); void DeleteByName(BiTree T); void searchmenu(); void menu(); void insystem(); void closefile(); #include"my.h"void SearchByName(BiTree T)〃按照姓名查询,输出成员信息if(T)if(T->lc) {{{if(T->lc->rc){temp=T->lc->rc;while(temp){if(strcmp(temp->name,searchname)==O){count++;printf("\n此人的信息为:\n");Printlnfo(temp);printf("此人父兄的信息为:\n");PrintInfo (T);if(temp->lc->rc){printf("此人孩子的信息为:\n");temp=temp->lc->rc;while(temp){PrintInfo(temp);temp=temp->rc;}}return;}elsetemp=temp->rc;SearchByName(T->lc);SearchByName(T->rc);}else{printf("请先建立家庭关系\n");return;}}void SearchByBirthday(BiTree T)〃按照出生日期查询成员名单if(T){{if(strcmp(T->birthday,searchdata)==O) {Printinfo (T); count++; }}}void AddChild(BiTree T)〃 某成员添加孩子 {if(T){ if(strcmp(T->name,searchname)==O) {count++;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); 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); } else {printf("请先建立家庭关系\n"); return;} }void DeleteByName(BiTree T)//删除某成员(若其还有后代,则一并删除) {if(T) if(strcmp(T->name,searchname)==O ){count++;T=NULL;return;}DeleteByName(T->lc);DeleteByName(T->rc);}}BiTree CreateBiTree(FILE *fp){if(!feof(fp)){BiTree T;T=(BiTree)malloc(sizeof(BiTNode));fscanf(fp,"%s %s %s\n",nametemp,birthdaytemp,addresstemp);fscanf(fp,"%d",&leveltemp);if((strcmp(nametemp,"n")==0)&&(strcmp(birthdaytemp,"n")==O)&&(strcmp(addresstemp,"n")==O)){T=NULL;return T;}else{strcpy(T->name,nametemp);strcpy(T->birthday,birthdaytemp);strcpy(T->address,addresstemp);T->level=leveltemp+1; printf("读取成功\n");T->lc=CreateBiTree(fp);T->rc=CreateBiTree(fp);return T;}}elsereturn NULL;}#include"my.h"void main(){BiTree T;int choice;FILE *fp;T=NULL;fp=fopen("F:\\family.txt","r"); insystem(); while(1) {system("cls"); menu();printf("请根据菜单进行选择所system("pause"); break; case 4:searchmenu();需操作;---\n\n");择:");T=CreateBiTree(fp);父母的姓名 \n");:\n");while(scanf("%d", &choice)!=1) {fflush(stdin); printf("\n---输入错误printf("请重新输入正确选 } fflush(stdin); switch(choice) {case 1:system("pause");break; case 2:count=0;printf("请输入要添加孩子scanf("%s",searchname); AddChild (T); if(count==0)printf("没有这个人system("pause");break;count=0;printf("请输入要删除成员的姓名:"); scanf("%s",searchname); DeleteByName(T); if(count==0)printf("没有这个人\n");printf(”请输入选择:\n");system("pause"); break;case 5:PreOrderTS(T);system("pause"); break;case 6: closefile();case 7:printf("请输入需要查询第几代人:");count=0;scanf("%d",&Nth);ShowNth(T);if(count==0)printf("第%d 代尚未有人。
数据结构家谱管理系统(二叉链表)

《项目实训二》项目名称__ 家谱管理系统__ 姓名__ ___________ 班级 __ _______________ 学号__ ________________ 指导教师__ __________ __2018.1模块划分:1、统计模块(1)统计家族总人数、健在人数、几代人(2)主要函数:int Generation(Node *root); //这个家族共有几代人int NumberOfPeople( ); //家族的总人数int LifeNum( ); //健在人数(3)实现方法:静态成员变量(4)实现结果:2、更新模块(1)创建家谱、增加成员、删除成员、成员改名(2)主要函数:Node* Creat( ); //构造函数调用void AddNewPeople(Node *root,string FatherName,string NAme); //增加新的家族成员int DeletePeople(Node *root,string FatherName,string Deletepeople);//删除家族成员int SetNewName(Node *root,string NAme,string NewName); //更改姓名(3)实现方法:创建家谱和成员改名主要通过递归调用;增加成员和删除成员主要通过栈的非递归调用。
(4)实现结果:3、查询模块(1)查询成员详细信息、查询成员的孩子以及孩子的详细信息(2)主要函数:int Message(Node *root,string Name); //显示该成员的基本信息int FindChild(Node *root,string NAme); //显示孩子信息(3)实现方法:通过递归调用,找到成员,输出相应的信息(4)实现结果:4、显示模块(1)前序、中序、后序遍历家谱(2)主要函数:void PreOrder(Node *root); //前序递归遍历输出家谱void InOrder(Node *root); //中序递归遍历输出家谱void PostOrder(Node *root); //后序递归遍历输出家谱(3)实现方法:递归遍历(4)实现结果:5、文件模块(1)保存到文件、从文件读取(2)主要函数:void SaveToFile(Node *root); //保存到文件void FileToFamilyTree( Node *root) ; //从文件中读取(3)实现方法:文件流(4)实现结果:实验结果及分析1、创建家谱2、保存到文件3、读取文件4、增加成员5、基本信息6、查询成员信息7、成员改名8、遍历家谱9、查询孩子信息10、删除成员。
数据结构_家谱管理系统

数据结构_家谱管理系统【数据结构_家谱管理系统】一、引言家谱是记录家族成员关系的重要文献,传统的家谱管理方式已经无法满足现代社会的需求。
为了更好地管理家族信息,提高家族成员之间的联系和交流,我们设计并开发了一款家谱管理系统。
本文将详细介绍该系统的设计和实现。
二、系统概述家谱管理系统是一个基于数据结构的软件应用,旨在帮助用户管理家族成员的信息,包括姓名、性别、出生日期、配偶、子女等。
系统提供了多种功能,包括添加、删除、修改、查询、统计等操作,方便用户对家谱信息进行维护和管理。
三、系统设计1. 数据结构选择在家谱管理系统中,我们选择了树这种数据结构来表示家族关系。
每个节点代表一个家庭成员,节点之间通过指针连接,形成家族的层级结构。
2. 数据模型设计家族成员的信息可以通过一个结构体来表示,包括姓名、性别、出生日期等字段。
每个节点除了包含成员信息外,还包含指向配偶的指针和指向子女的指针。
3. 系统功能设计家谱管理系统提供了以下功能:(1) 添加成员:用户可以输入成员信息,系统根据用户输入创建一个新的节点,并将其插入到适当的位置。
(2) 删除成员:用户可以指定要删除的成员,系统会删除该成员及其所有子孙节点。
(3) 修改成员信息:用户可以选择要修改的成员,然后输入新的信息进行更新。
(4) 查询成员信息:用户可以通过姓名、出生日期等条件查询成员信息。
(5) 统计家族人数:系统可以统计家族的总人数、男性人数、女性人数等信息。
四、系统实现1. 数据结构实现我们使用C语言来实现家谱管理系统。
通过定义一个节点结构体,使用指针来连接各个节点,实现家族关系的表示和管理。
2. 功能实现(1) 添加成员:根据用户输入的信息,创建一个新节点,并将其插入到适当的位置。
插入操作需要遍历树来找到合适的位置。
(2) 删除成员:根据用户指定的成员,删除该节点及其所有子孙节点。
删除操作需要递归地遍历树。
(3) 修改成员信息:根据用户选择的成员,更新其信息。
家谱管理系统数据结构(两篇)2024

引言概述:家谱管理系统是一种用于管理和记录家族历史数据的工具。
它通过组织和存储家族成员的信息,包括个人资料、家庭关系和血统关系等数据,帮助家族成员更好地了解和维护其家族传统。
数据结构在家谱管理系统中起着重要的作用,它决定了系统的性能和效率。
在上一篇《家谱管理系统数据结构(一)》中我们介绍了家谱管理系统的基本数据结构,包括树和图。
在本文中,我们将深入研究家谱管理系统的数据结构,包括链表、数组、堆和哈希表,以及它们在家谱管理系统中的应用。
正文内容:一、链表1.链表的定义和基本操作,如插入、删除和查找节点等。
2.单向链表、双向链表以及循环链表的特点及适用场景。
3.在家谱管理系统中,链表可以用来存储家族成员的个人资料和家庭关系,形成一个有序的数据结构。
4.链表的优缺点分析,包括插入和删除速度快,但查找的效率低。
二、数组1.数组的定义和基本操作,包括插入、删除和查找元素等。
2.静态数组和动态数组的区别以及在家谱管理系统中的选择。
3.数组的存储方式和访问特点,以及对系统性能的影响。
4.数组的优缺点分析,包括查找速度快,但插入和删除的效率较低。
三、堆1.堆的定义和基本操作,如插入和删除堆顶元素等。
2.最大堆和最小堆的特点及适用场景。
3.在家谱管理系统中,堆可以用来维护家族成员之间的优先级关系,例如根据年龄进行排名。
4.堆的优缺点分析,包括快速找到最大(小)元素,但插入和删除的效率较低。
四、哈希表1.哈希表的定义和基本操作,如插入、删除和查找元素等。
2.哈希函数的设计原则和方法,以及冲突解决的技术。
3.在家谱管理系统中,哈希表可以用来快速查找家族成员的信息,例如根据姓名或者ID进行查找。
4.哈希表的优缺点分析,包括查找速度快,但对存储空间的利用率较低。
五、总结家谱管理系统作为一种用于管理和记录家族历史数据的工具,数据结构在其中起着重要的作用。
本文介绍了家谱管理系统中常用的数据结构,包括链表、数组、堆和哈希表,以及它们在系统中的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宁波大红鹰学院信息工程学院课程设计报项目名称:家谱查询系统项目组长:白钰琦项目成员:徐程凯、徐海域、项鸿伟班级名称:10计科1班专业名称:计算机科学与技术完成时间:2012年12月1日信息工程学院制一、..................................... 案例描述-3 -1总体描述............................. -3 -2、模块描述........................... -4 -二、..................................... 设计思路-5 -三、..................................... 程序设计-5 -1、数据结构描述......................... -5 -2、主函数及其流程图...................... -6 -3、源程序........................... -7 -四、...................................... 调试与分析-7 -1、主菜单............................ -12 -2、显示家谱信息......................... -13 -3、显示家谱中第n代人所有信息................. -13 -4、按姓名查找某人并相应输出................... -13 -5、按出生日期查找家谱成员信息......... 错误!未定义书签。
6、为家谱中成员添加孩子信息.................. -14 -7、为家谱中成员添加妻子信息............ 错误!未定义书签。
8删除家谱中成员及其后代信息............ 错误!未定义书签。
9、修改家谱中成员信息......................................... -15 ................................................................................... -10、确定家谱中两个成员关系 ........... 错误!未定义书签。
11、按出生年月排序家谱 ............. 错误!未定义书签。
一、案例描述1、总体描述家谱管理系统是查询家谱信息必不可少的一部分 •利用家谱管理系统可 以清楚的查询到家族成员的详细信息。
该家谱管理系统是通过树来实现的。
本程序具有插入、查找等功能•可以实现存放家谱中各成员的信息。
程序的 操作界面简洁美观•易于操作。
本程序运用了函数、循环、树等知识来进行 设计.实现系统和数据结构设计1、 完成情况 .........................2、 心得体会 .......................... -15 - -16 -2、模块描述1).输入文件以存放最初家谱中各成员的信息•成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡) .也可附加其它信息、但不是必需的。
2).实现数据的存盘和读盘。
3).以图形方式显示家谱。
4).显示第n代所有人的信息。
5).按照姓名查询.输出成员信息(包括其本人、父亲、孩子的信息)。
6).按照出生日期查询成员名单。
7).输入两人姓名.确定其关系。
8).某成员添加孩子。
9).删除某成员(若其还有后代.则一并删除)。
10).修改某成员信息。
11).按出生日期对家谱中所有人排序。
12).打开一家谱时.提示当天生日的健在成员。
图1模块调用示意图、设计思路本程序要求模块化管理•分成菜单函数、创建函数、添加函数、查找函数、控制各个部分从而将程序简单化出来分析。
本程序的主要功能是:创建数据:创建各相关数据•例如创建家谱信息。
添加数据:增加家谱成员孩子信息。
查询信息:按照姓名来查询成员信息•还可以通过输入出生日期来查询该家谱信息。
退出系统:程序编译结束后退出系统。
三、程序设计1、数据结构描述本程序首先定义了结构体•定义了Ic.rc两个指针域;定义如下:typedef struct BiTNode{int mark;// 标记in t level;char name[50];〃姓名char birthday[50];〃生日char address[MAXN];〃住址int marriage;// 婚否(true表示结婚.false 表示没结婚)int live;// 建在(true表示活着.false 表示过世)int sex;// 性别(true表示男.false 表示女)Elemtype data;//struct BiTNode *lc,*rc;}BiTNode,*BiTree;2、主函数及其流程图图4创建家谱流程图3、源程序#in clude<stdio.h>#in clude<stri ng.h>#in clude<stdlib.h>#in clude<stri ng.h>typedef struct pnode{char male[10];char female[10];int n;struct pnode *fchild,*brother;}pno de,*ptree;void creatfamily(ptree ,FILE );void preorder(ptree p);void show(ptree p);in t Men u(){system("color 1f");system("mode con: cols=76 lin es=35");int i;n ; ri *$/"*******************\n\n");printf (” 输入1~6之间的数字选择相应功能:");scan f("%d",&i);return i;}ptree creatfamily(FILE *fp) {if(!feof(fp)){ptree p; p=(ptree)malloc(sizeof(p no de));char fname[10],m name[10];int i;fscan f(fp,"%s %s %d\n", fname,m name ,&i);if((strcmp(fname," n" )==0) && (strcmp( mn ame," n" )==0) && (i==0)) {p=NULL; return p;}else{ strcpy(p->male,fname); strcpy(p->female, mn ame); p-> n=i;printf (” 读取成功 \n");p->fchild=creatfamily(fp); p->brother=creatfamily(fp);return p;}}}void PreOrder(ptree p) printf (”请选择:\n"); printf (”\n ”); printf (”1. 读取一个家庭关系\n"); printf (”\n ”); printf (”2. 显示个豕庭关系\n ); printf (”\n"); printf (”3. 查找成员\n"); printf (”\n"); printf (”4. 添加新成员\n"); printf (”\n"); printf (”5. 修改成员\n"); printf (”\n"); printf (”6. 保存\n ”); printf (”\n"); printf (”7. 退出系统\n\n\n");printf (” \n");prin ff ********************************************************************************** **\ n\n"); 欢迎使用爱新觉罗家族管理系统{if(p){show(p);PreOrder(p->fchild); PreOrder(p->brother);}}void show(ptree p){printf(" 名字配偶第几代\n");prin tf("%2s %6s %d\n",p->male,p->female,p-> n); }void search(ptree p,char n ame[]){if(p){if(strcmp(p->male, name)==0){show(p);getchar();getchar();}search(p->fchild ,n ame); search(p->brother, name);}}void add(ptree p,char n ame[]){char fname[10], mn ame[10];int i;if(p){if(strcmp(p->male, name)==0){printf(" 名字配偶第几代\n");scan f("%s %s %d",fname,m name, &i); p->fchild=(ptree)malloc(sizeof(p no de)); strcpy(p->fchild->male,fname);strcpy(p->fchild->female, mn ame);p->fchild->n=i;p->fchild->fchild=NULL; p->fchild->brother=NULL;}add(p->fchild, name); add(p->brother, name);}}void gai(ptree p,char n ame[]){char fname[10], mn ame[10];int i;if(p){if(strcmp(p->male, name)==0){printf(" 名字配偶第几代\n”);scan f("%s %s %d",fname,m name, &i); strcpy(p->male,fname);strcpy(p->female,m name);p-> n=i;}gai(p->fchild, name); gai(p->brother, name);}}void save(ptree p,FILE *stream){if(p){fprin tf(stream,"%s %s %d",p->male,p->female,p->n); save(p->fchild,stream);save(p->brother,stream);}else{char out[20] = "n n 0";fprin tf(stream,"%s\n" ,out);}}int mai n(){ int status;char n ame[10];ptree p;FILE *fp= fope n("lmx.txt","r+");while(1){status=Me nu();switch(status){case 1:p=creatfamily(fp);getchar();getchar();break;case 2:PreOrder(p);getchar();getchar();break;case 3:printf(" 请输入搜索的名字\n");sca nf("%s", name);search(p ,n ame); break;case 4:printf(" 请输入要孩子的人\n");sca nf("%s", name);add(p ,n ame);break;case 5:printf(" 请输入要修该的人\n");sca nf("%s", name);gai(p, name); break;case 6:save(p,fp);getchar();getchar();break;case 7:printf("\n 感谢使用本系统\n");fclose(fp);fclose(fp);exit(O); // 如果选择5.则退出循环终止程序break;default :printf("\n 您选择有误\n");getchar();}}}四、调试与分析1、主菜单" -N:\字习圏掲结构\家族管理白锂琦\代码©E -家谱管理系统的主界面2、显示家谱信息读取家谱信息3、显示家谱中第n 代人所有信息显示家谱中第n 代人所有信息 计成成成成 A1取取取取 读读匕匕 功 应 第几代 第几代 第几代 偶 3iffi2 间配济配里斟酣无之尔舍若 %博赫 入字临字弊字禮子钮4、按姓名查找某人并相应输出查询家谱成员信息的界面5、为家谱中成员添加孩子信息为家谱中成员添加孩子信息誤搜 』入 Atff 厂入ASS 1 配富 噩产选择相应功能;4 第几代i 46修改家谱中成员信息 计入 入输历 2理SA 名弘 代 第 「可 偶両修改家谱中成员信息五、设计总结1、完成情况2、心得体会白钰琦:从这个项目中.我懂得了代码编写能力的提高不是一天两天的事.而是一个日积月累的过程。