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

Proyecto final del desafío

Compra.java

package modelos;

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) {
        // Ordena de menor a mayor valor
        return Double.valueOf(this.valor).compareTo(Double.valueOf(otraCompra.getValor()));
    }
}

TarjetaDeCredito.java

package modelos;

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; // Al inicio, el saldo es igual al límite
        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;
    }
}

Principal.java

package principal;

import modelos.Compra;
import modelos.TarjetaDeCredito;
import java.util.Collections;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Scanner lectura = new Scanner(System.in);
        System.out.println("Escriba el límite de la tarjeta: ");
        double limite = lectura.nextDouble();
        TarjetaDeCredito tarjeta = new TarjetaDeCredito(limite);

        int salir = 1;
        while(salir != 0) {
            System.out.println("Escriba la descripción de la compra:");
            String descripcion = lectura.next();

            System.out.println("Escriba el valor de la compra:");
            double valor = Double.valueOf(lectura.next());

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

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

        // Paso extra: Ordenamos la lista antes de mostrarla
        Collections.sort(tarjeta.getListaDeCompras());

        System.out.println("***********************");
        System.out.println("COMPRAS REALIZADAS:\n");
        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());
    }
}
1 respuesta

Hola Mario, espero que estés bien

Tu proyecto parece estar bien estructurado y ya tienes una funcionalidad básica para manejar compras con una tarjeta de crédito. Sin embargo, si estás buscando mejorar o ajustar algo en tu código, aquí hay algunas sugerencias que podrían ser útiles:

  1. Validación de Entrada: Considera agregar validaciones para las entradas del usuario. Por ejemplo, verifica que el límite de la tarjeta y el valor de la compra sean números positivos.

  2. Detalles de la Compra: Actualmente, usas next() para leer la descripción de la compra. Esto solo capturará una palabra. Si deseas capturar frases completas, podrías usar nextLine() después de un lectura.nextLine() vacío para limpiar el buffer.

  3. Manejo de Excepciones: Podrías implementar manejo de excepciones para situaciones inesperadas, como entradas no válidas que pueden causar un InputMismatchException.

  4. Formato de Salida: Para mejorar la legibilidad, podrías formatear el valor de las compras a dos decimales usando String.format("%.2f", compra.getValor()).

  5. Comentarios y Documentación: Asegúrate de incluir comentarios en el código para explicar partes clave, lo cual será útil para ti y otros que puedan revisar tu código en el futuro.

Aquí tienes un ejemplo de cómo podrías mejorar la captura de la descripción de la compra:

System.out.println("Escriba la descripción de la compra:");
lectura.nextLine(); // Limpiar el buffer
String descripcion = lectura.nextLine();

Espero que estas sugerencias te sean útiles para avanzar en tu proyecto.

¡Espero haber ayudado y buenos estudios!