设计基类Person和其派生类用户类User

设计基类Person和其派生类用户类User

  1. 设计一个基类Person,三个私有成员变量包括Name(姓名),Age(年龄)等成员变量,构造函数包括缺省构造函数和二参数构造函数,缺省构造函数下将Name设为“XXX”,Age设为18,二参数构造函数按照实际的值对成员变量初始化,show_person()函数用来显示Name(姓名),Age(年龄)的内容。
  2. 设计一个用户类User,由Person基类公有继承而来,新增的成员变量包括Address(用户地址),MobilePhone(手机号码),ID(身份证号码),使用5参数构造函数进行成员变量初始化,在构造函数内对手机号码和身份证号码进行位数检查,手机号码有效位数为11位,身份证号码有效位数为18位。若不满足上述条件,显示非法手机号码或非法身份证号码,退出程序;其他成员函数包括有:
    1. PhoneOperator()(求出并显示手机通信运营商),手机通信运营商计算规则按照手机号码的前三位判定:139和138号段为移动公司,130和131号段为联通公司,189和188号段设为电信公司,其他号段显示为暂时未知。
    2. show_user()(显示用户的全部信息,包括姓名、年龄、地址、手机号码、身份证号码、手机通信运营商信息)
  3. 在主函数中,声明2-3个用户类对象,针对不同手
    #include<iostream>
    using namespace std;
    class Person
    {
    protected:
    	string Name;
    	int Age;
    public:
    	Person()
    	{
    		Name = "XXX";
    		Age = 18;
    	}
    	Person(string name, int age)
    	{
    		this->Age = age;
    		this->Name = name;
    	}
    	void show_person()
    	{
    		cout << "Name:" << this->Name << endl;
    		cout << "Age:" << this->Age << endl;
    	}
    };
    /*设计一个用户类User,由Person基类公有继承而来,新增的成员变量包括Address(用户地址),
    MobilePhone(手机号码),ID(身份证号码),使用5参数构造函数进行成员变量初始化,
    在构造函数内对手机号码和身份证号码进行位数检查,手机号码有效位数为11位,身份证号码有效位数为18位。
    若不满足上述条件,显示非法手机号码或非法身份证号码,退出程序;其他成员函数包括有:
    a)PhoneOperator()(求出并显示手机通信运营商),手机通信运营商计算规则按照手机号码的前三位判定:
    139和138号段为移动公司,130和131号段为联通公司,189和188号段设为电信公司,其他号段显示为暂时未知。
    b)show_user()(显示用户的全部信息,包括姓名、年龄、地址、手机号码、身份证号码、手机通信运营商信息)*/
    class User:public Person
    {
    protected:
    	string Address;
    	string MobilePhone;
    	string ID;
    	int flag;
    public:
    	User(string name,int age,string Address,string MobilePhone,string ID)
    		:Person(name,age)
    	{
    		this->flag = 1;
    		this->Address = Address;
    		this->ID = ID;
    		this->MobilePhone = MobilePhone;
    		int len1 = ID.length();
    		int len2 = MobilePhone.length();
    		if (len1 != 18 || len2 != 11)
    		{
    			this->flag = 0;
    			cout << "输出错误,已经退出程序" << endl;
    		}
    	}
    	string PhoneOperator()
    	{
    		string str1 = "139";
    		string str2 = "138";
    		string str3 = "130";
    		string str4 = "131";
    		string str5 = "189";
    		string str6 = "188";
    		string str = "000";//记得初始化要不会崩辣
    		for (int i = 0; i < 3; i++)
    		{
    			str[i] = MobilePhone[i];
    		}
    		if (flag)
    		{
    			if (str == str1 || str == str2)
    				return "电信运营";
    			else if (str == str1 || str == str2)
    				return "联通运营";
    			else if (str == str1 || str == str2)
    				return "移动运营";
    			else
    				return "未知运营商";
    		}
    		else
    			return "\0";
    	}
    	void show_user()
    	{
    		if (flag)
    		{
    			cout << "Name:" << this->Name << endl;
    			cout << "Age:" << this->Age << endl;
    			cout << "MobilePhone:" << this->MobilePhone << endl;
    			cout << "ID:" << this->ID << endl;
    			cout << "Address:" << this->Address << endl;
    			cout << "运营商:" << this->PhoneOperator() << endl;
    		}
    		else
    			cout << "非法输入,已为您退出程序,请重新输入!!!" << endl;
    	}
    };
    int main()
    {//string name,int age,string Address,string MobilePhone,string ID
    	User user1("tom", 18, "惠州学院", "12345678910", "44058212220619453X");
    	user1.show_user();
    	User user2("tom", 18, "惠州学院", "1234567910", "44058212220619453X");
    	user2.show_person();
    	User user3("tom", 18, "惠州学院", "12345678910", "4405821222061945X");
    	user3.show_person();
    	system("pause");
    }
    机运营商情况进行测试
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值