// IG17 2004-05 // Empresa.cpp // 10-12-2004 #include using namespace std; #include "Empresa.h" Empresa::Nodo::Nodo(Empleado *e, Nodo *s) : empleado(e), sig(s) { } Empresa::Nodo::~Nodo() { delete empleado; } Empresa::Empresa (string n): nombre(n), listaEmpleados(NULL), cantidadEmpleados(0) { } void Empresa::Insertar (Empleado *e) { listaEmpleados = new Nodo(e, listaEmpleados); cantidadEmpleados++; } void Empresa::Despedir (string afortunado) { Nodo *anterior = NULL; for (Nodo *aux = listaEmpleados; aux != NULL; aux = aux->sig) { if (aux->empleado->Nombre() == afortunado) { if (anterior == NULL) listaEmpleados = aux->sig; else anterior->sig = aux->sig; delete aux; cantidadEmpleados--; return; } anterior = aux; } } int Empresa::CantidadEmpleados() const { return cantidadEmpleados; } void Empresa::Ver () const { cout << "NOMBRE DE LA EMPRESA: " << nombre << endl; cout << "CANTIDAD DE EMPLEADOS: " << cantidadEmpleados << endl; cout << "SUMA DE SUELDOS: " << CalcularSumaSueldos() << endl; cout << "DATOS DE LOS EMPLEADOS:" << endl; if (listaEmpleados == NULL) cout << "No hay empleados." << endl; else { for (Nodo *aux = listaEmpleados; aux != NULL; aux = aux->sig) { cout << endl; aux->empleado->Ver(); cout << "SUELDO NETO: " << aux->empleado->CalcularSueldo() << endl; } } cout << endl; } float Empresa::CalcularSumaSueldos() const { float suma = 0; for (Nodo *aux = listaEmpleados; aux != NULL; aux = aux->sig) suma += aux->empleado->CalcularSueldo(); return suma; } void Empresa::Vaciar() { while (listaEmpleados != NULL) { Nodo *aux = listaEmpleados; listaEmpleados = listaEmpleados->sig; delete aux; } cantidadEmpleados = 0; nombre = ""; } Empresa::~Empresa() { Vaciar(); } Empresa::Empresa(const Empresa &e) : listaEmpleados(NULL) { *this = e; } Empresa & Empresa::operator=(const Empresa &e) { if (this != &e) { Nodo *aux2 = NULL; Vaciar(); nombre = e.nombre; cantidadEmpleados = e.cantidadEmpleados; for (Nodo *aux = e.listaEmpleados; aux != NULL; aux = aux->sig) if (aux2 == NULL) aux2 = listaEmpleados = new Nodo(aux->empleado->Clonar()); else aux2 = aux2->sig = new Nodo(aux->empleado->Clonar()); } return *this; }