📄 person类.cpp
字号:
#include<iostream>
#include<cstring>
using namespace std;
class wrongdate{};
class wrongid{};
//定义人员类
class Person
{
public:
Person(){//无参构造函数
strcpy(name,"张三");
strcpy(gender,"男");
strcpy(bopla,"福建省福州市铜盘路315号");
strcpy(bodat,"1987/3/27");
strcpy(nation,"汉");
strcpy(id,"35018219870327135x");
strcpy(fname,"张宝");
strcpy(mname,"乔娇");
strcpy(bloodtype,"ab");
};
void set_name(char a[11]);//输入姓名
void judge_name();//判断姓名的合法性
void set_gender(char a[3]);//输入性别
void judge_gender();//判断姓名的合法性
void set_born_place(char a[41]);//输入出生地址
void set_born_date(char a[11]);//输入出生年月
void judge_born_date();//判断日期的合法性
void set_nation(char a[3]);//输入民族
void judge_nation();//判断民族的合法性
void set_ID_card(char a[19]);//输入身份证号码
void judge_id();//判断身份证号码的合法性
void set_fathername(char a[11]);//输入父亲的姓名
void judge_father_name();//判断父亲姓名的合法性
void set_mothername(char a[11]);//输入母亲的姓名
void judge_mother_name();//判断母亲姓名的合法性
void set_blood_type(char a[3]);//输入血型
void judge_blood_type();//判断血型的合法性
void show_information();//输出所输入的信息
private:
char name[11],gender[3],bopla[41],bodat[11],nation[3],id[19],fname[11],mname[11],bloodtype[3];
};
//输入姓名
void Person::set_name(char a[11])
{
strcpy(name,a);
}
//判断姓名的合法性
void Person::judge_name()
{
char ch[2];
int i;
for(i=0;name[i]!='\0';i+=2)
{
ch[1]=name[i];
ch[2]=name[i+1];
if(strcmp(ch,"啊")>=0)
;
else
{
cout<<"姓名输入错误!"<<endl;
}
}
}
//输入性别
void Person::set_gender(char a[3])
{
strcpy(gender,a);
}
//判断性别
void Person::judge_gender()
{
if(strcmp(gender,"男")==0||strcmp(gender,"女")==0)
;
else cout<<"性别输入错误"<<endl;
}
//输入出生地址
void Person::set_born_place(char a[41])
{
strcpy(bopla,a);
}
//输入出生年月
void Person::set_born_date(char a[11])
{
strcpy(bodat,a);
}
//判断出生年月的合法性
void Person::judge_born_date()
{
int i,m,k,l,n,year,month,day,md;
//计算出年与月之间的字符所在的位数
for(i=0;i<10;i++)
{
if(bodat[i]<'0'||bodat[i]>'9')
{
if(m==1)
{
l=i;//用l记录第二个非数字字符的位置
m+=1;
}
if(m==0)
{
k=i;
m+=1;//用k记录第一个非数字字符的位置
}
}
if(bodat[i]=='\n'&&m==2)
{
n=i;
break;//用n记录结束字符的位置
}
}
if(bodat[k]!=bodat[l])
{
cout<<"type wrong"<<endl;
return(0);
}
//计算输入的年
year=(int)(a[0])-48;
month=(int)(a[k+1])-48;
day=(int)(a[l+1])-48;
for(j=1;j<k;j++)
year=10*year+(int)(a[j])-48;
for(j=k+2;j<l;j++)
month=10*month+(int)(a[j])-48;
for(j=l+2;j<n;j++)
day=10*day+(int)(a[j])-48;
//判断年的合法性
if(year==0)
throw wrongdate();
//判断月的合法性
if(month<=0||month>12)
throw wrongdate()
//月的返回天数
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:md=31;break;
case 4:
case 6:
case 9:
case 11:md=30;break;
case 2:
{
if(leap_year(year))
md=29;
else
md=28;
break;
}
}
//判断日的合法性
if(day<0||day>md)
throw wrongdate();
}
//输入民族
void Person::set_nation(char a[3])
{
strcpy(nation,a);
}
//判断民族的合法性
void Person::judge_nation()
{
if(strcmp(nation,"啊")>=0)
;
else cout<<民族输入错误"<<endl;
}
//输入身份证号码
void Person::set_ID_card(char a[19])
{
strcpy(id,a);
}
//判断省份证号码的合法性
void Person::judge_id()
{
int gend,i;
for(i=0;i<4;i++)
{
if(bodat[i]==id[6+i])
;
else throw wrongid();
}
for(i=5;i<7;i++)
{
if(bodat[i]==id[5+i])
;
else throw wrongid();
}
for(i=8;i<10;i++)
{
if(bodat[i]==id[4+i])
;
else throw wrongid();
}
gender=(int)(id[16])-48;
if(gend%2==1&&strcmp(gender,"男")==0)
;
if(gend%2==0&&strcmp(gender,"女")==0)
;
else throw wrongid();
}
//输入父亲姓名
void Person::set_fathername(char a[11])
{
strcpy(fname,a);
}
//判断父亲姓名的合法性
void Person::judge_father_name()
{
char ch[2];
int i;
for(i=0;fname[i]!='\0';i+=2)
{
ch[1]=fname[i];
ch[2]=fname[i+1];
if(strcmp(ch,"啊")>=0)
;
else
{
cout<<"父亲姓名输入错误!"<<endl;
}
}
}
//输入母亲姓名
void Person::set_mothername(char a[11])
{
strcpy(mname,a);
}
//判断母亲姓名的合法性
void Person::judge_name()
{
char ch[2];
int i;
for(i=0;mname[i]!='\0';i+=2)
{
ch[1]=mname[i];
ch[2]=mname[i+1];
if(strcmp(ch,"啊")>=0)
;
else
{
cout<<"母亲姓名输入错误!"<<endl;
}
}
}
//输入血型
void Person::set_blood_type(char a[3])
{
strcpy(bloodtype,a);
}
//判断血型的合法性
void Person::judge_blood_type()
{
if(strcmp(bloodtype,"a")==0||strcmp(bloodtype,"b")==0||strcmp(bloodtype,"o")==0||strcmp(bloodtype,"ab")==0)
;
if(strcmp(bloodtype,"A")==0||strcmp(bloodtype,"B")==0||strcmp(bloodtype,"O")==0||strcmp(bloodtype,"AB")==0)
;
else
{
cout<<"血型输入错误"<<endl;
}
}
//输出信息
void Person::show_information()
{
cout<<"姓名:"<<name<<endl;
cout<<endl;
cout<<"性别:"<<gender<<endl;
cout<<endl;
cout<<"出生地址:"<<bopla<<endl;
cout<<endl;
cout<<"出生年月:"<<bodat<<endl;
cout<<endl;
cout<<"民族:"<<nation<<endl;
cout<<endl;
cout<<"身份证号码:"<<id<<endl;
cout<<endl;
cout<<"父亲姓名:"<<fname<<endl;
cout<<endl;
cout<<"母亲姓名:"<<mname<<endl;
cout<<endl;
cout<<"血型:"<<bloodtype<<endl;
}
int main()
{
char aname[11],agender[3],abopla[41],abodat[11],anation[3],aid[19],afname[11],amname[11],ablood[3];
Person p1;
cout<<"输入你的个人信息,例如:"<<endl;
p1.show_information();
cout<<"输入姓名:"<<endl;
cin>>aname;
p1.set_name(aname);
pi.judge_name();
cout<<"输入性别:"<<endl;
cin>>agender;
p1.set_gender(agender);
p1.judge_gender();
cout<<"输入出生地址:"<<endl;
cin>>abopla;
p1.set_born_place(abopla);
cout<<"输入出生日期:"<<endl;
cin>>abodat;
p1.set_born_date(abodat);
try
{
p1.judge_born_date();
}
catch(wrongdate)
{
cout<<"输入的出生年月错误!"<<endl;
exit(1);
}
cout<<"输入民族:"<<endl;
cin>>anation;
p1.set_nation(anation);
p1.judge_nation();
cout<<"输入身份证号码:"<<endl;
cin>>aid;
p1.set_ID_card(aid);
try
{
p1.judge_id();
}
catch(wrongid)
{
cout<<"输入的身份证件与先前的信息不符"<<endl;
exit(1);
}
cout<<"输入父亲姓名:"<<endl;
cin>>afname;
p1.set_fathername(afname);
p1.judge_father_name();
cout<<"输入母亲姓名:"<<endl;
cin>>amname;
p1.set_mothername(amname);
p1.judge_mother_name();
cout<<"输入血型:"<<endl;
cin>>ablood;
p1.set_blood_type(ablood);
p1.judge_blood_type();
p1.show_information();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -