一.前言
1 项目简介
家谱(或称族谱)是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书文体。家谱是中国特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属宝贵的人文资料,关于历史学、风俗学、人口学、社会学和经济学的深切研究,均有其不可替代的独特功能。
2系统功能
本项目对家谱治理进行简单的模拟,以实现查看先人和子孙个人信息、插入家族成员、删除家族成员等功能。本项目的实质是完成对家谱成员信息的成立、查、插入、修改、删除等功能,能够第一概念家族成员的数据结构,然后将每一个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
一.需求分析
1.系统需求
本系统是家谱治理系统,顾名思义,是用来治理家族资料的,要实现成立新家谱,查家谱文件,增加家族成员,修改家族成员,删除家族成员和查家族成员等大体功能。家谱治理系统是给家族长辈治理家族资料用的,对电脑的操作不必然熟悉,因此操作界面必然要友好,必然要方便,dos界面的操作一样比较枯燥,综合各类缘故,要用MFC实现可视化的界面。
2.环境需求
硬件:acer ASPIRE 4740G
I5处置器 2G内存 320G硬盘
软件:vs 2020
二.整体设计
整体设计框架
图1 系统整体设计模块结构图
数据结构设计
关于树形的结构:
在树形结构的选择上,依如实际中多子女的现象选择一样树,考虑抵家谱中成员可能存在的不定成员数问题,抛弃了以数组为基础的一样树方案,决定用链表来实现。
树形结构的外存保留。为了提高效率,树形结构在程序初始化时由外存文件一次读入内存,尔后不管插入仍是修改,删除都再也不对外存的树结构保留文件进行操作,只在内存中处置,程序退出时对外存树结构文件进行一次更新。也确实是说,不管在程序运行中中对家谱结构进行多少种,多少次的操作,外存的树结构文件始终只会被程序访问两次。
以二叉链表作为树的存储结构,链表中的两个链域别离指向该结点的第一个小孩结点和下一个兄弟结点,它通过描述每一个结点的一个小孩和兄弟信息来反映结点之间的层次关系,其具体的结点结构为:
firstChild | data | nextSibling |
其中,firstchild为指向该结点第一个小孩的指针,nextsibling为指向该结点下一个兄弟,elem是数据元素内容,举例如下:
算法设计
一、家谱的创建和结点的添加
家谱采纳的树的结构,通过左小孩,右兄弟的方式变成二叉树,创建的进程事实上确实是二叉树的添加结点的进程,依照父亲的名字添加在父亲结点的左侧。代码如下:
家谱的创建
FamilyTree::FamilyTree()
{
T=NULL;//开始为空家谱
}
家谱结点的添加
void FamilyTree::Add(person parent, person addNode)
{
//将addnode添加到parent作为parent的小孩结点
int n=0;
addNode->firstchild=addNode->nextsibling=NULL; //初始时firstchild同nextsibling都为空
页面设计代码 addNode->parent=parent;
if(parent==NULL) //若是父结点空
{
if(T==NULL) //若是根结点空
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论