2
respostas

Projeto

Projeto no github :

https://github.com/IgorMiyada/CreditCardLimit

Interfaces :

public interface CalcularSaldoCartao {
    public boolean temSaldo(double valorDaCompra);
}

public interface CalculoTotalDeCompras {

    public double calcularCompras();
}

Classses :

public class CarrinhoDeCompras implements CalculoTotalDeCompras{
    private List<Produto> listaDeProdutos = new ArrayList<>();
    private double totalDeCompras = 0;

    public void adicionarProduto(Produto produto){
        this.listaDeProdutos.add(produto);
    }

    public void exibirListaDeCompras(){
        for (Produto produto : listaDeProdutos){
            System.out.println(produto);
        }
    }

    public void organizarLista(){
        this.listaDeProdutos.sort(Comparator.comparing(Produto::getPrice));
    }

    @Override
    public double calcularCompras() {
        for (Produto produto : listaDeProdutos){
            totalDeCompras+=produto.getPrice();
        }

        return totalDeCompras;
    }

    public  List<Produto> getListaDeProdutos() {
        return listaDeProdutos;
    }

    public double getTotalDeCompras() {
        return totalDeCompras;
    }
}


public class Cartao implements CalcularSaldoCartao{
    private double limiteCartao = 0;

    @Override
    public boolean temSaldo(double valorDaCompra) {
        if(valorDaCompra<limiteCartao){
            limiteCartao-=valorDaCompra;
            return true;
        }
        System.out.println("Limite insuficiente");
        return false;
    }

    public double getLimiteCartao() {
        return limiteCartao;
    }

    public void setLimiteCartao(double limiteCartao) {
        this.limiteCartao = limiteCartao;
    }
}

public class Menu {

    public static void exibirTodasAsCompras(CarrinhoDeCompras carrinhoDeCompras,Cartao cartao){
        System.out.println("Produtos comprados : ");
        carrinhoDeCompras.exibirListaDeCompras();
        System.out.println("Saldo restante : ");
        System.out.println(cartao.getLimiteCartao());
    }
}


public class Produto {
    private final String name;
    private final double price;


    public Produto(String productName,double price){
        this.name = productName;
        this.price = price;
    }

    @Override
    public String toString() {
        return this.getName() + " valor : " + this.getPrice();
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }


}

Main :

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Cartao cartao = new Cartao();
        CarrinhoDeCompras carrinhoDeCompras = new CarrinhoDeCompras();

        System.out.println("Insira um limite de cartão : ");
        double limiteCartao = sc.nextDouble();
        cartao.setLimiteCartao(limiteCartao);
        sc.nextLine();

        String opcaoSair = "0";
        while(opcaoSair.equals("0")){
            try{
                System.out.println("Enter the product name : ");
                String productName = sc.nextLine();
                System.out.println("Enter the product price : ");
                double productPrice = sc.nextDouble();

                if(cartao.temSaldo(productPrice)){
                    carrinhoDeCompras.adicionarProduto(new Produto(productName,productPrice));

                }

                System.out.println("Press 0 to buy another product or 1 to exit ");
                opcaoSair = sc.next();
                sc.nextLine();
            }catch (InputMismatchException error){
                System.out.println("Entrada inválida ! " + error);
            }

        }

        carrinhoDeCompras.organizarLista();

        Menu.exibirTodasAsCompras(carrinhoDeCompras,cartao);
    }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

Oi, Igor! Como vai?

Agradeço por compartilhar.

Gostei do jeito que você estruturou o projeto, separando interfaces e classes para organizar as responsabilidades. Isso mostra um bom entendimento de abstração e reutilização de código.

Continue praticando.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Boa tarde, tudo bem ?