Código C++: Clases cFecha y cProducto con Lectura de Fechas y Control de Inventario
Método leerFecha() en C++
A continuación se muestra el método leerFecha(), encargado de solicitar al usuario una fecha y validar cada uno de sus componentes.
Descripción del método
El método utiliza ciclos do-while para validar la entrada de datos:
- Año: no puede ser negativo.
- Mes: debe estar entre 1 y 12.
- Día: debe estar entre 1 y el número de días del mes indicado.
Código
void leerFecha(){ //método para ingresar una fecha
int dx, mx, ax; //para lectura de días, mes y año
do { //ciclo de lectura de año
cout << endl << "Año: ";
cin >> ax; //lectura
} while (ax < 0); //repetir lectura mientras ingrese años negativos
do { //ciclo de lectura de MES
cout << endl << "Mes: ";
cin >> mx; //lectura
} while ((mx < 1) || (mx > 12)); //repetir lectura mientras ingrese mes fuera de rango
do { //ciclo de lectura de día
cout << endl << "Día: ";
cin >> dx; //lectura
} while ((dx < 1) || (dx > diasMes(mx, ax))); //repetir lectura mientras ingrese días fuera de rango permitido
setDia(dx); //actualiza el día leído
setMes(mx); //actualiza el mes leído
setAnio(ax); //actualiza el año leído
} //de leerFecha
}; //de la clase cFechaClase cProducto
La clase cProducto representa de forma genérica los productos de un inventario. Es una clase base abstracta, ya que contiene el método virtual puro calcularPrecioVenta(), que debe ser implementado por las clases derivadas tar0 y tar12.
Atributos principales
- codigo: identificador del producto.
- nombre: descripción del producto.
- precioUnitario: precio sin impuestos ni descuentos.
- stock: existencias disponibles.
- precioVenta: precio final con impuestos y descuentos.
- fechaCaducidad: objeto de tipo
cFecha(composición entre clases).
Constructor y destructor
Ambos inicializan los atributos con valores por defecto mediante los métodos set correspondientes.
Código
class cProducto { //definición de la clase para todos los productos
char codigo[EXT1]; //código que identifica a cada producto
char nombre[EXT2]; //nombre o descripción del producto
float precioUnitario; //precio unitario, sin impuestos ni descuentos
int stock; //existencias del producto
float precioVenta; //valor calculado de precio de venta, con impuestos y descuentos
cFecha fechaCaducidad; //composición entre clases
public:
cProducto(){ setCodigo("0000"); setNombre(" "); setPrecioUnitario(0); setStock(0); setPrecioVenta(0); } //constructor
~cProducto(){ setCodigo("0000"); setNombre(" "); setPrecioUnitario(0); setStock(0); setPrecioVenta(0); } //destructor
void setCodigo(char val[]){ strcpy(codigo, val); }
void setNombre(char val[]){ strcpy(nombre, val); }
void setPrecioUnitario(float val){ precioUnitario = val; }
void setStock(int val){ stock = val; }
void setPrecioVenta(float val){ precioVenta = val; }
void setFechaCaducidad(cFecha oFec){ fechaCaducidad = oFec; }
virtual void calcularPrecioVenta(cFecha oF) = 0; //método que calcula el precio de venta, implementado en las clases tar0 y tar12
string getCodigo(){ return codigo; }
string getNombre(){ return nombre; }
float getPrecioUnitario(){ return precioUnitario; }
int getStock(){ return stock; }
float getPrecioVenta(){ return precioVenta; }
cFecha getFechaCaducidad(){ return fechaCaducidad; }
};