收藏 分销(赏)

家谱标准管理系统的源代码.doc

上传人:天**** 文档编号:2999534 上传时间:2024-06-12 格式:DOC 页数:35 大小:48.54KB
下载 相关 举报
家谱标准管理系统的源代码.doc_第1页
第1页 / 共35页
家谱标准管理系统的源代码.doc_第2页
第2页 / 共35页
家谱标准管理系统的源代码.doc_第3页
第3页 / 共35页
家谱标准管理系统的源代码.doc_第4页
第4页 / 共35页
家谱标准管理系统的源代码.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、#include#include#include#includestruct 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;i20;i+)namei=0;for(i=0;i20;i+)brithi=0;for(i=0;i20;i+)addressi=0;for(i=0;i20;i+)dietimei=0;for(i=0

2、;i10;i+)childi=0;for(i=0;i20;i+)parenti=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 addchil

3、d(per person,int&); void editmember(per person,int&);void sortbirthday(per person,int&);void main()per person36;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(),读取字节函

4、数while(!inputFile.eof() /当文献没有读取完毕,进行循环if(personcount.name0!=0)/当名字不为空时count+; /记录人数inputFile.read(char*)(person+count),sizeof(*person);inputFile.close();/关闭文献if(count1) /如果家谱图里面没人cout 家谱不存在,请你建立一种家谱!endl;setupinfo(person);display(person,count);void setupinfo(per person36) /创立信息int i,j,k;fstream out

5、putfile(person.txt,ios:in|ios:out|ios:binary|ios:app); /打开文献for(i=0;i5;i+)cout 姓名 :;cin.getline(personi.name,20);cout 生日(日期样式为xxxx/xx/xx) :;cin.getline(personi.brith,20);coutpersoni.marry;while(toupper(personi.marry)!=Y&toupper(personi.marry)!=N)cout 你输入错误,请你重新输入!endl;coutpersoni.marry;cin.ignore();

6、cout 地址 :;cin.getline(personi.address,20);coutpersoni.live; /与否死亡while(toupper(personi.live)!=Y&toupper(personi.live)!=N)cout 你输入错误,请你重新输入!endl;coutpersoni.live;cin.ignore();if(toupper(personi.live)=N)cout 死亡日期(日期样式为xxxx/xx/xx) :;cin.getline(personi.dietime,20);/ 输入死亡日期coutpersoni.generation;cin.ign

7、ore();if(personi.generation!=1) /不是第一代cout 她(她)爸爸 :;cin.getline(personi.parent,20); /cin.getline是读取字符串函数 20是读取字符串个数coutendl;for(j=0;ji;j+)if(personj.generation=1)personj.data=-1; /*for(j=0;ji;j+)for(k=0;ki;k+)if(strcmp(personj.parent,personk.name)=0) /比较2个字符串与否相似,实质是找某个人爸爸personj.data=k;for(j=0;ji;j

8、+)for(k=0;ki;k+)if(strcmp(personj.parent,personk.name)=0)personk.childpersonk.numberchild=j;personk.numberchild+; /找某个人孩子for(j=0;ji;j+)outputfile.write(char*)(person+j),sizeof(*person); /写文献outputfile.close(); /关闭文献夹system(cls); void display(per person36,int &n1)int choice; while(1) /循环式始终进行 coutend

9、lendlendl;couttt 家族关系查询系统endl; couttt1. 显示家谱endl; couttt2. 显示第n代人所有信息endl; couttt3. 按照姓名查询某成员信息endl; couttt4. 按照出生日期查询成员名单endl;couttt5. 某成员添加孩子endl;couttt6. 修改某成员信息endl;couttt7. 按生日日期对家谱中所有人进行排序endl;couttt8. 退出系统endl; couttt 输入选取:endl; couttt 请输入1-8之间数choice; while (choice!=1&choice!=2&choice!=3&cho

10、ice!=4&choice!=5&choice!=6&choice!=7&choice!=8)coutyou enter wrong!endl;coutplease enter again!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

11、,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) /调用函数参数 传递是一种参数地址int i,j,max;char again;coutendlendl;for(i=0;in2-1;i+)max=personi.generation;for(j=i+1;jn2;j+)if(personi.generat

12、ionpersonj.generation)max=personj.generation; /找出最大代数for(i=1;i=max;i+)cout 第i代成员有 :;for(j=0;jn2;j+)if(personj.generation=i)coutpersonj.name ; /输出每一代人coutendl;coutendlendl;cout 你与否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y) /就是判断输入得与否为y或Ysystem(cls);return;if(toupper(again)=N)exit(0); /终结程序执行

13、void displayinfo(per person36,int &n2) /显示代数int i,gen,j=0;char again;coutendlendl;coutgen;coutendl; /换行for(i=0;in2;i+)if(personi.generation!=gen)j+;if(j=n2) /判断与否找到cout 你要查代数还没有!endlendl;for(i=0;in2;i+)if(personi.generation=gen)cout 姓名 :personi.nameendl 出生日期 :personi.brith 第几代 :personi.generationend

14、l 婚否 :personi.marry 地址 :personi.addressendl 与否健在 :personi.liveendl; if(personi.live=N|personi.live=n)cout 死亡日期 :personi.dietimeendl;coutendlendl;cout 你与否想继续查看?如果继续请输入Y或y,否则输入N或n!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;

15、char again,name20;coutendlendl;cout 请你输入你想要查询人姓名 :;cin.getline(name,20);for(i=0;in2;i+)if(strcmp(personi.name,name)!=0)j+;coutendlendl;if(j=n2)cout 你要查询人没有!endlendl;for(i=0;in2;i+)if(strcmp(personi.name,name)=0)cout 姓名 :personi.nameendl 出生日期 :personi.brith 第几代 :personi.generationendl 婚否 :personi.mar

16、ry 地址 :personi.addressendl 与否健在 :personi.liveendl; if(personi.live=N|personi.live=n)cout 死亡日期 :personi.dietimeendl;coutendlendl;if(personi.generation=1)cout 她是这个家根,没有爸爸!endlendl;elsecout 她(她)爸爸信息 :endl;cout 姓名 :personpersoni.data.nameendl 出生日期 :personpersoni.data.brith 第几代 :personpersoni.data.genera

17、tionendl 婚否 :personpersoni.data.marry 地址 :personpersoni.data.addressendl 与否健在 :personpersoni.data.liveendl;if(personpersoni.data.live=N|personpersoni.data.live=n)cout 死亡日期 :personpersoni.data.dietimeendl;coutendlendl;if(personi.numberchild=0)cout 她没有孩子!endlendl;elsecout 她有personi.numberchild个孩子,她们信息

18、 :endlendl;for(k=0;kpersoni.numberchild;k+)cout 姓名 :personpersoni.childk.nameendl 出生日期 :personpersoni.childk.brith 第几代 :personpersoni.childk.generationendl 婚否 :personpersoni.childk.marry 地址 :personpersoni.childk.addressendl 与否健在 :personpersoni.childk.live;if(personpersoni.childk.live=N|personpersoni

19、.childk.live=n)cout 死亡日期 :personpersoni.childk.dietimeendl;coutendlendl;cout 你与否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y)system(cls);return;if(toupper(again)=N)exit(0);void birtfdaysearch(per person36,int &n2) char begbir20,endbir20,again;int i,flag=0;coutendlendl;cout 请你输入两个时间,格式为*/*/*!en

20、dl;cout 起始时间是 :;cin.getline(begbir,20);cout 终结时间是 :;cin.getline(endbir,20);coutendlendl;for(i=0;i=0&strcmp(personi.brith,endbir)=0)cout 姓名 :personi.name;cout 生日 :personi.brith;flag=1;coutendl;coutendlendl;if(flag=0)cout 在这段时间内没有人生日!endlendl;cout 你与否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y)

21、system(cls);return;if(toupper(again)=N)exit(0);void addchild(per person36,int &n2) int i;char again;fstream file(person.txt,ios:in|ios:out|ios:binary|ios:app);coutendlendl;cout 请输入孩子信息!endlendlendl;cout 姓名 :;cin.getline(personn2.name,20);cout 生日(日期样式为xxxx/xx/xx) :;cin.getline(personn2.brith,20);cout

22、personn2.marry;while(toupper(personn2.marry)!=Y&toupper(personn2.marry)!=N)cout 你输入错误,请你重新输入!endl;coutpersonn2.marry;cin.ignore();cout 地址 :;cin.getline(personn2.address,20);coutpersonn2.live;while(toupper(personn2.live)!=Y&toupper(personn2.live)!=N)cout 你输入错误,请你重新输入!endl;coutpersonn2.live;cin.ignore

23、();if(toupper(personn2.live)=N)cout 死亡日期(日期样式为xxxx/xx/xx) :;cin.getline(personn2.dietime,20);coutpersonn2.generation;cin.ignore();if(personn2.generation!=1)cout 她(她)爸爸 :;cin.getline(personn2.parent,20);coutendl;for(i=0;in2;i+)if(strcmp(personn2.parent,personi.name)=0)personn2.data=i;break;file.write

24、(char*)&personn2,sizeof(personn2);file.close();file.open(person.txt,ios:in|ios:out|ios: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!again;if(toupper(again)=Y)

25、system(cls);return;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);coutendlendl;cout 请你输入你想修改成员名字 :;cin.getline(name,20);coutendlendl;for(i=0;in2;i+)if(strcmp(personi.name,name)=0)flag=1;break;i

26、f(flag=0)cout 家谱中没有这个人!endlendlendl;if(flag=1) couttt请你选取你要修改项!endl; couttt 1. 姓名endl; couttt 2. 地址endl; couttt 3. 婚否endl; couttt 4. 生日endl; couttt 5. 与否死亡endl; couttt 6. 死亡日期endl; couttt 请输入1-6之间数endl; coutchoice; while (choice!=1&choice!=2&choice!=3&choice!=4&choice!=5&choice!=6) coutyou enter wro

27、ng!endl; coutplease enter again!choice; cin.ignore(1,n); switch(choice) case 1:coutendl 请你输入新名字 :; cin.getline(personi.name,20);/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; case 2:coutendl 请输入新地址 :; cin.getline(personi.address,20);/ file.seekp(i*sizeof(per),ios:

28、beg);/ file.write(char*)&personi,sizeof(per);break; case 3:coutendlpersoni.marry;/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; case 4:coutendl 请你输入新生日 :; cin.getline(personi.brith,20);/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);bre

29、ak; case 5:coutendlpersoni.live;/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; case 6:coutendl 请你输入新死亡日期 :; cin.getline(personi.dietime,20);/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; for(int j=0;jn2;j+)file.write(char*)&pers

30、onj,sizeof(per);coutendlendl;cout 你与否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y)system(cls);return;if(toupper(again)=N)exit(0);void sortbirthday(per person36,int &n2)per person1;int i,j;char again;coutendlendl;for(i=0;in2-1;i+)for(j=i+1;j=0)person1=personi;personi=personj;personj=person1;for(i=0;in2;i+)cout 姓名 :personi.name 生日 :personi.brithendl;coutendlendl;cout 你与否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y)system(cls);return;if(toupper(again)=N)exit(0);

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服