版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include<iostreamoh)
#include<stringoh)
#include(fstreamoh>
#include(stdlib.h>
structper{
intdata;
charname[20];
charbrith[20];
charmarry;
charaddress[20];
charlive;
chardietime[20];
charparent[20];
intgeneration;
intchild[10];
intnumberchild;
per(){
for(inti=0;i<20;i++)
name[i]
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=9\0!;
data=-10;
generation4;
numberchild=0;
)
};
voidsetupinfo(perperson[]);
voiddisplay(perperson[],int&);
voiddisplayhome(perperson[],int&);
voiddisplayinfo(perperson[],int&);
voidnamesearch(perperson[],int&);
voidbirtfdaysearch(perperson[],int&);
voidaddchild(perperson[],int&);
voideditmember(perperson[],int&);
voidsortbirthday(perperson[],int&);
voidmain()
{
perperson[36];
intcount=0;
fstreaminputFile("person.txtn,ios::inI
ios::out|ios::binary);
if(!inputFile)
{
cout〈〈”文件不存在!"(<endl;
exit(0);
}
inputFileoread((char*)&person[count],
sizeof(person[count]));〃从文件中读取指
定大小的字节函数read。,读取字节函数
while(!inputFile.eof())〃当文件没
有读取完毕,进行循环
(
if(person[count]□name[0]!='\0f)//
当名字不为空时
count++;〃统计人数
inputFile.read((char*)(person+count),
sizeof(*person));
}
}
inputFile.close();〃关闭文件
if(count<1)〃如果家谱图里面没人
{
cout<<"家谱不存在,请你建
立一个家谱!!"<<endl;
setupinfo(person);
)
display(person,count);
}
voidsetupinfo(perperson[36])〃仓ll建信
息
inti,j,k;
fstreamoutputfile("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]0brith,20);
cout«"婚否(输入Y或y或N或
n):";
cin〉〉person[i]omarry;
while(toupper(person[i].marry)!
1
Y&&toupper(person[i]omarry)!='N')
(
cout«w你输入错误,请你重
新输入!!"V<endl;
cout〈<”婚否(输入Y或y或N
或n):";
cin?)person[i].marry;
)
cin.ignore();
cout<〈”地址:n;
cin.getline(person[i].address,20);
cout<<"是否健在(输入Y或y或N
或n):";
cin>)person[i].live;〃是否死亡
while(toupper(person[i]olive)!=’
Y'&&toupper(person[i]0live)!=,N')
{
cout(<"你输入错误,请你重
新输入!!"〈〈endl;
cout(<"婚否(输入Y或y或N或
n):";
cin>)person[i]olive;
)
cin.ignoreO;
if(toupper(person[i]olive)=='N')
{
cout<〈”死亡日期(日期样式为
xxxx/xx/xx):n;
cinogetline(person[i].dietime,20);
//输入死亡日期
}
cout«"属于第几代:”;
cin〉〉person[i]ogeneration;
cinoignore();
if(person[i].generational)〃不是
第一代
cout<〈”他(她)的父亲:”;
cinogetline(person[i].parent,20);
//cin.getline是读取字符串函数20是读取
字符串的个数
}
cout〈〈endl;
}
for(j=0;j<i;j++)
{
if(person[j]。generation==1)
person[j]。data=-1;〃****
******:k***************
**
}
for(j=O;j<i;j++)
{
for(k=0;k<i;k++)
{
if(strcmp(person[j]oparent,person[k]。
name)==0)〃比较2个字符串是否相同,实
质是找某个人的父亲
person[j]0data=k;
}
}
for(j=O;j<i;j++)
(
for(k=0;k〈i;k++)
{
if(strcmp(person[j].parent,person
[k]oname)-0)
(
person[k]。child[person[k]。
numberchild]=j;
person[k]onumberchild++;//
找某个人的孩子
}
}
}
for(j=0;j<i;j++)
outputfileowrite((char*)(person+j),
sizeof(*person));〃写文件
outputfile.close();〃关闭文件夹
system("cls");
voiddisplay(perperson[36],int&nl)
intchoice;
while(1)〃循环式一直进行的
cout<\endl\(endl\\endl;
cout<〈”\t\t家族关系查询系统
n<<endl;
….cout〈〈”\t\tl.・显示家谱”〈Vendl;
cout((n\t\t2o显示第n代人的
所有信息"〈vendl;
cout«”\t\t3o按照姓名查询某成
员的信息”〈〈endl;
cout<〈”\t\t4。按照出生日期查询
成员名单”<<endl;
cout〈〈”\t\t5o某成员添加孩子”
(<endl;
cout〈v"\t\t6..修改某成员信息”<(endl;
cout<〈”\t\t7..按生日日期对家谱中的所
有人进行排序"〈<endl;
cout«”\t\t8..退出系统”<〈endl;
cout<(n\t\t输入选择:"〈〈endl;
cout〈〈”\t\t请输入1一8之间
的数”<<endl;
cin))choice;
while(choice!=1&&choice!=2&
&choice!=3&&choice!=4&&choice!=5&
&choice!=6&&choice!=7
&&choice!=8)
{
cout(〈*youenterwrong!n〈<endl;
cout<(npleaseenteragain!”<(endl;
cin))choice;
}
cin。ignore(1,\n');〃跳过
一个字符,含义是忽略一行
system("cis”);
switch(choice)
{
case1:displayhome(personal);
break;
case2:displayinfo
(personal);break;
case3:
namesearch(person,n1);break;
case4:birtfdaysearch(person,nl);
break;
case5:addchild(person,n1);break;
case6:editmember(person,nl);
break;
case7:sortbirthday(person,nl);
break;
case8:exit(0);
}
}
)
voiddisplayhome(perperson[36],int&n2)
〃调用函数的参数传递的是一个参数地址
(
inti,j,max;
charagain:
cout«endl<(endl;
for(i=0;i〈n2—1;i++)
max二person[i]ogeneration;
for(j=i+l;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]0name«"";//
输出每一代的人
)
cout(<endl;
)
cout<(endl<(endl;
cout<<"你是否想继续查看?如果继
续请输入Y或y,否则输入N或n!”Gendl;
cin))again;
if(toupper(again)二二'Y')〃就是判
断输入得是否为y或Y
(
system("cis”);
return;
}
if(toupper(again)==N)
exit(0);〃终止程序的执行
)
voiddisplayinfo(perperson[36],int&n2)
〃显示代数
(
inti,genj=0;
charagain;
cout«endl«endl;
cout<〈"请你输入你要查询的代
数:”;
cin)>gen;
cout((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]]ive
〈〈endl;
if(person[i]。live=='N'II
person[i].live==,n,)
cout<〈”死亡日期:”
((person[i]odietime((endl;
cout(<endl((endl;
}
}
cout<<"你是否想继续查看?如果
继续请输入Y或y,否则输入N或n!”
(<endl;
cin〉〉again;
if(toupper(again)==Y)
(
system("cis”);
return;
)
if(toupper(again)==N)
exit(0);
)
voidnamesearch(perperson[36],int&n2)
{
inti,j=0,k;
charagain,name[20];
cout<(endl((endl;
cout〈〈”请你输入你想要查询的人的
姓名:”;
cinogetline(name,20);
for(i=0;i(n2;i++)
(
if(strcmp(person[i]oname,name)!=0)
j++;
}
cout(<endl(<endl;
if(j==n2)
cout<〈”你要查询的人没有!!!
n«endl(<endl;
for(i=0;i〈n2;i++)
{
if(strcmp(person[i]0name,name)=0)
{
cout〈<“姓名:"«person
[i].name((endl
(<"出生日期:"«person[i]o
brith〈<"第几代:“〈〈person[i]o
generation((endl
<〈"‘婚否:"〈<person
[i].marry«n地址:”«person[i]。
address((endl
<〈”是否健在:"〈〈person[i]。
live«endl;
if(person[i]°live==NI[person[i]。
live==,n,)
cout(("死亡日期:“〈〈person
[i].dietime((endl;
cout<(endl(<endl;
if(person[i]ogeneration==l)
cout〈〈”他是这个家的根,没有
父亲!!!!(<endl«endl;
else
cout<〈”他(她)父亲的
信息:"<<endl;
cout〈〈"姓名:"<(person
[person[i]。data].name(〈endl
<〈”出生日期:(person
[person[i]odata]obrith
<<n第几代:”
«person[person[i]odata].generation((endl
〈<“婚否:"
((person[person[i]odata]□marry
〈〈”地址:”<
(person[person[i].data].address<(endl
<〈”是否健在:“〈〈person
[person[i]odata].live<<endl;
if(person[person[i]odata]。
live=='N[Iperson[person[i]。data]。
live=='n')
cout<〈”死亡日期:”<
(person[person[i].data]odietime(<endl;
cout((endl«endl;
}
if(person[i]onumberchild==O)
cout〈<”他没有孩子!!!”
<(endl(<endl;
else
{
cout<〈"他有"〈〈person[i]。
numberchild〈〈”个孩子,他们的信息:”
((endl«endl;
for(k=0;k<person[i]onumberchild;
k++)
cout〈〈"姓名:”<(person
[person[i]ochild[k]]oname<(endl
<<"出生日期:
n«person[person[i]。child[k]].brith
<<"第几代:"〈〈person
[person[i].child[k]].generation(<endl
〈〈"婚否:"((person
[person[i]ochild[k]]omarry
〈<”地址:"
〈〈person[person[i]。child[k]]oaddress
(<endl
<〈”是否健在:”
(<person[person[i]0child[k]]olive;
if(person[person[i]ochild[k]]o
live==NIIperson[person[i]ochild
[k]].live='n')
cout<〈”死亡日期:”
(<person[person[i]ochild[k]]odietime
(<endl;
cout<(endl<(endl;
}
cout«"你是否想继续查看?如果
继续请输入Y或y,否则输入N或n!”〈〈endl;
cin))again;
if(toupper(again)==5Y9)
(
system("cis");
return;
)
if(toupper(again)=='N')
exit(O);
)
voidbirtfdaysearch(perperson[36],int&n2)
{
charbegbir[20],endbir[20],again;
inti,flag=O;
cout((endl<(endl;
cout〈<”请你输入两个时间,格式
为****/**/**!”(<endl;
cout〈〈”起始时间是:”;
cinogetline(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]obrith,endbir)(=0)
(
cout〈〈"姓名:"«person
[i].name;
cout<<"生日:"〈〈person[i]。
brith;
flag=l;
cout<(endl;
)
)
cout<(endl<(endl;
if(flag==0)
cout〈〈”在这段时间内没有人
生日!!!”((endl<<endl;
cout<〈"你是否想继续查看?如果继
续请输入Y或y,否则输入N或n!”<<endl;
cin))again;
if(toupper(again)==Y)
(
system(“cis");
return;
}
if(toupper(again)==N)
exit(0);
}
voidaddchild(perperson[36],int&n2)
{
inti;
charagain:
fstreamfile("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):
ft
9
cinogetline(person[n2]0brith,20);
cout<〈”婚否(输入Y或y或N或n):;
cin»person[n2].marry;
while(toupper(person[n2]omarry)!=,Y,
&&toupper(person[n2]omarry)!='N')
{
cout«"你输入错误,请你重新
输入!!"<<endl;
cout<<"婚否(输入Y或y或N或n):
cin〉〉person[n2].marry;
}
cinoignore();
cout〈<”地址:
cin.getline(person[n2]oaddress,20);
cout<<"是否健在(输入Y或y或N或
n):";
cin»person[n2]olive;
while(toupper(person[n2]olive)!='Y'
&&toupper(person[n2]olive)!=’N')
cout〈〈"你输入错误,请你重
新输入!!"<<endl;
cout<<"婚否(输入Y或y或N或n):
»».
cin»person[n2].live;
)
cinoignore();
if(toupper(person[n2][ive)=='N')
{
cout〈<”死亡日期(日期样式为
xxxx/xx/xx):";
cin.getline(person[n2]odietime,20);
)
cout<<"属于第几代:”;
cin)>person[n2]ogeneration;
cin.ignore();
if(person[n2]ogeneration!=l)
{
cout<<"他(她)的父亲:”;
cinogetline(person[n2]oparent,20);
cout((endl;
for(i=0;i(n2;i++)
{
if(strcmp(person[n2]。parent,person[i]o
name)==0)
(
person[n2].data=i;
break;
)
)
fileowrite((char)&person[n2],sizeof
(person[n2]));
file.close();
file.open("person.txtn,ios::inIios::outI
ios::binary);
fileoseekp(i*sizeof(per),ios::beg);
person[i]。child[person1]。numberchild]
=n2;
person[i]onumberchild++;
file.write((char*)&person[i],sizeof
(per));
file.close();
n2++;
cout<<"你是否想继续查看?如果继
续请输入Y或y,否则输入N或n!"<<endl;
cin)>again;
if(toupper(again)==Y)
(
systemC'cls");
return;
}
if(toupper(again)=='N,)
exit(O);
}
voideditmember(perperson[36],int&n2)
{
inti,flag=0,choice;
charname[20],again;
fstreamfile("person。txt”,ios::in|ios::
outIios::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=l;
break;
}
}
if(flag=0)
cout<<"家谱中没有这个人!!”
<(endl(<endl(<endl;
if(flag==l)
{
cout〈<"\t\t请你选择你要修改的
项!!"〈〈endl;
.cout<〈”\t\.L.姓名"〈〈endl;
.cout〈<"\l\.2..地址“〈〈endl;
cout«"\t\t3o婚否"〈<endl;
cout(<"\t\t4o生日”〈〈endl;
cout<("\t\t5o是否死亡”<(endl;
.cout〈〈”\t\.6..死亡日期"<<endl;
cout<<n\t\t请输入1-6之间的数”
(<endl;
cout<<"\t\t输入选择:
cin))choice;
while(choice!=1&&choice!=2&
&choice!=3&&choice!=4&&choice!
=5&&choice!=6)
(
cout<〈"youenterwrong!n〈〈endl;
cout«”pleaseenteragain!”〈<endl;
cin))choice;
)
cin.ignore(l,'");
switch(choice)
(
case1:cout(<endl<〈”请你
输入新名字:
cinogetline(person[i]oname,20);
//file.seekp(i*sizeof(per),ios::
beg);
//fileowrite((char*)&person
[i],sizeof(per));
break;
case2:cout(<endl〈〈”请输
入新的地址:”;
cinogetlineCperson[i]。address,20);
//fileoseekp(i*sizeof(per),ios::beg);
//file.write((char*)&person[i],
sizeof(per));
break;
case3:cout((endl〈〈”请你
输入新的是否结婚:”;
cin»person[i]omarry;
//fileoseekp(i*sizeof(per),ios::
beg);
//fileowrite((char*)&person]],
sizeof(per));
break;
case4:cout«endl«r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 区残联平安建设工作方案
- 校交通安全管理制度
- 顶管机与暗挖法联合施工方案
- 动火作业现场安全操作规范修订与实施方案
- 幼儿园午睡管理规范执行情况研究-基于幼儿园一日生活流程观察数据分析研究
- 寄宿生伙食实施方案
- 自动化管片拼装线体集成方案
- 护患沟通在儿科护理中的应用
- 单片机温湿度系统评估课程设计
- ue课程设计师培训
- 检验科尿微量白蛋白标准操作规程
- 水利水电工程设计工程量计算规定
- 2023年技术经纪人初级考试题目
- GB/T 26480-2011阀门的检验和试验
- GB/T 13277.3-2015压缩空气第3部分:湿度测量方法
- 多层钢结构施工方案设计
- GA/T 508-2014道路交通信号倒计时显示器
- 冠状动脉粥样硬化性心脏病lxf课件
- 世界中世纪史第五讲-十字军东征课件
- 围挡结构抗台风稳定性计算书
- 交管12123驾照学法减分题库200题(含答案完整版)
评论
0/150
提交评论