Untitled
#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