public class Compra implements Comparable<Compra>{
private String produto;
private double valor;
public String getProduto() {
return produto;
}
public void setProduto(String produto) {
this.produto = produto;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public Compra(String produto, double valor) {
this.produto = produto;
this.valor = valor;
}
@Override
public String toString() {
return "Compra{" +
"produto='" + produto + '\'' +
", valor=" + valor +
'}';
}
// Sobrescrevendo o método comprareTo()
@Override
public int compareTo(Compra novaCompra) {
// Fazendo uso da classe <wrapper> para ordenar valores do tipo Double
return Double.valueOf(this.valor).compareTo(Double.valueOf(novaCompra.valor));
}
}
import java.util.ArrayList;
import java.util.List;
public class CartaoDeCredito {
private double limite;
private double saldo;
private List<Compra> compras;
public CartaoDeCredito(double limite) {
this.limite = limite;
this.saldo = limite;
this.compras = new ArrayList<>();
}
public double getLimite() {
return limite;
}
public double getSaldo() {
return saldo;
}
public List<Compra> getCompras() {
return compras;
}
// Valida se o saldo do cartão é maior que o valor da compra, e adiciona a compra
public boolean lancarCompra(Compra compra) {
if (this.saldo >= compra.getValor()) {
this.saldo -= compra.getValor();
this.compras.add(compra);
return true;
} else {
return false;
}
}
}
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
System.out.println("Informe o limite do cartão:");
Double limite = leitura.nextDouble();
//Instanciar a classe CartaoDeCredito
CartaoDeCredito cartao = new CartaoDeCredito(limite);
// Loop
int opcao = 1;
while (opcao != 0) {
System.out.println("Informe o produto:");
String produto = leitura.next();
System.out.println("Informe o valor do produto:");
double valor = leitura.nextDouble();
// Instanciar a classe Compra
Compra compra = new Compra(produto, valor);
// Invocar o método lancarCompra()
boolean compraRealizada = cartao.lancarCompra(compra);
if (compraRealizada) {
System.out.println("Compra realizada!");
System.out.println("Digite [0] para <sair> ou [1] para <continuar>");
opcao = leitura.nextInt();
} else {
System.out.println("Saldo insuficiente!\n");
opcao = 0;
}
}
// Imprimir resumo da compra
System.out.println("Compra finalizada:\n");
System.out.println("Resumo da compra:");
System.out.println("-------------------------------");
System.out.println("Produto:\t\tValor:");
System.out.println("-------------------------------");
Collections.sort(cartao.getCompras()); // Ordenar valor em ordem crescente
for (Compra compra : cartao.getCompras()){
System.out.println(compra.getProduto() + "\t\t\t" + compra.getValor());
}
System.out.println("-------------------------------");
// Imprimir saldo do cartão
System.out.println("\n*******************************");
System.out.println("Saldo disponível: " + cartao.getSaldo());
System.out.println("*******************************");
}
}