资源描述
婚姻介绍所系统
婚姻介绍所系统,男士信息(姓名,身高,职业,出生日期,工作时间,年龄);女士信息(姓名,身高,职业,出生日期,工作时间,年龄)
功能要求:
1. 设计一个People类,由People派生一个Man类和一个Woman类;
2. 设计构造函数初始化数据;
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#define maxsize 100
fstream iofile;
class Time
{
public:
int year;
int month;
int day;
};
class Telem
{
public:
char name[20];
Time birthtime;
char num[20];
char career[20];
char character[20];
Time worktime;
int year;
friend istream& operator>>(istream& input,Telem& T);
friend ostream& operator<<(ostream& output,Telem& T);
friend int operator-(Time & t1,Time & t2);
};
class People
{
public:
People();
virtual void AddF()=0;
virtual void Addall()=0;
virtual void Add()=0;
virtual void Display();
virtual void Displaypart(char p[]);
virtual void Findname(char n[]);
virtual void Findyear(int );
virtual void Character();
virtual void Del(char n[])=0;
virtual void Del(int );
protected:
Telem data[maxsize];
Time now;
int length;
};
3. 使用多态输出各个派生类的数据;
class Man:virtual public People
{
public:
virtual void AddF();
virtual void Addall();
virtual void Add();
virtual void Display();
virtual void Character();
virtual void Del(int i);
virtual void Del(char n[]);
virtual void Findyear(int );
};
class Woman:virtual public People
{
public:
virtual void AddF();
virtual void Addall();
virtual void Add();
virtual void Display();
virtual void Character();
virtual void Del(int i);
virtual void Del(char n[]);
virtual void Findyear(int );
};
People::People()
{
length=0;
now.year=2009;
now.month=5;
now.day=26;
}
void People::Display()
{
int i;
for(i=0;i<length;i++)
cout<<data[i];
}
void People::Displaypart(char p[])
{
int i,c;
for(i=0;i<length;i++)
if(strcmp(data[i].career,p)==0)
{
cout<<"输出选择姓名1 身高2 职业3 出生日期4 工作时间5 年龄6 退出选择7"<<endl;
while(cin>>c)
{
switch(c)
{
case 1: cout<<"姓名:"<<data[i].name<<endl;break;
case 2: cout<<"身高:"<<data[i].num<<endl;break;
case 3: cout<<"职业:"<<data[i].career<<endl;break;
case 4: cout<<"出生日期:"<<data[i].birthtime.year<<" "<<data[i].birthtime.month<<" "<<data[i].birthtime.day<<" "<<endl;break;
case 5: cout<<"工作时间:"<<data[i].worktime.year<<" "<<data[i].worktime.month<<" "<<data[i].worktime.day<<" "<<endl;break;
case 6: cout<<"年龄:"<<data[i].year<<endl;break;
case 7: cout<<"姓名,性别,身高,职业,出生日期,工作时间,年龄"<<endl;break;
case 8: goto loop;
default:cout<<"操作错误......"<<endl;
}
}
loop:;
}
}
void People::Findname(char n[])
{
int i;
for(i=0;i<length;i++)
if(strcmp(data[i].name,n)==0)
cout<<data[i];
}
void People::Findyear(int y)
{
Man man;
Woman woman;
People *pt=&man;
People *ps=&woman;
int i;
for(i=0;i<length;i++)
if(data[i].year==y)
cout<<data[i]<<pt->data[i].year<<endl;
ps->data[i].year;
}
void People::Character()
{
int i,s=0;
for(i=0;i<length;i++)
if(data[i].character)
cout<<data[i];
}
void People::Del(int i)
{
int j;
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
cout<<"删除成功";
}
void Woman::AddF()
{
int flag=0;
iofile.open("Woman_information.txt",ios::in|ios::binary);
while(iofile.seekg(ios::cur))
{
iofile.seekg(length*sizeof(data[length]),ios::beg);
iofile.read((char*)&data[length],sizeof(data[length]));
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
}
People::Del(length);
cout<<""<<endl;
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void Woman::Addall()
{
char ans;
int flag=0;
iofile.open("Woman_information.txt",ios::out|ios::binary);
do
{
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"您以成功讲信息录入主菜单"<<endl;
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
cout<<"continue(Y|N)?";
cin>>ans;
}
while('y'==ans||'Y'==ans);
loop:
if(1==flag)
cout<<""<<endl;
iofile.close();
}
void Woman::Add()
{
int flag=0;
iofile.open("Woman_information.txt",ios::app|ios::out|ios::binary);
if(length==maxsize)
{
flag=1;
goto loop;
}
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"添加人员信息成功......"<<endl;
length++;
loop:
if(1==flag)
cout<<""<<endl;
iofile.close();
}
void Woman::Display()
{
cout<<"*********************女士信息************************"<<endl;
if(0==length)
cout<<"小美, 1米68, 自主创业, 1923-5-21, 10年,35岁"<<endl;
cout<<"小加, 1米60,小学教师, 1924-3-6, 12年,27岁"<<endl;
cout<<"飞飞, 1米70, 舞蹈教师, 1590-1-22, 9年,30岁"<<endl;
cout<<"阿阿, 1米61, 中科院研究员,1990-2-4, 5年,25岁"<<endl;
cout<<"哭哭, 1米58, 外企总裁, 1478-3-4, 13年,31岁"<<endl;
cout<<"好吧, 1米62, 公务员, 1448-3-5, 11年,26岁"<<endl;
int i;
for(i=0;i<length;i++)
cout<<data[i];
}
void Woman::Character()
{
int i,s=0;
for(i=0;i<length;i++)
if(data[i].character)
cout<<data[i];
}
void Woman::Del(char n[])
{
int i,j,k;
for(i=0;i<length;i++)
if(strcmp(data[i].name,n)==0)
{
k=i+1;break;
}
if(k<1) cout<<"";
for(j=k;j<length;j++)
data[j-1]=data[j];
length--;
cout<<"删除人员信息成功......"<<endl;
}
void Woman::Del(int i)
{
int j;
if(i<1||i>length)
cout<<"删除成功";
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
cout<<""<<endl;
}
void Woman::Findyear(int y)
{
int i;
for(i=0;i<length;i++)
if(data[i].year==y)
cout<<data[i];
}
void Man::AddF()
{
int flag=0;
iofile.open("Man_information.txt",ios::in|ios::binary);
while(iofile.seekg(sizeof(data[length]),ios::cur))
{
if(iofile.seekg(length*sizeof(data[length]),ios::beg))
iofile.read((char*)&data[length],sizeof(data[length]));
else
break;
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
}
People::Del(length);
cout<<""<<endl;
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void Man::Addall()
{
char ans;
int flag=0;
iofile.open("Man_information.txt",ios::in|ios::out|ios::binary);
do
{
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"您以成功将信息录入主菜单"<<endl;
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
cout<<"continue(Y|N)?";
cin>>ans;
}
while('y'==ans||'Y'==ans);
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void Man::Add()
{
int flag=0;
iofile.open("Man_information.txt",ios::app|ios::out|ios::binary);
if(length==maxsize)
{
flag=1;
goto loop;
}
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"添加人员信息成功......"<<endl;
length++;
loop:
if(1==flag)
cout<<""<<endl;
iofile.close();
}
void Man::Display()
{
cout<<"*********************男士信息************************"<<endl;
if(0==length)
cout<<"王子, 1米80, 自主创业, 1923-4-21,10年,30岁"<<endl;
cout<<"喷嚏, 1米78, 律师, 1934-2-3, 4年,28岁"<<endl;
cout<<"哈沁, 1米72, 金融理财师, 1929-3-2, 3年,31岁"<<endl;
cout<<"大树, 1米78, 高中教师, 1934-3-1, 10年,35岁"<<endl;
cout<<"嘿嘿, 1米79, 大学教师, 1945-4-22, 2年,22岁"<<endl;
cout<<"哎呀, 1米80, 酒店老板, 1946-2-12, 4年,33岁"<<endl;
int i;
for(i=0;i<length;i++)
cout<<data[i];
}
void Man::Del(char n[])
{
int i,j,k;
for(i=0;i<length;i++)
if(strcmp(data[i].name,n)==0)
{
k=i+1;break;
}
if(k<1) cout<<"";
for(j=k;j<length;j++)
data[j-1]=data[j];
length--;
cout<<"删除人员信息成功......"<<endl;
}
void Man::Character()
{
if(0==length)
cout<<""<<endl;
int i,s=0;
for(i=0;i<length;i++)
s+=data[i].year;
}
void Man::Del(int i)
{
int j;
if(i<1||i>length)
cout<<"删除成功";
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
cout<<""<<endl;
}
void Man::Findyear(int y)
{
int i;
for(i=0;i<length;i++)
if(data[i].year==y)
cout<<data[i];
}
istream& operator>>(istream& input,Telem& T)
{
int y,m,d;
cout<<"请输入姓名(以#结尾):"<<endl;
input.getline(T.name,20,'#');
cout<<"身高(以#结尾 ???厘米):"<<endl;
input.getline(T.num,20,'#');
cout<<"年龄(以#结尾 ?):"<<endl;
input.getline(T.career,20,'#');
cout<<"请输入出生日期(????年??月??日):"<<endl;
input>>y>>m>>d;
T.birthtime.year=(y>=1900&&y<=2100)?y:1900;
T.birthtime.month=(m>=1&&m<=12)?m:1;
T.birthtime.day=(d>=1&&d<=31)?d:1;
cout<<"参加工作时间(????年??月??日):"<<endl;
input>>y>>m>>d;
T.worktime.year=(y>=1900&&y<=2100)?y:1900;
T.worktime.month=(m>=1&&m<=12)?m:1;
T.worktime.day=(d>=1&&d<=31)?d:1;
return input;
}
ostream& operator<<(ostream& output,Telem& T)
{
cout<<"姓名:";
output<<T.name<<endl;
cout<<"身高:";
output<<T.num<<endl;
cout<<"职业:";
output<<T.career<<endl;
cout<<"出生日期:";
output<<T.birthtime.year<<" "<<T.birthtime.month<<" "<<T.birthtime.day<<endl;
cout<<"参加工作时间:";
output<<T.worktime.year<<" "<<T.worktime.month<<" "<<T.worktime.day<<endl;
cout<<"年龄:";
output<<T.year<<endl;
return output;
}
int operator-(Time & t1,Time & t2)
{
return t1.year-t2.year;
}
void Showmenu()
{
cout<<"******************颀阳硕萌婚姻介绍所**************"<<endl;
cout<<"*1-从键盘录入全部人员(男士、女士)记录 *"<<endl;
cout<<"*2-增加一位人员(男士、女士)记录 *"<<endl;
cout<<"*3-显示全部人员记录 *"<<endl;
cout<<"*4-对对方性格的要求 *"<<endl;
cout<<"*5-删除一个人员记录 *"<<endl;
cout<<"*6-按年龄输入人员信息(可选) *"<<endl;
cout<<"*7-按姓名或年龄检索所有信息 *"<<endl;
cout<<"*8-显示菜单目录 *"<<endl;
cout<<"*9-结束程序运行 *"<<endl;
cout<<"**************************************************"<<endl;
cout<<"请输入选择(1~9)";
}
int main()
{
Man man;
Woman woman;
People *pt=&man;
People *ps=&woman;
int c=0,k=0,l=0,i=0;
char nam[20],part[20];
Showmenu();
for(;;)
{
cin>>c;
switch(c)
{
case 1:
{
cout<<"***********录入全部人员(男士、女士)记录*****"<<endl;
cout<<"*****男士操作请按1 女士操作请按2*****"<<endl;
cin>>k;
if(1==k)
{
pt->Addall();
Showmenu();
break;
}
else if(2==k)
{
ps->Addall();
Showmenu();
break;
}
Showmenu();
break;
}
case 2:
{
cout<<"************从键盘增加一位人员(男士、女士)记录****"<<endl;
cout<<"*****男士操作请按1 女士操作请按2*****"<<endl;
cin>>k;
if(1==k)
{
pt->Add();
Showmenu();
break;
}
else if(2==k)
{
ps->Add();
Showmenu();
break;
}
else
cout<<"操作错误..."<<endl;
Showmenu();
break;
}
case 3:
{
cout<<"************显示全部人员记录**************"<<endl;
pt->Display();
ps->Display();
cout<<"操作结束,请选择主菜单(0~9)"<<endl;
Showmenu();
break;
}
case 4:
{
cout<<"************对对方性格的要求**************"<<endl;
cout<<"*****男士操作请按1 女士操作请按2*****"<<endl;
cin>>k;
if(1==k)
{
cout<<"请男士选择"<<endl;
cout<<"1.温柔型"<<endl;
cout<<"2.可爱型"<<endl;
cout<<"3.野蛮型"<<endl;
cout<<"4.淑女型"<<endl;
cout<<"5.万人迷型"<<endl;
cout<<"6.高贵典雅型"<<endl;
cin>>i;
if(1==i)
{
cout<<"小美, 1米68, 自主创业, 1923-5-21, 10年,35岁"<<endl;
}
if(2==i)
{
cout<<"小加,1米60,小学教师, 1924-3-6, 12年,27岁"<<endl;
}
if(3==i)
{
cout<<"飞飞, 1米70, 舞蹈教师, 1590-1-22, 9年,30岁"<<endl;
}
if(4==i)
{
cout<<"阿阿,1米61, 中科院研究员,1990-2-4, 5年,25岁"<<endl;
}
if(5==i)
{
cout<<"哭哭, 1米58, 外企总裁, 1478-3-4, 13年,31岁"<<endl;
}
if(6==i)
{
cout<<"好吧, 1米62, 公务员, 1448-3-5, 11年,26岁"<<endl;
}
Showmenu();
break;
}
else if(2==k)
{
cout<<"请女士选择"<<endl;
cout<<"1.美男型"<<endl;
cout<<"2.冷酷型"<<endl;
cout<<"3.猛男型"<<endl;
cout<<"4.雇家型"<<endl;
cout<<"5.爱妻型"<<endl;
cout<<"6.钻石王老五型"<<endl;
cin>>i;
if(1==i)
{
cout<<"王子, 1米80, 自主创业, 1923-4-21,10年,30岁"<<endl;
}
if(2==i)
{
cout<<"喷嚏, 1米78, 律师, 1934-2-3, 4年,28岁"<<endl;
}
if(3==i)
{
cout<<"哈沁, 1米72, 金融理财师, 1929-3-2, 3年,31岁"<<endl;
}
if(4==i)
{
cout<<"大树, 1米78, 高中教师, 1934-3-1, 10年,35岁"<<endl;
}
if(5==i)
{
cout<<"嘿嘿, 1米79, 大学教师, 1945-4-22, 2年,22岁"<<endl;
}
if(6==i)
{
cout<<"哎呀, 1米80, 酒店老板, 1946-2-12, 4年,33岁"<<endl;
}
Showmenu();
break;
}
Showmenu();
break;
}
case 5:
{
cout<<"************删除一个人员记录******************"<<endl;
cout<<"*****男士操作请按1 女士操作请按2*****"<<endl;
cin>>k;
if(1==k)
{
cout<<"按姓名删除1 按年龄删除2"<<endl; cin>>l;
if (1==l)
{
cout<<"请输入要删除人员的姓名(以#结尾):"<<endl;cin.getline(nam,20,'#');
pt->Del(nam);
}
else if(2==l)
{
cout<<"请输入要删除人的年龄:"<<endl;cin>>i;
pt->Del(i);
}
else
cout<<"操作错误......"<<endl;
}
else if(2==k)
{
cout<<"按姓名删除1 按年龄删除2"<<endl; cin>>l;
if (1==l)
{
cout<<"请输入要删除人员的姓名(以#结尾):"<<endl;cin.getline(nam,20,'#');
ps->Del(nam);
}
else if(2==l)
{
cout<<"请输入要删除人的年龄:"<<endl;cin>>i;
ps->Del(i);
}
else
cout<<"操作错误......"<<endl;
}
else
cout<<"操作错误......"<<endl;
Showmenu();
break;
}
case 6:
{
cout<<"************按年龄输入人员信息(可选)**"<<endl;
cout<<"*****男士操作请按1 女士操作请按2*****"<<endl;
cin>>k;
if(1==k)
{
cout<<"请输入要输出人员的年龄(以#结尾):"<<endl;cin.getline(part,20,'#');
pt->Add();
}
else if(2==k)
{
cout<<"请输入要输出人员的年龄(以#结尾):"<<endl;cin.getline(part,20,'#');
ps->Displaypart(part);
}
else
cout<<"操作错误......"<<endl;
Showmenu();
break;
}
case 7:
{
展开阅读全文