Olá, finalizei o projeto desse curso e fiz a aplicação de maneira diferente, queria saber se tem algo que eu poderia melhorar, ou se acabei quebrando alguma "regrinha" de boas práticas, vou mandar as 3 classes aqui.
Fiz tudo do meu jeito e depois de pronto vi as dicas de como implementar algumas coisas e fui atualizando o código, mas mantive a estrutura que havia feito.
Classe cartão
package br.com.atividade.modelo;
import java.util.ArrayList;
import java.util.List;
public class CartaoCredito {
private double limite;
private double saldo;
private List<Produto> extrato;
private double gastoTotal;
public double calcularGasto(){
return gastoTotal = (limite - saldo);
}
public CartaoCredito(double limite){
this.limite = limite;
this.saldo = limite;
this.extrato = new ArrayList<>();
}
public double getLimite() {
return limite;
}
public double getSaldo() {
return saldo;
}
public List<Produto> getExtrato() {
return extrato;
}
public void adicionarProduto(Produto produto){
this.extrato.add(produto);
}
public boolean passarCartao(Produto produto){
if (produto.getPreco() < getSaldo()){
this.saldo -= produto.getPreco();
this.extrato.add(produto);
System.out.printf("Compra de %s no valor de %.2f aprovada.\n",produto.getNome(),produto.getPreco());
System.out.printf("Saldo atual do cartão: %.2f\n",this.getSaldo());
return true;
} else {
System.out.printf("Saldo insuficiente para compra.\n");
System.out.printf("Redirecionando para Checklist...\n");
return false;
}
}
public void getCheckList(){
System.out.printf("""
******************************************
CheckList de compras
******************************************
""");
System.out.printf("O total de itens comprados foi: " + this.extrato.size() + "\n");
for (Produto item : this.getExtrato() ) {
System.out.println(item);
}
System.out.printf("\n");
System.out.printf("O total a ser descontado na proxima fatura é de: " + this.calcularGasto() + "\n");
System.out.printf("O limite disponível do cartão está em: %.2f\n", this.getSaldo());
System.out.printf("******************************************");
}
}
Classe Produto
package br.com.atividade.modelo;
public class Produto implements Comparable<Produto>{
private String nome;
private double preco;
public String getNome() {
return nome;
}
public double getPreco() {
return preco;
}
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
@Override
public String toString() {
return this.nome + " -- " + "R$ " + this.preco;
}
@Override
public int compareTo(Produto o) {
return Double.valueOf(this.getPreco()).compareTo(Double.valueOf(o.getPreco()));
}
}
Classe Main
package br.com.atividade.main;
import br.com.atividade.modelo.CartaoCredito;
import br.com.atividade.modelo.Produto;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.printf("Digite o limite do cartão de credito:\n");
double limite = scanner.nextDouble();
scanner.nextLine();
var cartao = new CartaoCredito(limite);
int resposta = 1;
while (resposta != 0) {
System.out.printf("digite a descricao da compra: \n");
String nome = scanner.nextLine();
System.out.printf("digite o valor da compra: \n");
double valor = scanner.nextDouble();
var produto = new Produto(nome, valor);
if (cartao.passarCartao(produto)) {
System.out.printf("""
\nQuer adicionar fazer mais alguma compra?
(qualquer numero) - sim
0 - ir para o checklist
""");
resposta = scanner.nextInt();
scanner.nextLine();
} else {
break;
}
}
cartao.getExtrato().sort(Comparator.comparing(Produto::getPreco).reversed());
cartao.getCheckList();
}
}