Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Proyecto Desafio - Compras (V2)

Segunda versión adaptando y corrigiendo lo necesario con la solucion propuesta por el profesor.

Clase Main:

import Clases.Producto;
import Clases.Tarjeta;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.print("Ingrese el limite de la tarjeta: ");
        double limiteTarjeta = new Scanner(System.in).nextInt();

    Tarjeta tarjeta = new Tarjeta(limiteTarjeta);

    boolean salir = false;

    do {
        System.out.println("\n --- WALMART --- ");
        System.out.println("1. Realizar Compra");
        System.out.println("2. Salir");
        System.out.print("Opcion -> ");
        int opcion = new Scanner(System.in).nextInt();
        switch (opcion) {
            case 1:
                System.out.print("Escriba la descripcion de la compra: ");
                String descripcion = new Scanner(System.in).nextLine();
                System.out.print("Escriba el valor de la compra: ");
                double valor = new Scanner(System.in).nextDouble();

                Producto producto = new Producto(descripcion, valor);

                if (tarjeta.lanzarCompra(producto)) {
                    System.out.println("Compra Realizada!");
                } else {
                    System.out.println("Saldo Insuficiente!");
                    mostrarListaProductos(tarjeta);
                    System.out.println("Saldo de la Tarjeta: " + tarjeta.getSaldo());
                    salir = true;
                }
                break;

            case 2:
                mostrarListaProductos(tarjeta);
                System.out.println("Saldo de la Tarjeta: " + tarjeta.getSaldo());
                salir=true;
                break;

            default:
                System.out.println("Opción Incorrecta, pruebe nuevamente!");
        }
    } while (!salir);
}

public static void mostrarListaProductos(Tarjeta tarjeta) {

    //Me ordena la lista de productos del mas barato al mas caro
    //Collections.sort(tarjeta.getListaCompras());

    //Otra forma de ordenar la lista de productos del mas barato al mas caro
    tarjeta.getListaCompras().sort(Comparator.comparing(Producto::getPrecio));

    //isEmpty comprueba si la listaProductos está vacia o no
    if (!tarjeta.getListaCompras().isEmpty()) {
        System.out.println("\n********************");
        System.out.println("COMPRAS REALIZADAS: ");

        for (Producto producto : tarjeta.getListaCompras()) {
            System.out.println(producto.toString());
        }
        System.out.println("\n********************");
        System.out.println("\nGracias por su visita!");
    } else {
        System.out.println("\nGracias por su visita!");
    }
}
}

Clase Tarjeta:

package Clases;

import java.util.ArrayList;
import java.util.List;

public class Tarjeta {
    private double limite;
    private double saldo;
    private List<Producto> listaCompras;

    public Tarjeta(double limite) {
        this.limite = limite;
        this.saldo = limite;
        this.listaCompras = new ArrayList<>();
    }

    public boolean lanzarCompra(Producto prudcuto) {
        if(this.saldo >= prudcuto.getPrecio()) {
            this.saldo -= prudcuto.getPrecio();
            this.listaCompras.add(prudcuto);
            return true;
        }else {
            return false;
        }
    }

    public double getSaldo() {
        return saldo;
    }

    public List<Producto> getListaCompras() {
        return listaCompras;
    }
}

Clase Producto:

package Clases;

public class Producto implements Comparable<Producto> {

    private String descripcion;
    private double precio;

    public Producto(String descripcion, double precio) {
        this.descripcion = descripcion;
        this.precio = precio;
    }

    public double getPrecio() {
        return precio;
    }

    @Override
    public String toString() {
        return descripcion + " - " + precio;
    }

    //Para hacer la comparacion de precios entre productos
    @Override
    public int compareTo(Producto otroProducto) {
        return Double.valueOf(this.precio).compareTo(Double.valueOf(otroProducto.precio));
    }
}
1 respuesta

Hola Matías, espero que estés bien

Considero su código muy bueno, en este momento no veo puntos de mejora. ¡Continúa con sus estudios y éxito en su carrera!

Gracias por compartir tu ejercício práctico con nosotros! 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.

¡Abrazos y buenos estudios!

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