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

Proyecto final

class Principal

import java.util.Collections;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Scanner lectura = new Scanner(System.in);
        TarjetaDeCredito tarjeta = inicializarTarjeta(lectura);
        realizarCompras(lectura, tarjeta);
        mostrarResumen(tarjeta);
    }

    public static TarjetaDeCredito inicializarTarjeta(Scanner lectura) {
        double limite = 0;
        boolean limiteValido = false;

        while (!limiteValido) {
            System.out.println("Escriba el limite de la tarjeta");
            try {
                limite = lectura.nextDouble();
                if (limite <= 0) {
                    System.out.println("El límite debe ser mayor que 0.");
                } else {
                    limiteValido = true;
                }
            } catch (InputMismatchException e) {
                System.out.println("Por favor, ingrese un número válido.");
                lectura.next(); // Limpia el valor incorrecto del scanner
            }
        }
        return new TarjetaDeCredito(limite);
    }

    public static void realizarCompras(Scanner lectura, TarjetaDeCredito tarjeta) {
        int salir = 1;

        while (salir != 0) {
            System.out.println("Escriba la descripcion de la compra");
            String descripcion = lectura.next();

            double valor = 0;
            boolean valorValido = false;

            while (!valorValido) {
                System.out.println("Escriba el valor de la compra");
                try {
                    valor = lectura.nextDouble();
                    if (valor <= 0) {
                        System.out.println("El valor de la compra debe ser mayor que 0.");
                    } else {
                        valorValido = true;
                    }
                } catch (InputMismatchException e) {
                    System.out.println("Por favor, ingrese un número válido.");
                    lectura.next(); // Limpia el valor incorrecto del scanner
                }
            }

            Compra compra = new Compra(valor, descripcion);
            boolean compraRealizada = tarjeta.lanzarCompra(compra);

            if (compraRealizada) {
                System.out.println("Compra realizada");
            } else {
                System.out.println("Saldo insuficiente");
            }
            System.out.println("Escriba 0 para salir o 1 para continuar");
            salir = lectura.nextInt();
        }
    }

    public static void mostrarResumen(TarjetaDeCredito tarjeta) {
        System.out.println("********************");
        System.out.println("COMPRAS REALIZADAS:\n");
        Collections.sort(tarjeta.getListaDeCompras());
        for (Compra compra : tarjeta.getListaDeCompras()) {
            System.out.println(compra.getDescripcion() + " - " + compra.getValor());
        }
        System.out.println("\n*******************");
        System.out.println("\nSaldo de la tarjeta: " + tarjeta.getSaldo());
    }
}

Class Compras

public class Compra implements Comparable<Compra> {
    private double valor;
    private String descripcion;

    public Compra(double valor, String descripcion) {
        this.valor = valor;
        this.descripcion = descripcion;
    }

    public double getValor() {
        return valor;
    }

    public String getDescripcion() {
        return descripcion;
    }

    @Override
    public String toString() {
        return "Compra: valor=" + valor +
                ", descripcion='" + descripcion;
    }

    @Override
    public int compareTo(Compra otraCompra) {
        return Double.valueOf(this.valor).compareTo(Double.valueOf(otraCompra.getValor()));
    }
}

Class Tarjeta de Credito

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

public class TarjetaDeCredito {
    private double limite;
    private double saldo;
    private List<Compra> listaDeCompras;

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

    public boolean lanzarCompra(Compra compra){
        if (this.saldo >= compra.getValor()){
            this.saldo -= compra.getValor();
            this.listaDeCompras.add(compra);
            return true;
        }
        return false;
    }

    public double getLimite() {
        return limite;
    }

    public double getSaldo() {
        return saldo;
    }

    public List<Compra> getListaDeCompras() {
        return listaDeCompras;
    }
}
1 respuesta

¡Hola! ¿Cómo estás?

Gracias por tu aporte en el foro. Su contribución es esencial para el crecimiento de nuestra comunidad en Alura.

Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

Abrazos y buenos estudios!

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