源代码如下

(1)main.cpp

#include<stdio.h>
#include"family.h"
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
#define max 100
int main()
{
int choose;
char X;
Fam *b=NULL;
char *str=(char*)malloc(max*sizeof(char));
str[0]='\0';
cout<<"------------------------------"<<endl;
cout<<"-----0.退出              -----"<<endl;
cout<<"-----1.记录输入:         -----\t"<<endl;
cout<<"-----2.记录输出:         -----\t"<<endl;
cout<<"-----3.家谱记录存盘:     -----\t"<<endl;
cout<<"-----4.用括号法输出家谱: -----\t"<<endl;
cout<<"-----5.查找某人的儿子:   -----\t"<<endl;
cout<<"-----6.查找某人的祖先:   -----\t"<<endl;
cout<<"-----7.清除全部文件记录: -----\t"<<endl;
cout<<"------------------------------"<<endl;
cout<<"请按键选择进行相应的操作:"<<endl;
cout<<"choose=";
cin>>choose;
while(choose)
{switch(choose){case 1: InputFam(&b,str);break;case 2: OutputFam(&b,str);break;case 3: Store(b,str); printf("文件已经保存!");break;case 4: DispFam(b); break;case 5: printf("请输入需要查找儿子的结点:");cin>>X;SearchXSon(b,X);break;case 6: printf("请输入需要查找祖先的结点:\n");cin>>X;Fam *p;p=SearchX(b,X);if(p!=NULL)SearchXAncestor(b,X);elseprintf("该结点不存在!");break;case 7:Distory(&b,str);printf("文件记录已经清除!");break;default:cout<<endl<<"Invalid input,input again.";
}cout<<endl<<"please choose again:"<<endl;cout<<"the choose =";cin>>choose;
}
return 0;
}

(2)family.cpp

#include "family.h"
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
void CreateFam(Fam **b,char *str)  //创建树
{Fam *S[MaxSize],*p=NULL;int top=-1,tag,j=0,d=0;char ch;1switch(ch){case '(':d++;top++;S[top]=p;tag=1;break;case ')':top--;break;case ',':d--;tag=2;break;default:p=(Fam *)malloc(sizeof(Fam));p->degree=d;p->name=ch;p->lchild=NULL;p->rchild=NULL;if((*b)==NULL)(*b)=p;else{switch(tag){case 1: S[top]->lchild=p;break;case 2: S[top]->rchild=p;break;}}}ch=str[++j];}
}void DestroyFam(Fam *&b)   //销毁家谱
{if (b!=NULL){DestroyFam(b->lchild);DestroyFam(b->rchild);free(b);}
}
void InputFam(Fam **b,char *str)//记录输入
{if(str[0]=='\0')gets(str);
do
{printf("请以括号法输入需要输入的记录:\n");gets(str);if(str[0]=='\0')printf("输入的记录为空,请再次输入:\n");
}while(str[0]=='\0');
CreateFam(b,str);
printf("记录创建成功!");
}void Distory(Fam **b,char *str)//清除全部的记录
{
(*b)=NULL;
FILE *fp;
fp=fopen("family.txt","w");
if(fp==NULL)
{printf("打开文件失败!");exit(1);
}
str="";
fclose(fp);
}
void OutputFam(Fam **b,char *str)//从文件中读出记录
{FILE *fp;if((fp=fopen("family.txt","r"))==NULL){printf("不存在记录文件,要建立吗?\n建立请输入Y,否则按其他键:");if(getchar()=='Y'){fp=fopen("family.txt","w+");printf("记录文件“family.txt”已建立\n");}elseexit(1);}else{if(!feof(fp))fscanf(fp,"%s",str);fclose(fp);CreateFam(b,str);printf("文件中记录已输出\n");}}void Store(Fam *b,char *str)//储存全部的结点记录
{Fam *p;p=b;FILE *fp;fp=fopen("family.txt","w+");if(fp==NULL){printf("文件打开失败!");return;}else{if(p!=NULL){fprintf(fp,"%s",str);fclose(fp);}}
}void DispFam(Fam *b)//用括号法输出家谱记录
{
if(b!=NULL)
{printf("%c",b->name);if(b->lchild!=NULL||b->rchild!=NULL){printf("(");DispFam(b->lchild);if(b->rchild!=NULL){printf(",");DispFam(b->rchild);}printf(")");}
}
}Fam* SearchX(Fam *b,char X)//查找结点X
{Fam *p;
if(b==NULL) return NULL;
else if(b->name==X) return b;
else
{p=SearchX(b->lchild,X);if(p!=NULL) return p;else{return SearchX(b->rchild,X);}
}
}void SearchXSon(Fam *b,char X)//查找结点X的所有儿子
{
Fam *p,*q;
p=SearchX(b,X);      //找到节点X
if(p!=NULL)
{p=p->lchild;if(p==NULL)    //X没有孩子printf("节点%c没有儿子!",X);else{printf("节点%c的所有儿子为:",X);if(p!=NULL)printf("%c  ",p->name);q=p->rchild;while(q){printf("%c  ",q->name);q=q->rchild;}}
}
elseprintf("该结点不存在!");
}void TraverseBT(Fam *b,int d)//遍历家谱
{if(b!=NULL)if(b->degree<d){printf("%c  ",b->name);if(b->lchild!=NULL)TraverseBT(b->lchild,d);if(b->rchild!=NULL)TraverseBT(b->rchild,d);}
}void SearchXAncestor(Fam *b,char X)//查找结点X的所有祖先
{if(b==NULL){printf("这是一棵空树!");return ;}Fam *p=SearchX(b,X);if(p->degree==0){printf("X为根节点或其兄弟,没有祖先!");return;}printf("%c结点的祖先有:",X);TraverseBT(b,p->degree);
}
//a(b(c(,d),e),f)

(3)family.h

#ifndef FAMILY_H_INCLUDED
#define FAMILY_H_INCLUDED
#include "family.h"
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define MaxSize 100
typedef struct Fam
{
int degree; //人员年代
char name;//人员标志
struct Fam *lchild;//name的孩子
struct Fam *rchild;//name的兄弟
}Fam;
void CreateFam(Fam **b,char *str);//创建家谱记录
void DestroyFam(Fam *&b);   //销毁家谱
void InputFam(Fam **b,char *str);//记录输入
void Distory(Fam **b,char *str);//清除全部的记录
void OutputFam(Fam **b,char *str);//从文件中读出记录
void Store(Fam *b,char *str);//储存全部的结点记录
void DispFam(Fam *b);//用括号法输出家谱记录
Fam* SearchX(Fam *b,char X);//查找结点X
void TraverseBT(Fam *b,int d);//遍历家谱
void SearchXAncestor(Fam *b,char X);//查找结点X的所有祖先
void SearchXSon(Fam *b,char X);//查找结点X的所有儿子#endif // FAMILY_H_INCLUDED

数据结构课程设计-家谱系统的简易开发相关推荐

  1. 数据结构课程设计家谱c语言,数据结构课程设计-家谱的实现与设计.doc

    数据结构课程设计-家谱的实现与设计 课 程 设 计 报 告 课程设计名称:数据结构课程设计 系 : 三系 学 生 姓 名 : 朱强 班 级: 13软件 学 号: 20130311227 成 绩: 指 ...

  2. c语言信息加密hikl,数据结构课程设计-家谱的实现与设计1.docx

    课程设计报告 课程设计名称: 数据结构课程设计 系: 三系 学生姓名: 班U级/ 13软件 学号: 20130311227 成绩: 指导教师: 刘杰 开课时间:2014.2015学年一学期 设计题目家 ...

  3. 数据结构课程设计 公交系统

    大家好! 这是我的第一篇文章,是将这学期的数据结构课设报告整理出来的.可能还有些小错误,还请多多指正. 数据结构课程设计<公交系统> 一.引言 (一)课题描述 (二)设计要求 二.总体设计 ...

  4. 数据结构课程设计-家谱

    摘  要 家谱,又称族谱.宗谱等.是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书.家谱是一种特殊的文献,就其内容而言,是中华文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和事 ...

  5. 数据结构课程设计家谱c语言,数据结构课程设计 用二叉树实现家谱的相关运算 怎么编?谢谢!...

    稍微修改下就应该能用了.. #include <stdio.h> typedef struct node { int tag; union{struct node *sublist; ch ...

  6. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)..doc...

    数据结构课程设计(家族关系查询系统). 1 课程设计介绍 1.1课程设计项目简介 家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化遗产,是 ...

  7. 家族关系查询系统程序设计算法思路_数据结构课程设计--

    数据结构课程设计-- 家族关系查询系统 课 程 设 计 任 务 书 题目题目 家族关系查询系统家族关系查询系统 主要内容.基本要求.主要参考资料等主要内容.基本要求.主要参考资料等 主要内容主要内容 ...

  8. 数据结构课程设计 ——考试报名系统

    数据结构课程设计 --考试报名系统 一.项目功能要求 完成对考生信息的建立,查找,插入,修改,删除等功能.其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息.项目在设计时应首先确定系统的数据结 ...

  9. 数据结构课程设计——机票售卖系统(C++)

    引言 这学期最后的数据结构课程设计需要我们完成一个简单的小程序,我选择了一个机票售卖系统,实现了一些基本的功能:因为时间给的比较短,又赶在复习周补课,所以并没有什么突出的地方,我就在这里聊聊我的代码实 ...

最新文章

  1. 淡入淡出效果 || 高亮显示案例
  2. 《数据分析变革:大数据时代精准决策之道》一第一部分 变革已然开始
  3. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes
  4. php中get和set区别,javascript中set与get方法详解
  5. java web windows_Java Web服务器部署指南(windows版)
  6. 12.Linux之输入子系统分析(详解)
  7. 基本响应性的Web设计测试工具
  8. FusionChart完全入门手册 -2
  9. c++gdal如何在大图像中截取小图像并获取其图像信息_【图像处理】OpenCV系列十 --- 边缘检测之Canny算子...
  10. jboss6启动报错
  11. unity开发文档_Unity以赞助人身份加入Blender开发基金
  12. jbutton如何实现点击_点击量突破22.1亿人次!这场云上祈福拜祖是如何实现的
  13. Opera中的opera密码修改,半残了
  14. 内网环境中公网域名解析成内网地址的问题
  15. 企业市场推广之网络营销运营策略探讨
  16. CSS3有趣的渐变色
  17. 数据清洗-使用es的ingest
  18. com.googlecode.genericdao
  19. Matlab利用函数句柄实现函数嵌套
  20. 联想笔记本如何安装内存条——附安装结果检查方法及问题解决方法

热门文章

  1. 嵌入式linux s5pv210,嵌入式Linux裸机开发(二)——S5PV210启动过程分析
  2. 报错Can‘t pickle <function <lambda> at……
  3. CORS error错误 has been blocked by CORS policy前端请求浏览器出错
  4. [HDU4628]解题报告,状态压缩dp
  5. X86(IA32)段权限标志位CPL DPL RPL详解
  6. 代码神器Sourse Insight配置 - IAR EWB超强力助手
  7. cad2017怎么改变选择方式,AutoCAD2016如何设置经典模式的方法介绍
  8. git/github的使用(入门到中阶)
  9. ASP.net网页进行数据更新操作
  10. 第四代计算机主要特征是什么,第四代计算机网络特点是什么?