Untitled

 avatar
unknown
plain_text
2 months ago
13 kB
3
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;

    }

    
    //!TODO: acordarse de agregar v[cantidadCamisetas].codigo  

    while (getline(f1, aux))
	{

        if (aux.empty()) continue;

        cout << "Lee por " << cantidadCamisetas << " el codigo " << aux << endl;

        v[cantidadCamisetas].codigo = aux;

        getline(f1, aux);
        

        getline(f1, v[cantidadCamisetas].marca);

        getline(f1, aux);

        

        getline(f1, v[cantidadCamisetas].modelo);

        getline(f1, aux);

        f1 >> v[cantidadCamisetas].precio;

        f1.ignore();

        getline(f1, aux);

        

        f1 >> v[cantidadCamisetas].stockTotal;

        f1.ignore();

        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;

        f1.ignore();

    	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