import java.util.Scanner;
import java.util.ArrayList;
public class Compras {
// Clase interna para representar productos
static class Producto {
String nombre;
double precio;
boolean enPromocion;
public Producto(String nombre, double precio, boolean enPromocion) {
this.nombre = nombre;
this.precio = precio;
this.enPromocion = enPromocion;
}
}
// Método principal
public static void main(String[] args) {
ejecutarSistemaDeCompras();
}
// Método que contiene toda la lógica del sistema
public static void ejecutarSistemaDeCompras() {
Scanner scanner = new Scanner(System.in);
ArrayList<Producto> carrito = new ArrayList<>();
// Inventario de productos
Producto[] inventario = crearInventario();
mostrarEncabezado();
mostrarProductos(inventario);
procesarSelecciones(scanner, inventario, carrito);
mostrarResumen(carrito);
scanner.close();
}
// Método para crear el inventario de productos
private static Producto[] crearInventario() {
return new Producto[] {
new Producto("Balón de fútbol", 29.99, true),
new Producto("Raqueta de tenis", 89.99, false),
new Producto("Zapatillas running", 120.00, true),
new Producto("Camiseta deportiva", 25.50, false),
new Producto("Pesas 5kg", 35.75, false),
new Producto("Bicicleta", 350.00, true),
new Producto("Guantes de boxeo", 45.25, false),
new Producto("Colchoneta yoga", 30.00, true),
new Producto("Pelota de baloncesto", 22.99, false),
new Producto("Cuerda para saltar", 12.50, false)
};
}
// Método para mostrar el encabezado
private static void mostrarEncabezado() {
System.out.println("=== TIENDA DEPORTIVA - SISTEMA DE COMPRAS ===");
System.out.println("============================================");
}
// Método para mostrar los productos disponibles
private static void mostrarProductos(Producto[] productos) {
System.out.println("\nPRODUCTOS DISPONIBLES:\n");
for (int i = 0; i < productos.length; i++) {
System.out.printf("%2d. %-20s $%7.2f", (i+1), productos[i].nombre, productos[i].precio);
if (productos[i].enPromocion) {
System.out.print(" [PROMOCIÓN]");
}
System.out.println();
}
}
// Método para procesar las selecciones del usuario
private static void procesarSelecciones(Scanner scanner, Producto[] inventario, ArrayList<Producto> carrito) {
while (true) {
System.out.print("\nIngrese el número del producto (1-10) o 0 para finalizar: ");
try {
int seleccion = scanner.nextInt();
if (seleccion == 0) {
System.out.println("Finalizando selección...");
break;
}
if (seleccion < 1 || seleccion > 10) {
System.out.println("¡Error! Ingrese un número entre 1 y 10.");
continue;
}
Producto seleccionado = inventario[seleccion-1];
carrito.add(seleccionado);
System.out.println("✔ " + seleccionado.nombre + " agregado al carrito.");
} catch (Exception e) {
System.out.println("¡Error! Debe ingresar un número válido.");
scanner.nextLine(); // Limpiar buffer
}
}
}
// Método para mostrar el resumen de la compra
private static void mostrarResumen(ArrayList<Producto> carrito) {
if (carrito.isEmpty()) {
System.out.println("\nNo ha seleccionado ningún producto. ¡Vuelva pronto!");
return;
}
System.out.println("\n=== DETALLE DE SU COMPRA ===");
System.out.println("----------------------------------");
double subtotal = 0;
for (Producto p : carrito) {
System.out.printf("%-20s $%7.2f", p.nombre, p.precio);
if (p.enPromocion) {
System.out.print(" [PROMOCIÓN]");
}
System.out.println();
subtotal += p.precio;
}
System.out.println("----------------------------------");
System.out.printf("SUBTOTAL: $%7.2f\n", subtotal);
aplicarDescuento(subtotal);
}