亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? familytree.h

?? 二叉樹實現家族族譜管理 功能:創建族譜、打印功能、統計功能、查詢功能
?? H
字號:
//familytree.h
#include<string.h>
#include<iostream>
#include<fstream.h>

struct member
{
    member *wife,*brother;
	char *name;
	int  sex;
	char *birth;
    char *father;
	int  marital_status;
	char *spouse;
	int  generation;//代
	member(){wife=brother=NULL;}
	member(char *n,int s,char *bi,char *f,int m,char *sp,int g,member*w=NULL,member*b=NULL);
};
member::member(char *n,int s,char *bi,char *f,int m,char *sp,int g,member*w,member*b)
{
	name=n;
	sex=s;
    birth=bi;
	father=f;//父親或丈夫
	marital_status=m;//婚姻狀況
	spouse=sp;//配偶
	generation=g;
	wife=w;
	brother=b;
}
class familytree
{
public:
	//***************創建族譜****************//
	familytree(){count=0;countg=0;root=NULL;};
	~familytree(){deletetree(root);};
	bool add(member *new_member);//插入一個家族成員
	void deletetree(member *sub_root);//清除家族信息
	void deletefamily(){deletetree(root);}
    //***************打印功能****************//
	void print(member *m);//打印一個成員的信息
    void printfamily(member *sub_root);//打印家族的所有成員(前序遍歷)
	void printf(){printfamily(root);}
    //***************統計功能****************//
	int  getcount()const{return count;};//取家族成員人數
	int  getgeneration(member *sub_root);//取家族總共幾代 
	int  getcountg(){getgeneration(root);return countg;}
   	//***************查詢功能****************//
	bool findmember(char *name,member *father,member *&p);//找出相應名字的節點的指針
	void showfather(char *childname);//找出相應節點的父親或丈夫并打印出其信息來
    void showwife(char *husbanddname);//找出相應節點的妻子并打印出其信息來
    void showchilden(char *fatherdname);//找出相應節點的孩子并打印出其信息來
    void showbrother(char *brothername);//找出相應節點的兄弟姐妹并打印出其信息來
	void showoneself(char *name);//找出相應節點并打印其信息
private:
	int count;//家族人員的總人數
	int countg;//代
	member *root;//祖先節點
};

bool familytree::findmember(char *name,member *father,member *&p)//找出相應名字的節點的指針,并賦給p
{
	if(father==NULL)
	{
		p=NULL;
		return false;
	}
    else if(strcmp(father->name,name)==0)//比較字符串
	{
		 p=father;
		 return true;
	}
	else
	{
		if(findmember(name,father->brother,p))
		{
			return findmember(name,father->brother,p);
		}
		else{return findmember(name,father->wife,p);}
	}
}

bool familytree::add(member *new_member)//插入一個家族成員節點
{
	if(root==NULL)
	{
		root=new_member;
		count++;
        new_member->generation=1;//祖先為第一代
		return true;
	}
	member *temp=NULL,*temp1=NULL,*temp2=NULL;
	if(!findmember(new_member->father,root,temp)){return false;}//找不到新成員的父親
	else
	{
        findmember(new_member->father,root,temp);
	    if(strcmp(new_member->father,new_member->spouse)==0)//如果father和spouse的名字相同,則是father的妻子
		{
		   temp->wife=new_member;
           new_member->generation=temp->generation;
		   temp->marital_status=1;//妻子與丈夫同一代
           temp->spouse=new_member->name;
		   return true;
		}
	    if(temp->wife!=NULL)//是father的兒子
		{
		    temp=temp->wife;//找出妻子節點
            temp1=temp;
			while(temp->brother!=NULL){temp=temp->brother;}
	 	    temp->brother=new_member;//在最后一個兒子節點后插入新成員節點
			if(temp1==temp){new_member->generation=temp->generation+1;}//兒子代數=母親代數+1
			else{new_member->generation=temp->generation;}//和兄弟同一代
			count++;
			return true;
		}
		cout<<"\nERROR! "<<new_member->father<<" has no wife yet.\n\n";
		return false;
	}
}
void familytree::deletetree(member *sub_root)//清除家族信息
{
	if(sub_root!=NULL)
	{
		deletetree(sub_root->brother);
		deletetree(sub_root->wife);
		delete sub_root;
	}
}
void familytree::print(member *m)//打印一個成員的信息
{
	cout<<m->name;
	if(m->sex==0){cout<<"\t♀";}
	else{cout<<"\t♂";}
	cout<<"   "<<m->birth<<"         "<<m->father<<"       "; 
	if((m->sex==0)&&(strcmp(m->father,m->spouse)!=0)) //如果是女兒的話,則不輸出配偶信息
	{
		if(m->marital_status==0){cout<<"\tsingle"<<"\t "<<"\t          "<<m->generation;}
        else{cout<<"\tmarried"<<"\t        "<<"\t  "<<m->generation;}
        cout<<endl;
	}else{     //如果是其他人員的話,則輸出配偶信息
		if(m->marital_status==0){cout<<"\tsingle"<<"\t "<<"\t          "<<m->generation;} 
    else{cout<<"\tmarried"<<"        "<<m->spouse<<"\t  "<<m->generation;}
    cout<<endl;
	}
}
void familytree::printfamily(member *sub_root)//打印家族的所有成員(前序遍歷)
{
	if(sub_root!=NULL)
	{                                        
        print(sub_root);
		printfamily(sub_root->wife);
		printfamily(sub_root->brother);
	}
}
void familytree::showfather(char *childname)//找出相應節點的父親或丈夫并打印出其信息來
{
	member *temp1=NULL,*temp2=NULL;
	if(!findmember(childname,root,temp1))
	{
		cout<<"ERROR!The name "<<childname<<" is not found in the family!\n";
		return;
	}
	findmember(childname,root,temp1);
	if(!findmember(temp1->father,root,temp2))
	{
		cout<<"ERROR!Can't find "<<childname<<"'s father!\n";
		return;
	}
	else//找到被查詢的節點及其父親節點
	{
        findmember(temp1->father,root,temp2);
		if(strcmp(temp1->father,temp1->spouse)==0)//判斷找的是丈夫還是父親
		{
			cout<<"---------------------------------"<<childname<<"'s husband------------------------------------\n";
		}else{cout<<"---------------------------------"<<childname<<"'s father-----------------------------------\n";}
		cout<<"name"<<"   sex"<<"    birthday"<<"    father(husband)"<<"   marital status"<<"   spouse"<<"   generation";
		print(temp2);
		cout<<endl;
		return;
	}
}

void familytree::showwife(char *husbandname)//找出相應節點的妻子并打印出其信息來
{
	member *temp=NULL;
	if(!findmember(husbandname,root,temp))
	{
		cout<<"ERROR! The name "<<husbandname<<" is not found in the family!\n";
		return;
	}
	findmember(husbandname,root,temp);
	temp=temp->wife;
	if(temp==NULL)
	{
		cout<<"He don't have wife yet!\n";
		return;
	}
	else
	{
		cout<<"----------------------------------"<<husbandname<<"'s wife------------------------------------\n";
		cout<<"name"<<"   sex"<<"    birthday"<<"    father(husband)"<<"   marital status"<<"   spouse"<<"   generation";
		print(temp);
		cout<<endl;
		return;
	}
}
void familytree::showchilden(char *fatherdname)//找出相應節點的孩子并打印出其信息來
{
	member *temp=NULL;
    if(!findmember(fatherdname,root,temp))
	{
		cout<<"ERROR! The name "<<fatherdname<<" is not found in the family!\n";
		return ;
	}
	findmember(fatherdname,root,temp);
	if(strcmp(temp->father,temp->spouse)==0)   //若為妻子結點
	{
     temp=temp->brother;
	}
	else if(temp->sex==0)   //若為除妻子結點外的女性結點
	{cout<<"He doesn't have any children yet!\n"; return;}  
	else if(temp->marital_status==0) //若為未婚結點
	{cout<<"He doesn't have any children yet!\n"; return;}
	else{
	temp=temp->wife;
	temp=temp->brother;
	}
	if(temp==NULL)
	{
		cout<<"He doesn't have any children yet!\n";
		return;
	}
	else
	{
        cout<<"-----------------------------------"<<fatherdname<<"'s children---------------------------------\n";
		cout<<"name"<<"   sex"<<"    birthday"<<"    father(husband)"<<"   marital status"<<"   spouse"<<"   generation";
	    int num=0;
	    while(temp!=NULL)
		{
		    num++;
            print(temp);
			temp=temp->brother;

		}
		cout<<"He has "<<num<<" children\n";
        cout<<endl;
		return;
	}
}
        
void familytree::showbrother(char *brothername)//找出相應節點的兄弟姐妹并打印出其信息來
{
	member *temp1,*temp2;
	if(!findmember(brothername,root,temp1))
	{
		cout<<"ERROR! The name "<<brothername<<" is not found in the family!\n";
		return;
	}
	else
	{
		findmember(brothername,root,temp1);
		if(strcmp(temp1->father,temp1->spouse)==0) cout<<"ERROR! she is "<<temp1->father<<"'s wife!\n";
		else
		{
			if(temp1==root)
			{
				cout<<"ERROR! "<<brothername<<" is the ancestor!\n";
				return;
			}
			else
			{
				findmember(temp1->father,root,temp2);
				temp2=temp2->wife;
				temp2=temp2->brother;
				cout<<"--------------------------------"<<brothername<<"'s brothers----------------------------------\n";
				cout<<"name"<<"   sex"<<"    birthday"<<"    father(husband)"<<"   marital status"<<"   spouse"<<"   generation";
	            int num=0;
	            while(temp2!=NULL)
		       {
				   if(strcmp(temp2->name,brothername)!=0)//不輸出被查找的成員的信息
				   {
					   num++;
                       print(temp2);
			           temp2=temp2->brother;					   
				   }
				   else{temp2=temp2->brother;}
   		       }
		       cout<<brothername<<" has "<<num<<" brothers\n";
               cout<<endl;
		       return;
			}
		}
	}
}
int familytree::getgeneration(member *sub_root)//取家族總共幾代 
{
	if(sub_root!=NULL)
	{
		getgeneration(sub_root->brother);
		getgeneration(sub_root->wife);
		if(sub_root->generation>countg){countg=sub_root->generation;}
	}
	return countg;
}

void familytree::showoneself(char *name)
{
	member *temp=NULL;
	if(!findmember(name,root,temp))
	{
		cout<<"ERROR! The name "<<name<<" is not found in the family!\n";
		return ;
	}
	findmember(name,root,temp);
	cout<<"--------------------------------"<<name<<"'s information----------------------------------\n";
	cout<<"name"<<"   sex"<<"    birthday"<<"    father(husband)"<<"   marital status"<<"   spouse"<<"   generation";
    print(temp);
	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情欧美激情| av网站免费线看精品| 欧美白人最猛性xxxxx69交| 日本sm残虐另类| 国产精品九色蝌蚪自拍| 欧美在线观看18| 激情小说亚洲一区| 一区二区三区不卡视频| 欧美电视剧在线看免费| bt欧美亚洲午夜电影天堂| 亚洲6080在线| 一区二区三区四区蜜桃| 久久久噜噜噜久久人人看 | 国产99久久久国产精品潘金| 久久综合色天天久久综合图片| 久久99久久久久| 中文字幕一区视频| 欧美久久一区二区| 国产精品性做久久久久久| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲精品网站在线观看| 久久久久久久久97黄色工厂| 欧美福利一区二区| 欧美精品九九99久久| 91啪亚洲精品| 日本韩国一区二区| 99精品国产91久久久久久 | 成人免费视频国产在线观看| 蜜臀av一区二区| 成人av网站大全| 日韩精品在线看片z| 国产成人一区在线| 男女视频一区二区| 紧缚捆绑精品一区二区| 亚洲精品精品亚洲| 国产一区二区免费在线| 色婷婷久久综合| 国产亚洲午夜高清国产拍精品 | 国产91精品一区二区麻豆网站 | 国产精品国产自产拍在线| 亚洲国产经典视频| 亚洲精品欧美专区| 五月天视频一区| 成人综合激情网| 欧美色综合久久| 日韩视频永久免费| 国产精品网站一区| 午夜av电影一区| av在线不卡网| 欧美电影精品一区二区| 亚洲三级在线看| 久久国产精品无码网站| 99久久精品免费看| 亚洲精品一区二区三区精华液 | 成人动漫一区二区| 欧美酷刑日本凌虐凌虐| 欧美激情综合网| 日产欧产美韩系列久久99| 国产一区二区三区在线观看免费| av影院午夜一区| av在线这里只有精品| 91麻豆自制传媒国产之光| 欧美妇女性影城| 亚洲美女区一区| 狠狠色综合日日| 欧美一区二区三区免费大片| 1区2区3区欧美| 国产一本一道久久香蕉| 7777精品伊人久久久大香线蕉经典版下载 | 欧美在线看片a免费观看| 日韩一区二区三区精品视频| 亚洲综合男人的天堂| www.一区二区| 中文字幕一区二区三区精华液 | 久久久国产午夜精品| 日本欧美一区二区| 日韩欧美在线123| 婷婷国产v国产偷v亚洲高清| 捆绑调教美女网站视频一区| 亚洲一区二区av电影| 欧美日韩一区不卡| 视频一区免费在线观看| 欧美一级高清片在线观看| 青青草精品视频| 国产视频一区在线观看| 972aa.com艺术欧美| 亚洲成av人片在线观看无码| 91精品蜜臀在线一区尤物| 奇米色777欧美一区二区| 久久在线观看免费| 91视频一区二区| 麻豆国产91在线播放| 中文字幕二三区不卡| 91精品国产综合久久久久久| 国产精品正在播放| 亚洲成av人在线观看| 国产精品人成在线观看免费| 欧美精品vⅰdeose4hd| 国产精品一二三在| 六月丁香婷婷久久| 久久精品国产一区二区三区免费看| 精品国产1区二区| 欧美日韩一级大片网址| zzijzzij亚洲日本少妇熟睡| 日本成人中文字幕| 亚洲午夜羞羞片| 国产精品视频一区二区三区不卡| 欧美一区二区久久久| 国产馆精品极品| 亚洲国产综合色| 一区二区三区免费看视频| 国产欧美日韩麻豆91| 亚洲精品一线二线三线无人区| 91精品国产综合久久精品麻豆 | 欧美一级二级三级乱码| 色综合久久88色综合天天6| 成人性生交大片免费| 国产精品伊人色| 99视频精品全部免费在线| 成人午夜av在线| 94色蜜桃网一区二区三区| 国产99久久久国产精品免费看| 风间由美一区二区三区在线观看| 国产福利一区二区三区视频在线 | 丝袜诱惑制服诱惑色一区在线观看| 中文字幕制服丝袜成人av| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲欧美色图小说| 亚洲日本电影在线| 亚洲图片有声小说| 蜜桃一区二区三区四区| 国产精品小仙女| 一本大道久久a久久精二百| 欧美日韩在线播| 久久久久9999亚洲精品| 亚洲精品国产成人久久av盗摄 | 中文字幕在线不卡国产视频| 亚洲一区在线视频观看| 国产精品一卡二| 欧美三片在线视频观看| 久久五月婷婷丁香社区| 亚洲欧美日韩国产中文在线| 久久精品国产精品亚洲综合| 99v久久综合狠狠综合久久| 欧美区一区二区三区| 国产精品久久久久久久久免费丝袜| 一区二区三区丝袜| 99久久久国产精品| 国产午夜精品福利| 美女诱惑一区二区| 日韩午夜激情av| 亚洲高清一区二区三区| 欧美网站一区二区| 亚洲一区中文日韩| 欧美专区日韩专区| 午夜精品成人在线| 99精品国产99久久久久久白柏| 国产视频亚洲色图| 国产风韵犹存在线视精品| 欧美精品一区二区久久久| 青椒成人免费视频| www精品美女久久久tv| 国产在线麻豆精品观看| 精品国产成人系列| 国产精品综合在线视频| 国产精品久久一级| 在线精品视频一区二区三四| 亚洲精品免费在线| 欧美日本高清视频在线观看| 日韩精彩视频在线观看| 欧美成人a在线| 91亚洲永久精品| 日韩精品色哟哟| 国产精品久久福利| 欧美精品少妇一区二区三区| 国产精品伊人色| 亚洲影院理伦片| 欧美国产视频在线| 欧美丰满高潮xxxx喷水动漫| 国产精品一二三在| 一区二区三区成人在线视频| 精品免费一区二区三区| 日韩国产欧美在线视频| 精品国产露脸精彩对白| 在线观看免费亚洲| eeuss鲁一区二区三区| 中国av一区二区三区| 在线看日韩精品电影| 国产一区二区伦理片| 五月天久久比比资源色| 最好看的中文字幕久久| 日韩一区二区在线播放| 91精彩视频在线观看| 粉嫩av一区二区三区| 国产乱人伦偷精品视频免下载 | 久久婷婷国产综合国色天香| 欧美日韩国产电影| 欧美日韩国产首页| 欧美系列一区二区| 欧美伦理电影网|