资源简介
(c++语言实现)运用简易的孩子兄弟表示法实现家谱管理系统,具体功能有实现家族成员的增删改查,显示n代子女,某成员所有子女
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define MAX 10
typedef struct Node//定义data存储结构,存放个人信息
{ char name[MAX]; //姓名
char sex;//性别
int generation;//代
}Node;
typedef struct Treenode//创建结构体
{
struct Node l; //家谱中直系家属
struct Treenode *brother;//用来指向兄弟
struct Treenode *child;//用来指向孩子
}Treenode;
Treenode *search(Treenode *pchar ch[]); // 搜索指针函数,搜索需要修改和获得的结点,输入头指针,姓名
int generation(Treenode *pchar ch[]); //获得搜索到的成员的代的返回值
void children(Treenode *pchar b[]char cint d);//建立家谱孩子结点,创建结点并对l赋值保存
void output(Treenode *n); //搜索到数据的输出
void InitTree(); //初始化(创建)
void Add(); //添加
void Change(); //修改
void Delete(); //删除
void Export(); //到出
void IntPut(); //导入
void show();
void show();
Treenode *root; //root是指向结构体Treenode的指针、始祖节点
fstream f;
Treenode *search(Treenode *pchar ch[])// 搜索指针函数,搜索需要修改和获得的结点,输入头指针,姓名
{
Treenode *q;
if(p==NULL) return NULL;//没有家谱,头指针下为空
if(strcmpi(p->l.namech)==0)//比较姓名,看是否重名或是否存在
return p;//家谱不为空,头指针下有这个人
if(p->brother)
{
//递归过程
q=search(p->brotherch);//在兄弟中找
if(q)
return q;//找到
}
if(p->child)
{
q=search(p->childch);//在孩子中找
if(q!=NULL)
return q; //找到
}
return NULL;//没有找到
}
Treenode *search1(Treenode *pint n)// 搜索指针函数,搜索需要修改和获得的结点,输入头指针,姓名
{
Treenode *q;
if(p==NULL) return NULL;//没有家谱,头指针下为空
if(p->l.generation==n)//比较姓名,看是否重名或是否存在
return p;//家谱不为空,头指针下有这个人
if(p->brother)
{
//递归过程
q=search1(p->brothern);//在兄弟中找
if(q)
return q;//找到
}
if(p->child)
{
q=search1(p->childn);//在孩子中找
if(q!=NULL)
return q; //找到
}
return NULL;//没有找到
}
void children(Treenode *pchar b[]char cint d)
{
int i;
for(i=0;i p->l.name[i]=b[i];
p->l.sex=c;
p->l.generation=d;
}
void AddIntPut(char pa[]char b[]char cint d)
{
Treenode *n;
Treenode *t;
n = search(rootpa);
if(n == NULL)
{
return;
}
t = search(rootb);
if(t != NULL)
{
return;
}
if(n->child==NULL)//孩子信息添加当满足该父辈无子女时,进入条件判断
{
n->child=(Treenode *)malloc(sizeof(Treenode));
n->child->brother=NULL;
n->child->child=NULL;
children(n->childbcd);
}
else//当该父辈之前已经有子女的时候,则此新添加的成员为添加的前一个孩子的兄弟
{
n=n->child;
while(n->brother!=NULL) //添加另一个孩子
n=n->brother;
Treenode *t;
t=(Treenode *)malloc(sizeof(Treenode));
children(tbcd);
t->brother=NULL;
t->child=NULL;
n->brother=t;
}
}
void IntPut() //导入
{
Treenode *n;
n = root;
- 上一篇:visualc++6.0
- 下一篇:UKF C++版本
评论
共有 条评论