Universidad de Shenzhen Jiruan "Programación orientada a objetos" Experimento 7 Constructor de copia y clase compuesta

A. Point&Circle (clase y estructura compuestas)

Tema Descripción

inserte la descripción de la imagen aquí

La clase Point es una clase que hemos escrito, la clase Circle es una nueva clase y Point es su objeto miembro, complete la implementación de las funciones miembro de la clase Circle.

Genere un círculo y varios puntos en la función principal, juzgue la relación posicional entre estos puntos y el círculo, si el punto está dentro del círculo (incluso en el borde del círculo), emita "adentro", de lo contrario, emita "afuera"; luego mueva el centro de la posición del círculo, juzgue la relación posicional entre estos puntos y el círculo nuevamente.

ingresar

coordenada x coordenada y radio del círculo

el número de puntos m

La coordenada x coordenada y del primer punto

La coordenada x coordenada y del segundo punto

La coordenada x coordenada y del punto n

La nueva coordenada x coordenada y donde el centro del círculo se mueve a

producción

La relación entre el primer punto y el círculo.

La relación entre el segundo punto y el círculo.

La relación entre el punto n-ésimo y el círculo.

después de mover el centro del círculo

La relación entre el primer punto y el círculo después de que el centro del círculo se mueve

La relación entre el segundo punto y el círculo después de que el centro del círculo se mueve

La relación entre el punto n-ésimo y el círculo después de que el centro del círculo se mueve

Muestra de entrada 1

0 0 5
4
1 1
2 2
5 0
-6 0
-1 0

muestra de salida 1

interior
interior
interior
exterior
después de mover el centro del círculo:
interior
interior
exterior
interior

código de CA

#include<bits/stdc++.h>
using namespace std;

class Point {
    
    
	double x, y;
public:
	Point() {
    
    }

	Point(double x,double y):x(x),y(y){
    
    }

	double getX() {
    
     return x; }
	double getY() {
    
     return y; }

	double getDisTo(Point& p) {
    
    
		return sqrt(pow(x - p.x, 2) + pow(y - p.y,2));
	}

	void setXY(int x,int y){
    
    
		this->x = x;
		this->y = y;
	}

	~Point(){
    
    }
};

class Circle {
    
    
	Point centre;
	double radius;
public:
	Circle() {
    
    }

	Circle(double x, double y, double r) {
    
    
		centre.setXY(x, y);
		radius = r;
	}

	double getArea() {
    
    
		return 2.1415926 * radius * radius;
	}

	void moveCentreTo(double x1, double y1) {
    
    
		centre.setXY(x1, y1);
	}

	bool isContain(Point &p) {
    
    
		double distance = centre.getDisTo(p);
		return distance <= radius;
	}

};

int main() {
    
    
	int x, y, r;
	cin >> x >> y >> r;
	Circle c(x, y, r);
	int n;
	cin >> n;
	vector<Point>v(n);
	
	for (auto& it : v) {
    
    
		cin >> x >> y;
		it.setXY(x, y);
		if (c.isContain(it))
			cout << "inside" << endl;
		else
			cout << "outside" << endl;
	}
	cin >> x >> y;
	c.moveCentreTo(x, y);
	cout << "after move the centre of circle:" << endl;
	for (auto& it : v) {
    
    
		if (c.isContain(it))
			cout << "inside" << endl;
		else
			cout << "outside" << endl;
	}
	return 0;
}

B. Complejo (clase y objeto + construcción)

Tema Descripción

Escriba una clase de números complejos, que pueda realizar operaciones de suma y resta, y pueda generar información de números complejos. Requiere al menos los siguientes métodos:

1. El constructor predeterminado (sin parámetros), establece la parte real y la parte imaginaria en 1;

2. Hay un constructor con parámetros, asignando valores a la parte real y la parte imaginaria;

3. Operación de suma, calcula la suma de dos números complejos;

4. Operación de resta, calcula la diferencia entre dos números complejos;

5. Método de salida, salida del valor del número complejo actual

ingresar

El número de grupos de datos de prueba t Las partes reales e imaginarias de los dos números complejos del primer grupo Las partes reales e imaginarias de las partes reales e imaginarias de los dos números complejos del segundo grupo...

producción

La diferencia del primer conjunto de dos números complejos y el primer conjunto de dos números complejos

Muestra de entrada 1

4
2 1 2 1
2
1 2 -1 3 1 2 -6
3 3 2 2

muestra de salida 1

suma:4+2i
resto:0
suma:4
resto:2i
suma:5-5i
resto:1+7i
suma:5+5i
resto:1+i

código de CA

#include<bits/stdc++.h>
using namespace std;

class Complex
{
    
    
public:
	Complex();
	Complex(int, int);
	~Complex();
	Complex add(Complex&);
	Complex sub(Complex&);
	void display();


private:
	int a, b;
};

Complex::Complex()
{
    
    
	a = b = 0;
}

Complex::Complex(int a, int b) :a(a), b(b)
{
    
    
}

Complex::~Complex()
{
    
    
}

Complex Complex::add(Complex& c1)
{
    
    
	return Complex(a + c1.a, b + c1.b);
}

Complex Complex::sub(Complex& c1)
{
    
    
	return Complex(a - c1.a, b - c1.b);
}

void Complex::display()
{
    
    
	if (!(a || b)) {
    
    
		cout << 0 << endl;
		return;
	}

	if (a)
		cout << a;

	if (b > 0) {
    
    
		if(a)
		cout << "+";
		if (b != 1)
			cout << b;
		cout << "i" ;

	}
	else if (b < 0) {
    
    
		if (b != -1)
			cout << b << "i" ;
		else
			cout << "-i";
	}
	cout << endl;
}

int main() {
    
    
	int t;
	cin >> t;
	while (t--)
	{
    
    
		int a, b, c, d;
		cin >> a >> b >> c >> d;
		Complex c1(a, b), c2(c, d);
		cout << "sum:";
		c1.add(c2).display();
		cout << "remainder:";
		c1.sub(c2).display();
	}
	return 0;
}

C. Promoción del número de teléfono (constructor de copias)

Tema Descripción

Defina una clase de número de teléfono CTelNumber, que contiene un miembro de datos de puntero de carácter y constructores para construcción, destrucción, impresión y copia.

El puntero de carácter se usa para crear dinámicamente una matriz de caracteres y luego guardar la entrada del número de teléfono desde el exterior

La función del constructor es establecer el número de teléfono de 7 dígitos ingresado por el teclado para el objeto,

La función del constructor de copia es usar el objeto de número original de 7 dígitos para actualizar a un objeto de número de 8 dígitos, es decir, el objeto de la construcción de copia es una actualización del objeto de origen. es el número de teléfono original que comienza con 2, 3 y 4 Agregue 8 al frente y agregue 2 al frente del 5, 6, 7 y 8 originales.

Nota: Número de teléfono legal: 1. La longitud es de 7 dígitos 2. Los caracteres del número de teléfono son todos caracteres numéricos 3. El primer carácter solo puede ser los siguientes caracteres: 2, 3, 4, 5, 6, 7 , 8 . Las entradas que no coincidan con las anteriores son ilegales

ingresar

El número de grupos de datos de prueba t

primeros 7 dígitos

segundo número de 7 dígitos

producción

El número después del primer número se eleva

Número elevado del segundo número

Si la actualización del número no se realiza correctamente, aparecerá un mensaje de error; consulte el ejemplo para obtener más información.

Muestra de entrada 1

3
6545889
3335656
565655

muestra de salida 1

26545889
83335656
Número de teléfono ilegal

código de CA

#include<bits/stdc++.h>
using namespace std;

class CTelNumber {
    
    
	string id;
public:
	CTelNumber() {
    
    
		cin >> id;
	}

	~CTelNumber()
	{
    
    
		id.clear();
	}

	void print() {
    
    
		cout << id << endl;
	}

	bool isLeagle() {
    
    
		if (id.length() != 7)
			return false;
		for (auto& it : id)
			if (!isdigit(it))
				return false;
		if (id[0] == '0' || id[0] == '1' || id[0] == '9')
			return false;
		return true;
	}

	CTelNumber(const CTelNumber& p) {
    
    
		id = p.id;
		if (id[0] >= '2' && id[0] <= '4')
			id = "8" + id;
		else if (id[0] >= '5' && id[0] <= '8')
			id = "2" + id;
	}

};

int main() {
    
    
	int t;
	cin >> t;
	while (t--){
    
    
		CTelNumber c;
		if (c.isLeagle()) {
    
    
			CTelNumber c1(c);
			c1.print();
		}
		else cout << "Illegal phone number" << endl;
	}
	return 0;
}

D. Configuración de la tarjeta de identificación (clase compuesta + estructura de copia)

Tema Descripción

Defina un PID de tarjeta de identificación, incluidos los atributos privados: tipo de tarjeta de identificación, número de identificación, fecha de nacimiento y métodos: construcción, construcción de copias, impresión, etc.

El tipo de tarjeta de identificación indica la tarjeta de identificación de primera generación o la tarjeta de identificación de segunda generación, representada por 1 y 2 respectivamente

El número de la tarjeta de identificación es una cadena con una longitud de 15 o 18

La fecha de nacimiento es una clase que contiene propiedades privadas año, mes, día y constructores, etc. (agregue otros métodos según sea necesario)

Tenga en cuenta que el constructor es una clase compuesta y se debe considerar la construcción de los miembros de la clase compuesta.

La función de impresión genera todos los atributos de la tarjeta de identificación, vea el ejemplo para el formato de salida

Función de construcción de copias: si el número de la tarjeta de identificación tiene 15 dígitos, se actualizará a 18 dígitos, lo que incluye cambiar el tipo de tarjeta de identificación a 2 y luego expandir el número. Las reglas son las siguientes:

  1. Los dígitos 7 a 12 de la tarjeta de identificación original de 15 dígitos representan la fecha de nacimiento, dos dígitos cada uno; expanda los 2 dígitos del año a cuatro dígitos.

  2. Sume los 17 números expandidos, tome el último número de la suma, si el último número es 0, cambie el 0 a X, luego coloque este número como el dígito 18

3. Si el número de la tarjeta de identificación ya tiene 18 dígitos, no es necesario actualizar

Por ejemplo, la cédula 123456910203000 significa que la persona nació el 3 de febrero de 1991, y luego según la fecha de nacimiento del atributo de clase, se sabe que es 1991, no 2091. Entonces se expande a 12345619910203000

Luego agregue 17 números para obtener 46, tome los últimos 6 y finalmente expanda a 123456199102030006

ingresar

La entrada t en la primera línea representa t ejemplos

En la segunda línea, ingrese 5 atributos de una tarjeta de identificación, en orden: tipo, número, año de nacimiento, mes, día

Ingrese t líneas a su vez

producción

Use el método del constructor de copias para actualizar el número de la tarjeta de identificación y luego genere

Muestra de entrada 1

3
1 123456910203000 1991 2 3
2 654321200001018889 2000 1 1
1 234567001217000 2000 12 17

muestra de salida 1

tipo=2 nacimiento=1991.02.03
ID=123456199102030006
tipo=2 nacimiento=2000.01.01
ID=654321200001018889
tipo=2 nacimiento=2000.12.17
ID=23456720001217000X

código de CA

#include<bits/stdc++.h>
using namespace std;

class Date {
    
    
	int y, m, d;
public:
	Date() {
    
      }
	Date(int y, int m, int d) :y(y), m(m), d(d) {
    
    }
	int getYear() {
    
     return y; }
	int getMonth() {
    
     return m; }
	int getDay() {
    
     return d; }
	void init() {
    
     cin >> y >> m >> d; }
};


class Pid {
    
    
	int type;
	string id;
	Date birthday;
public:
	Pid() {
    
    
		cin >> type >> id;
		birthday.init();
	}

	Pid(const Pid& pid) {
    
    
		type = pid.type;
		id = pid.id;
		birthday = pid.birthday;
		if (type == 1) {
    
    
			id.erase(6, 2);
			id.insert(6, to_string(birthday.getYear()));
			int sum = 0;
			for (auto& it : id) {
    
    
				sum += it - '0';
			}
			sum %= 10;
			if (sum == 0)
				id.push_back('X');
			else
				id.push_back(sum + '0');
			type = 2;
		}
	}

	void display() {
    
    
		cout << "type=" << type << " ";
		cout << "birth=" << birthday.getYear() << "." << setfill('0') << setw(2) << birthday.getMonth() << "." << setfill('0') << setw(2) << birthday.getDay() << endl;
		cout << "ID=" << id << endl;
	}


};

int main() {
    
    
	int t;
	cin >> t;
	while (t--) {
    
    
		Pid id;
		Pid update_id(id);
		update_id.display();
	}
	return 0;
}

E. Copia de seguridad del software (constructor de copias)

Tema Descripción

Como objeto, el software también se puede describir por clase. Los atributos del software incluyen el nombre del software, el tipo (O, T y B representan la versión original, la versión de prueba o la copia de seguridad), la fecha de caducidad válida (representada por el subobjeto de clase CDate) y medios de almacenamiento (D, H y U se utilizan para representar disco óptico, disco magnético y disco U respectivamente), etc. La copia del software se puede realizar a través del constructor de copias. En este momento, en el constructor de copias, el tipo de software se cambia a "B", el medio de almacenamiento se cambia a "H", y los demás permanecen sin cambios. Intente completar la implementación de las funciones de los miembros de la construcción, construcción e impresión de copias de esta clase (incluidos cuántos días siguen siendo válidos desde el 7 de abril de 2015 y si ha expirado).

Cuando la fecha de caducidad válida del software de entrada es 0, 0, 0, 0, significa que no hay límite de fecha y es ilimitado; cuando la fecha de entrada es anterior al 7 de abril de 2015, está caducada y significa caducado; si la fecha de entrada es en abril de 2015 Después de 7 días, se muestran los días restantes después de eso. Para obtener información de salida específica, consulte el ejemplo de salida.

Se adjunta la implementación de la clase CDate:

class CDate
{ private: int año, mes, día; public: CDate(int y, int m, int d) { año = y; mes = m; día = d; } bool esAñoBisiesto() { return (año%4 = = 0 && año%100 != 0) || año%400 == 0; } int obtenerAño() { devolver año; } int obtenerMes() { devolver mes; } int obtenerDía() { devolver día; } int obtenerDíadelAño( ) // Calcular el número de días desde el 1 de enero del año actual { int i, sum=day; int a[13]={0,31,28,31,30,31,30,31,31,30, 31,30,31}; int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};












if (isLeapYear())
for(i=0;i<month;i++) sum +=b[i];
else
for(i=0;i<mes;i++) sum +=a[i];

suma devuelta;
}
};

ingresar

El número de grupos de datos de prueba t

primer nombre del programa

El primer tipo de software El primer tipo de medio de software El primer período de validez del software año mes día

segundo nombre del programa

El segundo tipo de software El segundo tipo de medio de software El segundo período de validez del software año mes día

producción

nombre: el primer nombre del software

tipo: el primer tipo de software

medios: el primer tipo de medio de software

Días válidos después del primer software 2015-4-7

nombre: el primer nombre del software

tipo: copia de seguridad

medios: disco duro

Días válidos después del primer software 2015-4-7

Muestra de entrada 1

3
Photoshop_CS5
OD 0 0 0
Audition_3.0
BU 2015 2 3
Visual_Studio_2010
J 2015 5 5

muestra de salida 1

nombre:Photoshop_CS5
tipo:
medio original:disco óptico
este software tiene uso ilimitado

nombre:Photoshop_CS5
tipo:
medio de copia de seguridad:disco duro
este software tiene un uso ilimitado

nombre:Audition_3.0
tipo:
medio de copia de seguridad:disco USB
este software ha caducado

nombre:Audition_3.0
tipo:
medio de copia de seguridad:disco duro
este software ha caducado

nombre:Visual_Studio_2010
tipo:
medio de prueba:disco duro
este software caducará en 28 días

nombre:Visual_Studio_2010
tipo:
medio de copia de seguridad:disco duro
este software caducará en 28 días

código de CA

#include<bits/stdc++.h>
using namespace std;


class CDate
{
    
    
	int year, month, day;
public:
	CDate() {
    
    };
	CDate(int y, int m, int d) {
    
     year = y; month = m; day = d; }

	CDate(const CDate& c) {
    
    
		year = c.year;
		month = c.month;
		day = c.day;
	}

	bool isLeapYear() {
    
     return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; }
	int getYear() {
    
     return year; }
	int getMonth() {
    
     return month; }
	int getDay() {
    
     return day; }
	int getDayofYear()         //计算日期从当年1月1日算起的天数
	{
    
    
		int i, sum = day;
		int a[13] = {
    
     0,31,28,31,30,31,30,31,31,30,31,30,31 };
		int b[13] = {
    
     0,31,29,31,30,31,30,31,31,30,31,30,31 };

		if (isLeapYear())
			for (i = 0; i < month; i++)   sum += b[i];
		else
			for (i = 0; i < month; i++)   sum += a[i];

		return sum;
	}

	void goTomorrow() {
    
    
		int a[13] = {
    
     0,31,28,31,30,31,30,31,31,30,31,30,31 };
		if (isLeapYear()) {
    
    
			a[2] += 1;
		}
		day++;
		if (day > a[month]) {
    
    
			day = 1;
			month++;
		}

		if (month > 12) {
    
    
			month = 1;
			year++;
		}
	}

	bool operator!=(CDate& date) {
    
    
		if (year != date.year)
			return true;
		if (month != date.month)
			return true;
		if (day != date.day)
			return true;
		return false;
	}

};

class Software {
    
    
	string name;
	char type, media;
	CDate ddl;
public:
	Software() {
    
    }

	Software(string name, char type, char hard, CDate ddl) {
    
    
		this->name = name;
		this->type = type;
		this->media = hard;
		this->ddl = ddl;
	}

	Software(const Software& s) {
    
    
		this->name = s.name;
		this->type = 'B';
		this->media = 'H';
		this->ddl = s.ddl;
	}

	string getName() {
    
    
		return name;
	}


	bool isOverdue() {
    
    
		if (ddl.getYear() < 2015)
			return true;
		if (ddl.getYear() > 2015)
			return false;
		if (ddl.getMonth() < 4)
			return true;
		if (ddl.getMonth() > 4)
			return false;
		if (ddl.getDay() < 7)
			return true;
		if (ddl.getDay() >= 7)
			return false;
	}

	int getRestDay() {
    
    
		CDate today(2015, 4, 7);
		int cnt = 0;
		while (today != ddl) {
    
    
			cnt++;
			today.goTomorrow();
		}
		return cnt;
	}


	void print() {
    
    
		cout << "name:" << name << endl;
		cout << "type:";
		if (type == 'B')
			cout << "backup" << endl;
		else if (type == 'T')
			cout << "trial" << endl;
		else
			cout << "original" << endl;
		cout << "media:";
		if (media == 'H')
			cout << "hard disk" << endl;
		else if (media == 'D')
			cout << "optical disk" << endl;
		else cout << "USB disk" << endl;



		if (!(ddl.getYear() || ddl.getMonth() || ddl.getDay()))
			cout << "this software has unlimited use" << endl;
		else if (isOverdue())
			cout << "this software has expired" << endl;
		else
			cout << "this software is going to be expired in " << getRestDay() << " days" << endl;
		cout << endl;
	}

};

int main() {
    
    
	int t;
	cin >> t;
	while (t--) {
    
    
		string name;
		char type, media;
		int  year, month, day;
		cin >> name >> type >> media >> year >> month >> day;
		Software s(name, type, media, CDate(year, month, day));
		s.print();
		Software copy_s(s);
		copy_s.print();

	}
	return 0;
}

F. Carrito de compras (clase compuesta)

Tema Descripción

Defina una clase de producto, incluidos los miembros de datos privados: número de producto, nombre, color, tamaño, precio unitario, cantidad. Las funciones miembro incluyen: calcular el precio total (precio unitario * cantidad) y generar información sobre productos básicos. Para el formato de salida específico, vea la salida de muestra. Se pueden agregar constructores y otras funciones según las necesidades del tema.

Defina una clase de carrito de compras, incluidos los miembros de datos privados: colección de objetos de productos, número total de productos y precio total de todos los productos en el carrito de compras. Los métodos incluyen: agregar productos, eliminar productos, reducir la cantidad de productos, aumentar la cantidad de productos y mostrar la lista de productos en el carrito de compras. Se pueden agregar constructores y otras funciones según las necesidades del tema.

Escriba la función principal, defina los objetos de clase anteriores y realice la simulación simple del carrito de compras de acuerdo con la entrada y salida de la muestra.

Las operaciones del carrito de compras están representadas por AGREGAR, ELIMINAR, ARRIBA y ABAJO, y el formato específico se describe a continuación:

AGREGAR No. de artículo Nombre del artículo Color Tamaño Precio unitario Cantidad//Agregue 1 o más artículos similares Si el carrito de compras ya tiene un producto con el número especificado, simplemente aumente la cantidad, si no, agréguelo al encabezado del carrito de compras .

ELIMINAR número de artículo//Elimine todos los artículos con el número de artículo dado en el carrito de compras, no hay ningún caso de eliminación fallida, es decir, debe haber un artículo con el número dado en el carrito de compras.

ARRIBA número de artículo // Aumente la cantidad de artículos en el número de artículo en el carrito de compras en 1, y no hay ningún caso en el que la operación falle.

ABAJO número de artículo//El número de artículos en el número de artículo en el carrito de compras se reduce en 1, y el mínimo es 1.

Para comprender mejor el problema, puede probar la operación en el carrito de compras de Jingdong. Los datos de la muestra proceden de esta web, incluidos colores y tallas. Para simplificar el tema, suponga que el mismo producto tiene diferentes colores, tamaños y números.

ingresar

Número de pruebas t

Cada conjunto de datos de prueba es:

El número de operaciones del carrito de la compra n, seguido de n operaciones de fila.

producción

Para cada conjunto de datos de prueba, genere la lista de artículos en el carrito de compras después de la operación. El formato de salida se muestra en la muestra, y se generan 10 símbolos antes de las estadísticas del artículo. El carrito de compras después de todas las operaciones de datos de prueba no está vacío.

Muestra de entrada 1

1
8
ADD 2018040801 Green inverter aire acondicionado de calefacción y refrigeración KFR-26GW grande 1 hp inversor colgador 2999 1 ADD 2018040802
Changhong 65D2P alta definición HDR panel plano LED LCD 1 1 4799 1 ADD 2018040803 Konka
LED55X9 inteligencia artificial televisor de panel plano nulo 55 pulgadas 4 999 1
UP 2018040802
UP 2018040803
DOWN 2018040803
DELETE 2018040802
ADD 2018040802 Changhong 65D2P HD HDR panel LED LCD 1 1 4799 2

muestra de salida 1

Lista de productos:
producto, color, tamaño, precio unitario, cantidad ,
subtotal Aire acondicionado de refrigeración y calefacción con inversor Gree KFR-26GW, grande 1 HP, inversor colgado, 2999,00, 1,2999,00 ---------- 4 artículos, valor total del artículo 17596.00



código de CA

#include<bits/stdc++.h>
using namespace std;

class Good {
    
    
	string id, name, color, size;
	double price;
	int num;
public:
	Good() {
    
    
		cin >> id >> name >> color >> size >> price >> num;
	}

	double getSumPrice() {
    
    
		return num * price;
	}

	string getId() {
    
    
		return id;
	}

	int getNum() {
    
    
		return num;
	}

	void display() {
    
    
		cout << name << "," << color << "," << size << "," << fixed << setprecision(2) << price << "," << num << "," << fixed << setprecision(2) << getSumPrice() << endl;
	}

	void add(int n = 1) {
    
    
		num += n;
	}

	void down() {
    
    
		num--;
		if (num < 1)
			num = 1;
	}


};

class Cat {
    
    
	list<Good>set;
public:
	Cat() {
    
    }

	void ADD() {
    
    
		Good new_good;
		for (auto& good : set) {
    
    
			if (good.getId() == new_good.getId()) {
    
    
				good.add(new_good.getNum());
				return;
			}
		}
		set.push_front(new_good);
	}

	void UP() {
    
    
		string new_id;
		cin >> new_id;
		for (auto& good : set) {
    
    
			if (good.getId() == new_id) {
    
    
				good.add();
				return;
			}
		}
	}

	void DOWN() {
    
    
		string new_id;
		cin >> new_id;
		for (auto& good : set) {
    
    
			if (good.getId() == new_id) {
    
    
				good.down();
				return;
			}
		}
	}

	void DELETE() {
    
    
		string s;
		cin >> s;
		for (auto it = set.begin(); it != set.end(); it++)
		{
    
    
			if (it->getId() == s) {
    
    
				set.erase(it);
				return;
			}
		}
	}


	int getGoodNum() {
    
    
		int cnt = 0;
		for (auto& it : set)
			cnt += it.getNum();
		return cnt;
	}

	double getSumPrice() {
    
    
		double sum = 0;
		for (auto& it : set) {
    
    
			sum += it.getSumPrice();
		}
		return sum;
	}

	void print() {
    
    
		cout << "商品清单:" << endl;
		cout << "商品,颜色,尺码,单价,数量,小计" << endl;
		for (auto& it : set) {
    
    
			it.display();
		}
		cout << "----------" << endl;
		cout << getGoodNum() << "件商品,总商品金额" << fixed << setprecision(2) << getSumPrice() << endl;
	}

};


int main() {
    
    
	int t;
	cin >> t;
	while (t--) {
    
    
		Cat c;
		int n;
		cin >> n;
		while (n--) {
    
    
			string s;
			cin >> s;
			if (s == "ADD")
				c.ADD();
			else if (s == "UP")
				c.UP();
			else if (s == "DOWN")
				c.DOWN();
			else
				c.DELETE();
		}
		c.print();
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_46655675/article/details/129319908
Recomendado
Clasificación