Untitled

 avatar
unknown
plain_text
a month ago
13 kB
5
Indexable
#include <iostream>
#include <fstream>
using namespace std;

const int MAX_CAMISETAS = 100;
const int MAX_TALLAS = 6;
const string TALLAS[MAX_TALLAS] = {"XS", "S", "M", "L", "XL", "XXL"};

struct Camiseta
{
    string codigo;
    string marca;
    string modelo;
    float precio;
    int stockTotal;
    int stockPorTalla[MAX_TALLAS];
    int totalVendidos;
};

typedef Camiseta Inventario[MAX_CAMISETAS];


void mostrarMenu();
void cargarCamisetasDesdeFichero(Inventario v, int &cantidadCamisetas,const string archivo);
void guardarCamisetasEnFichero(Camiseta a ,const string archivo);
void agregarCamisetaNueva(Inventario v, int &cantidadCamisetas);

void consultarCamisetaMasVendida(Inventario v, int unidadesCamisetas);

void realizarConsultas(Inventario v, int cantidadCamisetas);

void borrarContenidoArchivo(const string archivo);

void gestionarVenta(Inventario v, int cantidadCamisetas);

void calcularEstadisticas(Inventario v, int cantidadCamisetas);

int main()
{
	Inventario v;
	Camiseta a;
	int cantidadCamisetas = 0;
	
	cargarCamisetasDesdeFichero(v, cantidadCamisetas, "camisetas.txt");
	
	int opcion;
	
	
	do 
	{
		mostrarMenu();
		cin >> opcion;
		cout << endl;
		
		switch(opcion)
		{
            case 1: 
				realizarConsultas(v, cantidadCamisetas);
			break;
            case 2:
            	agregarCamisetaNueva(v, cantidadCamisetas);
            	guardarCamisetasEnFichero(v[cantidadCamisetas-1], "camisetas.txt");
			break;
            case 3:
            	gestionarVenta(v, cantidadCamisetas);
			break;
            case 4:
            	calcularEstadisticas(v, cantidadCamisetas);
			break;
            case 5:
			cout << "Saliendo del programa..." << endl;
			break;
			case 6:
				borrarContenidoArchivo("camisetas.txt");
			break;
            default: cout << "Opción no válida. Intenta de nuevo." << endl; break;
        }
		
	} while (opcion != 5);
	
	
	return 0;
}

void cargarCamisetasDesdeFichero(Inventario v, int &cantidadCamisetas,const string archivo)
{
	string aux;
	
    ifstream f1;
    f1.open("camisetas.txt");
    if (!f1.is_open())
	{
        cout << "No se pudo abrir el archivo para leer los datos." << endl;
    }
    
    while (f1 >> v[cantidadCamisetas].codigo)
	{
        f1.ignore();
        getline(f1, v[cantidadCamisetas].marca);
        getline(f1, aux);
        
        getline(f1, v[cantidadCamisetas].modelo);
        getline(f1, aux);
        
        f1 >> v[cantidadCamisetas].precio;
        getline(f1, aux);
        
        f1 >> v[cantidadCamisetas].stockTotal;
        getline(f1, aux);

        for (int i = 0; i < MAX_TALLAS; i++)
		{
            f1 >> v[cantidadCamisetas].stockPorTalla[i];
        }
        
        getline(f1, aux);
        getline(f1, aux);
        
        f1 >> v[cantidadCamisetas].totalVendidos;
    	getline(f1, aux);
        
        cantidadCamisetas++;
    }

    f1.close();
}

void guardarCamisetasEnFichero(Camiseta a, const string archivo)
{
    ofstream f2;
    f2.open("camisetas.txt", ios::app);
    if (!f2.is_open())
	{
        cout << "No se pudo abrir el archivo para guardar los datos." << endl;
    }

    f2 << a.codigo << endl;
    f2 << endl;
    
    f2 << a.marca << endl;
    f2 << endl;
    
    f2 << a.modelo << endl;
    f2 << endl;
    
    f2 << a.precio << endl;
    f2 << endl;
    
    f2 << a.stockTotal << endl;
    f2 << endl;

    for (int j = 0; j < MAX_TALLAS; j++)
	{
        f2 << a.stockPorTalla[j] << " ";
    }
        
    f2 << endl;
    f2 << endl;

    f2 << a.totalVendidos << endl;
        
    f2 << endl;

    f2.close();
}

int buscarCamisetaPorCodigo(Inventario v, int cantidadCamisetas,const string codigo)
{
	int indiceEncontrado;
    for (int i = 0; i < cantidadCamisetas; i++)
	{
        if (v[i].codigo == codigo)
		{
            indiceEncontrado = i;
            return i;
        }
    }
    return -1;
}

void mostrarMenu()
{
	setlocale(LC_ALL, "spanish");
	
    cout << "----- Menú Principal -----" << endl;
    cout << "1. Consultas" << endl;
    cout << "2. Insertar nueva camiseta" << endl;
    cout << "3. Gestionar venta" << endl;
    cout << "4. Cálculo de estadísticas" << endl;
    cout << "5. Salir y guardar cambios" << endl;
    cout << "Seleccione una opción: ";
}

void mostrarSubmenuConsultas()
{
	setlocale(LC_ALL, "spanish");
	
    cout << "----- Submenú de Consultas -----" << endl;
    cout << "1. Buscar una camiseta por código" << endl;
    cout << "2. Visualizar todos los datos de camisetas" << endl;
    cout << "3. Visualizar la camiseta más vendida" << endl;
    cout << "Seleccione una opción: ";
}

void mostrarSubmenuEstadisticas ()
{
	setlocale(LC_ALL, "spanish");
	
    cout << "----- Submenú de Estadísticas -----" << endl;
    cout << "1. Calcular el precio promedio de las camisetas" << endl;
    cout << "2. Calcular el total de dinero facturado" << endl;
    cout << "3. Calcular el porcentaje de camisetas sin stock" << endl;
    cout << "Seleccione una opción: ";
}

void agregarCamisetaNueva(Inventario v, int &cantidadCamisetas)
{
    if (cantidadCamisetas >= MAX_CAMISETAS)
	{
        cout << "No se pueden agregar más camisetas. El inventario está lleno." << endl;
        return;
    }

    Camiseta camisetaNueva;
    
    cout << "Ingrese el código de la camiseta: ";
    cin >> camisetaNueva.codigo;

    cout << "Ingrese la marca: ";
    cin >> camisetaNueva.marca;

    cout << "Ingrese el modelo: ";
    cin >> camisetaNueva.modelo;

    cout << "Ingrese el precio de venta: ";
    cin >> camisetaNueva.precio;

    camisetaNueva.stockTotal = 0;
    
	string tallas[MAX_TALLAS] = {"XS", "S", "M", "L", "XL", "XXL"};

	for (int i = 0; i < MAX_TALLAS; i++)
	{
    	cout << "Ingrese el stock de la talla " << tallas[i] << ": ";
    	cin >> camisetaNueva.stockPorTalla[i];
    	
    	camisetaNueva.stockTotal += camisetaNueva.stockPorTalla[i];
	}

    camisetaNueva.totalVendidos = 0;

    v[cantidadCamisetas] = camisetaNueva;
    
    cantidadCamisetas++;

    cout << "Camiseta agregada exitosamente." << endl;
    cout << endl;
}

void mostrarDatosCamiseta(const Camiseta camiseta)
{
    cout << "Código: " << camiseta.codigo << endl;
    cout << "Marca: " << camiseta.marca << endl;
    cout << "Modelo: " << camiseta.modelo << endl;
    cout << "Precio: " << camiseta.precio << endl;
    cout << "Stock total: " << camiseta.stockTotal << endl;
    
    cout << "Stock por talla: ";
    
    string tallas[MAX_TALLAS] = {"XS", "S", "M", "L", "XL", "XXL"};

	for (int i = 0; i < MAX_TALLAS; i++)
	{
    	cout << tallas[i] << ": " << camiseta.stockPorTalla[i] << " ";
	}

    
    cout << endl;
    cout << "Total vendidos: " << camiseta.totalVendidos << endl;
    cout << endl;
}

void realizarConsultas(Inventario v, int cantidadCamisetas)
{
    int opcion;
    mostrarSubmenuConsultas();
    cin >> opcion;
    cout << endl;
    
    switch(opcion) {
        case 1: {
            string codigo;
            
            cout << "Ingrese el código de la camiseta a buscar: ";
            cin >> codigo;
            
            int indice = buscarCamisetaPorCodigo(v, cantidadCamisetas, codigo);
            if (indice != -1)
			{
                mostrarDatosCamiseta(v[indice]);
            } else {
                cout << "No se encontró la camiseta con ese código." << endl;
                cout << endl;
            }
            break;
        }
        case 2:
            for (int i = 0; i < cantidadCamisetas; i++) {
                mostrarDatosCamiseta(v[i]);
            }
            break;
        case 3:
            consultarCamisetaMasVendida(v, cantidadCamisetas);
            break;
        default:
            cout << "Opción no válida." << endl;
    }
}

void consultarCamisetaMasVendida(Inventario v, int unidadesCamisetas)
{
    if (unidadesCamisetas == 0)
	{
        cout << "No hay camisetas en el inventario." << endl;
        return;
    }

    int indice = 0;
    
    for (int i = 1; i < unidadesCamisetas; i++)
	{
        if (v[i].totalVendidos > v[indice].totalVendidos)
		{
            indice = i;
        }
    }

    cout << "La camiseta más vendida es: " << endl;
    
    mostrarDatosCamiseta(v[indice]);
}

int obtenerTalla(const string& talla)
{
    for (int i = 0; i < MAX_TALLAS; i++)
	{
        if (TALLAS[i] == talla)
		{
            return i;
        }
    }
    return -1;
}

void gestionarVenta(Inventario v, int cantidadCamisetas)
{
    string codigo;
    string talla;
    int cantidad;

    cout << "Ingrese el código de la camiseta: ";
    cin >> codigo;

    int index = buscarCamisetaPorCodigo(v, cantidadCamisetas, codigo);
    if (index == -1)
	{
        cout << "Error: El código de la camiseta no existe." << endl;
        return;
    }

    cout << "Ingrese la talla (XS, S, M, L, XL, XXL): ";
    cin >> talla;

    int indiceTalla = obtenerTalla(talla);
    if (indiceTalla == -1)
	{
        cout << "Error: Talla inválida." << endl;
        return;
    }

    cout << "Ingrese la cantidad a vender: ";
    cin >> cantidad;

    if (cantidad > v[index].stockPorTalla[indiceTalla])
	{
        cout << "Error: No hay suficiente stock para completar la venta." << endl;
        return;
    }

    v[index].stockPorTalla[indiceTalla] -= cantidad;
    v[index].stockTotal -= cantidad;
    v[index].totalVendidos += cantidad;

    double costoTotal = cantidad * v[index].precio;
    
    cout << "Venta realizada con éxito." << endl;
    cout << "Costo total de la venta: $" << costoTotal << endl;
    cout << endl;
}


double calcularPrecioPromedio(Inventario v, int cantidadCamisetas)
{
    double sumaPrecios = 0;
    int camisetasConStock = 0;

    for (int i = 0; i < cantidadCamisetas; i++)
	{
        if (v[i].totalVendidos > 0)
		{
            sumaPrecios += v[i].precio;
            camisetasConStock++;
        }
    }

    double precioPromedio;
    
    if (camisetasConStock > 0)
	{
        precioPromedio = sumaPrecios / camisetasConStock;
    }else
	{
        precioPromedio = 0;
    }

    return precioPromedio;
}

double calcularTotalFacturado(Inventario v, int cantidadCamisetas)
{
    double total = 0;
    
    for (int i = 0; i < cantidadCamisetas; i++)
	{
        total += v[i].totalVendidos * v[i].precio;
    }
    return total;
}

double calcularPorcentajeSinStock(Inventario v, int cantidadCamisetas)
{
    int camisetasSinStock = 0;

    for (int i = 0; i < cantidadCamisetas; i++)
	{
        bool sinStock = true;
        for (int j = 0; j < 5; j++)
		{
            if (v[i].stockPorTalla[j] > 0)
			{
                sinStock = false;
            }
        }
        if (sinStock)
		{
            camisetasSinStock++;
        }
    }

    double porcentajeSinStock;
    
    if (cantidadCamisetas > 0)
	{
        porcentajeSinStock = (double)camisetasSinStock / cantidadCamisetas * 100;
    }else
	{
        porcentajeSinStock = 0;
    }

    return porcentajeSinStock;
}

void borrarContenidoArchivo(const string archivo)
{
    ofstream f2("camisetas.txt", ios::trunc);
    if (!f2)
	{
        cout << "No se pudo abrir el archivo para borrar su contenido." << endl;
        return;
    }
    f2.close();
    cout << "Contenido del archivo borrado exitosamente." << endl;
}

void calcularEstadisticas(Inventario v, int cantidadCamisetas)
{
    mostrarSubmenuEstadisticas();

    int opcion;
    cin >> opcion;

    double precioPromedio = calcularPrecioPromedio(v, cantidadCamisetas);
    double totalFacturado = calcularTotalFacturado(v, cantidadCamisetas);
    double porcentajeSinStock = calcularPorcentajeSinStock(v, cantidadCamisetas);

    switch(opcion)
    {
        case 1:
            cout << "Precio promedio de las camisetas: " << precioPromedio << "€" << endl;
            break;
        case 2:
            cout << "Total facturado: " << totalFacturado << "€" << endl;
            break;
        case 3:
            cout << "Porcentaje de camisetas sin stock: " << porcentajeSinStock << "%" << endl;
            break;
        default:
            cout << "Opción no válida." << endl;
            break;
    }
}
Leave a Comment