Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

[Projeto] Sistema de Compras no Cartão de Crédito

Gostaria, se possível, que alguém opinasse em relação a implementação que efetuei para o Sistema Proposto na aula, após revisar a solução apresentada pela instrutora.

Tentei criar todas as validações possíveis para que o usuário não pudesse "quebrar" a aplicação durante o uso. Totalmente aberto a feedback e sugestões.

8 respostas
package br.com.leonhartbusiness.main;

import br.com.leonhartbusiness.models.CartaoCredito;
import br.com.leonhartbusiness.models.Compras;
import br.com.leonhartbusiness.models.Faturamento;

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

public class Principal {
    public static void main (String[] args) {

        //Declaração de variáveis
        double limiteCartao = -1; // inicializada para que o while do Limite inicie.
        String itemDescricao;
        double itemValor = -1;
        int opcao = 0; // inicializada para que o while do Menu funcione.
        String erroLimite = """
                VALOR INVÁLIDO!
                Digite o valor do Limite do Cartão de Crédito:""";
        String erroValorCompra = """
                VALOR INVÁLIDO!
                Digite novamente o valor da Compra:""";
        String menuInicial = """
                ===============[SISTEMA DE COMPRAS - LEONHART CARD]===============
                
                1 - Efetuar uma Compra
                2 - Verificar Extrato do Cartão de Crédito
                3 - Sair
                Digite uma das opções acima [1 a 3]""";
        String menuExtrato = """
                ===============[SISTEMA DE COMPRAS - LEONHART CARD]===============
                
                Extrato das Compras:
                """;
        String menuOpcaoInvalida = """
                OPÇÃO INVÁLIDA!
                Verifique as opções disponíveis e tente novamente.
                
                ===============[SISTEMA DE COMPRAS - LEONHART CARD]===============
                
                1 - Efetuar uma Compra
                2 - Verificar Extrato do Cartão de Crédito
                3 - Sair
                Digite uma das opções acima [1 a 3]
                """;
        String menuOpcaoInvalidaInt = """
                OPÇÃO INVÁLIDA!
                Verifique as opções disponíveis e tente novamente.
                """;
        Faturamento operacao = new Faturamento();

        //Processo de criação do Cartão
        System.out.println("Digite o valor do Limite do Cartão de Crédito:");
        Scanner capturaLimite = new Scanner(System.in);

        //Chama o método verificador e cria atribui o Limite ao Cartão criado.
        CartaoCredito cartao = new CartaoCredito(operacao.verificaValor(limiteCartao,capturaLimite,erroLimite));

        //Iniciação do Menu.
        while (opcao != 3) {

            //Gera o menu inicial
            System.out.println(menuInicial);

            //Captura a opção do cliente
            Scanner capturaOpcao = new Scanner(System.in);

            //Verificação se o valor digitado para o Menu é um número válido
            while (!(capturaOpcao.hasNextInt())) {
                System.out.println(menuOpcaoInvalida);
                capturaOpcao = new Scanner(System.in);
            }

            //Atribuição do número válido para opção
            opcao = capturaOpcao.nextInt();

            //Seleção de Opções
// [continua abaixo]
            switch (opcao) {

                case 1:

                    //Processo de Tentativa de Compra

                    //Captura da descrição do item
                    System.out.println("Digite o nome do item a ser comprado:");
                    Scanner capturaItem = new Scanner(System.in);
                    itemDescricao = capturaItem.nextLine();

                    //Captura do valor do item
                    System.out.println("Digite o valor da compra:");
                    Scanner capturaValor = new Scanner(System.in);

                    Compras compra = new Compras(itemDescricao, operacao.verificaValor(itemValor,capturaValor,erroValorCompra));

                    //Teste de aprovação da compra.
                    System.out.println(cartao.validaCompra(compra));
                    break;

                case 2:

                    //Ordena lista de compras efetuadas
                    Collections.sort(cartao.getCompras());

                    //Imprime o extrato na tela
                    System.out.println(menuExtrato);
                    if (cartao.getCompras().isEmpty()) {

                        System.out.println("[ Não foram realizadas compras neste período. ]\n");
                        System.out.println(String.format("Limite total do Cartão de Crédito: R$%.2f", cartao.getLimite()));
                        System.out.println(String.format("Saldo no Cartão de Crédito: R$%.2f\n", cartao.getSaldo()));

                    } else {

                        for (Compras c: cartao.getCompras()) {
                            System.out.println("Item Comprado: " + c.getDescricao());
                            System.out.println(String.format("Valor da Compra: R$%.2f", c.getValor()));
                            System.out.println("--------------------------------\n");
                        }
                        System.out.println(String.format("Limite total do Cartão de Crédito: R$%.2f", cartao.getLimite()));
                        System.out.println(String.format("Saldo no Cartão de Crédito: R$%.2f\n", cartao.getSaldo()));

                    }
                    break;

                case 3:
                    System.out.println("Encerrando o Sistema. Até mais!");
                    break;

                default:

                    //Opção para sair sem anda fazer
                    System.out.println(menuOpcaoInvalidaInt);
                    break;
            }
        }
    }
}
package br.com.leonhartbusiness.models;

import br.com.leonhartbusiness.methods.Verificavel;
import java.util.Scanner;

public class Faturamento implements Verificavel {

    @Override
    public double verificaValor(double chave, Scanner captura, String mensagemErro) {
        while (chave < 0) {
            if (captura.hasNextDouble()) {
                chave = captura.nextDouble();
                if (chave < 0) {
                    System.out.println(mensagemErro);
                    captura = new Scanner(System.in);
                }
            } else {
                System.out.println(mensagemErro);
                captura = new Scanner(System.in);
            }
        }
        return chave;
    }
}
package br.com.leonhartbusiness.models;

public class Compras extends Faturamento implements Comparable<Compras>{
    private String descricao;
    private double valor;

    public Compras (String descricao, double valor) {
        this.descricao = descricao;
        this.valor = valor;
    }

    public String getDescricao() {
        return descricao;
    }

    public double getValor() {
        return valor;
    }

    @Override
    public int compareTo (Compras outraCompra) {
        //metodo que dá o controle de definir a ordem de prioridade
/*        if (this.getValor() > outraCompra.getValor()) {
            return -1;
        }
        if (this.getValor() < outraCompra.getValor()) {
            return 1;
        }
        return 0;*/

        //metodo simplificado para exibir doubles em ordem do menor para o maior
        return Double.valueOf(this.valor).compareTo(Double.valueOf(outraCompra.valor));
    }
}
package br.com.leonhartbusiness.models;

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

public class CartaoCredito extends Faturamento {
    private double limite;
    private double saldo;
    private List<Compras> compras;

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

    public double getLimite() {
        return limite;
    }

    public double getSaldo() {
        return saldo;
    }

    public List<Compras> getCompras() {
        return compras;
    }

    public String validaCompra (Compras tentativaCompra) {

        if (this.getSaldo() >= tentativaCompra.getValor()) {
            this.saldo -= tentativaCompra.getValor();
            this.compras.add(tentativaCompra);
            return "Compra Efetuada com Sucesso!";
        } else {
            return "Compra Negada! Saldo insuficiente.";
        }
    }
}
package br.com.leonhartbusiness.methods;

import br.com.leonhartbusiness.models.Faturamento;
import java.util.Scanner;

public interface Verificavel {
    public double verificaValor(double chave, Scanner captura, String mensagemErro);
}

[ Fim do Código ]

solução!

Diego, bom dia.

Parabens, seu codigo ficou muito bom!

Sei que não sou o instrutor kkkkkk, mas continue assim! Bons estudos! :D