#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
class ID
{
private:
char *id;
int year,month,date;
char sex;
char YN;
public:
void set_ID(char *s)
{
id=new char[strlen(s)+1];
strcpy(id,s);
year=month=date=0;
}
void fun()
{
year = (id[6]-'0')*1000 + (id[7]-'0')*100 + (id[8]-'0')*10 + (id[9]-'0');
month = (id[10]-'0')*10 + (id[11]-'0');
date = (id[12]-'0')*10 + (id[13]-'0');
if(id[16]%2==1) sex='M';
else sex='F';
if(sex=='M')
{
int gap=2015-year;
if(gap==35&&month>=10||gap<35) YN='Y';
if(gap>35||gap==35&&month<10) YN='N';
}
if(sex=='F')
{
int gap=2015-year;
if(gap==40&&month>=10||gap<40) YN='Y';
if(gap>40||gap==40&&month<10) YN='N';
}
}
void print()
{
cout<<id<<endl<<year<<"."<<month<<"."<<date<<endl<<sex<<endl<<YN<<endl;
}
~ID() {}
};
int main()
{
int T, i;
char id[19];
cin>>T;
ID person[T];
for(i = 0; i < T; i++)
{
if(i> 0 && i < T) cout<<endl;
cin>>id;
person[i].set_ID(id);
person[i].fun();
person[i].print();
}
delete []id;
return 0;
}
(对象数组)
作者: 冯向阳时间限制: 1S章节: 类与对象
问题描述 :
问题描述:判断某人是否为青年的标准是男性不超过35周岁或女性不超过40周岁。已知身份证号从第7位开始的连续8位表示持证人的出生年月日,身份证号的第17位为奇数表示持证人为男性,身份证号第17位数字为偶数表示持证人为女性。例如:身份证号为32110219830103191X的持证人出生年月为1983年1月3日,性别为男性。试定义一个类ID,根据身份证号判断持证人截止到2015年10月1日是否为青年。具体要求如下:
(1) 私有数据成员:
char *id; 保存18位身份证号
int year, month, date; y,m,d分别表示持证人的出生年、月、日
char sex; 持证人的性别(”M”或”F”) M代表男性,F代表女性
(2) 公有成员函数:
set_ID(char * s); 用参数s初始化成员id(需申请动态内存),并将year,month,date初始化为0
void fun( ); 根据身份证号计算持证人的出生年月和性别,并判断其是否为青年,并将获得的信息存储到对应的数据成员中
void print( ); 输出持证人的信息
~ID(); 析构函数,进行必要的操作
要求使用以下main函数测试:
int main(){
int T, i;
char id[19];
cin>>T;
ID person[T];
for(i = 0; i < T; i++){
if(i> 0 && i < T) cout<<endl;
cin>>id;
person[i].set_ID(id);
person[i].fun();
person[i].print();
}
return 0;
}
输入说明 :
第一行:身份证数目T
第二行至第T+1行:输入身份证id,行与行之间无多余的空行
输出说明 :
输出T组身份证的信息,组与组之间的信息有一空行
每组的信息如下:
身份证id
year.month.date
M/F M:男 F:女
Y/N Y:青年 N:非青年