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

Desafío: construyendo una nueva aplicación

En este desafío desarrollé una aplicación de compras con tarjeta de crédito donde apliqué conceptos como constructores, encapsulamiento y uso de listas (ArrayList). Implementé la interfaz Comparable para poder ordenar las compras por valor usando Collections.sort(). Además, reforcé el uso de ciclos, validaciones y métodos que retornan boolean para controlar el flujo del programa según el saldo disponible.

Compra.java

package desafio;

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 int compareTo(Compra otraCompra) {
        return Double.valueOf(this.valor)
                .compareTo(Double.valueOf(otraCompra.getValor()));
    }

    @Override
    public String toString() {
        return "Compra: " + descripcion + " - S/ " + valor;
    }
}

TarjetaDeCredito.java

package desafio;

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 double getSaldo() {
        return saldo;
    }

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

    public boolean lanzarCompra(Compra compra) {

        if (this.saldo >= compra.getValor()) {
            this.saldo -= compra.getValor();
            this.listaDeCompras.add(compra);
            return true;
        } else {
            return false;
        }
    }
}

Principal.java

package desafio;

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("Ingrese el límite de la tarjeta:");
        double limite = lectura.nextDouble();

        TarjetaDeCredito tarjeta = new TarjetaDeCredito(limite);

        int opcion = 1;

        while (opcion != 0) {

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

            System.out.println("Ingrese el valor de la compra:");
            double valor = lectura.nextDouble();

            Compra compra = new Compra(valor, descripcion);

            boolean compraRealizada = tarjeta.lanzarCompra(compra);

            if (compraRealizada) {
                System.out.println("Compra realizada!");
                System.out.println("Saldo disponible: S/ " + tarjeta.getSaldo());
            } else {
                System.out.println("Saldo insuficiente!");
                break;
            }

            System.out.println("Digite 0 para salir o 1 para continuar");
            opcion = lectura.nextInt();
        }

        System.out.println("\n***** RESUMEN DE COMPRAS *****");

        Collections.sort(tarjeta.getListaDeCompras());

        for (Compra c : tarjeta.getListaDeCompras()) {
            System.out.println(c);
        }

        System.out.println("\nSaldo final: S/ " + tarjeta.getSaldo());
    }
}