7-2 客户类的定义(组合类)

要求定义一个地址类(Address):

  • 包含省、市、详细地址、邮编四个私有数据成员。
  • 一个构造函数,一个显示信息的成员函数。

定义一个客户类(Client):

  • 包含姓名,身份证号,地址(Address 对象)三个私有数据成员。
  • 一个构造函数:构造函数需校验身份证是否合法。
    校验规则:
    (1)身份证号码长度为18位;
    (2)根据身份证号码的第7位到14位提取出日期,合法年份介于1900~2025区间,合法月份介于1~12区间,合法日介于1~31区间;
    若不满足上述条件,显示非法身份证号码,退出程序。
  • 一个输出客户信息的函数。

语法要求:

  1. 应用组合类完成。

  2. 将类中不涉及修改数据成员的成员函数定义为const

提示:

  1. C++string类的substr函数 string substr (size_t pos = 0, size_t len = npos) const; 可以获得string的字串
    pos: substr开始的第一个字符的位置; len:substr的长度;
    例如:string s="012345678";

     s.substr(3,2)的值为"34".
    
  2. exit(0);//退出程序

输入格式:

输入2行
第1行:客户姓名 客户身份证号
第2行:省 市 详细地址 邮政编码

输出格式:

输出客户的信息。

输入样例1:

张小天 441301201209121601
广东 惠州 惠州学院 516007

输出样例2:

****************************************************
客户姓名:张小天
身份证号码:441301201209121601
出生日期:2012年09月12日
客户地址:广东省惠州市惠州学院 邮编:516007
****************************************************

输入样例2:

李莉 4413012012091216011
广东 惠州 惠州学院 516007

输出样例2:

非法身份证号码.

输入样例3:

欧阳月 441301201209321601
广东 惠州 惠州学院 516007

输出样例3:

非法身份证号码.

=========================================================================

#include <iostream>
#include <string>
using namespace std;

class Address
{
public:
    Address(string a,string b,string c,string g) : A(a), B(b), C(c), G(g) {}
    void getid() const
    {
        cout << "客户地址:" << A << "省" << B << "市" << C << " " << "邮编:" << G << endl;
    }

private:
    string A, B, C;
    string G;
};

class Client
{
public:
    Client(string a,string b,string c,string g,string d,string e) : ID(a, b, c, g),D(d), E(e)
    {
        if(E.length() == 18)
        {
        En1 = E.substr(6, 4);
        Em1 = E.substr(10, 2);
        Ed1 = E.substr(12, 2);
        En = stoi(E.substr(6, 4));
        Em = stoi(E.substr(10, 2));
        Ed = stoi(E.substr(12, 2));
        if (En <= 1900 || En >= 2025 || Em < 1 || Em > 12 || Ed < 1 || Ed > 31)
        {
            cout << "非法身份证号码." << endl;
            exit(0);
        }
        }
        else
        {
            cout << "非法身份证号码." << endl;
            exit(0);
        }
    }

    void getdd() const
    {
        cout << "客户姓名:" << D << endl;
        cout << "身份证号码:" << E << endl;
        cout << "出生日期:" << En1 << "年" << Em1 << "月" << Ed1 << "日" << endl;
        ID.getid();
    }

private:
    Address ID;
    string D;
    string E;
    string En1,Em1,Ed1;
    int En, Em, Ed;
};

int main()
{
    string A,B,C,D,E,G;
    cin>>D>>E>>A>>B>>C>>G;
    Client T(A,B,C,G,D,E);
    cout<<"****************************************************"<<endl;
    T.getdd();
    cout<<"****************************************************"<<endl;
}

 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值