Ordenamiento de Productos en C++: Burbuja con Clases, Vectores de Punteros y Control de Inventario en una Farmacia
Ordenamiento de productos en C++ con clases y punteros
A continuación se muestra el código que implementa el ordenamiento burbuja de los productos de una farmacia según su nombre, así como la función principal que permite ingresar los productos, clasificarlos por tarifa y calcular el valor del inventario.
Método de ordenamiento de productos
for (int i = 0; (i < (nProdTar0 - 1)); i++) // ciclo del pivote
for (int j = (i + 1); (j < nProdTar0); j++) { // ciclo de recorrido de los elementos a comparar
aux1 = ((productos[i])->getNombre()); // el operador -> se utiliza para acceder a la posición de memoria
aux2 = ((productos[j])->getNombre()); // extrae los nombres de los productos
if (aux1.compare(aux2) > 0) { // está desordenado
oAux = productos[i];
productos[i] = productos[j];
productos[j] = oAux;
} // del compare
} // del for j
} // de ordenarProductosTar0
}; // de la clase cFarmaciaFunción principal
void main() { // función principal
system("color 05");
int NumProd(int limite); // prototipo de la función que ingresa la cantidad de productos a procesar
int tipoProd; // permite al usuario definir productos de tarifa 0 y 12
int contTar0 = 0, contTar12 = 0;
cTarifa0 leerProdTar0(cFecha oFechaAct); // prototipo de la función que ingresa los datos de un producto tarifa 0
cTarifa12 leerProdTar12(cFecha oFechaAct); // prototipo de la función que ingresa los datos de un producto tarifa 12
void imprimirProdTar0(cProducto *oAux); // prototipo de la función que imprime los datos de un producto tarifa 0
void imprimirProdTar12(cProducto *oAux); // prototipo de la función que imprime los datos de un producto tarifa 12
cFarmacia oF; // instanciar el objeto farmacia
cFecha oFecAux; // auxiliar para lectura de fecha actual
cout << endl << "FECHA ACTUAL";
// lectura de la fecha actual
oFecAux.leerFecha(); // llamado al método de ingreso de la fecha actual
oF.setFechaAct(oFecAux); // llamado al método de actualización de la fecha actual
cout << endl << "PRODUCTOS";
oF.setNproductoTar0(NumProd(9999));
for (int i = 0; (i < oF.getNproductoTar0()); i++) { // ciclo de recorrido del vector de productos tarifa 0
do {
cout << endl << "Producto Tar <0> o <12>: ";
cin >> tipoProd;
} while (!((tipoProd == 0) || (tipoProd == 12))); // repetir si ingresan valores no válidos
if (tipoProd == 0) { // es producto tarifa 0
oF.setProdTar0(leerProdTar0(oF.getFechaActual()), i); // almacena el producto leído en la posición i del vector de tarifa 0
// acumulación del valor del inventario de la farmacia
oF.setValorInventario(oF.getValorInventario() + (oF.getProdTar0(i)->getStock() * oF.getProdTar0(i)->getPrecioVenta()));
} else { // es producto tarifa 12%
oF.setProdTar12(leerProdTar12(oF.getFechaActual()), i); // almacena el producto leído en la posición i del vector de tarifa 12
oF.setValorInventario(oF.getValorInventario() + (oF.getProdTar12(i)->getStock() * oF.getProdTar12(i)->getPrecioVenta()));
} // del else
} // del for i
}