家谱管理系统的源代码Word格式文档下载.docx
《家谱管理系统的源代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《家谱管理系统的源代码Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
data=-10;
generation=0;
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.txt"
ios:
:
in|ios:
out|ios:
binary);
if(!
inputFile)
{
cout<
<
"
文件不存在!
endl;
exit(0);
inputFile.read((char*)&
person[count],sizeof(person[count]));
//从文件中读取指定大小的字节函数read(),读取字节函数
while(!
inputFile.eof())//当文件没有读取完毕,进行循环
if(person[count].name[0]!
='
)//当名字不为空时
{
count++;
//统计人数
inputFile.read((char*)(person+count),sizeof(*person));
}
inputFile.close();
//关闭文件
if(count<
1)//如果家谱图里面没人
cout<
家谱不存在,请你建立一个家谱!
!
setupinfo(person);
display(person,count);
}
voidsetupinfo(perperson[36])//创建信息
inti,j,k;
fstreamoutputfile("
binary|ios:
app);
//打开文件
for(i=0;
5;
姓名:
"
cin.getline(person[i].name,20);
生日(日期样式为xxxx/xx/xx):
cin.getline(person[i].brith,20);
婚否(输入Y或y或N或n):
cin>
>
person[i].marry;
while(toupper(person[i].marry)!
Y'
&
toupper(person[i].marry)!
N'
)
cout<
你输入错误,请你重新输入!
cin.ignore();
地址:
cin.getline(person[i].address,20);
是否健在(输入Y或y或N或n):
person[i].live;
//是否死亡
while(toupper(person[i].live)!
toupper(person[i].live)!
if(toupper(person[i].live)=='
死亡日期(日期样式为xxxx/xx/xx):
cin.getline(person[i].dietime,20);
//输入死亡日期
属于第几代:
person[i].generation;
if(person[i].generation!
=1)//不是第一代
他(她)的父亲:
cin.getline(person[i].parent,20);
//cin.getline是读取字符串函数20是读取字符串的个数
for(j=0;
j<
i;
j++)
if(person[j].generation==1)
person[j].data=-1;
//****************************
for(k=0;
k<
k++)
if(strcmp(person[j].parent,person[k].name)==0)//比较2个字符串是否相同,实质是找某个人的父亲
person[j].data=k;
if(strcmp(person[j].parent,person[k].name)==0)
{
person[k].child[person[k].numberchild]=j;
person[k].numberchild++;
//找某个人的孩子
}
outputfile.write((char*)(person+j),sizeof(*person));
//写文件
outputfile.close();
//关闭文件夹
system("
cls"
voiddisplay(perperson[36],int&
n1)
intchoice;
while
(1)//循环式一直进行的
{
endl<
\t\t家族关系查询系统"
\t\t1.显示家谱"
\t\t2.显示第n代人的所有信息"
\t\t3.按照姓名查询某成员的信息"
\t\t4.按照出生日期查询成员名单"
\t\t5.某成员添加孩子"
\t\t6.修改某成员信息"
\t\t7.按生日日期对家谱中的所有人进行排序"
\t\t8.退出系统"
\t\t输入选择:
\t\t请输入1-8之间的数"
cin>
choice;
while(choice!
=1&
choice!
=2&
=3&
=4&
=5&
=6&
=7
&
=8)
youenterwrong!
pleaseenteragain!
cin>
cin.ignore(1,'
\n'
//跳过一个字符,含义是忽略一行
system("
switch(choice)
case1:
displayhome(person,n1);
break;
case2:
displayinfo(person,n1);
case3:
namesearch(person,n1);
case4:
birtfdaysearch(person,n1);
case5:
addchild(person,n1);
case6:
editmember(person,n1);
case7:
sortbirthday(person,n1);
case8:
voiddisplayhome(perperson[36],int&
n2)//调用函数的参数传递的是一个参数地址
inti,j,max;
charagain;
n2-1;
max=person[i].generation;
for(j=i+1;
n2;
if(person[i].generation<
person[j].generation)
max=person[j].generation;
//找出最大的代数
for(i=1;
=max;
第"
代的成员有:
for(j=0;
if(person[j].generation==i)
cout<
person[j].name<
//输出每一代的人
你是否想继续查看?
如果继续请输入Y或y,否则输入N或n!
again;
if(toupper(again)=='
)//就是判断输入得是否为y或Y
return;
exit(0);
//终止程序的执行
voiddisplayinfo(perperson[36],int&
n2)//显示代数
inti,gen,j=0;
请你输入你要查询的代数:
gen;
//换行
=gen)
j++;
if(j==n2)//判断是否找到
你要查的代数还没有!
if(person[i].generation==gen)
person[i].name<
endl
<
出生日期:
person[i].brith<
第几代:
person[i].generation<
婚否:
person[i].marry<
person[i].address<
是否健在:
person[i].live<
if(person[i].live=='
||person[i].live=='
n'
死亡日期:
person[i].dietime<
voidnamesearch(perperson[36],int&
n2)
inti,j=0,k;
charagain,name[20];
请你输入你想要查询的人的姓名:
cin.getline(name,20);
if(strcmp(person[i].name,name)!
=0)
if(j==n2)
你要查询的人没有!
if(strcmp(person[i].name,name)==0)
if(person[i].generation==1)
他是这个家的根,没有父亲!
else
他(她)父亲的信息:
person[person[i].data].name<
<
person[person[i].data].brith
person[person[i].data].generation<
person[person[i].data].marry
person[person[i].data].address<
person[person[i].data].live<
if(person[person[i].data].live=='
||person[person[i].data].live=='
cout<
person[person[i].data].dietime<
if(person[i].numberchild==0)
他没有孩子!
他有"
person[i].numberchild<
个孩子,他们的信息:
for(k=0;
person[i].numberchild;
{
person[person[i].child[k]].name<
<
person[person[i].child[k]].brith
person[person[i].child[k]].generation<
person[person[i].child[k]].marry
person[person[i].child[k]].address<
person[person[i].child[k]].live;
if(person[person[i].child[k]].live=='
||person[person[i].child[k]].live=='
cout<
person[person[i].child[k]].dietime<
}
voidbirtfdaysearch(perperson[36],int&
n2)
charbegbir[20],endbir[20],again;
inti,flag=0;
请你输入两个时间,格式为****/**/**!
起始时间是:
cin.getline(begbir,20);
终止时间是:
cin.getline(endbir,20);
if(strcmp(person[i].brith,begbir)>
=0&
strcmp(person[i].brith,endbir)<
person[i].name;
生日:
person[i].brith;
flag=1;
if(flag==0)
在这段时间内没有人生日!
voidaddchild(perperson[36],int&
inti;
fstreamfile("
请输入孩子的信息!
cin.getline(person[n2].name,20);
cin.getline(person[n2].brith,20);
person[n2].marry;
while(toupper(person[n2].marry)!
toupper(person[n2].marry)!
cin.ignore();
cin.getline(person[n2].address,20);
person[n2].live;
while(toupper(person[n2].live)!
toupper(person[n2].live)!
if(toupper(person[n2].live)=='
cin.getline(person[n