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

📄 home.cpp

📁 家谱记录程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>

struct per{
	int data;
    char name[20];
	char brith[20];
	char marry;
	char address[20];
	char live;
	char dietime[20];
	char parent[20];
	int generation;
	int child[10];
	int numberchild;

	per(){
		for(int i=0;i<20;i++)
			name[i]='\0';
		for(i=0;i<20;i++)
			brith[i]='\0';
		for(i=0;i<20;i++)
			address[i]='\0';
		for(i=0;i<20;i++)
			dietime[i]='\0';
		for(i=0;i<10;i++)
			child[i]=0;
		for(i=0;i<20;i++)
			parent[i]='\0';
		live='\0';
		marry='\0';
		data=-10;
		generation=0;
		numberchild=0;
	}
};

void  setupinfo(per person[]);
void display(per person[],int&);
void displayhome(per person[],int&); 
void displayinfo(per person[],int&); 
void namesearch(per person[],int&); 
void birtfdaysearch(per person[],int&); 
void realation(per person[],int&);
void addchild(per person[],int&);  
void editmember(per person[],int&); 
void sortbirthday(per person[],int&);

void main()
{
	per person[36];
	int count=0;
	fstream inputFile("person.txt",ios::in|ios::out|ios::binary);
	if(!inputFile)
	{
	    cout<<"文件不存在!"<<endl;
	    exit(0);
	}
	inputFile.read((char*)&person[count],sizeof(person[count])); 
	while(!inputFile.eof())
	{
		if(person[count].name[0]!='\0')
		{
			cout<<"  姓名 :"<<person[count].name<<endl
				<<"  出生日期 :"<<person[count].brith<<endl//<<"   "<<person[count].data<<endl
				<<"  婚否 :"<<person[count].marry<<"  地址 :"<<person[count].address<<endl
				<<"  是否健在 :"<<person[count].live<<endl;
			if(person[count].live=='N'||person[count].live=='n')
				cout<<"  死亡日期 :"<<person[count].dietime<<endl;
		//	cout<<person[count].numberchild<<endl;
			count++;
			cout<<endl;
			inputFile.read((char*)(person+count),sizeof(*person));
		}
	}
	inputFile.close();

	if(count<1)
	{
		cout<<"           家谱不存在,请你建立一个家谱!!"<<endl;
		setupinfo(person);
	}
	display(person,count);
}

void setupinfo(per person[36])
{

	int i,j,k;
	fstream outputfile("person.txt",ios::in|ios::out|ios::binary|ios::app);
	for(i=0;i<5;i++)
	{
		cout<<"  姓名 : ";
		cin.getline(person[i].name,20);

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

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

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

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

		if(person[i].generation!=1)
		{
			cout<<"  他(她)的父亲 : ";
			cin.getline(person[i].parent,20);
		}
		cout<<endl;
	}
	
	
	for(j=0;j<i;j++)
	{
		if(person[j].generation==1)
			person[j].data=-1;
	}

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

	for(j=0;j<i;j++)
	{
		for(k=0;k<i;k++)
		{
			if(strcmp(person[j].parent,person[k].name)==0)
			{
				person[k].child[person[k].numberchild]=j;
				person[k].numberchild++;
			}
		}
	}

	for(j=0;j<i;j++)
		outputfile.write((char*)(person+j),sizeof(*person));
	outputfile.close();
			
	system("cls");
}

void display(per person[36],int &n1)
{
	int choice;

    while(1)
	{ 
	    cout<<endl<<endl<<endl;
		cout<<"\t\t        家谱分析"<<endl;
        cout<<"\t\t1.   显示家谱"<<endl;
        cout<<"\t\t2.   显示第n代人的所有信息"<<endl;
	    cout<<"\t\t3.   按照姓名查询某成员的信息"<<endl;
	    cout<<"\t\t4.   按照出生日期查询成员名单"<<endl;
		cout<<"\t\t5.   输入兩个姓名,确立他们的关系"<<endl;
		cout<<"\t\t6.   某成员添加孩子"<<endl;
		cout<<"\t\t7.   修改某成员信息"<<endl;
		cout<<"\t\t8.   按生日日期对家谱中的所有人进行排序"<<endl;
		cout<<"\t\t9.  退出系统"<<endl;
        cout<<"\t\t    输入选择:"<<endl;
        cout<<"\t\t    请输入1-10之间的数"<<endl;
  
        cin>>choice;
	    while (choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6&&choice!=7
			&&choice!=8&&choice!=9&&choice!=10)
		{
			cout<<"you enter wrong!"<<endl;
			cout<<"please enter again!"<<endl;
			cin>>choice;
		}
	   	cin.ignore(1,'\n');
		system("cls");
		switch(choice) 
		{
			case 1: displayhome(person,n1); break;
            case 2: displayinfo(person,n1);   break;
            case 3: namesearch(person,n1); break;
			case 4: birtfdaysearch(person,n1); break;
			case 5: realation(person,n1); break;
			case 6: addchild(person,n1); break;
			case 7: editmember(person,n1); break;
			case 8: sortbirthday(person,n1); break;
            case 9: exit(0); 
		 }
	}
}


void displayhome(per person[36],int &n2) 
{
	int i,j,max;
	char again;
	cout<<endl<<endl;
	for(i=0;i<n2-1;i++)
	{
		max=person[i].generation;
		for(j=i+1;j<n2;j++)
		{
			if(person[i].generation<person[j].generation)
				max=person[j].generation;
		}
	}
	for(i=1;i<=max;i++)
	{	
		cout<<"     第"<<i<<"代的成员有 : ";
		for(j=0;j<n2;j++)
		{
			if(person[j].generation==i)
				cout<<person[j].name<<"  ";
		}
		cout<<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 displayinfo(per person[36],int &n2) 
{
	int i,gen,j=0;
	char again;
	cout<<endl<<endl;
	cout<<"      请你输入你要查询的代数 : ";
	cin>>gen;
	cout<<endl<<endl;
	for(i=0;i<n2;i++)
	{
		if(person[i].generation!=gen)
			j++;
	}
	if(j==n2)
		cout<<"     你要查的代数还没有!!!"<<endl<<endl;
	for(i=0;i<n2;i++)
	{
		if(person[i].generation==gen)
		{
			cout<<"    姓名 : "<<person[i].name<<endl
			<<"    出生日期 : "<<person[i].brith<<"    第几代 : "<<person[i].generation<<endl
			<<"    婚否 : "<<person[i].marry<<"  地址 :"<<person[i].address<<endl
			<<"    是否健在 : "<<person[i].live<<endl;
		    if(person[i].live=='N'||person[i].live=='n')
				cout<<"    死亡日期 : "<<person[i].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 namesearch(per person[36],int &n2)
{
	int i,j=0,k;
	char again,name[20];
	cout<<endl<<endl;
	cout<<"    请你输入你想要查询的人的姓名 : ";
	cin.getline(name,20);

	for(i=0;i<n2;i++)
	{
		if(strcmp(person[i].name,name)!=0)
			j++;
	}
	cout<<endl<<endl;
	if(j==n2)
		cout<<"      你要查询的人没有!!!"<<endl<<endl;
	for(i=0;i<n2;i++)
	{
		if(strcmp(person[i].name,name)==0)
		{
			cout<<"    姓名 : "<<person[i].name<<endl
			<<"    出生日期 : "<<person[i].brith<<"    第几代 : "<<person[i].generation<<endl
			<<"    婚否 : "<<person[i].marry<<"  地址 :"<<person[i].address<<endl
			<<"    是否健在 : "<<person[i].live<<endl;
		    if(person[i].live=='N'||person[i].live=='n')
				cout<<"    死亡日期 : "<<person[i].dietime<<endl;
			cout<<endl<<endl;

			if(person[i].generation==1)
				cout<<"    他是这个家的根,没有父亲!!!!"<<endl<<endl;
			else
			{
				cout<<"       他(她)父亲的信息 : "<<endl;
				cout<<"    姓名 : "<<person[person[i].data].name<<endl
					<<"    出生日期 : "<<person[person[i].data].brith
					<<"    第几代 : "<<person[person[i].data].generation<<endl
					<<"    婚否 : "<<person[person[i].data].marry
					<<"  地址 :"<<person[person[i].data].address<<endl
					<<"    是否健在 : "<<person[person[i].data].live<<endl;
				if(person[person[i].data].live=='N'||person[person[i].data].live=='n')
					cout<<"    死亡日期 : "<<person[person[i].data].dietime<<endl;

⌨️ 快捷键说明

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