设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name), 性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入 和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。 解:本题为指出构造函数等的调用,加了一些提示语句。
#include<iostream>
#include<cstring>
using namespace std;
enum Tsex{mid,man,woman};
class Person
{
char IdPerson[19]; //身份证号,18位数字
char Name[20]; //姓名
Tsex Sex; //性别
int Birthday; //生日,格式1986年8月18日写作19860818
char HomeAddress[50]; //家庭地址
public:
Person(char *,char *,Tsex,int,char *); Person(Person &);
Person();
~Person();
void PrintPersonInfo();
void inputPerson();
//其他接口函数
};
Person::Person(char *id,char *name,Tsex sex,int birthday,char *homeadd)
{
cout<<"构造Person"<<endl;
strcpy(IdPerson,id);
strcpy(Name,name);
Sex=sex;
Birthday=birthday;
strcpy(HomeAddress,homeadd);
}
Person::Person()
{
cout<<"缺省构造Person"<<endl;
IdPerson[0]='\0';
Name[0]='\0';
Sex=mid;
Birthday=0;
HomeAddress[0]='\0';
}
Person::Person(Person & Ps)
{
cout<<"拷贝构造Person"<<endl;
strcpy(IdPerson,Ps.IdPerson);
strcpy(Name,Ps.Name);
Sex=Ps.Sex;
Birthday=Ps.Birthday;
strcpy(HomeAddress,Ps.HomeAddress);
}
Person::~Person()
{
cout<<"析构Person"<<endl;
}
void Person::inputPerson()
{
char ch;
cout<<"请输入身份证号,18位数字:"<<endl; cin.getline(IdPerson,19);
cout<<"请输入姓名:"<<endl; cin.getline(Name,20);
cout<<"请输入性别m或w:"<<endl;
cin>>ch;
if(ch=='m') Sex=man;
else Sex=woman;
cout<<"请输入生日,格式1986年8月18日写作19860818:"<<endl; cin>>Birthday;
cin.get(); //吸收回车符,否则地址输不进去
cout<<"请输入地址:"<<endl; cin.getline(HomeAddress,50);
}
void Person::PrintPersonInfo()
{
int i;
cout<<"身份证号:"<<IdPerson<<'\n'<<"姓名:"<<Name<<'\n'<<"性别:";
if(Sex==man)cout<<"男"<<'\n';
else if(Sex==woman)cout<<"女"<<'\n';
else cout<<" "<<'\n';
cout<<"出生年月日:";
i=Birthday;
cout<<i/10000<<"年";
i=i%10000;
cout<<i/100<<"月"<<i%100<<"日"<<'\n'<<"家庭住址:"<<HomeAddress<<'\n';
}
int main()
{
Person Ps1("320102811226161","朱海鹏",man,19811226,"南京市黄浦路1号"), Ps2(Ps1),Ps3;
Ps1.PrintPersonInfo();
Ps2.PrintPersonInfo();
Ps3.inputPerson();
Ps3.PrintPersonInfo();
return 0;
}