• 大小: 14KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: Data  structure  

资源简介

(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;

评论

共有 条评论