2020年整理家谱管理系统.doc

合集下载

完整word版数据结构-家谱管理系统word文档良心出品

完整word版数据结构-家谱管理系统word文档良心出品

宁波大红鹰学院信息工程学院课程设计报告项目名称:家谱查询系统白钰琦项目组长:徐程凯、徐海域、项鸿伟项目成员:班班级名称:计科101计算机科学与技术专业名称:月年2012121:完成时间日信息工程学院制- 1 -目录一、案例描述........................................................................................................... - 3 -1、总体描述...................................................................................................... - 3 -2、模块描述...................................................................................................... - 3 -二、设计思路........................................................................................................... - 3 -三、程序设计........................................................................................................... - 4 -1、数据结构描述.............................................................................................. - 4 -2、主函数及其流程图...................................................................................... - 4 -3、源程序.......................................................................................................... - 5 -四、调试与分析....................................................................................................... - 5 -1、主菜单........................................................................................................ - 10 -2、显示家谱信息............................................................................................ - 11 -3、显示家谱中第n代人所有信息................................................................ - 11 -4、按姓名查找某人并相应输出.................................................................... - 11 -5、按出生日期查找家谱成员信息....................................... 错误!未定义书签。

家谱管理系统

家谱管理系统

家谱管理系统家谱管理系统一、引言家谱是一种记录家族世系和血统关系的文献资料,对于了解家族历史和传统具有重要意义。

然而,传统的家谱管理方式存在数据维护困难、信息交流不便等问题。

为了解决这些问题,设计并开发了家谱管理系统。

二、系统概述1:目标家谱管理系统旨在提供一个集中管理、维护家族世系和血统关系的平台,方便用户进行查询、编辑和分享家谱信息。

2:功能- 登录功能:用户可以通过账号密码登录系统。

- 家族成员管理:用户可以添加、删除和修改家族成员的信息。

- 家谱维护:用户可以创建、编辑和保存家谱信息。

- 家族树展示:用户可以查看并浏览家族世系树。

- 家谱搜索:用户可以根据关键词快速搜索家谱中的成员。

- 信息分享:用户可以将家谱信息分享给他人。

- 数据备份:系统可以对家谱数据进行定期备份。

三、系统设计1:系统结构家谱管理系统采用三层架构,包括表示层、业务逻辑层和数据访问层。

表示层负责与用户的交互,业务逻辑层处理系统的业务逻辑,数据访问层负责与数据库的交互。

2:数据库设计系统采用关系型数据库存储家谱信息,包括家族成员表、家族关系表和用户表。

家族成员表存储每个成员的个人信息,家族关系表记录成员之间的血缘关系,用户表用于存储系统的用户信息。

3:用户界面设计系统的用户界面简洁明了,包括登录界面、家族成员管理界面、家谱维护界面、家族树展示界面和搜索界面。

界面设计遵循用户友好的原则,方便用户理解和操作。

四、系统实现1:技术选型系统采用Java语言进行开发,使用Spring框架进行项目管理和依赖注入,使用MySQL作为数据库,使用、CSS和JavaScript实现前端页面。

2:功能实现- 登录功能:通过编写登录逻辑和账号密码验证模块实现用户登录功能。

- 家族成员管理:设计数据库结构,编写增删改查操作的接口和逻辑。

- 家谱维护:实现家谱信息的编辑和保存功能。

- 家族树展示:使用数据结构和算法实现家族关系的图形展示。

- 家谱搜索:通过数据库查询和关键词匹配实现家谱搜索功能。

家谱管理系统1(1)

家谱管理系统1(1)

《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计11 – 2班姓名:刘文秀(15)合作者:姜雪(05) 、岳奉宜(33)指导教师:薛曼玲2013 年 12 月 01 日《软件综合设计》任务书一、题目:家谱管理系统二、设计要求(1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。

(2)小组成员分工协作完成。

要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。

(3)查阅相关资料,自学具体课题中涉及到的新知识。

(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。

(5)所设计的系统应有菜单、动画和音乐。

(6)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。

报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。

仅一级标题上目录。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。

四、课程设计工作计划2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析;2013年12月3日,设计小组进行总体方案设计和任务分工;2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译;2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2013年12月13日,验收、开始撰写课程设计报告;2013年12月18日前,提交课程设计报告和软件。

家谱管理系统1

家谱管理系统1

《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计11 – 2班姓名:刘文秀(15)合作者:姜雪(05) 、岳奉宜(33)指导教师:薛曼玲2013 年 12 月 01 日《软件综合设计》任务书一、题目:家谱管理系统二、设计要求(1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。

(2)小组成员分工协作完成。

要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。

(3)查阅相关资料,自学具体课题中涉及到的新知识。

(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。

(5)所设计的系统应有菜单、动画和音乐。

(6)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。

报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。

仅一级标题上目录。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。

四、课程设计工作计划2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析;2013年12月3日,设计小组进行总体方案设计和任务分工;2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译;2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2013年12月13日,验收、开始撰写课程设计报告;2013年12月18日前,提交课程设计报告和软件。

家谱管理系统.doc

家谱管理系统.doc

家谱管理系统。

洛阳科技学院课程设计报告数据结构课程设计课程名称_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计主题_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _计算机科学与技术专业_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 150405班级_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 15080822学校编号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _宋世龙的姓氏是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x XXX,2006年12月30日。

完成日期_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计的内容和要求;[问题描述]以下内容:实现了具有以下功能的家谱树管理系统1)。

数据结构家谱管理系统(二叉链表)

数据结构家谱管理系统(二叉链表)

char life; //是否健在 };
3、 二叉树结点结构体 struct Node { Information data; //个人信息 Node* child; //第一个孩子 Node* brother; //兄弟 };
4、 家谱类(二叉树结构、左孩子,右兄弟) class FamilyTree { private:
2、 更新模块 (1) 创建家谱、增加成员、删除成员、成员改名 (2) 主要函数: Node* Creat( ); //构造函数调用 void AddNewPeople(Node *root,string FatherName,string NAme); // 增加新的家族成员 int DeletePeople(Node *root,string FatherName,string Deletepeople); //删除家族成员
要求: 用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理 系统,实现对一个家族所有的资料进行收集整理。支持对家谱的增加, 删除,更新,统计等。
软件环境:
Microsoft Visual Studio 2010 流程设计:
开始 Main 函数 Menu 函数
FamilyTree函数 Getroot函数
目的和要求: 目的: 1、 能根据具体问题的具体情况,结合数据结构课程中的基本理论和基本算
法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并 能设计出解决问题的有效算法。 2、 提高程序设计和调试能力。通过上机学习,验证自己设计的算法的正确 性。学会有效利用基本调试方法。 3、 初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本 方法和技能。 4、 培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

家谱管理系统

家谱管理系统

合肥师范学院(本科)课程设计说明书课程数据结构题目家谱管理系统姓名马俊超徐润仙秦齐学号专业班级指导教师完成日期2012 年12 月27 日1、绪言1.1课题背景家谱是记载同一姓氏血缘关系的世系、重要人物、个人事迹、家族历史为主要内容的谱籍,又称“族谱”、“家谱”、“家乘”,还有称作“谱碟”。

家谱上可以追本溯源,缅怀先人,下可以辨明关系,联络宗亲,从而启孝梯心,唤德善之本,激励后人,奋发有为,其作用不可尽述。

在社会方面,家谱对于海内外华人寻根认祖,增强民族凝聚力起着重要作用。

在文史工作者,家谱是研究人口学、社会学、经济学、历史学、氏族学、人物传记,以及研究地方史乃是重要资料。

在个人方面家谱又是每个公民身份证明之一。

如有些族规有载,某人若不遵法纪,为非作歹者,击鼓鸣公,革出族外,不准入谱。

可见家谱无论在社会在个人都起着重要作用。

1.2目的背景与意义家谱的科学管理不但有助于民族文化和地方文化的发展,而且有其自身的积极意义。

家谱文化作为国家的政治经济文化中心,若家谱管理能在广州得到应用,必会促进广州文化的发展,进一步推广应用,带动各地的文化事业作为计算机应用的一部分,使用计算机对家谱人员的各类信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。

这些优点能够极大地提高学校信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。

1.3项目开发的目标建立家谱管理系统,采用计算机对家谱中的人员信息进行管理,进一步提高办学效益和现代化水平。

帮助人口的及时普查提高工作效率,实现我国人口管理工作流程的系统化、规范化和自动化。

2、系统需求分析2.1问题描述本课程设计正是以家谱管理为课题,力求通过设计并实现一个计算机软件,来支持对家谱的添加、更新、查询、修改等操作。

2.2功能要求实现对一个家族的资料进行收集整理。

1、显示整个家族的信息;2、实现添加成员的功能;3、实现更新及修改成员的功能;4、按姓名查找家谱中的某个成员。

家谱管理系统数据结构(两篇)2024

家谱管理系统数据结构(两篇)2024

引言概述:家谱管理系统是一种用于管理和记录家族历史数据的工具。

它通过组织和存储家族成员的信息,包括个人资料、家庭关系和血统关系等数据,帮助家族成员更好地了解和维护其家族传统。

数据结构在家谱管理系统中起着重要的作用,它决定了系统的性能和效率。

在上一篇《家谱管理系统数据结构(一)》中我们介绍了家谱管理系统的基本数据结构,包括树和图。

在本文中,我们将深入研究家谱管理系统的数据结构,包括链表、数组、堆和哈希表,以及它们在家谱管理系统中的应用。

正文内容:一、链表1.链表的定义和基本操作,如插入、删除和查找节点等。

2.单向链表、双向链表以及循环链表的特点及适用场景。

3.在家谱管理系统中,链表可以用来存储家族成员的个人资料和家庭关系,形成一个有序的数据结构。

4.链表的优缺点分析,包括插入和删除速度快,但查找的效率低。

二、数组1.数组的定义和基本操作,包括插入、删除和查找元素等。

2.静态数组和动态数组的区别以及在家谱管理系统中的选择。

3.数组的存储方式和访问特点,以及对系统性能的影响。

4.数组的优缺点分析,包括查找速度快,但插入和删除的效率较低。

三、堆1.堆的定义和基本操作,如插入和删除堆顶元素等。

2.最大堆和最小堆的特点及适用场景。

3.在家谱管理系统中,堆可以用来维护家族成员之间的优先级关系,例如根据年龄进行排名。

4.堆的优缺点分析,包括快速找到最大(小)元素,但插入和删除的效率较低。

四、哈希表1.哈希表的定义和基本操作,如插入、删除和查找元素等。

2.哈希函数的设计原则和方法,以及冲突解决的技术。

3.在家谱管理系统中,哈希表可以用来快速查找家族成员的信息,例如根据姓名或者ID进行查找。

4.哈希表的优缺点分析,包括查找速度快,但对存储空间的利用率较低。

五、总结家谱管理系统作为一种用于管理和记录家族历史数据的工具,数据结构在其中起着重要的作用。

本文介绍了家谱管理系统中常用的数据结构,包括链表、数组、堆和哈希表,以及它们在系统中的应用。

数据结构家谱管理系统(二叉链表)

数据结构家谱管理系统(二叉链表)
8
char life; //是否健在 };
3、 二叉树结点结构体 struct Node { Information data; //个人信息 Node* child; //第一个孩子 Node* brother; //兄弟 };
4、 家谱类(二叉树结构、左孩子,右兄弟) class FamilyTree { private:
2、 更新模块 (1) 创建家谱、增加成员、删除成员、成员改名 (2) 主要函数: Node* Creat( ); //构造函数调用 void AddNewPeople(Node *root,string FatherName,string NAme); // 增加新的家族成员 int DeletePeople(Node *root,string FatherName,string Deletepeople); //删除家族成员
7
数据结构实现: 1、 生日结构体
struct BirthDay { int year; int month; int day; friend istream& operator>>(istream &is,BirthDay &b); friend ostream& operator<<(ostream &os,const BirthDay &b); };
2、 信息结构体(家族成员的基本信息) struct Information { string name; //姓名 string birthPlace; //出生地 BirthDay birthDay; //生日 string sex; //性别 string education; //学历 string job; //工作 string father; //父亲 string spouse; //配偶

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

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

家谱管理系统数据结构大作业
家谱管理系统的数据结构可以采用树的数据结构来实现。

每一个人都可以看做是树的一个节点,节点之间的关系可以表示为父子关系。

具体实现时,可以定义一个Person类,其中包含以下属性:
- 姓名(name)
- 性别(gender)
- 出生日期(birth)
- 父亲(father)
- 母亲(mother)
- 子女列表(children)
然后,可以定义一个FamilyTree类,其中包含以下方法:
- 添加人员:根据提供的信息创建一个Person对象,并将其添加到家谱树中。

- 查找人员:根据姓名查找对应的Person对象。

- 添加父母关系:根据提供的信息,将两个Person对象之间建立父母关系。

- 添加子女关系:根据提供的信息,将一个Person对象添加到另一个Person对象的子女列表中。

- 删除人员:根据提供的姓名,删除对应的Person对象以及其在家谱树中的所有关系。

这样,通过FamilyTree类的方法,可以对家谱进行增加、删除、查询等操作。

家谱树的根节点可以作为整个家谱的入口。

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

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

/* 家谱管理系统任务:实现具有下列功能的家谱管理系统功能要求:1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。

2). 实现数据的存盘和读盘。

3). 以图形方式显示家谱。

`4). 显示第n 代所有人的信息。

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。

6). 按照出生日期查询成员名单。

7). 输入两人姓名,确定其关系。

8). 某成员添加孩子。

9). 删除某成员(若其还有后代,则一并删除)。

10).修改某成员信息。

11).按出生日期对家谱中所有人排序。

12).打开一家谱时,提示当天生日的健在成员。

要求:建立至少30 个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。

测试数据:要求使用1、全部合法数据;2、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;*/~#include<>#include<>#include<>#include<>#include""#define MAXN 100#define MAXMEM 100#define Elemtype char~==============================修改姓名 \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 &T){while(1){system("cls");ShowAmend();)scanf("%d",&choice);switch(choice){case 1:printf(" 请输入修改后的姓名: ");scanf("%s",T->name);break;case 2:printf(" 请输入修改后的出生年月: ");scanf("%s",T->birthday);break;case 3:printf(" 请输入修改后的住址: ");scanf("%s",T->address);break;case 4:printf(" 请输入修改后的婚姻状况: ");scanf("%d",&T->marriage);break;case 5:printf(" 请输入修改后的在世情况: ");scanf("%d",&T->live);if(!T->live){printf(" 请输入本人的过世时间: ");scanf("%s",T->livemassage);}break;case 6:printf(" 请输入修改后的性别( 1 表示男, 0 表示女) : ");scanf("%d",&T->sex);case 7:return;default:printf(" 输入非法,请重新输入\n");break;}}}void AmendInfo(BiTree &T)示今天生日成员 2.显示家谱 \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;in = fopen("","r");CreatBiTree(T,in);//PreOrderTraverse_recursion(T);while(1){system("cls");ShowMenu();scanf("%d",&choice);getchar();system("cls");switch(choice){case 1:LocateTime();count = 0;BirthToday(T);if(count == 0)printf(" 今天家谱中没有成员过生日\n");system("pause");break;case 2:ShowFamilyTree(T);system("pause");break;case 3:printf(" 请输入需要查询第几代人: ");count = 0;scanf("%d",&Nth);ShowNth(T);if(count == 0)printf(" 第%d 代尚未有人。

【卓顶精文】家谱最新管理系统《软件综合设计》.doc

【卓顶精文】家谱最新管理系统《软件综合设计》.doc

家谱最新管理系统《软件综合设计》院系:计算机科学技术学院二系班级:计11 – 2班姓名: LWX(15)合作者: JX(05) 、HGE(33)指导教师: QML20XX 年XX月XX 日《软件综合设计》任务书一、题目:家谱管理系统二、设计要求(1)LWX(组长)、JX和HGE组成课程设计小组。

(2)小组成员分工协作完成。

要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。

(3)查阅相关资料,自学具体课题中涉及到的新知识。

(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。

(5)所设计的系统应有菜单、动画和音乐。

(6)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。

报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。

仅一级标题上目录。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。

四、课程设计工作计划20XX年XX月XX日,指导教师讲课,学生根据题目准备资料,需求分析;20XX年XX月XX日,设计小组进行总体方案设计和任务分工;20XX年XX月XX日~20XX年XX月XX日,每人完成自己承担的程序模块并通过独立编译;20XX年XX月XX日~XX日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;20XX年XX月XX日,验收、开始撰写课程设计报告;20XX年XX月XX日前,提交课程设计报告和软件。

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

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

家谱管理系统 -数据结构大作业家谱管理系统数据结构大作业在当今数字化的时代,信息管理系统在各个领域都发挥着重要作用。

家谱作为家族历史和传承的重要记录,也需要一个高效、便捷的管理系统来保存、整理和查询相关信息。

本次数据结构大作业,我将深入探讨家谱管理系统的设计与实现。

一、需求分析家谱管理系统的主要用户包括家族成员和对家族历史感兴趣的研究者。

系统需要满足以下基本需求:1、能够存储家族成员的详细信息,如姓名、出生日期、逝世日期、籍贯、职业等。

2、支持家族关系的建立和维护,如父子、母子、夫妻等关系。

3、提供便捷的查询功能,用户可以根据姓名、出生日期、关系等条件快速找到所需的家族成员信息。

4、支持家谱的可视化展示,以清晰呈现家族成员之间的关系结构。

5、具备数据的添加、删除和修改功能,以保证家谱信息的及时更新。

二、数据结构选择为了有效地存储和管理家谱数据,我们需要选择合适的数据结构。

考虑到家谱中家族成员之间的层次关系,树结构是一个理想的选择。

在这里,我们可以使用二叉树来表示家族关系。

每个节点代表一个家族成员,节点中存储成员的相关信息。

父节点与左子节点表示父子关系,父节点与右子节点表示父女关系。

另外,为了提高查询效率,我们还可以结合哈希表来存储家族成员的信息。

通过哈希函数将成员的关键信息(如姓名)映射到哈希表中的特定位置,从而实现快速的查找和访问。

三、系统功能模块设计1、数据录入模块提供友好的用户界面,方便用户输入家族成员的信息。

对输入的数据进行合法性检查,确保信息的准确性和完整性。

2、数据存储模块利用选择的数据结构(二叉树和哈希表)将家族成员的信息进行存储。

确保数据的安全存储,防止数据丢失或损坏。

3、查询模块支持多种查询条件,如按姓名、出生日期、关系等进行查询。

快速返回查询结果,并以清晰的方式展示给用户。

4、关系维护模块允许用户添加新的家族成员,并建立其与其他成员的关系。

支持修改和删除家族成员的信息及关系。

数据结构家谱管理系统范本

数据结构家谱管理系统范本

数据结构家谱管理系统范本在当今数字化的时代,管理和保存家族信息变得越来越重要。

一个高效的数据结构家谱管理系统能够帮助我们更好地记录家族成员的关系、个人信息以及家族的历史。

接下来,让我们详细探讨一下这样一个系统的范本。

首先,让我们来明确一下这个系统的主要目标和功能。

其核心目标是提供一个集中、准确且易于维护的平台,用于存储和查询家族信息。

主要功能应包括:家族成员信息的录入与编辑、成员之间关系的定义和展示、家族历史事件的记录、以及强大的查询和搜索功能。

在设计数据结构时,我们需要考虑如何有效地存储家族成员的信息。

可以创建一个“家族成员”表,其中包含诸如姓名、出生日期、出生地、逝世日期(若有)、照片(路径)等基本字段。

为了表示成员之间的关系,我们可以再创建一个“关系”表,记录每个成员与其亲属(如父母、配偶、子女等)的关联。

对于界面设计,应追求简洁明了、易于操作的风格。

首页可以展示家族树的概览,以直观的方式呈现家族成员之间的关系。

用户点击某个成员节点,能够查看该成员的详细信息,并可以进行编辑或添加新的信息。

在录入家族成员信息时,系统应提供友好的输入界面,并进行必要的数据验证,以确保输入信息的准确性和完整性。

例如,出生日期的格式应该符合规范,姓名不能为空等。

为了方便查询,系统应支持多种查询方式。

用户可以通过姓名、出生日期范围、籍贯等条件进行搜索,快速找到所需的家族成员信息。

在家谱管理系统中,数据的安全性和备份也是至关重要的。

用户的登录和操作权限应该得到严格控制,只有授权人员能够进行数据的修改和删除。

同时,定期对数据进行备份,以防止数据丢失。

此外,系统还可以提供一些扩展功能,比如生成家族报告,以图表或文档的形式展示家族的人口分布、年龄结构等信息;或者与社交媒体平台集成,方便与家族成员分享家族历史和最新动态。

在实际开发过程中,选择合适的编程语言和数据库管理系统也非常关键。

常见的编程语言如 Java、Python 等都能够胜任,而数据库可以选择 MySQL、SQL Server 等。

家谱管理系统

家谱管理系统

家谱管理系统(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--家谱管理系统一、需求分析本系统实现以下功能:1). 输入文件以存放最初家谱中各成员的信息。

成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。

2). 实现数据的存盘和读盘。

3). 以图形方式显示家谱。

4). 显示第n 代所有人的信息。

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。

6). 按照出生日期查询成员名单。

7). 输入两人姓名,确定其关系。

8). 某成员添加孩子。

9). 删除某成员(若其还有后代,则一并删除)。

10).修改某成员信息。

11).按出生日期对家谱中所有人排序。

12).打开一家谱时,提示当天生日的健在成员。

测试要求:1).建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。

2).对界面的要求是:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

二、设计概要1、抽象数据类型兄弟孩子树的定义如下:ADT CSNode{数据对象:person是兄弟孩子树中的每一个节点,T是整个树的统一体数据关系:R1={<person i-1,person i>|<person i-1,person i>表示person i-1和person i之间有血缘关系}基本操作:CSNode *CreatTree(fstream &outfile);初始条件:已经打开了文本文件操作结果:创建一个兄弟孩子树T,并把从文件中的数据送到树中,关闭文件。

void CreatParent_step(CSNode *parent);初始条件:兄弟孩子树T已经存在操作结果:对所有的孩子节点添加指向父亲的指针void InOrderTraverse(CSNode *T);初始条件:兄弟孩子树T已经存在操作结果:对T进行中序遍历。

家谱管理系统 (3)

家谱管理系统 (3)

家谱管理系统简介家谱是记录一个家族世代流传下来的重要文件,它不仅记录了家族成员的姓名、关系等基本信息,还包括了家族的历史、传统等丰富内容。

随着科技的进步,传统的手写家谱已经无法满足人们的需求,因此家谱管理系统的出现成为了一种必然。

家谱管理系统是一种基于计算机技术的家谱记录和管理工具。

它可以方便地记录和管理家族成员的信息,并且提供了各种功能,使得家族成员能够更好地了解自己的家族历史,方便查找和联系亲戚,促进家族成员之间的交流和联系。

功能需求1. 家族成员管理家谱管理系统应该具备添加、删除、编辑家庭成员信息的功能。

每个家庭成员的信息应包括姓名、性别、出生日期、联系方式等基本信息,并且应能够方便地查看和编辑这些信息。

2. 家族族谱展示家谱管理系统应当提供完整的家族族谱展示功能。

族谱应以树状图或者层级图形式展示,清晰展示家庭成员之间的关系,方便用户查看自己在家族中的地位和联系。

3. 家族历史记录家谱管理系统应当具有记录和展示家族历史的功能。

用户可以添加和编辑家族的重要事件、传统习俗等,使得家族的历史能够得到有效记录和传承。

4. 亲戚搜索功能家谱管理系统应当提供方便快捷的亲戚搜索功能。

用户可以根据姓名、关系等信息搜索到自己的亲戚,方便与以前没有接触过的亲戚建立联系。

5. 家族通讯录家谱管理系统应该提供家族成员通讯录的功能,方便用户与家族成员进行联系。

用户可以根据需要查找家族成员的联系方式,并且能够方便地添加新成员的联系方式。

技术实现家谱管理系统可以基于Web、App或者桌面软件等形式实现。

下面我将以Web应用为例,介绍如何使用Markdown编写家谱管理系统的文档。

Web应用架构家谱管理系统的Web应用可以基于传统的三层架构实现,包括前端、后端和数据库。

•前端:使用HTML、CSS和JavaScript等前端技术实现用户界面,提供用户友好的交互和展示效果。

•后端:使用一种后端语言,如Java、Python等进行业务逻辑处理和数据交互。

家谱管理系统

家谱管理系统

家谱管理系统在现代社会,随着科技的飞速发展,各种信息管理系统应运而生,为我们的生活和工作带来了极大的便利。

其中,家谱管理系统作为一种专门用于记录和管理家族成员信息、家族历史和传承的工具,正逐渐受到人们的关注和重视。

家谱,是一个家族的生命史,它不仅记录了家族成员的姓名、出生日期、婚姻状况等基本信息,还承载着家族的文化、传统、价值观以及重要的历史事件。

对于许多家庭来说,家谱是一份珍贵的遗产,是连接家族成员之间情感的纽带,也是传承家族精神的重要载体。

然而,传统的纸质家谱存在着诸多不便,如保存困难、信息更新繁琐、查阅不便等。

为了解决这些问题,家谱管理系统应运而生。

家谱管理系统的功能通常十分强大且多样化。

首先,它具备便捷的信息录入功能。

用户可以轻松地输入家族成员的各项详细信息,包括个人基本资料、教育背景、职业经历、成就荣誉等。

而且,系统还支持批量导入和导出数据,大大提高了信息整理的效率。

其次,家谱管理系统拥有强大的查询和检索功能。

无论您是想查找某位特定的家族成员,还是了解某个时期家族的发展情况,只需输入相关的关键词或条件,系统就能迅速为您筛选出所需的信息。

这使得家族成员能够快速了解家族的脉络和历史,增进对家族的认知和归属感。

再者,系统能够实现家族关系的可视化展示。

通过图表、树形结构等形式,清晰地呈现出家族成员之间的亲属关系,让人一目了然。

这种直观的展示方式有助于年轻一代更好地理解家族结构,培养家族意识。

另外,家谱管理系统还具备信息更新功能。

随着时间的推移,家族成员的情况会发生变化,如新增成员、成员的信息变更等。

用户可以随时对系统中的信息进行更新和修改,确保家谱的准确性和时效性。

同时,一些先进的家谱管理系统还提供了数据备份和恢复功能,防止数据丢失。

此外,为了保护家族信息的安全和隐私,系统通常会设置不同级别的用户权限,只有授权用户才能查看和修改特定的信息。

在家谱管理系统的开发过程中,需要充分考虑用户的需求和使用习惯。

家谱管理系统1(1)

家谱管理系统1(1)

《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级: 计11 – 2班姓名: 刘文秀(15)合作者:姜雪(05)、岳奉宜(33)指导教师:薛曼玲2013 年 12 月 01 日《软件综合设计》任务书一、题目:家谱管理系统二、设计要求(1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。

(2)小组成员分工协作完成。

要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。

(3)查阅相关资料,自学具体课题中涉及到的新知识。

(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。

(5)所设计的系统应有菜单、动画和音乐。

(6)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。

报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值"18磅,首行缩进2字符.1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。

仅一级标题上目录。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。

四、课程设计工作计划2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析;2013年12月3日,设计小组进行总体方案设计和任务分工;2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译;2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2013年12月13日,验收、开始撰写课程设计报告;2013年12月18日前,提交课程设计报告和软件。

家谱管理系统 -数据构架大作业

家谱管理系统 -数据构架大作业

精心整理/*家谱管理系统任务:实现具有下列功能的家谱管理系统功能要求:1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以2).3).4).5).。

6).7).8).9).10).11).12).打开一家谱时,提示当天生日的健在成员。

要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。

测试数据:要求使用1、全部合法数据;2、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;*///树{intmark;//标记intlevel;charname[50];//姓名charbirthday[50];//生日charaddress[MAXN];//住址boolmarriage;//婚否(true表示结婚,false表示没结婚)boollive;//建在(true表示活着,false表示过世)boolsex;//性别(true表示男,false表示女)charlivemassage[50];//死亡日期(如果其已经死亡)Elemtypedata;////charsearchdata[50];charsearchname[50];intcount;//计数intchoice;//各种选择intuse;BiTreetemp;structBiTNodeList{BiTreedata;BiTNodeList*next;};{{}else{T=(BiTree)malloc(sizeof(BiTNode));//fscanf(in,"%s%s%s%d%d",nametemp,birthdaytemp,addresstemp,&mar riagetemp,&livetemp);fscanf(in,"%s",nametemp);strcpy(T->name,nametemp);fscanf(in,"%s",birthdaytemp);strcpy(T->birthday,birthdaytemp); fscanf(in,"%s",addresstemp);strcpy(T->address,addresstemp);p);{}if(!T->live)strcpy(T->livemassage,livemassagetemp); fscanf(in,"%c",&ch);CreatBiTree(T->lc,in);CreatBiTree(T->rc,in);}}voidPrintInfo(BiTreeT){printf("%-10s出生于}voidPreOrderTraverse_recursion(BiTreeT)//递归先序遍历(检查建树是否正确){//printf("PreOrderTraverse_recursion\n");if(T){/*printf("%-10s出生于:%-10s%-10s",T->name,T->birthday,T->address);if(T->marriage)PreOrderTraverse_recursion(T->rc);}}voidShowFamilyTree(BiTreeT)//以图形的方式显示家谱{inti,lev;BiTreep;p=T;if(T){{{}}elseprintf("(未婚)\n"); }if(T->rc){p=T->rc;ShowFamilyTree(p);}}{{{}}}voidSearchByName(BiTreeT)//按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。

家谱管理系统(二)

家谱管理系统(二)

引言概述:正文内容:1.基本功能1.1家族人员信息管理家谱管理系统可以对家族成员的基本信息进行记录,包括姓名、性别、出生日期、婚姻状况等。

同时,系统还支持照片和添加,方便家族成员了解彼此的身份和历史。

1.2家族谱系构建家族谱系是家谱管理系统的核心功能之一。

系统可以通过输入家族成员的关系,自动家族谱系图,便于家族成员了解自己在家族中的位置,并追溯家族历史。

2.高级功能2.1家族活动管理家族管理系统可以帮助组织家族活动,包括集会、聚餐、纪念日等。

系统可以记录活动的时间、地点、参与成员等信息,并提供日程提醒,方便家族成员参与和组织活动。

2.2家族财物管理家谱管理系统还支持家族财物的管理。

家族成员可以记录家族财物的来源、价值、管理人等信息,并通过系统实时了解家族财物的情况,避免财物流失或遗弃。

2.3家族传统文化保留3.系统优势3.1方便快捷的信息搜索家谱管理系统具有强大的搜索功能,可以根据姓名、关系等条件快速搜索到目标家族成员的信息,提高了家族成员之间的互动和联系。

3.2数据安全与隐私保护家谱管理系统采用密码登录、数据加密等安全措施,保障家族成员的数据安全与隐私。

系统只允许家族成员之间分享信息,确保用户信息不会被泄露给外部人员。

3.3多平台的支持家谱管理系统兼容多种平台,包括电脑、方式、平板等设备,用户可以随时随地访问家谱信息,便于快速查询和分享。

4.使用步骤4.1注册账号用户需要在家谱管理系统网站或APP上注册账号,并填写基本信息。

4.2添加家族成员4.3构建家族谱系在添加家族成员后,系统会自动家族谱系图。

用户可以通过编辑和添加关系,完善家族谱系图。

4.4管理家族活动和财物用户可以在系统中管理家族活动,记录活动信息和参与成员。

同时,可以管理家族财物信息,包括来源、价值等。

4.5传承家族传统文化总结:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

洛 阳 理 工 学 院课 程 设 计 报 告课程名称 ___________________________________ 设计题目 ___________________________________ 专 业 ___________________________________ 班 级 ___________________________________ 学 号 ___________________________________ 姓 名 ___________________________________ 完成日期 ___________________________________数据结构课程设计 家谱管理系统 计算机科学与技术 B150405 B15080822 宋士龙 2016年12月30日课程设计任务书设计题目:家谱管理系统设计内容与要求:【问题描述】:实现具有下列功能的家谱管理系统1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。

2). 实现数据的存盘和读盘。

3). 显示家谱。

4). 按照出生日期查询成员名单。

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。

6). 修改某成员信息。

【基本要求】:界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。

测试数据:要求使用1、全部合法数据;2、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明。

指导教师:_______________年月日课程设计评语成绩:指导教师:_______________年月日一、算法思想本程序是一个管理家谱的系统,通过这个系统可以对家族成员进行创建、显示、查找、修改、以及保存家谱和读取家谱功能。

该系统分为以下几个模块,分别是:创建家谱,显示家谱、按姓名和生日查找家庭成员、修改家谱、存盘、读盘以及退出系统。

本程序用到的存储形式为多叉树,因为家谱中每个人既有父母又有孩子,而且孩子的个数并不确定,所以用多叉树来存储最为合适。

用多叉树来存储,就用用到多叉树的递归创建及递归遍历。

因为是多叉树,所以遍历时用广度优先搜索合适。

本函数最主要的思想就是递归调用,每个子函数中都会用到递归。

定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。

定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。

二、模块划分1.int main():主函数2.void CreatTree(TreeNode *Tree):创建家族树3.void OutPutAll(TreeNode *Tree):显示家谱4.void Menue(TreeNode *Tree):主菜单5.void SubMenue1(TreeNode * Tree):副菜单(修改选项菜单)6.void Change(TreeNode * Tree):修改家谱7.TreeNode * SearchTree(TreeNode *Tree,char name[],int length):按照姓名查找家谱成员8.TreeNode * SearchTree1(TreeNode *Tree,char birth[],int length):按照生日查找家谱成员9.void OutPutMessage(TreeNode * Tree,char name[],int length):输出按姓名查找到的家谱成员10.void OutPutMessage1(TreeNode * Tree,char birth[],int length):输出按生日查找到的家谱成员11.void SaveFamily(TreeNode *root):保存家谱12.void ReadFamily(TreeNode **root):读取家谱三、数据结构typedef struct TreeNode{int ChildNum; //记录这个人拥有几个儿女char Name[20];//记录这个人的姓名char birthday[20];//生日int marriage;//婚否(1表示结婚,0表示没结婚)int death;//生死(1表示活着,0表示过世)char Kind;//标示节点的种类有女G男Bchar address[100];//住址char livemassage[50];//死亡日期(如果其已经死亡)struct TreeNode *NextNode[20]; //记录这个人的儿女struct TreeNode *Parent; //记录这个节点的父节点}TreeNode,*tree;四、测试第一组数据为:爷爷,奶奶,爸爸,妈妈,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共三代11个人。

其中爷爷是根节点,奶奶为爷爷的配偶,同时也是爷爷的第一个后继节点。

爸爸,二叔,三叔为爷爷的子女。

爸爸的配偶是妈妈,爸爸的子女是我。

二叔的配偶是二婶,子女是姐姐。

三叔的的配偶是三婶,三叔的的子女是弟弟。

进入程序之后,首先进行创建家谱,然后进行存盘,之后进行修改和查询等步骤。

退出程序在进入程序时,进行读盘。

之后在进行其他操作,程序完成之后退出即可。

图1 家族树第一组数据测试截图为:图2 显示家谱爷爷 爸爸 二叔 奶奶三叔 妈妈 二婶 三婶我 姐姐弟弟图3 按照姓名查找家族成员图4 存盘第二组数据为:图4 王家家族树第二组数据测试截屏为:图5 修改家族成员的信息王老王大 刘老王二 李大张二王小一王小二图6 修改某个人的具体信息图7 按照生日查找某人图8 读盘五、源程序#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef WIN32#define CLEAR system("cls")#define TipForSaveFilePosition printf("\t\t输入文件名及保存位置(eg: D:\\\\example.txt):")#define TipForReadFilePosition printf("\t\t文件名及其路径(eg: D:\\\\example.txt): ")#else#define CLEAR system("clear")#define TipForSaveFilePosition printf("\t\t输入文件名及保存位置(eg: /home/xiong/example.txt): ")#define TipForReadFilePosition printf("\t\t文件名及其路径(eg: /home/xiong/example.txt): ")#endif#define maxFileNameLen 50 //保存的文件名的最大长度int FLAG=0;int a=1;typedef struct TreeNode{int ChildNum; //记录这个人拥有几个儿女char Name[20];//记录这个人的姓名char birthday[20];//生日int marriage;//婚否(1表示结婚,0表示没结婚)int death;//生死(1表示活着,0表示过世)char Kind;//标示节点的种类有女G男Bchar address[100];//住址char livemassage[50];//死亡日期(如果其已经死亡)struct TreeNode *NextNode[20]; //记录这个人的儿女struct TreeNode *Parent; //记录这个节点的父节点}TreeNode,*tree;void CreatTree(TreeNode *Tree);void OutPutAll(TreeNode *Tree);void Menue(TreeNode *Tree);void SubMenue1(TreeNode * Tree);void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree);void AddNew(TreeNode * Tree);TreeNode * SearchTree(TreeNode *Tree,char name[],int length);TreeNode * SearchTree1(TreeNode *Tree,char birth[],int length) ;void OutPutMessage(TreeNode * Tree,char name[],int length);void OutPutMessage1(TreeNode * Tree,char birth[],int length);void SaveFamily(TreeNode *root);void ReadFamily(TreeNode **root);int main()//主函数{TreeNode *Tree;//TreeNode **Tree1;//Tree1=&(*Tree);Tree=(TreeNode *)malloc(sizeof(TreeNode));Tree->Parent =NULL;strcpy(Tree->Name,"0");Menue(Tree);return 0;}void Menue(TreeNode *Tree)//输出主菜单{/*TreeNode **Tree1;Tree1=&Tree;*/char c;char name[20];char birth[20];while(1){system("cls");printf("\t");printf("\n\n\t\t**********欢迎使用家族管理系统**********\n\n");printf("\n\t\t A:输入家谱信息建立树");printf("\n\t\t B:输出整个家谱信息");printf("\n\t\t C:按出生日期查找某人"); printf("\n\t\t D:按姓名查找某人"); printf("\n\t\t E:修改某个人的信息"); printf("\n\t\t F:存盘");printf("\n\t\t G:读盘");printf("\n\t\t H:退出整个程序\n\t"); c=getchar();switch(c){case 'A':TreeNode * NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode));printf("\n\t请输入姓名:");scanf("%s",Tree->Name);printf("\n\t请输入性别女G男B:");getchar();scanf("%c",&(Tree->Kind));Tree->Parent=NewNode;Tree->Parent=NULL;//CreatTree(Tree); //printf("\n\t--------------家谱图已经建立成功---------------\n\n");printf("\n\n\t--------------请按Enter键继续操作--------------");getchar();break;case 'B':if(strcmp(Tree->Name,"0")==0){printf("\n\t家谱图的多叉树尚未建立请先建立树\n");getchar();break;}printf("\n\n\t整个家谱的主要信息如下:");OutPutAll(Tree);getchar();break;case 'C':if(strcmp(Tree->birthday,"0")==0){printf("\n\t家谱图的多叉树尚未建立请先建立树\n");getchar();break;}scanf("%s",birth);OutPutMessage1(SearchTree1(Tree,birth,20),birth,20);printf("\n\n\t-----*----*----*----*----*----*----*----*----*----*----\n\t");getchar();break;case 'D':if(strcmp(Tree->Name,"0")==0){printf("\n\t家谱图的多叉树尚未建立请先建立树\n");getchar();break;}printf("\n\t请输入你要查找的人的姓名:\n\t");scanf("%s",name);OutPutMessage(SearchTree(Tree,name,20),name,20);printf("\n\n\t-----*----*----*----*----*----*----*----*----*----*----\n\t");getchar();break;case 'E':if(strcmp(Tree->Name,"0")==0){printf("\n\t家谱图的多叉树尚未建立请先建立树\n");getchar();break;}Change(Tree);getchar();break;case 'F':if(strcmp(Tree->Name,"0")==0){printf("\n\t家谱图的多叉树尚未建立请先建立树\n");getchar();break;}SaveFamily(Tree);getchar();break;case 'G':/*if(strcmp(Tree->Name,"0")==0){printf("\n\t家谱图的多叉树尚未建立请先建立树\n");getchar();}*/ReadFamily(&Tree);getchar();break;case 'H':printf("\n\n\t-----------------本次服务到此结束------------------");printf("\n\t------------------欢迎下次使用---------------------");printf("\n\t----------------------谢谢-------------------------\n\n");break;case '\n':break;default:printf("\n\n\t--------对不起!你的选择不在服务范围之内!-----------");printf("\n\t-----------请您再次选择所需的服务项!---------------");printf("\n\t------------------谢谢------------------------\n\t");getchar();break;}if (c=='H'||c=='f')break;getchar();}}void CreatTree(TreeNode *Node) //创建树{int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode));Node->NextNode[0]=NewNode;Node->NextNode[0]=NULL;printf("\n\t请输入出生日期:");scanf("%s",Node->birthday);printf("\n\t请输入家庭住址:");getchar();scanf("%s",Node->address);printf("\n\t请输入是否建在(1-是或0-否):");scanf("%d",&(Node->death));if(Node->death==0){printf("\n\t请输入去世日期:");scanf("%s",Node->livemassage);}else if(Node->death=='1')printf("\n\t仍然建在");scanf("%s",NewNode->Name);if(strcmp(NewNode->Name,"0")!=0){printf("\t请输入配偶的出生日期:");scanf("%s",NewNode->birthday);printf("\n\t请输入家庭住址:");getchar();scanf("%s",NewNode->address);printf("\n\t请输入是否建在(1-是或0-否):");scanf("%d",&(NewNode->death));if(NewNode->death==0){printf("\n\t请输入去世日期:");scanf("%s",NewNode->livemassage);}else if(NewNode->death=='1')printf("\n\t仍然建在");}printf("\n\t请输入%s的子女的数目(当子女输入0时便停止输入该成员有关信息):",Node->Name);scanf("%d",&(Node->ChildNum));if((Node->ChildNum)==0&&strcmp(NewNode->Name,"0")==0)return ;if(Node->Kind=='G'||Node->Kind=='g')NewNode->Kind='B';elseNewNode->Kind='G';NewNode->ChildNum=0;NewNode->NextNode[0]=NULL;Node->NextNode[0]=NewNode;Node->NextNode[0]->Parent=Node;//孩子的父母for(i=1;i<=Node->ChildNum;i++){NewNode=(TreeNode *)malloc(sizeof(TreeNode));a++;printf("\n\t请输入%s的第%d子女的名字:",Node->Name,i);scanf("%s",NewNode->Name);printf("\n\t请输入%s的第%d子女的性别女G男B:",Node->Name,i);getchar();scanf("%c",&NewNode->Kind);NewNode->ChildNum=-1;NewNode->Parent=Node;Node->NextNode[i]=NewNode;CreatTree(Node->NextNode[i]); //从子女的数目开始}}void OutPutAll(TreeNode *Tree)int i, flag=0;printf("\n\t---****---***---***---***---***---***---***---***---***---");printf("\n\t姓名:%s 出生日期:%s 家庭住址:%s 性别: %c",Tree->Name,Tree->birthday,Tree->address,Tree->Kind);if (Tree->Kind=='G'||Tree->Kind=='g'){flag=1;printf("女");}elseprintf("男");printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1) printf("1");else if(Tree->death==0) printf("0");if (!(Tree->NextNode[0])){printf("\n\t至今没有配偶和子女\n");return;}if(flag==1)printf("\n\t丈夫姓名:%s",Tree->NextNode[0]->Name);elseprintf("\n\t妻子姓名:%s",Tree->NextNode[0]->Name);printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1) printf("1");else if(Tree->death==0) printf("0");for(i=1;i<=Tree->ChildNum;i++){printf("\n\t第%d个子女的姓名:%s 出生日期:%s 家庭住址:%s 性别%c",i,Tree->NextNode[i]->Name,Tree->NextNode[i]->birthday,Tree->NextNode[i]->address,Tre e->NextNode[i]->Kind);if (Tree->NextNode[i]->Kind=='G'||Tree->NextNode[i]->Kind=='g')printf("女");elseprintf("男");printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1) printf("1");else if(Tree->death==0) printf("0");}printf("\n\t");for(i=1;i<=Tree->ChildNum;i++){OutPutAll(Tree->NextNode[i]);}TreeNode * SearchTree(TreeNode *Tree,char name[],int length){int i;TreeNode *NewNode;if(strcmp(Tree->Name,name)==0){if(length==0)FLAG=1;elseFLAG=0;return Tree;}if(Tree->NextNode[0]==NULL)return NULL;for(i=0;i<=Tree->ChildNum;i++){if (i==0)NewNode=SearchTree(Tree->NextNode[i],name,0);elseNewNode=SearchTree(Tree->NextNode[i],name,20);if (NewNode!=NULL)return NewNode;}return NULL;}void OutPutMessage(TreeNode * Tree,char name[],int length){int flag=0,i;TreeNode *NewNode;printf("\n\n\t-----*----*----*----*----*----*----*----*----*----*----");if(Tree==NULL){printf("\n\n\t****该家谱图中没有%s这个人的信息请确认是否输入错误*****\n",name);return;}printf("\n\n\t您所要找的人已经找到信息如下所示:");printf("\n\n\t姓名:%s出生日期:%s 家庭住址:%s 性别:%c",name,Tree->birthday,Tree->address,Tree->Kind);if (Tree->Kind=='G'||Tree->Kind=='g'){flag=1; //标记他(她)的性别}elseprintf("男");printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1) printf("1");else if(Tree->death==0) printf("0");NewNode=Tree->Parent;if (FLAG==1){if(flag==1){printf("\n\n\t她是嫁入此家族的所以亲生父母信息不在家谱内包括");printf("\n\t丈夫姓名:%s",NewNode->Name);}else{printf("\n\n\t他是入赘此家族的所以亲生父母信息不在家谱内包括");printf("\n\t妻子姓名:%s",NewNode->Name);}if ((NewNode->ChildNum)>0) //判断他(她)是否有孩子{printf("\n\t的孩子的信息如下:"); //输出他(她)的孩子的信息for(i=1;i<=NewNode->ChildNum;i++){printf("\n\t姓名:%s 性别:",NewNode->NextNode[i]->Name);if (NewNode->NextNode[i]->Kind=='G'||NewNode->Kind=='g')printf("女");elseprintf("男");printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1) printf("1");else if(Tree->death==0) printf("0");}}return;}if(NewNode==NULL)//判断它是不是根节点如果是的话就没有父母兄弟信息printf("\n\t是这个家谱图里最年长的人",name);else{if (NewNode->Kind=='G'||NewNode->Kind=='g') //判断父亲节点是父亲还是母亲{printf("\n\t父亲姓名:%s",NewNode->NextNode[0]->Name);}else{printf("\n\t母亲姓名:%s",NewNode->NextNode[0]->Name);printf("\n\t父亲姓名:%s",NewNode->Name);}if(Tree->NextNode[0]!=NULL) //判断他(她)是否有配偶{if(flag==1)//输出他(她)的配偶的信息printf("\n\t丈夫姓名:%s",Tree->NextNode[0]->Name);elseprintf("\n\t妻子姓名:%s",Tree->NextNode[0]->Name);if (Tree->ChildNum>0) //判断他(她)是否有孩子{printf("\n\t的孩子的信息如下:"); //输出他(她)的孩子的信息for(i=1;i<=Tree->ChildNum;i++){printf("\n\t姓名:%s 性别:",Tree->NextNode[i]->Name);if (Tree->NextNode[i]->Kind=='G'||Tree->Kind=='g')printf("女");elseprintf("男");printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1) printf("1");else if(Tree->death==0) printf("0");}}elseprintf("\n\t%s至今还没有孩子",name);}elseprintf("\n\t%s至今还没有配偶和孩子\n",Tree->Name);}}TreeNode * SearchTree1(TreeNode *Tree,char birth[],int length){int i;TreeNode *NewNode;if(strcmp(Tree->birthday,birth)==0)if(length==0)FLAG=1;elseFLAG=0;return Tree;}if(Tree->NextNode[0]==NULL)return NULL;for(i=0;i<=Tree->ChildNum;i++){if (i==0)NewNode=SearchTree1(Tree->NextNode[i],birth,0);elseNewNode=SearchTree1(Tree->NextNode[i],birth,20);if (NewNode!=NULL)return NewNode;}return NULL;}void OutPutMessage1(TreeNode * Tree,char birth[],int length){int flag=0,i;TreeNode *NewNode;printf("\n\n\t-----*----*----*----*----*----*----*----*----*----*----");if(Tree==NULL){printf("\n\n\t****该家谱图中没有出生日期为%s这个人的信息请确认是否输入错误*****\n",birth);return;}printf("\n\n\t您所要找的人已经找到信息如下所示:");printf("\n\n\t姓名:%s出生日期:%s 家庭住址:%s 性别:%c",Tree->Name,Tree->birthday,Tree->address,Tree->Kind);if (Tree->Kind=='G'||Tree->Kind=='g'){flag=1; //标记他(她)的性别printf("女");}elseprintf("男");}void Change(TreeNode * Tree) //修改某个人的信息{TreeNode * NewNode;printf("\n\t请输入你要修改的人的姓名:\n\t");scanf("%s",name);NewNode=SearchTree(Tree,name,20);if(NewNode==NULL){printf("\n\n\t****该家谱图中没有%s这个人的信息请确认是否输入错误*****\n",name);return;}else{SubMenue1(NewNode);}}void SubMenue1(TreeNode * Tree) //输出副菜单{char c;int flag,i;char name[20];char birth[20];char address1[50];char Parent[2][20];TreeNode * NewNode;getchar();while(1){system("cls");printf("\t");printf("\n\n\t ---*****---请选择你的操作---****--- ");printf("\n\t---*---*---*---A:修改个人的信息---*---*---*---*---*---*---- ");printf("\n\t---*---*---*---B:修改父母的信息---*---*---*---*---*---*---- ");printf("\n\t---*---*---*---C:修改子女的信息---*---*---*---*---*---*---- ");printf("\n\t---*---*---*---D:退出-*---*---*---*---*---*---*---*---*----\n\t");c=getchar();switch(c){case 'A':printf("\n\n\t请输入修改的姓名:如果不需要修改就输入‘0’然后按Enter键继续\n\t");scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);继续\n\t");scanf("%d",&flag);if (flag==1){if(Tree->Kind=='G'||Tree->Kind=='g')Tree->Kind='B';else Tree->Kind='G';}printf("\n\n\t请输入修改的出生日期:如果不需要修改就输入‘0’然后按Enter键继续\n\t");scanf("%s",birth);if(strcmp(birth,"0")!=0)strcpy(Tree->birthday,birth);printf("\n\n\t请输入修改的家庭地址:如果不需要修改就输入‘0’然后按Enter键继续\n\t");scanf("%s",address1);if(strcmp(address1,"0")!=0)strcpy(Tree->address,address1);printf("\n\n\t个人信息修改成功");break;case 'B':if(Tree->Parent==NULL) //判断是不是头节点{printf("\n\t是这个家谱图里最顶端的人没有父母信息!",name);break;}if (FLAG==1) //判断是不是入赘或加入此间的{if(Tree->Kind=='G'||Tree->Kind=='g'){printf("\n\n\t她是嫁入此间的所以父母信息不在家谱内包括");}else{printf("\n\n\t他是入赘此间的所以父母信息不在家谱内包括");}break;}if(Tree->Parent->Kind=='G'||Tree->Parent->Kind=='g'){strcpy(Parent[0],"母亲");strcpy(Parent[1],"父亲");}else{strcpy(Parent[0],"父亲");strcpy(Parent[1],"母亲");}printf("\n\n\t请输入%s要修改的姓名:如果不需要修改就输入‘0’然后按Enter键继续\n\t",Parent[0]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);printf("\n\n\t请输入%s要修改的姓名:如果不需要修改就输入‘0’然后按Enter键继续\n\t",Parent[1]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode[0]->Name,name);printf("\n\n\t-------------父母的信息修改成功----------------");break;case 'C':if(Tree->ChildNum==0){printf("\n\n\t至今还没有子女");break;}if (Tree->Parent !=NULL)if (strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0)//如果他是入赘或者是嫁入的就需用配偶节点完成修改{Tree=Tree->Parent;}for(i=1;i<=Tree->ChildNum;i++){printf("\n\n\t请输入%s修改的姓名:如果不需要修改就输入‘0’然后按Enter键继续\n\t",Tree->NextNode[i]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[i]->Name,name);printf("\n\n\t是否要修改性别:如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续\n\t");scanf("%d",&flag);if (flag==1){if(Tree->NextNode[i]->Kind=='G'||Tree->NextNode[i]->Kind=='g')Tree->NextNode[i]->Kind='B';else Tree->NextNode[i]->Kind='G';}}printf("\n\n\t---------------子女的信息修改成功----------------");break;case 'D':printf("\n\n\t----------------本项服务到此结束-----------------");break;case '\n':break;default:printf("\n\n\t--------对不起!你的选择不在服务范围之内!---------");printf("\n\t-----------请您再次选择所需的服务项!-------------");printf("\n\t------------------谢谢合作!----------------------\n\t");break;}if (c=='D'||c=='d')break;printf("\n\n\t--------------请按Enter键继续操作--------------");getchar();getchar();}}void SaveFamily(TreeNode *root)//保存家谱至指定文件{char saveFileName[maxFileNameLen];FILE* fp;TreeNode *queue[50], *head;int i, front, rear;//队列的头指针,尾指针printf(" ***** 保存家谱*****\n\n");//if(root==NULL)if(root == NULL){printf("\t\t家谱中无成员,无法保存!\n");return;}TipForSaveFilePosition;//文件及其绝对路径格式scanf("%s", saveFileName);getchar();fp = fopen(saveFileName, "w");//不存在则新建。

相关文档
最新文档