欢迎来到天天文库
浏览记录
ID:6405835
大小:734.00 KB
页数:25页
时间:2018-01-12
《数据结构课程设计—家谱系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一.前言1项目简介家谱(或称族谱)是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书体裁。家谱是中国特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属珍贵的人文资料,对于历史学、民俗学、人口学、社会学和经济学的深入研究,均有其不可替代的独特功能。2系统功能本项目对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息、插入家族成员、删除家族成员等功能。本项目的实质是完成对家谱成员信息的建立、查找、插入、修改、删除等功能,可以首先定义家族成员的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函
2、数以验证各个函数功能并得出运行结果。一.需求分析1.系统需求本系统是家谱管理系统,顾名思义,是用来管理家族资料的,要实现建立新家谱,查找家谱文件,增加家族成员,修改家族成员,删除家族成员和查找家族成员等基本功能。家谱管理系统是给家族长辈管理家族资料用的,对电脑的操作不一定熟悉,所以操作界面一定要友好,一定要方便,dos界面的操作一般比较枯燥,综合各种原因,要用MFC实现可视化的界面。1.环境需求硬件:acerASPIRE4740GI5处理器2G内存320G硬盘软件:vs2008一.总体设计3.1总体设计框架删除结点修改结点添加结点保存家谱读取文件建立
3、家谱程序入口配偶信息关系查询基本查询输出家谱图1系统总体设计模块结构图3.2数据结构设计关于树形的结构:在树形结构的选择上,根据实际中多子女的现象选择一般树,考虑到家谱中成员可能存在的不定成员数问题,抛弃了以数组为基础的一般树方案,决定用链表来实现。树形结构的外存保存。为了提高效率,树形结构在程序初始化时由外存文件一次读入内存,此后不管插入还是修改,删除都不再对外存的树结构保存文件进行操作,只在内存中处理,程序退出时对外存树结构文件进行一次更新。也就是说,不管在程序运行中中对家谱结构进行多少种,多少次的操作,外存的树结构文件始终只会被程序访问两次。以
4、二叉链表作为树的存储结构,链表中的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,它通过描述每个结点的一个孩子和兄弟信息来反映结点之间的层次关系,其具体的结点结构为:firstChilddatanextSibling其中,firstchild为指向该结点第一个孩子的指针,nextsibling为指向该结点下一个兄弟,elem是数据元素内容,举例如下:3.3算法设计1、家谱的创建和结点的添加家谱采用的树的结构,通过左孩子,右兄弟的方式变为二叉树,创建的过程实际上就是二叉树的添加结点的过程,根据父亲的名字添加在父亲结点的左边。代码如下:家谱的创建
5、FamilyTree::FamilyTree(){T=NULL;//开始为空家谱}家谱结点的添加voidFamilyTree::Add(personparent,personaddNode){//将addnode添加到parent作为parent的孩子结点intn=0;addNode->firstchild=addNode->nextsibling=NULL;//初始时firstchild同nextsibling都为空addNode->parent=parent;if(parent==NULL)//如果父结点空{if(T==NULL)//如果根结点空
6、{addNode->data.Depth=n;T=addNode;//将addnode赋给根结点return;}n=T->data.Depth+1;//否则将原来的根结点成为新根结点的孩子T->data.Depth=n;//并使原来根结点的depth值加1addNode->firstchild=T;T->parent=addNode;T=addNode;return;}strcpy(addNode->data.parentname,parent->data.name);n=parent->data.Depth+1;addNode->data.Dept
7、h=n;//将depth值加1if(parent->firstchild==NULL)//如果parent无孩子,把addNode加入其firstchildparent->firstchild=addNode;elseInsertSibling(parent->firstchild,addNode);//否则插入到相应的兄弟结点中去}2、家谱结点的修改家谱结点的修改就是将结点的指针传入,更新数据就可完成,代码如下:voidFamilyTree::Modify(person&curnode,personnewnode){//修改某个人的信息strcpy
8、(curnode->data.name,newnode->data.name);strcpy(curnode
此文档下载收益归作者所有