数据结构课程设计代码-家谱管理系统

头文件(head.h)

/***********************************************************
*版权所有(C)2017,于子淇,黄潇慧 张昕 
*
*文件名称:family.c
*文件标识:无
*内容摘要:该代码用于获取满足后缀要求的第一个文件
*其它说明:无
*当前版本:V1.0
*作 者:于子淇,黄潇慧 张昕 
*完成日期:2017.12.21
*
*版本号:V1.0
**********************************************************/
#ifndef FAMILY_H_INCLUDED
#define FAMILY_H_INCLUDED
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#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 *p,char ch[]); // 搜索指针函数,搜索需要修改和获得的结点,输入头指针,姓名
 /*treenode *parent(treenode *p,treenode *q,int *flag); //搜索双亲的指针函数,通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子*/
 int generation(treenode *p,char ch[]); //获得搜索到的成员的代的返回值
 void children(treenode *p,char b[],char c,int d);//建立家谱孩子结点,创建结点并对l赋值保存
 void output(treenode *n); //搜索到数据的输出
 void InitTree(); //初始化(创建)
 void Add(); //添加
 void Search(); //查找
 void Change(); //修改
#endif // FAMILY_H_INCLUDED

源文件(family,cpp)

/***********************************************************
*版权所有(C)2017,于子淇,黄潇慧 张昕 
*
*文件名称:family.c
*文件标识:无
*内容摘要:该代码用于获取满足后缀要求的第一个文件
*其它说明:无
*当前版本:V1.0
*作 者:于子淇,黄潇慧 张昕 
*完成日期:2017.12.21
*
*版本号:V1.0
**********************************************************/
#include "head.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
void display0();
using namespace std;
/*********************************************************
*功能描述:消除菜单输入容错率
*输入参数:x
*输出参数:无
*返回值:x-成功其他-失败
*其它说明:消息字段之间用分号(;)分隔
***********************************************************/
template<class T>//模板
T fun(T x)
{
    if(x!=2)
        throw x;
    else
        return x;
}
treenode *root; //root是指向结构体treenode的指针
/*********************************************************
*功能描述:查找家谱中某位成员(在后续的函数中会经常出现)
*输入参数: *p 头指针用来指向节点 ch[]用来储存姓名
*输出参数:无
*返回值:q or NULL
*其它说明:消息字段之间用分号(;)分隔
            通过递归在兄弟、孩子中查找
***********************************************************/
treenode *search(treenode *p,char ch[]) // 搜索指针函数,搜索需要修改和获得的结点,输入头指针,姓名
{
    treenode *q;
     if(p==NULL) return NULL;//没有家谱,头指针下为空
     if(strcmpi(p->l.name,ch)==0)//比较姓名,看是否重名或是否存在
          return p;//家谱不为空,头指针下有这个人
     if(p->brother)
    {
        //递归过程
            q=search(p->brother,ch);//在兄弟中找
            if(q)
            return q;//找到
    }
     if(p->child)
    {
            q=search(p->child,ch);//在孩子中找
            if(q!=NULL)
            return q; //找到
    }
      return NULL;//没有找到
}

/*********************************************************
*功能描述:获得搜索到的成员的第几代的返回值
*输入参数: *p 头指针用来指向节点 ch[]用来储存姓名
*输出参数:被查找人的信息
*返回值:q->l.generation or NULL
*其它说明:消息字段之间用分号(;)分隔
            通过递归在兄弟、孩子中查找
***********************************************************/
int generation(treenode *p,char ch[]) //获得搜索到的成员的代的返回值
{
    treenode *q;
    if(
  • 41
    点赞
  • 333
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值