⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 family.cpp

📁 这是一个族谱的管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						delete p;
						
					}
					else
						if(p->parent ->rchild &&p->parent ->rchild ==p)
						{
							p->parent ->rchild =NULL;
							p->parent =NULL;
						//	t->nodenum--;
							delete p;
							
						}
				}
					
			}
			else
				if(p->lchild &&p->rchild )                               //该节点有左右孩子
				{
					if(!p->parent )
					{
						p->rchild ->parent =NULL;
						p->rchild =NULL;
						destroy(p);
					}
					else
					{
						if(p->parent->lchild &&p->parent ->lchild ==p)
						{
							p->parent ->lchild =p->rchild ;
							p->rchild ->parent =p->parent ;
							p->parent =NULL;
							p->rchild =NULL;
							destroy(p);
						}
						else
							if(p->parent ->rchild &&p->parent ->rchild ==p)
							{
								p->parent ->rchild =p->rchild ;
								p->rchild ->parent =p->parent ;
								p->rchild =NULL;
								p->rchild =NULL;
								destroy(p);
							}
					}
				}
				else
					if(!p->lchild &&p->rchild )                              //该节点只有右孩子
					{
						if(!p->parent )
						{
							p->rchild ->parent =NULL;
							p->rchild =NULL;
							delete p;
						//	t->nodenum--;

						}
						else
						{
							if(p->parent ->lchild &&p->parent ->lchild ==p)
							{
								p->parent ->lchild =p->rchild ;
								p->rchild ->parent =p->parent ;
								p->parent =NULL;
								p->rchild =NULL;
								delete p;
						//		t->nodenum--;
							}
							else
								if(p->parent ->rchild &&p->parent ->rchild ==p)
								{
									p->parent ->rchild =p->rchild ;
									p->rchild ->parent =p->parent ;
									p->parent =NULL;
									p->rchild =NULL;
									delete p;
							//		t->nodenum--;
								}
						}
					}
					else
						if(p->lchild &&!p->rchild )                                //该节点只有左孩子
						{
							if(!p->parent )
							{
								//p->lchild ->parent =NULL;
								destroy(p);
								//p->lchild =NULL;
								//p=NULL;
								t=NULL;

							}
							else
							{
								if(p->parent->lchild &&p->parent ->lchild ==p)
								{
									p->parent ->lchild =NULL;
									p->parent =NULL;
									destroy(p);

								}
								else
									if(p->parent ->rchild &&p->parent ->rchild ==p)
									{
										p->parent ->rchild =NULL;
										p->parent  =NULL;
										destroy(p);
									}
							}
						}
		
	}
	if(frame2(hOut,hIn,"删除成功!!"));
	return t;
}
int  countnode(bitree T)                //先序遍历递归算法 
{
	if(T)
	{  
	//	cout<<T->a.parentname ;//f.write ((char*)T,sizeof(bitnode));
	return 1+countnode(T->lchild)+	countnode(T->rchild);
	
	}
	//else
	return 0;
	

}
/*void savefile(bitree&t)                    //保存文件
{	
	int x=countnode(t);
	ofstream f(t->a.parentname.data(),ios::binary ) ;// 创建文件|ios::out
	f.write((char*)&x,sizeof(int));
//	preordertraverse(t,f);
	bitnode*s,*stack[200];
	s=new bitnode;
	int top=0;
	stack[top]=t;
	while(top>=0)
	{
		s=stack[top--];
		while(s)
		{
			
			f.write ((char*)s,sizeof(bitnode)); //写进文件
			cout<<s->a.name<<ends ;
			if(s->rchild)
				stack[++top]=s->rchild;
			s=s->lchild;
		}
	}

	f.close();
}
bitree openfile()
{
	char filename[20];
	int num;
	cout<<"输入文件名"<<ends;
	cin>>filename;	
	ifstream r(filename,ios::binary);                    //|ios::in
	if(!r)
		cout<<"?error"<<endl;
	bitree t;
	bitnode *p;
	t=new bitnode;
	r.read((char*)&num,sizeof(int));                 //读出节点数
	cout<<"节点数"<<num<<endl;
	r.read ((char*)t,sizeof(bitnode));            //读出首节点
	t->parent=NULL;
	t->lchild=NULL;
	t->rchild=NULL;
	cout<<t->a.parentname <<endl;
	cout<<t->a.name <<endl;
	for( ;num>1;num--)
	{
		p=new bitnode;
		r.read ((char*)p,sizeof(bitnode));
		cout<<p->a.name ;
	    t=insert1(t,p);
		p=NULL;
	}
	r.close();
	delete p;
	return t;		
}*/
void savefile(bitree&t)                    //保存文件
{	
	int x=countnode(t);
	ofstream f(t->a.parentname,ios::binary ) ;// 创建文件|ios::out
	f.write((char*)&x,sizeof(int));
//	preordertraverse(t,f);
	bitnode*s,*stack[200];
	s=new bitnode;
	int top=0;
	stack[top]=t;
	while(top>=0)
	{
		s=stack[top--];
		while(s)
		{
			
			f.write ((char*)&(s->a),sizeof(person)); //写进文件
			if(s->rchild)
				stack[++top]=s->rchild;
			s=s->lchild;
		}
	}

	f.close();
}
bitree openfile(HANDLE hOut)
{
	HANDLE hIn;
	hIn = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄

	char filename[30];
	bitree t;
	bitnode *p;
	t=new bitnode;
	COORD pos={22,13};
	SetConsoleCursorPosition(hOut,pos);  //设置光标位置
	int num;
	cout<<"输入文件名"<<ends;
	cin>>filename;
	strcat(filename,".dll");
	ifstream r;
	r.open(filename,ios::binary); 
	
	if(!r)
	{
		if(!frame2(hOut,hIn,"文件不存在!"))
		t=NULL;
		return t;
	}
		else                         //方法一 效率高
	{	
		r.read((char*)&num,sizeof(int));                 //读出节点数
		r.read ((char*)&(t->a),sizeof(person));            //读出首节点
		t->parent=NULL;
		t->lchild=NULL;
		t->rchild=NULL;
		bitree q;;
		q=t;
		for( ;num>1;num--)
		{
			p=new bitnode;
			r.read ((char*)&(p->a),sizeof(person));
			if(!strcmp(p->a.parentname,q->a.name))
			{
				q->lchild=p;
				p->parent=q;
				p->lchild=NULL;
				p->rchild=NULL;
				q=p;
			}
			else
				if(!strcmp(p->a.parentname,q->a.parentname))
				{
				q->rchild=p;
				p->parent=q;
				p->lchild=NULL;
				p->rchild=NULL;
				q=p;

				}
				else
					t=insert1(t,p);
			p=NULL;
		}
		r.close();
		delete p;
		return t;
	}
	/*else                         //方法二 效率比一低 
	{	
		r.read((char*)&num,sizeof(int));                 //读出节点数
		r.read ((char*)&(t->a),sizeof(person));            //读出首节点
		t->parent=NULL;
		t->lchild=NULL;
		t->rchild=NULL;
		for( ;num>1;num--)
		{
			p=new bitnode;
			r.read ((char*)&(p->a),sizeof(person));
			t=insert1(t,p);
			p=NULL;
		}
		r.close();
		delete p;
		return t;
	}*/
}
void stat(bitree t,double&age,float&stature,int&mannum,int &x,int&y,int &a,int &b)
{
	if(t)
	{
		char s[4];
		s[3]='\0';
		for(int k=0;k<3;k++)
			s[k]=t->a.stature[k];
		
		stature+=atof(s);
		x++;
		if(!atof(t->a.stature))             //x统计有身高的人的个数
			x--;
		if(strcmp(t->a.deathday,"###"))
		{
			char a[5],birth[5];
			a[4]='\0';
			birth[4]='\0';
			for(int j=0;j<4;j++)
				birth[j]=t->a.birthday[j];

			for(int i=0;i<4;i++)
			{
				
				a[i]=t->a.deathday[i];
				
			}
			double d,bb;
			bb=atof(birth);
			d=atof(a);	
			d=d-bb;
			age+=d;			
			y++;                         //平均年龄

		}
		if(!strcmp(t->a.sex,"男"))
			mannum++;
		int i;
	
		if(!strcmp(t->a.xueli,"小学"))
		{
			a=1;
		}
		if(!strcmp(t->a.xueli,"博士"))
		{
			b=8;
		}
		if(!strcmp(t->a.xueli,"初中"))
		{
			i=2;
			if(i>b)
				b=i;
			if(i<a)
				a=i;
			
		}
		if(!strcmp(t->a.xueli,"高中"))
		{
			i=3;
			if(i>b)
				b=i;
			if(i<a)
				a=i;
			
		}
		if(!strcmp(t->a.xueli,"中专"))
		{
			i=4;
			if(i>b)
				b=i;
			if(i<a)
				a=i;
			
		}
		if(!strcmp(t->a.xueli,"大专"))
		{
			i=5;
			if(i>b)
				b=i;
			if(i<a)
				a=i;
			
		}
		if(!strcmp(t->a.xueli,"本科"))
		{
			i=6;
			if(i>b)
				b=i;
			if(i<a)
				a=i;
			
		}
		if(!strcmp(t->a.xueli,"硕士"))
		{
			i=7;
			if(i>b)
				b=i;
			if(i<a)
				a=i;
			
		}
		
		
		stat(t->lchild,age,stature,mannum,x,y,a,b);
        stat(t->rchild,age,stature,mannum,x,y,a,b);

	}
}
void coutxueli(int a)
{
	if(a==1)
		cout<<"最低学历:"<<"小学";
	if(a==2)
		cout<<"最低学历:"<<"初中";
	if(a==3)
		cout<<"最低学历:"<<"高中";
	if(a==4)
		cout<<"最低学历:"<<"中专";
	if(a==5)
		cout<<"最低学历:"<<"大专";
	if(a==6)
		cout<<"最低学历:"<<"本科";
	if(a==7)
		cout<<"最低学历:"<<"硕士";
	if(a==8)
		cout<<"最低学历:"<<"博士";
}
void coutxueli1(int a)
{
	if(a==1)
		cout<<"最高学历:"<<"小学";
	if(a==2)
		cout<<"最高学历:"<<"初中";
	if(a==3)
		cout<<"最高学历:"<<"高中";
	if(a==4)
		cout<<"最高学历:"<<"中专";
	if(a==5)
		cout<<"最高学历:"<<"大专";
	if(a==6)
		cout<<"最高学历:"<<"本科";
	if(a==7)
		cout<<"最高学历:"<<"硕士";
	if(a==8)
		cout<<"最高学历:"<<"博士";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -