课程设计-家谱管理系统

family.h

#ifndef _TEST
#define _TEST
#include<iostream>
#include<stdio.h>
#include<String>
#define MaxSize 1000
using namespace std;

typedef struct
{
	char data[MaxSize]; //存放字符串 
	int length; //存放串长
}SqString;
struct Tree
{
	char name[100];           
	char sex[100];              
	char fed[100];//配偶
	char thing[1000];//个人简介
	char borth[100];//生日
	int level;//辈分
	struct Tree *child;              //孩子指针
	struct Tree *brother;            //兄弟指针
	struct Tree *parent;             //父亲指针
};
Tree *Create(Tree *t,char s[]);        //创建族谱
Tree *Find(Tree *b,char cname[]);      //查找函数
void coutxinxi(Tree *b,char cname[]);    //查询个人信息
int chaxunbeifen(Tree *b,char chaxunmingzi[]);   //查询辈分
void add(Tree *b,char parent[],char erzi[]) ;    //添加成员
void xiugai(Tree *b,char chaxunmingzi[]);        //修改个人信息
void deletechengyan(Tree * &b,char chaxunmingzi[]);  //删除成员
void bianli(Tree *b);        //函数的遍历,查看族谱
void bianli(Tree *b,char aboutInformation[]);  //根据关键字查询
void creatZupu(Tree * &u);//创建族谱
SqString changeSign(char sign[]);   //将字符串转换成串存储结构
bool piPei(SqString s,SqString t);//串的模式匹配
void bianli1(Tree *b, char aboutInformation[]);  //遍历搜索,根据关键字查询
void seven(Tree * u);//根据关键字查询,输入有关信息
int menu_select();   //菜单

#endif 


family.cpp

#include<stdio.h>
#include<String>
#include "family.h"
int zuigaomax=1;

Tree *Create(Tree *t,char s[])        //创建族谱
{                                  
	Tree *p; 
	p=new Tree;
	strcpy(p->name,s);                    //祖先名字
	p->brother=NULL;                      //规定祖先只有一个人,即指向兄弟的指针为空,指向父亲节点的指针为空
	p->child=NULL;                        //暂且将孩子指针赋值为空
	p->parent=NULL;
	p->level=1;                           //记录辈分,为第一代
	cout<<"请输入性别:"<<endl;
	cin>>p->sex;
	cout<<"请输入配偶名称:"<<endl;
	cin>>p->fed;
	cout<<"请输入生日:"<<endl;
	cin>>p->borth;
	cout<<"请输入个人简介:"<<endl;
	cin>>p->thing;
	
	
	t=p;
	return t;                             //创建祖先成功,返回
}


Tree *Find(Tree *b,char cname[]) //查询位置
{
	Tree *p;
	if(b==NULL)                   //如果树为空,则返回NULL
		return NULL;
	else
		if(strcmp(b->name,cname)==0)  //判断查询的是否为祖先节点
		{
			return b;
		}
		else                          //如果不符合上面的两种情况,则使用递归进行下一轮查询
		{
			p=Find(b->child,cname);
			if(p!=NULL)
			{
				return p;
			}
			else
			{
				return Find(b->brother,cname);
			}
		}
}



void coutxinxi(Tree *b,char cname[]) //查询个人信息
{
	Tree *p;
	p=Find(b,cname);                 //使用查询位置函数,对所要查询的成员信息进行定位,然后再返回赋值给p
	cout<<"名字:\t"<<p->name;
	cout<<"第"<<p->level<<"代";
	cout<<"父辈:\t"<<p->parent->name;
	cout<<"性别:\t"<<p->sex;
	cout<<"配偶:\t"<<p->fed;
	cout<<"生日:\t"&
  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值