家谱用于记录某家族历代家族成员的情况与关系本课程设

家谱用于记录某家族历代家族成员的情况与关系本课程设

ID:5526790

大小:50.50 KB

页数:7页

时间:2017-12-17

家谱用于记录某家族历代家族成员的情况与关系本课程设_第1页
家谱用于记录某家族历代家族成员的情况与关系本课程设_第2页
家谱用于记录某家族历代家族成员的情况与关系本课程设_第3页
家谱用于记录某家族历代家族成员的情况与关系本课程设_第4页
家谱用于记录某家族历代家族成员的情况与关系本课程设_第5页
资源描述:

《家谱用于记录某家族历代家族成员的情况与关系本课程设》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实习报告题目:家谱用于记录某家族历代家族成员的情况与关系。本课程设计要求设计并实现一个计算机软件,支持对家谱的存储、更新、查询、统计等操作。一.需求分析1)要求将家谱信息看作树形结构处理,并可存储在外存。数据可一次读入内存;2)家庭成员信息存储:将每个家庭成员的基本信息存储在计算机中(可永久保存)。家庭成员的基本信息至少应包括:(姓名,出生地,出生日期,死亡日期,性别,身高,学历,职业,最高职务/职称,…);3)家族关系存储:将各家庭成员之间的关系,存储在计算机中(可永久保存);4)更新:家谱数据的更新(修改、删除、加入);5)输出:将家谱以较友好的格式输出(显示);6)查询:按基本信息查询

2、成员,按亲戚关系查询;7)统计:统计并打印(显示)结果,统计的项目有:平均寿命、平均身高、男女比例、家庭平均人口.二.概要设计1.设定栈的数据类型定义:Stack{数据对象:D={aa属于familyTree};数据关系:R1={a1,a2属于D};基本操作:Stack()操作结果:构造一个空栈~Stack()初始条件:栈已存在;操作结果:栈被销毁;GetTop();初始条件:栈已存在;操作结果:若栈不空,返回栈顶元素;Push(familyTree);操作结果:往栈顶加入一个元素;Pop();初始条件:栈已存在;操作结果:若栈不空,则栈顶元素出栈;Length();操作结果:

3、返回栈的元素数目;GetBasePointer();操作结果:返回栈底指针;GetTopPointer();操作结果:返回栈顶指针;}Stack;2.日期的定义:structdate{intyear,month,day;};3.家谱树的结点定义:structfamilyTree{intnumber;datebirthday,deathday;charname[20],birthAdress[10],sex[6],educationLevel[10],occupation[10];doubleheight;familyTreefirstchild,nextsibling,father,wife

4、,husband;};4.本程序包含三个基本模块.1)main函数模块:这一模块主要实现操作界面;2)栈模块:这一模块主要实现栈的操作;3)主功能模块:该模块实现基本的建树,更新等操作;5.建立二叉树的伪码算法:While(从文本读入的不为空){生成一个结点,把读入内容赋给它;若已经读入过,刚搜寻其指针所在;否则新生成的结点添加为上一结点的孩子;}三.详细设计1.家谱树的主要结构:classFamily{private:familyTreehead;//这是一个头结点,主要用来定位家谱树的根结点;intlength,totalNum;//整型数length用来记录家谱中本姓的人口数;//to

5、talNum用来记录包括妻子在内的所有人口数;public:Family();//构造函数,初始化整棵树;~Family();//析构函数,销毁整棵树;voidLoadFamilyTree();//读取文本建树函数,用来从外存中读取信息,同时建立家谱树//是整个程序的关键所在;voidModifyInformation();//修改家谱成员函数;voidAddMember();//增加家谱成员函数;voidDeleteMember()//删除家谱成员函数;;voidSave();//保存对家谱的更新的存储函数;voidShow();//用横向树在屏幕上输出家谱树函数;voidTraverse

6、();//遍历所有家谱成员函数;voidInquire();//查询成员资料函数;voidStatistics();//统计函数;protected:voidUpdateNumber();//更新序号函数,用于更新树之后成员序号的重定位;intNumberOfChild(familyTree);//计算成员的孩子数目;familyTreeSearch();//定位成员结点在内存中的位置;voidDeleteNode(familyTree);//删除一结点};2.实现过程:该问题最主要难点在于如何建立一棵家谱二叉树.联想到在课程中学习的用先序递归来生成二叉树的做法,于是先确定建树方法为先序建树

7、.具体伪码算法如下所述:1)成员信息分两个文本存储.文本一是用根叶序列记录成员之间关系.如下:012013405该序列表示1和5是0的孩子,而2和3都是1的孩子,依次类推,文本一是建树用,故没有包含妻子;文本二用于保存每个成员的具体资料,如身高,出生地址,出生年月等资料,包括了妻子的资料;2)建树的实现://两个读入流:instuf1,instuf2;//先读取文本一的信息,文本一包含的成员的序号num;le

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。