Implementación de Clases en C++ para la Gestión de Inventario en Farmacias
Introducción al Sistema de Gestión Farmacéutica en C++
A continuación, se presenta el código fuente corregido y estructurado para la gestión de inventarios y cálculo de precios en un entorno farmacéutico utilizando Programación Orientada a Objetos.
Cálculo de Precios de Venta
El siguiente método calcula el precio de venta de un producto basándose en su fecha de caducidad, implementado en las clases tar0 y tar12:
public:
void calcularPrecioVenta(cFecha oF) {
int diasCad = diasCaducado(oF); // Calcula la cantidad de días de caducado de un producto
if (diasCad < 0) // El producto ya caducó
setPrecioVenta(0); // El producto ya caducó, debe tener valor 0 para la venta e inventario
else // Aún no caduca
if (diasCad <= 30) // El producto está próximo a caducar
setPrecioVenta((getPrecioUnitario() * 1.12) / 2); // Se vende a mitad de precio
else // La fecha de caducidad es aún lejana
setPrecioVenta(getPrecioUnitario() * 1.12); // Precio normal para productos tarifa 0
}
}; // De la clase cTarifa12Definición de la Clase Principal cFarmacia
La clase cFarmacia actúa como contenedora principal para administrar los productos, el valor total del inventario y las fechas de operación.
class cFarmacia {
cProducto **productos;
float valorInventario; // Valor económico del inventario de la farmacia
int nProdTar0; // Número de productos tarifa 0
int nProdTar12; // Número de productos tarifa 12
cFecha fecAct; // Fecha actual
public:
cFarmacia() {
setValorInventario(0);
setNproductoTar0(0);
setNproductoTar12(0);
fecAct = cFecha();
productos = NULL;
} // Constructor
~cFarmacia() {
setValorInventario(0);
setNproductoTar0(0);
setNproductoTar12(0);
for(int i = 0; (i < getNproductoTar0()); i++) // Ciclo de eliminación de los objetos referidos desde el vector de punteros
delete productos[i]; // Elimina un objeto
delete [] productos; // Eliminar los elementos creados dinámicamente
productos = NULL; // Devolver el apuntador del vector al valor inicial
} // Destructor
void setValorInventario(float val) { valorInventario = val; }
void setNproductoTar0(int val) { nProdTar0 = val; productos = new cProducto*[val]; }
void setNproductoTar12(int val) { nProdTar12 = val; productos = new cProducto*[val]; }
void setProdTar0(cTarifa0 val, int pos) { productos[pos] = new cTarifa0; *productos[pos] = val; } // Almacena un producto tar0 en el vector y posición correspondiente
void setProdTar12(cTarifa12 val, int pos) { productos[pos] = new cTarifa12; *productos[pos] = val; } // Almacena un producto tar12 en el vector y posición correspondiente
void setFechaAct(cFecha oFec) { fecAct = oFec; }
float getValorInventario() { return valorInventario; }
int getNproductoTar0() { return nProdTar0; }
int getNproductoTar12() { return nProdTar12; }
cProducto* getProdTar0(int pos) { return productos[pos]; }
cProducto* getProdTar12(int pos) { return productos[pos]; }
int getFechaActDia() { return fecAct.getDia(); }
int getFechaActMes() { return fecAct.getMes(); }
int getFechaActAnio() { return fecAct.getAnio(); }
cFecha getFechaActual() { return fecAct; }
void ordenarProductosTar0() { // Método que ordena alfabéticamente los productos tar0
cProducto *oAux; // Variable de intercambio
string aux1, aux2; // Variables para los nombres de los productos