C语言家谱管理程序,C语言二叉树家谱管理系统.doc

C语言二叉树家谱管理系统

摘 要

关键词: 二叉树 家谱 结点

目录

1 系统功能概述1

1.1 系统功能1

图2 成员二叉树功能模块图4

1.2 总体功能模块4

2 系统各功能模块的详细设计4

2.1功能选择4

2.2信息输入6

2.3信息输出7

2.4信息存盘7

2.5信息清盘8

2.6信息查询8

2.7源程序10

3设计结果与分析16

3.1菜单函数功能测试16

4.2输入功能函数测试16

3.3输出功能函数测试17

3.4清盘功能函数测试17

3.5存盘功能函数测试17

3.6查询功能函数测试18

总结19

参考文献20

1 系统功能概述

1.1 系统功能

实现的方法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。该家谱管理系统将信息用文件的方法进行存储管理,再从文件中将成员信息以递归的方法创建二叉树。该输入成员信息的方法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。

(1)定义结构体

typedef struct fnode

{ char father[NAMEWIDTH];

char wife[NAMEWIDTH];

char son[NAMEWIDTH];

}FamType;

typedef struct tnode

{

char name[NAMEWIDTH];

struct tnode *lchild,*rchild;

}BTree;

(2) 二叉树的建立

二叉树的结点有三个域,数据域和两个指针域,数据域用来存放数据,两个指针域分别存放指向该结点左右孩子的指针。并且还有个root结点,称二叉树的根节点。代码如下:

BTree *CreatBTree(char *root,FamType fam[],int n)

{

int i=0,j;

BTree *bt,*p;

bt=(BTree *)malloc(sizeof(BTree));

strcpy(bt->name,root);

bt->lchild=bt->rchild=NULL;

while(i

i++;

if(i

{

p=(BTree *)malloc(sizeof(BTree));

p->lchild=p->rchild=NULL;

strcpy(p->name,fam[i].wife);

bt->lchild=p;

for(j=0;j

if(strcmp(fam[j].father,root)==0)

{

p->rchild=CreatBTree(fam[j].son,fam,n);

p=p->rchild;

}

}

return(bt);

}

(3)家族成员信息的输入

依次输入一个家庭的父亲、母亲和孩子的姓名。并将它们保存在相应的文件里。

(4)家族成员信息的输出

依次输出每个家庭的父亲、母亲和孩子的姓名。

查找某人的儿子

首先输入父亲的姓名,在二叉树中查找是否有此人,如果没有就输出不存在这样的父亲。如果有就先查看它的左孩子是否存在,不存在就输出这个父亲没有妻子,如果存在就查找左孩子的右孩子,没有右孩子就输出这个父亲没有孩子,存在就输出右孩子的姓名,即为查找到的儿子。

(6)查找某人的祖先

采用后序非递归遍历方法输入从根结点到*s结点的路径,首先输入一个成员的姓名,用一个栈存入查找的路径,当找到时栈中的元素即为它的所有祖先。

该家谱管理系统将各个家庭的信息以文件的形式存储,具体步

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114810 人正在系统学习中 相关资源:Yalefree雅乐简谱打谱软件_打谱软件-WindowsServer工具类资源…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月13日
下一篇 2021年4月13日

相关推荐