家谱管理系统的源代码_第1页
家谱管理系统的源代码_第2页
家谱管理系统的源代码_第3页
家谱管理系统的源代码_第4页
家谱管理系统的源代码_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论