家族关系查询系统
- 格式:docx
- 大小:440.06 KB
- 文档页数:28
#include〈iostream。
h> #include〈string。
h>#include〈fstream.h〉#include〈stdlib。
h〉struct per{int data;char name[20];char brith[20];char marry;char address[20];char live;char dietime[20]; char parent[20];int generation;int child[10];int numberchild;per(){for(int i=0;i〈20;i++)name[i]=’\0';for(i=0;i<20;i++)brith[i]=’\0';for(i=0;i<20;i++)address[i]='\0';for(i=0;i<20;i++)dietime[i]=’\0';for(i=0;i〈10;i++)child[i]=0;for(i=0;i〈20;i++)parent[i]='\0';live='\0’;marry=’\0’;data=—10;generation=0;numberchild=0;}};void setupinfo(per person[]);void display(per person[],int&);void displayhome(per person[],int&);void displayinfo(per person[],int&);void namesearch(per person[],int&);void birtfdaysearch(per person[],int&);void addchild(per person[],int&);void editmember(per person[],int&);void sortbirthday(per person[],int&);void main(){per person[36];int count=0;fstream inputFile(”person。
家谱管理系统设计与实现1.问题阐述:家谱用于记录某家族历代家族成员的情况与关系。
本课程设计要求设计并实现一个计算机软件,支持对家谱的存储、更新、查询、统计等操作。
2.基本要求内部要求:要求将家谱信息看作树形结构处理,并可存储在外存。
数据可一次读入内存;外部要求:这一级要求系统具备下列基本功能:A)家庭成员信息存储:将每个家庭成员的基本信息存储在计算机中(可永久保存)。
家庭成员的基本信息至少应包括:(姓名,出生地,出生日期,死亡日期,性别,身高,学历,职业,最高职务/职称,…);B)家族关系存储:将各家庭成员之间的关系,存储在计算机中(可永久保存);C)更新:家谱数据的更新(修改、删除、加入);D)输出:将家谱以较友好的格式输出(显示);E)查询:按基本信息查询成员,按亲戚关系查询;3.增强要求A)统计:统计并打印(显示)结果,统计的项目有:平均寿命、平均身高、男女比例、家庭平均人口、平均(最高/低)学历、……4.扩展要求内部要求:数据较大时,不一次读入内存,采用分块读入;外部要求:这一级要求系统具备下列基本功能:屏幕显示树形(类似Windows 目录)、全屏可视化操作、支持鼠标;5.设计提示家庭成员基本信息用线性表表示,程序结束后存储在磁盘上,程序开始是从磁盘读出;家庭成员之间的关系,用树形结构(家族树)表示;家族树在程序结束后存储在磁盘上,程序开始是从磁盘读出;树在内存中的存储结构:邻接表或孩子兄弟链,带父指示器;家庭成员基本信息设置数字编号,用于唯一地标识记录;树结点用家庭成员的编号标识。
通过编号,建立家庭成员的基本信息与树结点的联系;树在磁盘文件中的存储结构:存储串行化结果,如“根-叶序列”;所谓“根-叶序列”,是指,从树根到每个叶子结点的路径。
路径的排列次序表示兄弟的次序。
例如,下图表示的树的“根-叶序列”为:1, 2, 41, 2, 61, 2, 8, 5(这三行的次序,表示4,6,8的次序,即4,6,8分别是2的第1,2,3个孩子) 1 2 3 4 109 7 6 8 51, 71, 3, 91, 3, 10使用C++在非GUI环境下实现。
一、案例描述1、总体描述拿到这道题目我们首先想到的毫无疑问就是树,然而怎样将整个家庭的成员信息整合到一颗树上就是我们具体所要做的。
首先我们要定义一个结构来记录一个成员的信息。
而每个成员又和其他成员拥有不同的关系,这个就要靠自己去逻辑了,用左孩子右兄弟的方法可以将这个成员与其兄弟和儿女进行联系起来,然而还差两个关系就是父母和配偶的关系这就要在这个结构里多添加两个指针了一个用来和父亲节点建立关系另一个用来和配偶节点建立关系。
而然用多叉树的方法也是很合适的,只需在结构里定义一个结构数组将配偶和子女都放在儿子节点上,而配偶节点放在数组的第一个位子即可区分清楚配偶和子女。
另外多加一个指针来将节点和父亲节点联系起来。
这样就同样可也访问某个成员的兄弟姐妹了,只需访父亲节点的儿子节点即可。
上图就是一个简单的家谱示意图:功能演示【1】首先,运行程序用户看到的是提示界面如下:创建家谱信息建立多叉树显示整个家谱信息创新点:会显示生日提示添加新成员查找成员信息二、设计思路本程序要求模块管理,分成菜单函数、输入函数、输出函数、查询函数、插入删除函数等,控制各个部分从而将程序简单化出来分析。
本程序的主要功能有:1)创建一个家谱,能够输入家族的相关信息2)查找相应的人员3)添加新的成员4)输出整个家族的成员5)修改成员的信息6)退出图 1家族管理系统功能模块图三、程序设计2、数据结构描述主程序#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h> char c1,c2,c3;int sum=0;int MATEFLAG=0; int tadaym,tadayd; typedef struct TreeNode{int Num;//记录这个人拥有几个儿女char Name[20];//记录这个人的姓名char Kind;//标示节点的种类有女G男Bchar birth[10];int birthy;//记录这个人的生日int birthm;int birthd;struct TreeNode * NextNode[20]; //记录这个人的儿女,配偶。
数据结构家谱程序家谱数据结构的设计与实现家谱是一种用来记录家族成员关系和家族历史的工具。
在计算机科学中,家谱可以被视为一个特殊类型的图结构,其中节点代表家族成员,边代表成员之间的关系。
设计一个高效的家谱数据结构对于实现家族历史查询、成员管理等功能至关重要。
本文将介绍两种常用的家谱数据结构:树状结构和邻接列表结构,并探讨它们在实现家谱程序中的应用和性能优缺点。
一、树状结构树状结构是一种层级化的数据结构,适用于表示具有层次关系的家谱信息。
在树状结构中,每个节点都有零个或多个子节点,而每个子节点又可以有它自己的子节点,依此类推。
这种结构使得家谱信息呈现出一种从上到下、从祖到孙的清晰层次感。
(1)易于表示层次关系:树状结构天然地适合表示家谱这种层次化的数据,可以直观地展示家族成员之间的亲属关系。
(2)高效的查询操作:在树状结构中,对于任意一个节点,我们都可以在O(h) 的时间内找到其父节点,其中 h 表示树的高度。
这对于实现家谱查询功能非常有利。
(3)灵活的扩展性:树状结构可以很容易地扩展新的家族成员和关系,只需要在合适的位置添加新的节点和边。
(4)空间复杂度高:树状结构需要为每个节点存储多个指针,这会导致较高的空间复杂度。
(5)查询速度受树形影响:在树状结构中,如果家谱层次较深,查询速度会受到树形的影响,性能可能不如其他结构。
二、邻接列表结构邻接列表是一种将图的节点和边分别存储在数组中的数据结构。
在邻接列表中,每个节点对应一个数组,数组中的每个元素都是一个表示相邻节点的列表。
这种结构适用于表示家谱中成员之间的关系。
(1)空间效率高:邻接列表结构不需要为每个节点存储多个指针,只需要存储指向相邻节点的指针,因此空间复杂度较低。
(2)查询速度快:在邻接列表结构中,对于任意一个节点,我们可以在O(1) 的时间内找到其所有子节点,这对于实现家谱查询功能非常有利。
(3)灵活的扩展性:邻接列表结构可以很容易地扩展新的家族成员和关系,只需要在相应的数组中添加新的元素。
家谱管理系统设计(共18页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计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)1.1 系统功能 (1)图2 成员二叉树功能模块图 (4)1.2 总体功能模块 (4)2 系统各功能模块的详细设计 (5)2.1功能选择 (5)2.2信息输入 (7)2.3信息输出 (7)2.4信息存盘 (7)2.5信息清盘 (8)2.6信息查询 (9)2.7源程序 (11)3设计结果与分析 (22)3.1菜单函数功能测试 (22)4.2输入功能函数测试 (23)3.3输出功能函数测试 (23)3.4清盘功能函数测试 (23)3.5存盘功能函数测试 (24)3.6查询功能函数测试 (24)总结 (26)参考文献 (27)1 系统功能概述1.1 系统功能实现的法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。
该家谱管理系统将信息用文件的法进行存储管理,再从文件中将成员信息以递归的法创建二叉树。
该输入成员信息的法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。
(1)定义结构体结构体为表示一个对象的不同属性提供了连贯一致的法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。
查自己祖源的方法
每个人都有一份自己的家族史。
从祖辈开始,我们的家族历经了许多代人,留下了许多故事和传说。
了解自己的祖源不仅有趣,还可以深入了解自己的文化背景和祖先留下的价值观。
以下是查自己祖源的方法:
1. 谈论家族历史和传说
家族成员和老祖辈是了解家族历史和传说的最好来源。
与家族成员谈论自己的祖源、姓氏和家族传说。
听听他们的故事和回忆,记录下来。
这是一个了解家族历史的最好方法。
2. 搜索家族纪录和档案
在现代社会,许多政府机构和家族协会都有保存家族纪录和档案的资料。
因此,我们可以在这些机构中查找自己家族的记录,以了解更多有关家族的历史和信息。
可能的机构包括地方政府、家族协会、教堂、学校、图书馆等。
3. 追溯家族谱系
制作家族谱系是了解家族历史的重要方法。
家族谱系是一种记录家族成员的系统,包括他们的姓名、生日、职业和配偶等信息。
家族成员可以为家族谱系提供有关信息,并把记录整合起来,形成一份有序的家族历史记录。
4. 拜访祖屋
拜访祖屋是深入了解家族历史的一种方式。
如果家里有祖辈的家,可以拜访一下。
祖屋往往有许多古老的家具、文物和照片,这些都可以反映家族的历史和文化。
5. DNA 测试
现代化的科技使得我们可以使用 DNA 测试来跟踪我们的家族背景和亲属关系。
DNA 测试可以为我们提供有关我们祖先的信息,包括他们的国籍和族群。
例如,通过测试人类Y 染色体可以确定我们的父系祖先的来源。
家族管理系统课程设计一、课程目标知识目标:1. 让学生了解家族管理系统的基本概念、功能及在生活中的应用。
2. 掌握家族管理系统中的数据录入、查询、修改和删除等基本操作。
3. 理解家族管理系统在维护家庭关系、传承家族文化和提高家庭管理水平方面的作用。
技能目标:1. 培养学生运用信息技术解决实际问题的能力,能独立操作家族管理系统。
2. 提高学生分析家庭关系、规划家庭活动及进行家庭资源配置的能力。
3. 培养学生团队协作和沟通能力,通过小组合作完成家族管理系统的设计与优化。
情感态度价值观目标:1. 培养学生关爱家庭、尊重家族传统的情感态度,增强家庭责任感。
2. 培养学生运用科技创新家庭生活的意识,激发对信息技术的兴趣和热情。
3. 培养学生正确处理家庭关系,传承优良家风,促进家庭和谐。
课程性质分析:本课程属于信息技术与家庭生活相结合的实践性课程,旨在培养学生运用信息技术解决家庭生活问题的能力。
学生特点分析:六年级学生具备一定的信息技术基础,思维活跃,对新事物充满好奇,具备较强的动手能力和团队协作意识。
教学要求:1. 紧密联系课本内容,注重实践操作,提高学生的动手能力。
2. 结合生活实际,培养学生解决问题的能力,提升学生的家庭责任感。
3. 创设有趣的教学情境,激发学生学习兴趣,促进学生的全面发展。
二、教学内容1. 家族管理系统概述:介绍家族管理系统的定义、功能、发展历程及其在家庭生活中的重要性。
教材章节:第一章《信息技术与家庭生活》2. 家族管理系统操作基础:学习家族管理系统的基本操作,包括数据录入、查询、修改和删除等。
教材章节:第二章《数据库操作基础》3. 家族关系维护:探讨如何利用家族管理系统维护家庭关系,促进家庭和谐。
教材章节:第三章《家庭关系与沟通》4. 家族文化传承:研究家族管理系统在传承家族文化、家族价值观方面的应用。
教材章节:第四章《家族文化与价值观》5. 家庭活动规划与资源配置:利用家族管理系统进行家庭活动规划、时间管理和资源配置。
第1篇一、实验背景家谱系统作为一种重要的文化遗产,承载着家族的历史与文化。
随着信息化时代的到来,传统的家谱记录方式已无法满足现代社会的需求。
因此,设计一款家谱系统,以数字化、网络化、智能化为特点,对于传承家族文化、加强家族联系具有重要意义。
二、实验目的1. 熟悉家谱系统设计与开发的基本流程。
2. 掌握家谱系统的功能模块设计方法。
3. 提高编程能力,掌握相关技术。
4. 分析家谱系统的应用价值,为家族文化传承提供技术支持。
三、实验内容1. 家谱系统需求分析家谱系统主要包括以下功能模块:(1)基本信息管理:包括家族成员的基本信息、婚姻状况、子女信息等。
(2)家谱树展示:以树状图形式展示家族成员之间的关系。
(3)查询功能:根据姓名、出生年月、地区等条件查询家族成员。
(4)编辑功能:对家族成员信息进行添加、修改、删除等操作。
(5)统计分析:对家族成员进行年龄、性别、婚姻状况等统计分析。
2. 家谱系统功能模块设计(1)基本信息管理模块设计一个用户界面,包括输入框、下拉菜单、按钮等元素。
用户可以在此界面输入家族成员信息,包括姓名、性别、出生年月、婚姻状况、子女信息等。
(2)家谱树展示模块采用树状图展示家族成员之间的关系。
树状图采用递归方式生成,每个节点代表一个家族成员,节点之间通过线条表示关系。
(3)查询功能模块设计一个查询界面,用户可以输入查询条件,系统根据条件在数据库中检索家族成员信息,并将结果展示在列表中。
(4)编辑功能模块在基本信息管理模块的基础上,增加修改、删除等操作。
用户可以选择要编辑的家族成员,对信息进行修改或删除。
(5)统计分析模块设计一个统计分析界面,展示家族成员的年龄、性别、婚姻状况等统计数据。
用户可以选择统计范围和统计指标,系统根据条件进行统计并展示结果。
3. 家谱系统实现采用Java语言和MySQL数据库实现家谱系统。
主要技术包括:(1)Java编程语言:用于实现家谱系统的各个功能模块。
郑州科技学院算法与数据结构课程设计题目家族关系查询系统学生姓名专业班级学号所在系指导教师完成时间、郑州科技学院算法与数据结构课程设计任务书专业:班级:学号:姓名:一、设计题目:家族关系查询系统二、基本要求1、建立家族关系并能存储到文件;2、对于建立的家族关系能够遍历家族成员,输入两个人的名字能够确定二人的关系;3、实现家族成员的添加。
4、可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。
三、设计任务1、根据问题分析,实现树的的存储结构。
2、将家族中各个成员保存到自己命名的文件中。
3、创建遍历、查找、添加等函数,实现函数基本的一些功能。
四、设计时间2010 年12月 19日至 2011 年 12 月 25 日指导教师:教研室主任:目录1、课程设计分析 (3)1.1课程设计内容 (3)1.2课程设计要求 (3)1.3课程设计性质 (3)1.4课程设计目的 (4)2、课程设计原理 (4)2.1课程设计题目分析2.1.1程序执行的命令包括 (4)2.12程序中的四大模块 (4)2.2 课程设计原理图分析 (5)2.2.1 功能模块图 (5)2.2.2 流程图分析 (6)3、数据结构分析 (10)3.1 存储结构 (11)3.2 算法描述 (11)4、调试与分析 (12)4.1 调试过程 (12)4.2执行过程 (12)4.3运行时的界面 (13)结束语 (16)致谢 (17)参考文献 (18)附录 (19)1、课程设计介绍1.1、课程设计内容运用队列的存储结构,构建家族关系树。
输入家族的名称,以此名称作文件的名称,建立文本文件。
按层次输入结点信息,在文件中每个人的信息占一行,同时保存到树的存储结构中。
输入一个结点,若此结点有多个兄弟,以“@”作为兄弟结点的结束标志,结点若无孩子,直接以“@”作为标志,依次输入各个结点的信息,以“#”作为结束的标志。
输入结点的序列为zhangxianzu,@,zhangguoyu,zhangguojun,zhangguoqiang,@,zhangyongzhi,@,zhangyongrui,zhangyongming,@,zhangwende,zhangwenjia,@,#。
建立家族关系树后,对树进行一些基本操作。
首先,对家族关系树遍历,确定家族成员已存入文件,并检验是否成功建立家族关系树。
输入两个人的姓名,判断此二人是否属于此家族,若属于就判断此二人的关系。
最后,能够成功退出家族关系查询系统。
1.2、课程设计要求构建家族关系树。
使用队列的存储结构,建立家族关系查询系统树。
采用指针数组作为队列,保存结点输入的地址。
能够遍历家族关系树。
遍历家族成员,检验输出信息是否满足要求。
成功地判断所输入的两个人是否是家族中得人,如果属于就判断两人的关系。
最后,若选择退出,能够成功退出家族关系查询系统。
否则,继续输入相关操作。
1.3、课程设计的性质通过数据结构的学习,使自己对软件编程能力有一定的提高。
数据结构学习是锻炼学生在进一步掌握模块化、结构化程序设计的方法的同时,培养自己运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据结构的了解进一步掌握自然数据的结构方式及组织方式,让自己深入体会存储在计算机中的数据及程序,如何运用数据实现编程。
加深自己对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。
通过课程设计,能够提高自己分析问题、解决问题,从而运用所学知识解决实际问题的能力。
1.3、课程设计的目的主要目的如下:1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。
2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。
3、培养学生初步的软件设计及软件测试的能力。
2、课程设计原理2.1、课程设计题目分析演示程序以用户和计算机的对话的方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应的数据(即每个人都所持的密码),每个人的序号由程序自动分配。
2.1.1程序执行的命令包括:(1)构造家族关系查询系统(使用树的存储结构);(2)根据提示及使用者的需求,用户选择相关选项,输入相关数据;(3)执行用户所选的选项对应的程序,满足用户需求,实现相关功能;(4)退出家族关系查询系统,结束操作。
2.1.2程序中的四个大模块(本程序共有六个模块,其中查找模块又分为六个):(1)家族成员信息录入(构造家族关系查询系统)模块。
此模块将对家族关系树初始化,根据用户输入的信息构造家族关系查询系统树,并提醒用户再次输入数据以便后续程序的使用。
(2)遍历家族成员模块。
此模块将满足用户遍历家族关系查询系统树中的各个成员。
另外,可以检测用户输入的信息是否正确,以及浏览家族中的人员。
(3)确定两个家族成员的关系模块。
由用户输入两个人的名字,此模块实现在整个程序中查找,确定是否有用户输入的人。
如果有,则输出两人的之间的关系(即他们相差几代)。
(4)主程序中的退出模块。
根据用户输入的信息管理控制变量,根据控制变量判断是否退出程序。
2.2、课程设计原理图分析2.2.1、功能模块图2.2.2、流程图分析1、此部分是家族关系查询系统的主函数。
首先,初始化程序中所需要的变量;在输出提示性的语句,等待用户输入将要进行的操作的选项,根据用户输入的数据调用相关的函数。
2、此部分是创建家族关系树函数,并且保存到文件。
用队列的存储结构辅助创建树。
3、此部分是遍历家族成员函数。
采用递归的思想,对家族关系树进行遍历。
N4、此部分是确定家族成员中两人关系的函数。
由用户输入两个人的姓名,系统调用Confirm()函数判断此二人是否属于此家族。
若属于,判断两人的关系。
3、数据结构分析3.1、存储结构根据要求首先应该建立一个队列,用队列的存储结构辅助实现家族关系树的建立。
树是n(>=0)个结点的有限集。
在任意一棵非空树中:(1)有且仅有一个特定的称为根的结点;(2)当n>1时,其余结点可分为m个互不相交的有限集,其中每个集合本身又是一棵树。
设置结构体存储节点:用结构体存储每一个家族成员的基本信息,及结点的左右孩子指针和双亲指针;再使用结构体存储表示队列结点。
树的结点结构体:typedef struct TNode{char name[M];struct TNode *parent;struct TNode *lchild;struct TNode *rchild;}Tree;队列结点结构体:typedef struct Node{Tree *info;struct Node *next;}Node;typedef struct{struct Node *front;struct Node *rear;}LQ;3.2、算法描述1、用户进入家族关系查询系统,根据提示输入要进行的操作所对应的选项,用户输入的数据被d接收,系统判断d是否大于7并小于1,如果是,则提醒用户重新输入。
否则调用相关函数,执行相应的功能。
若用户输入的d的值在1-6之间,如果用户第一次输入的数值大于1,则系统会提醒用户先建立家族关系树。
2、建立家族关系树。
用户输入家族名称,系统根据家族名称建立对应的文件,用户输入结点信息,系统先将信息保存到文件和fname[M]数组中。
在建树时,将结点的信息从fname[M]数组中复制给str,系统判断str[0]是否等于’#’,并且是否等于’@’,直接执行下面的语句,第一次传入结点时,root等于NULL,建立头结点,再次传入结点时,如果str[0]等于‘@’,内部循环结束,接着出入结点,再次此判断str[0]是否等于‘@’,不等于的话,执行内部循环,取对头元素,判断flag是否等于0,如果等于0,将结点接在所取对头的左孩子上,否则接在右孩子上。
在执行外循环时,如果start2不等于0时,删除对头元素。
3、查询两个家族成员的关系。
由用户输入两个人的姓名,Relation()函数调用Confirm()函数,确认用户所输入成员姓名是否属于此家族中的成员。
如果属于,用x[M]存放对应的结点,并令全局变量z等于1,在执行Relation()函数时,判断z的值,确定此人是否属于这个家族。
若属于,令结点不停的指向它的父亲结点,直到父亲结点是根结点,同时应整数形式的w[M]控制执行的次数,作为判断是第几代的根据。
最后,根据w[M]判断两人相差几代。
4、退出家族关系查询系统。
在主函数中,用户选择退出选项在(即输入6),系统执行flag等于0,即控制外循环的变量为0,循环结束,成功退出家族关系查询系统。
4、调试与分析4.1、调试过程在调试程序是主要遇到一下几类问题:1、当输入此函数时出现了与&相关的错误,例如后面缺少括号以及分号等等以下的错误;2、输入每个家庭成员的的信息时,兄弟之间没有用“@”区分,导致建立家族关系树时错误。
另外输入不正确,程序有可能出现停止;3、在一些函数前不加返回值变量类型,调试时出现逻辑错误;4、在定义结构体时,定义结构体指针变量,但在程序运行时出现了定义的结构体指针不起作用。
5、在运行程序时,由于没有声明变量,或对于指针变量没有初始化,无法执行程序。
4.2、执行过程进入家族关系查询系统,系统提示用户输入相关操作:输入要进行的操作:1输入家族的名称:zhang输入家族成员姓名:zhangxianzu输入家族成员姓名:@输入家族成员姓名:zhangguoyu输入家族成员姓名:zhangguojun输入家族成员姓名:zhangguoqiang输入家族成员姓名:@输入家族成员姓名:zhangyongzhi输入家族成员姓名:@输入家族成员姓名:zhangyongrui输入家族成员姓名:zhangyongming输入家族成员姓名:@输入家族成员姓名:@输入家族成员姓名:zhangwende输入家族成员姓名:zhangwenjia输入家族成员姓名:@输入家族成员姓名:#家族关系成功建立!(系统接着提示用户输入)输入要进行的操作:2(输入结果)zhangxianzu zhangguoyu zhangyongzhi zhangwende,zhangwenjia zhangguojun zhangyongrui zhangyongmingzhangguoqiang(系统接着提示用户输入)输入要进行的操作:6(输入结果)成功退出家族关系查询系统!4.3、运行时界面1、运行主函数时。
2、输入要进行的操作。
3、接着根据提示输入相应的操作,输入数据遍历家族关系查询系统中的成员。
4、根据提示选择确定两人关系选项,输入两个人的姓名。
5、若输入的人不时家族中得人,运行情况如下。