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进行处理,非常感谢!