admin 管理员组

文章数量: 1086019


2024年4月25日发(作者:代码display)

#include

#include

#include

#include

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 addchild(per person[],int&);

void editmember(per person[],int&);

void sortbirthday(per person[],int&);

void main()

{

per person[36];

int count=0;

fstream inputFile("",ios::in|ios::out|ios::binary);

if(!inputFile)

{

cout<<"文件不存在!"<

exit(0);

}

((char*)&person[count],sizeof(person[count]));//从文件中读取指

定大小的字节函数read(),读取字节函数

while(!()) //当文件没有读取完毕,进行循环

{

if(person[count].name[0]!='0')//当名字不为空时

{

count++; //统计人数

((char*)(person+count),sizeof(*person));

}

}

();//关闭文件

if(count<1) //如果家谱图里面没人

{

cout<<" 家谱不存在,请你建立一个家谱!!"<

setupinfo(person);

}

display(person,count);

}

void setupinfo(per person[36]) //创建信息

{

int i,j,k;

fstream outputfile("",ios::in|ios::out|ios::binary|ios::app);

for(i=0;i<5;i++)

{

//打开文件

cout<<" 姓名 : ";

e(person[i].name,20);

cout<<" 生日(日期样式为xxxx/xx/xx) : ";

e(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<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否(输入Y或y或N或n) :";

cin>>person[i].marry;

}

();

cout<<" 地址 : ";

e(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<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否(输入Y或y或N或n) :";

cin>>person[i].live;

}

();

if(toupper(person[i].live)=='N')

{

cout<<" 死亡日期(日期样式为xxxx/xx/xx) :";

e(person[i].dietime,20);// 输入死亡日期

}

cout<<" 属于第几代 : ";

cin>>person[i].generation;

();

if(person[i].generation!=1) //不是第一代

{

cout<<" 他(她)的父亲 : ";

e(person[i].parent,20);

20是读取字符串的个数

}

cout<

}

//e是读取字符串函数

for(j=0;j

{

if(person[j].generation==1)

person[j].data=-1; //****************************

}

for(j=0;j

{

for(k=0;k

{

if(strcmp(person[j].parent,person[k].name)==0) //比较2个字符串是否相同,实

质是找某个人的父亲

person[j].data=k;

}

}

for(j=0;j

{

for(k=0;k

{

if(strcmp(person[j].parent,person[k].name)==0)

{

person[k].child[person[k].numberchild]=j;

person[k].numberchild++; //找某个人的孩子

}

}

}

for(j=0;j

((char*)(person+j),sizeof(*person)); //写文件

(); //关闭文件夹

system("cls");

}

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

{

int choice;

while(1) //循环式一直进行的

{

cout<

cout<<"tt 家族关系查询系统"<

cout<<"tt1. 显示家谱"<

cout<<"tt2. 显示第n代人的所有信息"<

cout<<"tt3. 按照姓名查询某成员的信息"<

cout<<"tt4. 按照出生日期查询成员名单"<

cout<<"tt5. 某成员添加孩子"<

cout<<"tt6. 修改某成员信息"<

cout<<"tt7. 按生日日期对家谱中的所有人进行排序"<

cout<<"tt8. 退出系统"<

cout<<"tt 输入选择:"<

cout<<"tt 请输入1-8之间的数"<

cin>>choice;

while

(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6&&

choice!=7

&&choice!=8)

{

cout<<"you enter wrong!"<

cout<<"please enter again!"<

cin>>choice;

}

(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: addchild(person,n1); break;

case 6: editmember(person,n1); break;

case 7: sortbirthday(person,n1); break;

case 8: exit(0);

}

}

}

void displayhome(per person[36],int &n2)

参数地址

{

int i,j,max;

char again;

cout<

for(i=0;i

{

max=person[i].generation;

//调用函数的参数 传递的是一个

for(j=i+1;j

{

if(person[i].generation

max=person[j].generation; //找出最大的代数

}

}

for(i=1;i<=max;i++)

{

cout<<" 第"<

for(j=0;j

{

if(person[j].generation==i)

cout<

}

cout<

}

cout<

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

cin>>again;

if(toupper(again)=='Y') //就是判断输入得是否为y或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<

cout<<" 请你输入你要查询的代数 : ";

cin>>gen;

cout<

for(i=0;i

{

if(person[i].generation!=gen)

j++;

}

if(j==n2) //判断是否找到

cout<<" 你要查的代数还没有"<

for(i=0;i

{

if(person[i].generation==gen)

{

cout<<" 姓名 : "<

<<" 出生日期 : "<

<<" 婚否 : "<

<<" 是否健在 : "<

if(person[i].live=='N'||person[i].live=='n')

cout<<" 死亡日期 : "<

:

"<

cout<

}

}

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

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<

cout<<" 请你输入你想要查询的人的姓名 : ";

e(name,20);

for(i=0;i

{

if(strcmp(person[i].name,name)!=0)

j++;

}

cout<

if(j==n2)

cout<<" 你要查询的人没有"<

for(i=0;i

{

if(strcmp(person[i].name,name)==0)

{

cout<<" 姓名 : "<

<<" 出生日期 : "<

<<" 婚否 : "<

<<" 是否健在 : "<

if(person[i].live=='N'||person[i].live=='n')

cout<<" 死亡日期 : "<

cout<

:

"<

if(person[i].generation==1)

cout<<" 他是这个家的根,没有父亲"<

else

{

cout<<" 他(她)父亲的信息 : "<

cout<<" 姓名 : "<

<<" 出生日期 : "<

<<" 第几代 : "<

<<" 婚否 : "<

<<" 地址 :"<

<<" 是否健在 : "<

if(person[person[i].data].live=='N'||person[person[i].data].live=='n')

cout<<" 死亡日期 : "<

cout<

}

if(person[i].numberchild==0)

cout<<" 他没有孩子"<

else

{

cout<<" 他有"<

息 :"<

for(k=0;k

{

cout<<" 姓名 : "<

<<" 出生日期 : "<

<<" 第几代 : "<

<<" 婚否 : "<

<<" 地址 :"<

<<" 是否健在 : "<

if(person[person[i].child[k]].live=='N'||person[person[i].child[k]].live=='n')

cout<<" 死亡日期 : "<

cout<

}

}

}

}

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

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<

cout<<" 请你输入两个时间,格式为****/**/**!"<

cout<<" 起始时间是 : ";

e(begbir,20);

cout<<" 终止时间是 : ";

e(endbir,20);

cout<

for(i=0;i

{

if(strcmp(person[i].brith,begbir)>=0&&strcmp(person[i].brith,endbir)<=0)

{

cout<<" 姓名 : "<

cout<<" 生日 : "<

flag=1;

cout<

}

}

cout<

if(flag==0)

cout<<" 在这段时间内没有人生日"<

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

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("",ios::in|ios::out|ios::binary|ios::app);

cout<

cout<<" 请输入孩子的信息"<

cout<<" 姓名 : ";

e(person[n2].name,20);

cout<<" 生日(日期样式为xxxx/xx/xx) : ";

e(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<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否(输入Y或y或N或n) :";

cin>>person[n2].marry;

}

();

cout<<" 地址 : ";

e(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<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否(输入Y或y或N或n) :";

cin>>person[n2].live;

}

();

if(toupper(person[n2].live)=='N')

{

cout<<" 死亡日期(日期样式为xxxx/xx/xx) :";

e(person[n2].dietime,20);

}

cout<<" 属于第几代 : ";

cin>>person[n2].generation;

();

if(person[n2].generation!=1)

{

cout<<" 他(她)的父亲 : ";

e(person[n2].parent,20);

}

cout<

for(i=0;i

{

if(strcmp(person[n2].parent,person[i].name)==0)

{

person[n2].data=i;

break;

}

}

((char*)&person[n2],sizeof(person[n2]));

();

("",ios::in|ios::out|ios::binary);

(i*sizeof(per),ios::beg);

person[i].child[person[i].numberchild]=n2;

person[i].numberchild++;

((char*)&person[i],sizeof(per));

();

n2++;

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

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("",ios::in|ios::out|ios::binary);

cout<

cout<<" 请你输入你想修改的成员的名字 : ";

e(name,20);

cout<

for(i=0;i

{

if(strcmp(person[i].name,name)==0)

{

flag=1;

break;

}

}

if(flag==0)

cout<<" 家谱中没有这个人!!"<

if(flag==1)

{

cout<<"tt请你选择你要修改的项!!"<

cout<<"tt 1. 姓名"<

cout<<"tt 2. 地址"<

cout<<"tt 3. 婚否"<

cout<<"tt 4. 生日"<

cout<<"tt 5. 是否死亡"<

cout<<"tt 6. 死亡日期"<

cout<<"tt 请输入1-6之间的数"<

cout<<"tt 输入选择 : ";

cin>>choice;

while

(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6)

{

cout<<"you enter wrong!"<

cout<<"please enter again!"<

cin>>choice;

}

(1,'n');

switch(choice)

{

case 1: cout<

e(person[i].name,20);

// (i*sizeof(per),ios::beg);

// ((char*)&person[i],sizeof(per));

break;

case 2: cout<

e(person[i].address,20);

// (i*sizeof(per),ios::beg);

// ((char*)&person[i],sizeof(per));

break;

case 3: cout<

cin>>person[i].marry;

// (i*sizeof(per),ios::beg);

// ((char*)&person[i],sizeof(per));

break;

case 4: cout<

e(person[i].brith,20);

// (i*sizeof(per),ios::beg);

// ((char*)&person[i],sizeof(per));

break;

case 5: cout<

cin>>person[i].live;

// (i*sizeof(per),ios::beg);

// ((char*)&person[i],sizeof(per));

break;

case 6: cout<

e(person[i].dietime,20);

// (i*sizeof(per),ios::beg);

// ((char*)&person[i],sizeof(per));

break;

}

for(int j=0;j

((char*)&person[j],sizeof(per));

}

cout<

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

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<

for(i=0;i

for(j=i+1;j

{

if(strcmp(person[i].brith,person[j].brith)>=0)

{

person1=person[i];

person[i]=person[j];

person[j]=person1;

}

}

for(i=0;i

cout<<" 姓名 : "<

"<

cout<

cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<

cin>>again;

if(toupper(again)=='Y')

{

system("cls");

return;

}

if(toupper(again)=='N')

exit(0);

}


本文标签: 输入 继续 是否 查询 没有