Está en la página 1de 6

#include <iostream>

#include <string>

#include <vector>

#include <fstream>

using namespace std;

class Producto {

protected:

int codigo;

string nombre;

double precio_costo;

public:

Producto(int codigo, string nombre, double precio_costo) : codigo(codigo), nombre(nombre),


precio_costo(precio_costo) {}

virtual double calcular_precio_venta() = 0;

int getCodigo() const {

return codigo;

string getNombre() const {

return nombre;

}
double getPrecioCosto() const {

return precio_costo;

};

class ProductoNacional : public Producto {

private:

string empresa_productora;

public:

ProductoNacional(int codigo, string nombre, double precio_costo, string empresa_productora) :


Producto(codigo, nombre, precio_costo), empresa_productora(empresa_productora) {}

double calcular_precio_venta() override {

return precio_costo + (0.05 * precio_costo);

string getEmpresaProductora() const {

return empresa_productora;

};

class ProductoExtranjero : public Producto {

private:

string pais_procedencia;
double precio_compra_usd;

public:

ProductoExtranjero(int codigo, string nombre, double precio_costo, string pais_procedencia, double


precio_compra_usd) : Producto(codigo, nombre, precio_costo), pais_procedencia(pais_procedencia),
precio_compra_usd(precio_compra_usd) {}

double calcular_precio_venta() override {

return precio_costo + (0.05 * precio_costo) + (27 * precio_compra_usd);

string getPaisProcedencia() const {

return pais_procedencia;

double getPrecioCompraUSD() const {

return precio_compra_usd;

};

class Almacen {

private:

int id;

vector<Producto*> productos;

public:
Almacen(int id) : id(id) {}

void agregarProducto(Producto* producto) {

productos.push_back(producto);

void eliminarProducto(int codigo) {

for (auto it = productos.begin(); it != productos.end(); ++it) {

if ((*it)->getCodigo() == codigo) {

productos.erase(it);

break;

void generarInforme() {

ofstream archivo("informe.txt");

if (archivo.is_open()) {

for (auto producto : productos) {

archivo << "Nombre: " << producto->getNombre() << endl;

archivo << "Precio de Venta: " << producto->calcular_precio_venta() << endl;

archivo << endl;

archivo.close();

cout << "Informe generado correctamente." << endl;


} else {

cout << "Error al abrir el archivo." << endl;

void generarListaDeficitarios(double valor_minimo) {

ofstream archivo("deficitarios.txt");

if (archivo.is_open()) {

for (auto producto : productos) {

if (producto->calcular_precio_venta() > valor_minimo) {

archivo << "Nombre: " << producto->getNombre() << endl;

archivo << "Precio de Venta: " << producto->calcular_precio_venta() << endl;

archivo << endl;

archivo.close();

cout << "Lista de productos deficitarios generada correctamente." << endl;

} else {

cout << "Error al abrir el archivo." << endl;

};

int main() {

// Ejemplo de uso del sistema


Almacen almacen1(1);

ProductoNacional producto1(1, "Producto Nacional 1", 10.0, "Empresa A");

ProductoExtranjero producto2(2, "Producto Extranjero 1", 20.0, "País A", 15.0);

almacen1.agregarProducto(&producto1);

almacen1.agregarProducto(&producto2);

almacen1.generarInforme();

almacen1.generarListaDeficitarios(15.0);

return 0;

También podría gustarte