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

📄 home.cpp

📁 家谱记录程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				cout<<endl<<endl;
			}

			if(person[i].numberchild==0)
				cout<<"      他没有孩子!!!"<<endl<<endl;
			else
			{
				cout<<"       他有"<<person[i].numberchild<<"个孩子,他们的信息 :"<<endl<<endl;
				for(k=0;k<person[i].numberchild;k++)
				{
					cout<<"    姓名 : "<<person[person[i].child[k]].name<<endl
						<<"    出生日期 : "<<person[person[i].child[k]].brith
						<<"    第几代 : "<<person[person[i].child[k]].generation<<endl
						<<"    婚否 : "<<person[person[i].child[k]].marry
						<<"  地址 :"<<person[person[i].child[k]].address<<endl
						<<"    是否健在 : "<<person[person[i].child[k]].live;
					if(person[person[i].child[k]].live=='N'||person[person[i].child[k]].live=='n')
						cout<<"    死亡日期 : "<<person[person[i].child[k]].dietime<<endl;
					cout<<endl<<endl;
				}
			}
		}
	}

	cout<<"     你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;
	cin>>again;
	if(toupper(again)=='Y')
	{
		system("cls");
		return;
	}
	if(toupper(again)=='N')
		exit(0);
}


void birtfdaysearch(per person[36],int &n2) 
{
	char begbir[20],endbir[20],again;
	int i,flag=0;
	cout<<endl<<endl;
	cout<<"     请你输入两个时间,格式为****/**/**!"<<endl;
	cout<<"     起始时间是 : ";
	cin.getline(begbir,20);
	cout<<"     终止时间是 : ";
	cin.getline(endbir,20);
	cout<<endl<<endl;
	for(i=0;i<n2;i++)
	{
		if(strcmp(person[i].brith,begbir)>=0&&strcmp(person[i].brith,endbir)<=0)
		{
			cout<<"      姓名 : "<<person[i].name;
			cout<<"      生日 : "<<person[i].brith;
			flag=1;
			cout<<endl;
		}
	}
	cout<<endl<<endl;
	if(flag==0)
		cout<<"        在这段时间内没有人生日!!!"<<endl<<endl;

	cout<<"     你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;
	cin>>again;
	if(toupper(again)=='Y')
	{
		system("cls");
		return;
	}
	if(toupper(again)=='N')
		exit(0);
}


void realation(per person[36],int &n2)
{
	char name1[20],name2[20],again;
	int i,j,p,q,flag1=0,flag2=0;
	cout<<endl<<endl;
	cout<<"      请你输入第一个人的姓名 : ";
	cin.getline(name1,20);
	for(i=0;i<n2;i++)
	{
		if(strcmp(person[i].name,name1)==0)
		{
			p=person[i].data;
			flag1=1;
		}
	}
	cout<<"      请你输入第二个人的姓名 : ";
	cin.getline(name2,20);
	for(i=0;i<n2;i++)
	{
		if(strcmp(person[i].name,name2)==0)
		{
			q=person[i].data;
			flag2=1;
		}
	}
	cout<<endl<<endl;
	if(flag1==0)
		cout<<"      你输入的第一个人不在家谱中!"<<endl;
	if(flag2==0)
		cout<<"      你输入的第二个人不在家谱中!"<<endl;
    if(flag1==1&&flag2==1)
	{
		for(i=p;person[i].data!=-1;i=person[p].data)
		{
			cout<<"       第一个人的祖先是 : "<<person[i].name<<"   ";
		}
		cout<<person[i].name<<endl;
		for(j=q;person[j].data!=-1;j=person[q].data)
		{
			cout<<"       第二个人的祖先是 : "<<person[j].name<<"   ";
		}
		cout<<person[j].name<<endl;
	}
	cout<<endl<<endl;
	cout<<"     你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;
	cin>>again;
	if(toupper(again)=='Y')
	{
		system("cls");
		return;
	}
	if(toupper(again)=='N')
		exit(0);
}


void addchild(per person[36],int &n2) 
{
	int i;
	char again;
	fstream file("person.txt",ios::in|ios::out|ios::binary|ios::app);
	cout<<endl<<endl;
	cout<<"      请输入孩子的信息!!!"<<endl<<endl<<endl;

	cout<<"   姓名 : ";
	cin.getline(person[n2].name,20);

	cout<<"  生日(日期样式为xxxx/xx/xx) : ";
	cin.getline(person[n2].brith,20);

	cout<<"  婚否(输入Y或y或N或n) :";
	cin>>person[n2].marry;
	while(toupper(person[n2].marry)!='Y'&&toupper(person[n2].marry)!='N')
	{
		cout<<"       你输入错误,请你重新输入!!"<<endl;
		cout<<"  婚否(输入Y或y或N或n) :";
	    cin>>person[n2].marry;
	}
	cin.ignore();

	cout<<"  地址 : ";
	cin.getline(person[n2].address,20);

	cout<<"  是否健在(输入Y或y或N或n) :";
	cin>>person[n2].live;
	while(toupper(person[n2].live)!='Y'&&toupper(person[n2].live)!='N')
	{
		cout<<"       你输入错误,请你重新输入!!"<<endl;
		cout<<"  婚否(输入Y或y或N或n) :";
		cin>>person[n2].live;
	}
	cin.ignore();
		
	if(toupper(person[n2].live)=='N')
	{
		cout<<"  死亡日期(日期样式为xxxx/xx/xx) :";
		cin.getline(person[n2].dietime,20);
	}
		
	cout<<"  属于第几代 : ";
	cin>>person[n2].generation;
	cin.ignore();

	if(person[n2].generation!=1)
	{
		cout<<"  他(她)的父亲 : ";
		cin.getline(person[n2].parent,20);
	}
	cout<<endl;

	for(i=0;i<n2;i++)
	{
		if(strcmp(person[n2].parent,person[i].name)==0)
		{
			person[n2].data=i;
			break;
		}
	}

	file.write((char*)&person[n2],sizeof(person[n2]));
	file.close();
	file.open("person.txt",ios::in|ios::out|ios::binary);
	file.seekp(i*sizeof(per),ios::beg);
	person[i].child[person[i].numberchild]=n2;
	person[i].numberchild++;
	file.write((char*)&person[i],sizeof(per));
	file.close();
	n2++;
	cout<<"     你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;
	cin>>again;
	if(toupper(again)=='Y')
	{
		system("cls");
		return;
	}
	if(toupper(again)=='N')
		exit(0);
}


void editmember(per person[36],int &n2)
{
	int i,flag=0,choice;
	char name[20],again;
	fstream file("person.txt",ios::in|ios::out|ios::binary);
	cout<<endl<<endl;
	cout<<"     请你输入你想修改的成员的名字 : ";
	cin.getline(name,20);
	cout<<endl<<endl;
	for(i=0;i<n2;i++)
	{
		if(strcmp(person[i].name,name)==0)
		{
			flag=1;
			break;
		}
	}
	if(flag==0)
		cout<<"     家谱中没有这个人!!"<<endl<<endl<<endl;
	if(flag==1)
	{
		 cout<<"\t\t请你选择你要修改的项!!"<<endl;
		 cout<<"\t\t 1.   姓名"<<endl;
		 cout<<"\t\t 2.   地址"<<endl;
	     cout<<"\t\t 3.   婚否"<<endl;
         cout<<"\t\t 4.   生日"<<endl;
		 cout<<"\t\t 5.   是否死亡"<<endl;
		 cout<<"\t\t 6.   死亡日期"<<endl;
		 cout<<"\t\t    请输入1-6之间的数"<<endl;
		 cout<<"\t\t    输入选择 : ";
         
		 cin>>choice;
		 while (choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6)
		 {
			 cout<<"you enter wrong!"<<endl;
			 cout<<"please enter again!"<<endl;
		   	 cin>>choice;
		 }
	   	 cin.ignore(1,'\n');

		 switch(choice)  
		 {
			 case 1: cout<<endl<<"    请你输入新名字 : ";
				 cin.getline(person[i].name,20);
	//			 file.seekp(i*sizeof(per),ios::beg);
	//			 file.write((char*)&person[i],sizeof(per));
							break;
			 case 2: cout<<endl<<"    请输入新的地址 : ";
				 cin.getline(person[i].address,20);
	//			 file.seekp(i*sizeof(per),ios::beg);
	//			 file.write((char*)&person[i],sizeof(per));
							break;

			 case 3: cout<<endl<<"    请你输入新的是否结婚 : ";
				 cin>>person[i].marry;
	//			 file.seekp(i*sizeof(per),ios::beg);
	//			 file.write((char*)&person[i],sizeof(per));
							break;
			 case 4: cout<<endl<<"   请你输入新的生日 : ";
				 cin.getline(person[i].brith,20);
	//			 file.seekp(i*sizeof(per),ios::beg);
	//			 file.write((char*)&person[i],sizeof(per));
							break;
			 case 5: cout<<endl<<"    请你输入新的是否死亡 : ";
				 cin>>person[i].live;
	//			 file.seekp(i*sizeof(per),ios::beg);
	//			 file.write((char*)&person[i],sizeof(per));
							break;
			 case 6: cout<<endl<<"    请你输入新的死亡日期 : ";
				 cin.getline(person[i].dietime,20);
	//			 file.seekp(i*sizeof(per),ios::beg);
	//			 file.write((char*)&person[i],sizeof(per));
							break;
		 }
		 for(int j=0;j<n2;j++)
			file.write((char*)&person[j],sizeof(per));
	}

	cout<<endl<<endl;
	cout<<"     你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;
	cin>>again;
	if(toupper(again)=='Y')
	{
		system("cls");
		return;
	}
	if(toupper(again)=='N')
		exit(0);
}

void sortbirthday(per person[36],int &n2)
{
	per person1;
	int i,j;
	char again;
	cout<<endl<<endl;
	for(i=0;i<n2-1;i++)
		for(j=i+1;j<n2;j++)
		{
			if(strcmp(person[i].brith,person[j].brith)>=0)
			{
				person1=person[i];
				person[i]=person[j];
				person[j]=person1;
			}
		}
	for(i=0;i<n2;i++)
		cout<<"    姓名 : "<<person[i].name<<"     生日 : "<<person[i].brith<<endl;

	cout<<endl<<endl;
	cout<<"     你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;
	cin>>again;
	if(toupper(again)=='Y')
	{
		system("cls");
		return;
	}
	if(toupper(again)=='N')
		exit(0);
}






⌨️ 快捷键说明

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