Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

TiendaDeportiva: Ejemplo aplicado con descuento.

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);
    }

2 respuestas
    // Método para aplicar descuento si corresponde
    private static void aplicarDescuento(double subtotal) {
        if (subtotal >= 100.00) {
            double descuento = subtotal * 0.10;
            System.out.printf("DESCUENTO (10%%):     $%7.2f\n", descuento);
            System.out.println("----------------------------------");
            System.out.printf("TOTAL A PAGAR:       $%7.2f\n", (subtotal - descuento));
            System.out.println("\n¡Felicidades! Ha obtenido un descuento del 10%.");
        } else {
            System.out.println("----------------------------------");
            System.out.printf("TOTAL A PAGAR:       $%7.2f\n", subtotal);
            System.out.println("\nPara obtener un 10% de descuento, su compra debe ser de $100 o más.");
        }

        System.out.println("\n¡Gracias por su compra! Vuelva pronto.");
    }
}

Hola John, espero que estés bien

Gracias por compartir tu ejercício práctico con nosotros, en este momento no veo puntos de mejora! Tu contribución es fundamental para el crecimiento de nuestra comunidad en Alura. Sigue comprometido y no dudes en regresar al foro en caso que tengas alguna duda o dificultad.

¡Continúa con sus estudios y éxito en su carrera!

¡Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!