Untitled
unknown
plain_text
10 months ago
13 kB
7
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;
}
}Editor is loading...
Leave a Comment