




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include<iostream.h>#include<string.h>#include<fstream.h>#include<stdlib.h>struct perint data; char name20;char brith20;char marry;char address20;char live;char dietime20;char parent20;int generation;int child10;int numberchild;per()for(int i=0;i<20;i+)namei='0'for
2、(i=0;i<20;i+)brithi='0'for(i=0;i<20;i+)addressi='0'for(i=0;i<20;i+)dietimei='0'for(i=0;i<10;i+)childi=0;for(i=0;i<20;i+)parenti='0'live='0'marry='0'data=-10;generation=0;numberchild=0;void setupinfo(per person);void display(per person,in
3、t&);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
4、36;int count=0;fstream inputFile("person.txt",ios:in|ios:out|ios:binary);if(!inputFile) cout<<"文件不存在!"<<endl; exit(0);inputFile.read(char*)&personcount,sizeof(personcount);/从文件中读取指定大小的字节函数read(),读取字节函数while(!inputFile.eof() /当文件没有读取完毕,进行循环if(0!=
5、9;0')/当名字不为空时count+; /统计人数inputFile.read(char*)(person+count),sizeof(*person);inputFile.close();/关闭文件if(count<1) /如果家谱图里面没人cout<<" 家谱不存在,请你建立一个家谱!"<<endl;setupinfo(person);display(person,count);void setupinfo(per person36) /创建信息int i,j,k;fstream outputfile("person.t
6、xt",ios:in|ios:out|ios:binary|ios:app); /打开文件for(i=0;i<5;i+)cout<<" 姓名 : "cin.getline(,20);cout<<" 生日(日期样式为xxxx/xx/xx) : "cin.getline(personi.brith,20);cout<<" 婚否(输入Y或y或N或n) :"cin>>personi.marry;while(toupper(personi.marry)!=&
7、#39;Y'&&toupper(personi.marry)!='N')cout<<" 你输入错误,请你重新输入!"<<endl;cout<<" 婚否(输入Y或y或N或n) :" cin>>personi.marry;cin.ignore();cout<<" 地址 : "cin.getline(personi.address,20);cout<<" 是否健在(输入Y或y或N或n) :"cin>>
8、;personi.live; /是否死亡while(toupper(personi.live)!='Y'&&toupper(personi.live)!='N')cout<<" 你输入错误,请你重新输入!"<<endl;cout<<" 婚否(输入Y或y或N或n) :" cin>>personi.live;cin.ignore();if(toupper(personi.live)='N')cout<<" 死亡日期(日期样式为
9、xxxx/xx/xx) :"cin.getline(personi.dietime,20);/ 输入死亡日期cout<<" 属于第几代 : "cin>>personi.generation;cin.ignore();if(personi.generation!=1) /不是第一代cout<<" 他(她)的父亲 : "cin.getline(personi.parent,20); /cin.getline是读取字符串函数 20是读取字符串的个数cout<<endl;for(j=0;j<i;j+
10、)if(personj.generation=1)personj.data=-1; /*for(j=0;j<i;j+)for(k=0;k<i;k+)if(strcmp(personj.parent,)=0) /比较2个字符串是否相同,实质是找某个人的父亲personj.data=k;for(j=0;j<i;j+)for(k=0;k<i;k+)if(strcmp(personj.parent,)=0)personk.childpersonk.numberchild=j;personk.numberchild+; /找某个人的
11、孩子for(j=0;j<i;j+)outputfile.write(char*)(person+j),sizeof(*person); /写文件outputfile.close(); /关闭文件夹system("cls"); void display(per person36,int &n1)int choice; while(1) /循环式一直进行的 cout<<endl<<endl<<endl;cout<<"tt 家族关系查询系统"<<endl; cout<<&qu
12、ot;tt1. 显示家谱"<<endl; cout<<"tt2. 显示第n代人的所有信息"<<endl; cout<<"tt3. 按照姓名查询某成员的信息"<<endl; cout<<"tt4. 按照出生日期查询成员名单"<<endl;cout<<"tt5. 某成员添加孩子"<<endl;cout<<"tt6. 修改某成员信息"<<endl;cout<
13、;<"tt7. 按生日日期对家谱中的所有人进行排序"<<endl;cout<<"tt8. 退出系统"<<endl; cout<<"tt 输入选择:"<<endl; cout<<"tt 请输入1-8之间的数"<<endl; cin>>choice; while (choice!=1&&choice!=2&&choice!=3&&choice!=4&&ch
14、oice!=5&&choice!=6&&choice!=7&&choice!=8)cout<<"you enter wrong!"<<endl;cout<<"please enter again!"<<endl;cin>>choice; cin.ignore(1,'n'); /跳过一个字符,含义是忽略一行system("cls");switch(choice) case 1: displayhome(person
15、,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 person36,int &n2
16、) /调用函数的参数 传递的是一个参数地址int i,j,max;char again;cout<<endl<<endl;for(i=0;i<n2-1;i+)max=personi.generation;for(j=i+1;j<n2;j+)if(personi.generation<personj.generation)max=personj.generation; /找出最大的代数for(i=1;i<=max;i+)cout<<" 第"<<i<<"代的成员有 : "fo
17、r(j=0;j<n2;j+)if(personj.generation=i)cout<<<<" " /输出每一代的人cout<<endl;cout<<endl<<endl;cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;cin>>again;if(toupper(again)='Y') /就是判断输入得是否为y或Ysystem("cls");return;
18、if(toupper(again)='N')exit(0); /终止程序的执行void displayinfo(per person36,int &n2) /显示代数int i,gen,j=0;char again;cout<<endl<<endl;cout<<" 请你输入你要查询的代数 : "cin>>gen;cout<<endl; /换行for(i=0;i<n2;i+)if(personi.generation!=gen)j+;if(j=n2) /判断是否找到cout<<
19、;" 你要查的代数还没有!"<<endl<<endl;for(i=0;i<n2;i+)if(personi.generation=gen)cout<<" 姓名 : "<<<<endl<<" 出生日期 : "<<personi.brith<<" 第几代 : "<<personi.generation<<endl<<" 婚否 : "<
20、<personi.marry<<" 地址 :"<<personi.address<<endl<<" 是否健在 : "<<personi.live<<endl; if(personi.live='N'|personi.live='n')cout<<" 死亡日期 : "<<personi.dietime<<endl;cout<<endl<<endl;cout<<
21、;" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;cin>>again;if(toupper(again)='Y')system("cls");return;if(toupper(again)='N')exit(0);void namesearch(per person36,int &n2)int i,j=0,k;char again,name20;cout<<endl<<endl;cout<<" 请你输入你想要查询的
22、人的姓名 : "cin.getline(name,20);for(i=0;i<n2;i+)if(strcmp(,name)!=0)j+;cout<<endl<<endl;if(j=n2)cout<<" 你要查询的人没有!"<<endl<<endl;for(i=0;i<n2;i+)if(strcmp(,name)=0)cout<<" 姓名 : "<<<<endl<
23、<" 出生日期 : "<<personi.brith<<" 第几代 : "<<personi.generation<<endl<<" 婚否 : "<<personi.marry<<" 地址 :"<<personi.address<<endl<<" 是否健在 : "<<personi.live<<endl; if(personi.live='
24、N'|personi.live='n')cout<<" 死亡日期 : "<<personi.dietime<<endl;cout<<endl<<endl;if(personi.generation=1)cout<<" 他是这个家的根,没有父亲!"<<endl<<endl;elsecout<<" 他(她)父亲的信息 : "<<endl;cout<<" 姓名 : "
25、<<<<endl<<" 出生日期 : "<<personpersoni.data.brith<<" 第几代 : "<<personpersoni.data.generation<<endl<<" 婚否 : "<<personpersoni.data.marry<<" 地址 :"<<personpersoni.data.address<
26、<endl<<" 是否健在 : "<<personpersoni.data.live<<endl;if(personpersoni.data.live='N'|personpersoni.data.live='n')cout<<" 死亡日期 : "<<personpersoni.data.dietime<<endl;cout<<endl<<endl;if(personi.numberchild=0)cout<<
27、" 他没有孩子!"<<endl<<endl;elsecout<<" 他有"<<personi.numberchild<<"个孩子,他们的信息 :"<<endl<<endl;for(k=0;k<personi.numberchild;k+)cout<<" 姓名 : "<<<<endl<<" 出生日期 : "<
28、;<personpersoni.childk.brith<<" 第几代 : "<<personpersoni.childk.generation<<endl<<" 婚否 : "<<personpersoni.childk.marry<<" 地址 :"<<personpersoni.childk.address<<endl<<" 是否健在 : "<<personpersoni.childk.l
29、ive;if(personpersoni.childk.live='N'|personpersoni.childk.live='n')cout<<" 死亡日期 : "<<personpersoni.childk.dietime<<endl;cout<<endl<<endl;cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;cin>>again;if(toupper(again)='Y
30、')system("cls");return;if(toupper(again)='N')exit(0);void birtfdaysearch(per person36,int &n2) char begbir20,endbir20,again;int i,flag=0;cout<<endl<<endl;cout<<" 请你输入两个时间,格式为*/*/*!"<<endl;cout<<" 起始时间是 : "cin.getline(begbir,
31、20);cout<<" 终止时间是 : "cin.getline(endbir,20);cout<<endl<<endl;for(i=0;i<n2;i+)if(strcmp(personi.brith,begbir)>=0&&strcmp(personi.brith,endbir)<=0)cout<<" 姓名 : "<<;cout<<" 生日 : "<<personi.brith;flag=1;
32、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);
33、void addchild(per person36,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(,20);cout<<
34、" 生日(日期样式为xxxx/xx/xx) : "cin.getline(personn2.brith,20);cout<<" 婚否(输入Y或y或N或n) :"cin>>personn2.marry;while(toupper(personn2.marry)!='Y'&&toupper(personn2.marry)!='N')cout<<" 你输入错误,请你重新输入!"<<endl;cout<<" 婚否(输入Y或y或
35、N或n) :" cin>>personn2.marry;cin.ignore();cout<<" 地址 : "cin.getline(personn2.address,20);cout<<" 是否健在(输入Y或y或N或n) :"cin>>personn2.live;while(toupper(personn2.live)!='Y'&&toupper(personn2.live)!='N')cout<<" 你输入错误,请你重新输入
36、!"<<endl;cout<<" 婚否(输入Y或y或N或n) :"cin>>personn2.live;cin.ignore();if(toupper(personn2.live)='N')cout<<" 死亡日期(日期样式为xxxx/xx/xx) :"cin.getline(personn2.dietime,20);cout<<" 属于第几代 : "cin>>personn2.generation;cin.ignore();if(per
37、sonn2.generation!=1)cout<<" 他(她)的父亲 : "cin.getline(personn2.parent,20);cout<<endl;for(i=0;i<n2;i+)if(strcmp(personn2.parent,)=0)personn2.data=i;break;file.write(char*)&personn2,sizeof(personn2);file.close();file.open("person.txt",ios:in|ios:out|ios:
38、binary);file.seekp(i*sizeof(per),ios:beg);personi.childpersoni.numberchild=n2;personi.numberchild+;file.write(char*)&personi,sizeof(per);file.close();n2+;cout<<" 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!"<<endl;cin>>again;if(toupper(again)='Y')system("cls");retur
39、n;if(toupper(again)='N')exit(0);void editmember(per person36,int &n2)int i,flag=0,choice;char name20,again;fstream file("person.txt",ios:in|ios:out|ios:binary);cout<<endl<<endl;cout<<" 请你输入你想修改的成员的名字 : "cin.getline(name,20);cout<<endl<<en
40、dl;for(i=0;i<n2;i+)if(strcmp(,name)=0)flag=1;break;if(flag=0)cout<<" 家谱中没有这个人!"<<endl<<endl<<endl;if(flag=1) cout<<"tt请你选择你要修改的项!"<<endl; cout<<"tt 1. 姓名"<<endl; cout<<"tt 2. 地址"<<endl;
41、 cout<<"tt 3. 婚否"<<endl; cout<<"tt 4. 生日"<<endl; cout<<"tt 5. 是否死亡"<<endl; cout<<"tt 6. 死亡日期"<<endl; cout<<"tt 请输入1-6之间的数"<<endl; cout<<"tt 输入选择 : " cin>>choice; while
42、(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<<e
43、ndl<<" 请你输入新名字 : " cin.getline(,20);/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; case 2: cout<<endl<<" 请输入新的地址 : " cin.getline(personi.address,20);/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; case 3: cout<<endl<<" 请你输入新的是否结婚 : " cin>>personi.marry;/ file.seekp(i*s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030花生油市场行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030皮革行业投资机会及风险投资运作模式研究报告
- 2025-2030滴眼液市场发展现状调查及供需格局分析预测研究报告
- 2025-2030混凝土市场发展分析及行业投资战略研究报告
- 2025-2030智能吸尘器市场市场现状供需分析及投资评估规划分析研究报告
- 内蒙古名校联盟2023-2024学年高二下学期期中联考历史试题(解析版)
- N供电公司的绩效管理体系优化研究
- 浙江强基联盟2024-2025学年高二下学期3月联考卷物理试题2
- 超声MV-Flow技术联合血清学指标对妊高症发生的预测价值
- 基于海藻渣资源的多孔炭制备及其电化学性能研究
- 2025年公开招聘卫生系统工作人员历年管理单位笔试遴选500模拟题附带答案详解
- 智能垃圾桶产品介绍
- 2025深圳劳动合同下载
- 建筑工地住房安全协议书(2篇)
- 【MOOC】中医与辨证-暨南大学 中国大学慕课MOOC答案
- 设备稼动率分析报告
- 湖北省襄阳市2024年中考数学试题(含解析)
- 2024年上海市交大附中高三语文期中考试作文题目解析及范文:松弛感
- 婚恋-职场-人格学习通超星期末考试答案章节答案2024年
- 装卸搬运合同书
- 《2.1.2椭圆的简单几何性质》作业设计方案
评论
0/150
提交评论