E. 手机服务(构造+拷贝构造+堆)

题目描述

设计一个类来实现手机的功能。它包含私有属性:号码类型、号码、
号码状态、停机日期;包含方法:构造、拷贝构造、打印、停机。
1、号码类型表示用户类别,只用单个字母,A表示机构,B表示企业
、C表示个人
2、号码是11位整数,用一个字符串表示
3、号码状态用一个数字表示,1、2、3分别表示在用、未用、停用
4、停机日期是一个日期对象指针,在初始化时该成员指向空,该日
期类包含私有属性年月日,以及构造函数和打印函数等
----------------------------------------
 
5、构造函数的作用就是接受外来参数,并设置各个属性值,并输出
提示信息,看示例输出
6、拷贝构造的作用是复制已有对象的信息,并输出提示信息,看
示例输出。
 
7、打印功能是把对象的所有属性都输出,输出格式看示例
8、停机功能是停用当前号码,参数是停机日期,无返回值,操作是把状态改成停用,并停机日期指针创建为动态对象,并根据参数来设置停机日期,最后输出提示信息,看示例输出
-------------------------------------------
 
要求:在主函数中实现号码备份的功能,对已有的虚拟手机号的所有信息进行复制,并将号码类型改成D表示备份;将手机号码末尾加字母X
 
 


输入

第一行输入t表示有t个号码

第二行输入6个参数,包括号码类型、号码、状态、停机的年、月、日,用空格隔开

依次输入t行

 


输出

每个示例输出三行,依次输出原号码信息、备份号码信息和原号码停机后的信息

每个示例之间用短划线(四个)分割开,看示例输出

 

输入样例1 
2
A 15712345678 1 2015 1 1
B 13287654321 2 2012 12 12

输出样例1

Construct a new phone 15712345678
类型=机构||号码=15712345678||State=在用
Construct a copy of phone 15712345678
类型=备份||号码=15712345678X||State=在用
Stop the phone 15712345678
类型=机构||号码=15712345678||State=停用 ||停机日期=2015.1.1
----
Construct a new phone 13287654321
类型=企业||号码=13287654321||State=未用
Construct a copy of phone 13287654321
类型=备份||号码=13287654321X||State=未用
Stop the phone 13287654321
类型=企业||号码=13287654321||State=停用 ||停机日期=2012.12.12
----

题目较长,注意理解题意即格式化输出

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include 
#include
#include
#include
#include
#include
using namespace std;

class date
{
	int year, month, day;
public:
	date()//
	{
		;
	}
	void print();
	void set(int y, int m, int d);
};

void date::print()
{
	cout << year << "." << month << "." << day << endl;
}

void date::set(int y, int m, int d)
{
	year = y;
	month = m;
	day = d;
}

class phone
{
	char num_type;
	char number[15];
	int sit;
	date* p=nullptr;
public:
	phone(char nt, char* num, int sit);
	void print();
	void stop(int y, int m, int d);
	phone(const phone& obj);
};

phone::phone(const phone& obj)
{
	cout << "Construct a copy of phone " << obj.number << endl;
	strcpy(number, obj.number);
	number[11] = 'X';
	number[12] = '\0';
	num_type = 'D';
	sit = obj.sit;
	p = obj.p;
}
void phone::stop(int y, int m, int d)
{
	cout << "Stop the phone " << number << endl;
	sit = 3;
	p = new date;
	p->set(y, m, d);
	cout << "类型=";
	if (num_type == 'A')cout << "机构";
	else if (num_type == 'B')cout << "企业";
	else if (num_type == 'C')cout << "个人";
	else if (num_type == 'D')cout << "备份";
	cout << "||号码=" << number << "||State=";
	if (sit == 1)cout << "在用";
	else if (sit == 2)cout << "未用";
	else if (sit == 3)cout << "停用";
	cout << " ||停机日期=";
	p->print();
	cout << "----" << endl;
}
void phone::print()
{
	cout << "类型=";
	if (num_type == 'A')cout << "机构";
	else if (num_type == 'B')cout << "企业";
	else if (num_type == 'C')cout << "个人";
	else if (num_type == 'D')cout << "备份";
	cout << "||号码=" << number << "||State=";
	if (sit == 1)cout << "在用" << endl;
	else if (sit == 2)cout << "未用" << endl;
	else if (sit == 3)cout << "停用" << endl;
}
phone::phone(char nt,char *num,int sit)
{
	num_type = nt;
	strcpy(number, num);
	this->sit = sit;
	cout << "Construct a new phone " << number << endl;
}
int main()
{
	int t, s, y, m, d;
	char num[15];
	char nt;
	cin >> t;
	while (t--)
	{
		cin >> nt >> num >> s>>y >> m >> d;
		phone ph1(nt, num, s);
		ph1.print();
		phone ph2(ph1);
		ph2.print();
		ph1.stop(y, m, d);
	}
	return 0;
}

你可能感兴趣的:(c++)