You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
struct Factura {
int id_cliente;
double total;
vector detalles;
};
class Supermercado {
vector productos;
queue cola_clientes;
stack carrito_actual;
vector facturas;
int contador_clientes;
int contador_compras;
int contador_tiempo_excedido;
void cargar_productos() {
// Leer productos desde un archivo
ifstream archivo("productos.txt");
if (archivo.is_open()) {
while (!archivo.eof()) {
Producto producto;
archivo >> producto.id >> producto.nombre >> producto.descripcion >> producto.stock >> producto.precio;
productos.push_back(producto);
}
archivo.close();
} else {
cout << "Error al abrir el archivo de productos." << endl;
}
}
void agregar_cliente() {
Cliente cliente;
cliente.cedula = rand() % 10000000 + 10000000;
cout << "Ingrese el nombre del cliente: ";
cin >> cliente.nombre;
cout << "Ingrese el apellido del cliente: ";
cin >> cliente.apellido;
cout << "Ingrese el telefono del cliente: ";
cin >> cliente.telefono;
cola_clientes.push(cliente);
contador_clientes++;
}
void seleccionar_producto(int id_producto, int cantidad) {
if (carrito_actual.size() < 30) {
Carrito carrito;
carrito.id_producto = id_producto;
carrito.cantidad = cantidad;
carrito_actual.push(carrito);
} else {
cout << "El carrito no puede tener más de 30 artículos." << endl;
}
}
void procesar_compra() {
if (!cola_clientes.empty()) {
Cliente cliente = cola_clientes.front();
cola_clientes.pop();
time_t inicio = time(0);
while (!carrito_actual.empty() && time(0) - inicio < 600) {
Carrito carrito = carrito_actual.top();
carrito_actual.pop();
cliente.carrito.push_back(carrito);
}
if (time(0) - inicio >= 600) {
contador_tiempo_excedido++;
cout << "El cliente " << cliente.nombre << " " << cliente.apellido << " superó el máximo de tiempo para comprar." << endl;
} else {
contador_compras++;
Factura factura;
factura.id_cliente = cliente.cedula;
factura.total = 0;
for (Carrito carrito : cliente.carrito) {
Producto producto = productos[carrito.id_producto - 1];
factura.detalles.push_back(carrito);
factura.total += producto.precio * carrito.cantidad;
}
facturas.push_back(factura);
imprimir_ticket(factura);
}
} else {
cout << "No hay clientes en la cola." << endl;
}
}
void generar_reportes() {
cout << "Cantidad de clientes que se presentaron a comprar: " << contador_clientes << endl;
cout << "Cantidad de clientes con compras realizadas: " << contador_compras << endl;
cout << "Clientes que superaron el máximo de tiempo para comprar: " << contador_tiempo_excedido << endl;
// Calcular producto más vendido
int contador_productos[100] = {0};
for (Factura factura : facturas) {
for (Carrito carrito : factura.detalles) {
contador_productos[carrito.id_producto]++;
}
}
int id_producto_mas_vendido = 0;
int max_vendidos = 0;
for (int i = 1; i < 100; i++) {
if (contador_productos[i] > max_vendidos) {
id_producto_mas_vendido = i;
max_vendidos = contador_productos[i];
}
}
Producto producto_mas_vendido = productos[id_producto_mas_vendido - 1];
cout << "Producto más vendido: " << endl;
cout << "Referencia: " << producto_mas_vendido.id << endl;
cout << "Nombre: " << producto_mas_vendido.nombre << endl;
cout << "Cantidad vendida: " << max_vendidos << endl;
// Totales de ventas
double total_ventas = 0;
for (Factura factura : facturas) {
total_ventas += factura.total;
}
cout << "Totales de ventas: " << total_ventas << endl;
// Ultimas 10 facturas/tickets
cout << "Ultimas 10 facturas/tickets:" << endl;
for (int i = facturas.size() - 1; i >= 0 && i >= facturas.size() - 10; i--) {
imprimir_ticket(facturas[i]);
cout << endl;
}
}
};
int main() {
srand(time(0));
Supermercado hipermod;
hipermod.cargar_productos();
switch (opcion) {
case 1: hipermod.agregar_cliente();
break;
case 2:
int id_producto;
int cantidad;
cout << "Ingrese el ID del producto: ";
cin >> id_producto;
cout << "Ingrese la cantidad: ";
cin >> cantidad;
hipermod.seleccionar_producto(id_producto, cantidad);
break;
case 3: hipermod.procesar_compra();
break;
case 4: hipermod.generar_reportes();
break;
}
}
return 0;
}
Question or Bug
Your enviroment information
System: ❔ Windows 10
Compiler version/IDE: ❔ Dev-C++
The text was updated successfully, but these errors were encountered:
Exercise information
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct Producto {
int id;
string nombre;
string descripcion;
int stock;
double precio;
};
struct Carrito {
int id_producto;
int cantidad;
};
struct Cliente {
int cedula;
string nombre;
string apellido;
string telefono;
vector carrito;
};
struct Factura {
int id_cliente;
double total;
vector detalles;
};
class Supermercado {
vector productos;
queue cola_clientes;
stack carrito_actual;
vector facturas;
int contador_clientes;
int contador_compras;
int contador_tiempo_excedido;
public:
Supermercado() : contador_clientes(0), contador_compras(0), contador_tiempo_excedido(0) {}
void cargar_productos() {
// Leer productos desde un archivo
ifstream archivo("productos.txt");
if (archivo.is_open()) {
while (!archivo.eof()) {
Producto producto;
archivo >> producto.id >> producto.nombre >> producto.descripcion >> producto.stock >> producto.precio;
productos.push_back(producto);
}
archivo.close();
} else {
cout << "Error al abrir el archivo de productos." << endl;
}
}
void agregar_cliente() {
Cliente cliente;
cliente.cedula = rand() % 10000000 + 10000000;
cout << "Ingrese el nombre del cliente: ";
cin >> cliente.nombre;
cout << "Ingrese el apellido del cliente: ";
cin >> cliente.apellido;
cout << "Ingrese el telefono del cliente: ";
cin >> cliente.telefono;
cola_clientes.push(cliente);
contador_clientes++;
}
void seleccionar_producto(int id_producto, int cantidad) {
if (carrito_actual.size() < 30) {
Carrito carrito;
carrito.id_producto = id_producto;
carrito.cantidad = cantidad;
carrito_actual.push(carrito);
} else {
cout << "El carrito no puede tener más de 30 artículos." << endl;
}
}
void procesar_compra() {
if (!cola_clientes.empty()) {
Cliente cliente = cola_clientes.front();
cola_clientes.pop();
time_t inicio = time(0);
while (!carrito_actual.empty() && time(0) - inicio < 600) {
Carrito carrito = carrito_actual.top();
carrito_actual.pop();
cliente.carrito.push_back(carrito);
}
if (time(0) - inicio >= 600) {
contador_tiempo_excedido++;
cout << "El cliente " << cliente.nombre << " " << cliente.apellido << " superó el máximo de tiempo para comprar." << endl;
} else {
contador_compras++;
Factura factura;
factura.id_cliente = cliente.cedula;
factura.total = 0;
for (Carrito carrito : cliente.carrito) {
Producto producto = productos[carrito.id_producto - 1];
factura.detalles.push_back(carrito);
factura.total += producto.precio * carrito.cantidad;
}
facturas.push_back(factura);
imprimir_ticket(factura);
}
} else {
cout << "No hay clientes en la cola." << endl;
}
}
Cliente cliente;
void imprimir_ticket(Factura factura) {
cout << "Datos del cliente:" << endl;
cout << "Cédula: " << factura.id_cliente << endl;
cout << "Nombre: " << cliente.nombre << endl;
cout << "Apellido: " << cliente.apellido << endl;
cout << "Teléfono: " << cliente.telefono << endl;
cout << "Contenido del carrito:" << endl;
int indice = 1;
for (Carrito carrito : factura.detalles) {
Producto producto = productos[carrito.id_producto - 1];
cout << indice++ << ". Referencia: " << producto.id << endl;
cout << "Nombre: " << producto.nombre << endl;
cout << "Precio unitario: " << producto.precio << endl;
cout << "Cantidad: " << carrito.cantidad << endl;
cout << "Precio: " << producto.precio * carrito.cantidad << endl;
}
cout << "Total: " << factura.total << endl;
}
void generar_reportes() {
cout << "Cantidad de clientes que se presentaron a comprar: " << contador_clientes << endl;
cout << "Cantidad de clientes con compras realizadas: " << contador_compras << endl;
cout << "Clientes que superaron el máximo de tiempo para comprar: " << contador_tiempo_excedido << endl;
// Calcular producto más vendido
int contador_productos[100] = {0};
for (Factura factura : facturas) {
for (Carrito carrito : factura.detalles) {
contador_productos[carrito.id_producto]++;
}
}
int id_producto_mas_vendido = 0;
int max_vendidos = 0;
for (int i = 1; i < 100; i++) {
if (contador_productos[i] > max_vendidos) {
id_producto_mas_vendido = i;
max_vendidos = contador_productos[i];
}
}
Producto producto_mas_vendido = productos[id_producto_mas_vendido - 1];
cout << "Producto más vendido: " << endl;
cout << "Referencia: " << producto_mas_vendido.id << endl;
cout << "Nombre: " << producto_mas_vendido.nombre << endl;
cout << "Cantidad vendida: " << max_vendidos << endl;
// Totales de ventas
double total_ventas = 0;
for (Factura factura : facturas) {
total_ventas += factura.total;
}
cout << "Totales de ventas: " << total_ventas << endl;
// Ultimas 10 facturas/tickets
cout << "Ultimas 10 facturas/tickets:" << endl;
for (int i = facturas.size() - 1; i >= 0 && i >= facturas.size() - 10; i--) {
imprimir_ticket(facturas[i]);
cout << endl;
}
}
};
int main() {
srand(time(0));
Supermercado hipermod;
hipermod.cargar_productos();
int opcion = 0;
while (opcion != 5) {
cout << "Menu principal:" << endl;
cout << "1. Agregar cliente" << endl;
cout << "2. Seleccionar producto" << endl;
cout << "3. Procesar compra" << endl;
cout << "4. Generar reportes" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
}
return 0;
}
Question or Bug
Your enviroment information
The text was updated successfully, but these errors were encountered: