14、身份证类(对象数组)

问题描述 :

问题描述:判断某人是否为青年的标准是男性不超过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:非青年

 

输入范例 :

6
321102197504011201
321102196103011213
11010119801001315X
110101198510016381
130102198509306242
513436198511019834

输出范例 :

321102197504011201
1975.4.1
F
N

321102196103011213
1961.3.1
M
N

11010119801001315X
1980.10.1
M
Y

110101198510016381
1985.10.1
F
Y

130102198509306242
1985.9.30
F
Y

513436198511019834
1985.11.1
M
Y

解题代码: 

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
bool check(int x)
{
    if (x % 4 == 0 && x % 100 != 0)
        return 1;
    else if (x % 400 == 0)
        return 1;
    else
        return 0;
}
int days[15] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };
class Date {
    int year;
    int month;
    int day;
public:
    Date(int y, int m, int d) :year(y), month(m), day(d) {};
    int getYear() const { return year; }
    int getMonth() const { return month; }
    int getDay() const { return day; }
};
int CalDay(const Date& d1, const Date& d2)
{
    int n1, y1, r1;
    int n2, y2, r2;
    int i, j;
    int ans = 0;
    n1 = d1.getYear();
    n2 = d2.getYear();
    y1 = d1.getMonth();
    y2 = d2.getMonth();
    r1 = d1.getDay();
    r2 = d2.getDay();
    while (1)
    {
        if ((n1 == n2 && y1 == y2 && r1 == r2))
            break;
        ans++;
        r1++;
        if (r1 > days[y1])
            r1 = 1, y1++;
        if (y1 > 12)
            n1++, y1 = 1;
        if (check(n1))
            days[2] = 29;
        else
            days[2] = 28;
    }
    return ans;
}
class ID {
private:
    char* id;
    int year, month, date;
    char sex;
    char Y;// M代表男性,F代表女性
public:
    void set_ID(char* s);
    void fun(void);
    void print(void);
    ~ID(void);
    ID(void);
};
void ID::set_ID(char* s)
{
    id = new char [20] ;
    strcpy(id, s);
    year = 0, month = 0, date = 0;
    return;
}
void ID::fun(void)
{
    char lis[20];
    strcpy(lis, id);
    year = (lis[6] - '0') * 1000 + (lis[7] - '0') * 100 + (lis[8] - '0') * 10 + (lis[9] - '0');
    month = (lis[10] - '0') * 10 + (lis[11] - '0');
    date= (lis[12] - '0') * 10 + (lis[13] - '0');
    if ((lis[16] - '0') % 2 == 0)
        sex = 'F';
    else sex = 'M';
    int dla = 2015-year;
    dla++;
    if (month == 10)
        if (date >= 1)
            dla--;
    if (month > 10)
        dla--;
    if (sex == 'M')
    {
        if (dla<= 35)
            Y = 'Y';
        else
            Y = 'N';
    }
    else
    {
        if (dla <= 40)
            Y = 'Y';
        else
            Y = 'N';
    }
}
void ID::print(void)
{
    cout << id << endl;
    cout << year << '.' << month << '.' << date << endl;
    cout << sex << endl;
    cout << Y << endl;
}
ID::~ID(void)
{
    //delete [] id;
    return;
}
ID::ID(void)
{
    ;
}
int main() {
    int T, i;
    char id[19];

    cin >> T;
    ID person[500];

    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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面我来回答你的问题: 1. 居民设计: ```cpp class Resident { private: std::string name; // 姓名 std::string id; // 身份证号 std::string address; // 住址 time_t enter_time; // 最近进入时间 time_t leave_time; // 最近离开时间 public: Resident(std::string _name, std::string _id, std::string _address, time_t _enter_time, time_t _leave_time) : name(_name), id(_id), address(_address), enter_time(_enter_time), leave_time(_leave_time) {} // 居民构造函数 std::string get_name() const { return name; } std::string get_id() const { return id; } std::string get_address() const { return address; } time_t get_enter_time() const { return enter_time; } time_t get_leave_time() const { return leave_time; } }; ``` 2. 居民对象数组: ```cpp Resident residents[100]; // 假设本小区最多有100位居民 ``` 3. 查询函数: ```cpp Resident* search_resident(const std::string& name, const std::string& id) { for (int i = 0; i < 100; i++) { if (residents[i].get_name() == name && residents[i].get_id() == id) { return &residents[i]; } } return nullptr; } ``` 4. 指定时间段进入小区居民查询输出: ```cpp void search_residents_by_time(time_t start_time, time_t end_time) { for (int i = 0; i < 100; i++) { time_t enter_time = residents[i].get_enter_time(); if (enter_time >= start_time && enter_time <= end_time) { std::cout << residents[i].get_name() << " " << residents[i].get_id() << std::endl; } } } ``` 需要注意的是,这里使用了time_t型来存储时间信息。在实际使用中,可以使用ctime库中的函数将时间戳转换为字符串形式,方便输出和存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值