收藏 分销(赏)

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

上传人:a199****6536 文档编号:2401336 上传时间:2024-05-29 格式:DOC 页数:43 大小:61.50KB
下载 相关 举报
家谱管理系统的源代码.doc_第1页
第1页 / 共43页
家谱管理系统的源代码.doc_第2页
第2页 / 共43页
家谱管理系统的源代码.doc_第3页
第3页 / 共43页
家谱管理系统的源代码.doc_第4页
第4页 / 共43页
家谱管理系统的源代码.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

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=

2、0;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 ad

3、dchild(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;fstr

5、eam outputfile(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.

6、ignore();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.generati

7、on;cin.ignore();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=

8、k;for(j=0;ji;j+)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) /

9、循环式一直进行的 coutendlendlendl;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&cho

10、ice!=2&choice!=3&choice!=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;cas

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

12、;for(j=i+1;jn2;j+)if(personi.generationpersonj.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);ret

13、urn;if(toupper(again)=N)exit(0); /终止程序的执行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 出生日

14、期 : personi.brith 第几代 : personi.generationendl 婚否 : 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);v

15、oid namesearch(per person36,int &n2)int i,j=0,k;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 出生日期 : per

16、soni.brith 第几代 : personi.generationendl 婚否 : personi.marry 地址 :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

17、 出生日期 : personpersoni.data.brith 第几代 : personpersoni.data.generationendl 婚否 : 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.numbe

18、rchild=0)cout 他没有孩子!endlendl;elsecout 他有personi.numberchild个孩子,他们的信息 :endlendl;for(k=0;kpersoni.numberchild;k+)cout 姓名 : personpersoni.childk.nameendl 出生日期 : personpersoni.childk.brith 第几代 : personpersoni.childk.generationendl 婚否 : personpersoni.childk.marry 地址 :personpersoni.childk.addressendl 是否健在

19、 : personpersoni.childk.live;if(personpersoni.childk.live=N|personpersoni.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 b

20、egbir20,endbir20,again;int i,flag=0;coutendlendl;cout 请你输入两个时间,格式为*/*/*!endl;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 在这

21、段时间内没有人生日!endlendl;cout 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y)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(

22、personn2.name,20);cout 生日(日期样式为xxxx/xx/xx) : ;cin.getline(personn2.brith,20);coutpersonn2.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

23、)!=Y&toupper(personn2.live)!=N)cout 你输入错误,请你重新输入!endl;coutpersonn2.live;cin.ignore();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

24、=0;in2;i+)if(strcmp(personn2.parent,personi.name)=0)personn2.data=i;break;file.write(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,size

25、of(per);file.close();n2+;cout 你是否想继续查看?如果继续请输入Y或y,否则输入N或n!again;if(toupper(again)=Y)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.get

26、line(name,20);coutendlendl;for(i=0;in2;i+)if(strcmp(personi.name,name)=0)flag=1;break;if(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; coutchoi

27、ce; while (choice!=1&choice!=2&choice!=3&choice!=4&choice!=5&choice!=6) coutyou enter wrong!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

28、; case 2: coutendl 请输入新的地址 : ; cin.getline(personi.address,20);/ file.seekp(i*sizeof(per),ios: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

29、(personi.brith,20);/ file.seekp(i*sizeof(per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; 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(

30、per),ios:beg);/ file.write(char*)&personi,sizeof(per);break; for(int j=0;jn2;j+)file.write(char*)&personj,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

31、 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);THANKS !致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考-可编辑修改-

展开阅读全文
相似文档                                   自信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 

客服