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)定义结构体
结构体为表示一个对象的不同属性提供了连贯一致的方法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。本文定义了两个结构体,分别是家族成员和二叉树结点的结构体。代码如下: 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)
{ }
(3)家族成员信息的输入
依次输入一个家庭的父亲、母亲和孩子的姓名。并将它们保存在相应的文件里。
(4)家族成员信息的输出
依次输出每个家庭的父亲、母亲和孩子的姓名。 (5)查找某人的儿子
首先输入父亲的姓名,在二叉树中查找是否有此人,如果没有就输出不存在这样的父亲。如果有就先查看它的左孩子是否存在,不存在就输出这个父亲没有
int i=0,j; BTree *bt,*p;
bt=(BTree *)malloc(sizeof(BTree)); strcpy(bt->name,root); bt->lchild=bt->rchild=NULL;
while(i<n && strcmp(fam[i].father,root)!=0)
i++;
if(i<n) { } return(bt);
p=(BTree *)malloc(sizeof(BTree)); p->lchild=p->rchild=NULL; strcpy(p->name,fam[i].wife); bt->lchild=p; for(j=0;j<n;j++)
if(strcmp(fam[j].father,root)==0) { }
p->rchild=CreatBTree(fam[j].son,fam,n); p=p->rchild;
妻子,如果存在就查找左孩子的右孩子,没有右孩子就输出这个父亲没有孩子,存在就输出右孩子的姓名,即为查找到的儿子。 (6)查找某人的祖先
采用后序非递归遍历方法输入从根结点到*s结点的路径,首先输入一个成员的姓名,用一个栈存入查找的路径,当找到时栈中的元素即为它的所有祖先。
该家谱管理系统将各个家庭的信息以文件的形式存储,具体步骤如下图:
文件
图1 文件存储功能模块图
保存
输入父亲、母亲和儿子的姓名
输入
该家谱管理系统还将各个成员的信息以及成员之间的关系存储在二叉树上,具体存储方式如下图:
儿子1
母亲
父亲
儿子2
图2 成员二叉树功能模块图
1.2 总体功能模块
图3 总体功能模块图
2 系统各功能模块的详细设计
2.1功能选择
功能选择模块函数,主要提供1:文件 2:家谱 两个功能模块让用户选择。输入数字1的时候,出现界面1:输入 2:输出 9:清盘 0:存盘返回。返回后输入数字2,出现界面1:找某人的所有儿子 2:找某人所有祖先 。用户根据自己的需求选择 void main()
BTree *bt;
FamType fam[MaxSize]; int n,sel,sell; ReadFile(fam,n); do {
printf("1.文件操作2.家谱操作0.退出 请选择:"); scanf("%d",&sel); switch(sel) {
case 1:
do {
printf("1:输入2:输出9:全清0:存盘返回 请选择:"); scanf("%d",&sell); switch(sell) {
case 9:DelAll(fam,n);
break;
case 1:InputFam(fam,n);
break;
case 2:OutputFile(fam,n);
break;
case 0:SaveFile(fam,n); }
break;
}while (sell!=0); break; case 2:
bt=CreatBTree("f1",fam,n);
}
}
{
printf("1.找某人所有儿子 2.找某人所有祖先 0:返回 请选择:"); scanf("%d",&sell); switch(sell) { case 1:
FindSon(bt);
break;
case 2:
printf(" >>");Ancestor(bt); }
break;
}while(sell!=0); break;
}while(sel!=0);
2.2信息输入
…… 此处隐藏:6264字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




