家谱内页设计_第1页
家谱内页设计_第2页
家谱内页设计_第3页
家谱内页设计_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版下载后可任意编辑和复制第第页家谱内页设计

课程设计报告

系:三系同学姓名:班级:学号:20220303234成绩:指导老师:

开课时间:

一.设计题目

家谱的设计与实现(树,查找)

二.主要内容

家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下:

(1)家谱祖先数据的录入(树的根结点)。

(2)家庭成员的添加:即添加某一人的儿女,儿女的数目由掌握台端给出,然后输入相应的儿女姓名(此处儿女的姓名不能重名)。

(3)家庭成员的修改:可以修改某一成员的姓名。

(4)家庭成员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的全部子女及这一辈的全部成员。

(5)家庭成员的删除:删除此成员时,若其有后代,将删除其全部后代成员。

三.课题设计的基本思想,原理和算法描述

1.基本思想

此课题使用的数据结构为树形结构,为使结构干净清楚在此使用二叉树结构,其中data存储结构中包含以下信息:姓名、性别、代目。而二叉树结构中l为直系成员,m为旁系成员(即配偶)。lchild指针指向其的兄弟,rchild指向孩子,实现功能的详细代码如下:

typedefstructnode{//定义data存储结构

typedefstructft{

2.输出界面:

实现其功能的代码见源程序及解释。

structnodel;//家谱中直系成structnodem;//家谱中旁系成structft*lchild;//用来指向兄弟structft*rchild;//用来指向孩子

charname[STA];//姓名charsex;//性别intgeneration;//代目

}node;

}ft;

3.输入信息

通过搜寻结点直接赋值,包含以下几个函数:

(1)主要功能函数:voidAdd()在主函数中直接调用。下面四个函数为其子函数。(2)搜寻指针函数:ft*search(ft*p,charch[])搜寻需要改动的结点。

(3)获得代目函数:intgeneration(ft*p,charch[])获得搜寻到的成员的代目的返回值。(4)存储孩子函数:voidsaves(ft*p,charb[],charc,intd)创建结点并对l赋值。思路如下:如该结点没有右孩子则直接创建右孩子结点,假如存在右孩子则对右孩子创建左孩子,作为兄弟结点,如此循环。

(5)存储配偶函数:voidsavep(ft*p,charb[],charc,intd)直接对m成员赋值具体代码见源程序及解释。

4.输出结点信息

通过搜寻结点获得数据后输出,包含以下几个函数:

(1)主要功能函数:voidSearch()在主函数中直接调用。下面两个函数为其子函数。(2)搜寻指针函数:ft*search(ft*p,charch[])搜寻需要获得的结点。(3)输出数据函数:voiddisp(ft*n)对搜寻到数据的输出具体代码见源程序及解释。5.修改成员姓名

通过搜寻结点获得数据后修改,包含以下几个函数:

(1)主要功能函数:voidChange()在主函数中直接调用。下面两个函数为其子函数。(2)搜寻指针函数:ft*search(ft*p,charch[])搜寻需要修改的结点,然后直接赋值修改。

6.删除成员及其孩子

此功能在二叉树结构中实现需要用到如下

思想,包含以下几个函数:主要功能函数:voidDel()

搜寻指针函数:ft*search(ft*p,charch[])搜寻双亲函数:ft*parent(ft*p,ft*q,int*flag)删除A则只需用free(root)函数初始化;删除结点则需要知道结点在二叉树的位置,通过

parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子。如删除B,则通过parent函数得到A结点,flag标志为1,进行如下操作:B的rchild指针指向NULL,A的rchild指向C,即A-rchild=B-lchild;如删除C或E,则可直接使B或D的lchild值等于C或E的lchild,rchild指向NULL即可。详细代码见源程序及注解。

四.源程序及解释

#includestdio.h#includemalloc.h#includestdlib.h#includestring#defineSTA10

typedefstructnode{//定义data存储结构charname[STA];//姓名charsex;//性别intgeneration;//代目}node;

typedefstructft{structnodel;//家谱中直系家属structnodem;//家谱中旁系家属structft*lchild;//用来指向兄弟structft*rchild;//用来指向孩子}ft;

ft*root;

ft*search(ft*p,charch[])//输入头指针,姓名{ft*q;if(p==NULL)returnNULL;//没有家谱,头指针下为空if(strcmpi(,ch)==0||strcmpi(,ch)==0)returnp;//家谱不为空,头指针下有这个人if(p-lchild){q=search(p-lchild,ch);//在做孩子中找if(q)returnq;//找到}if(p-rchild){q=search(p-rchild,ch);//在右孩子中找if(q!=NULL)returnq;}

returnNULL;//没有找到}

ft*parent(ft*p,ft*q,int*flag){if(p==NULL)returnNULL;//没有家谱,头指针下为空if(p-rchild==NULL){flag=0;returnNULL;}else{if(p-lchild==q){*flag=1;returnp;}elseif(p-rchild==q){*flag=-1;returnp;}else{if(p-lchild!=NULL)parent(p-lchild,q,*flag);if(p-rchild!=NULL)parent(p-rchild,q,*flag);}}}

intgeneration(ft*p,charch[]){ft*q;if(p==NULL)returnNULL;if(strcmpi(,ch)==0)returnp-l.generation;//家谱不为空,头指针下有这个人if(p-lchild)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论