Import [Link].
LocalDate;
Import [Link];
Import [Link];
Import [Link];
Import [Link];
Import [Link];
// Classe principal do cartão
Class CartaoCredito {
Private String numero;
Private String titular;
Private LocalDate dataValidade;
Private int cvv;
Private double limite;
Private double saldoUtilizado;
Private boolean bloqueado;
Private List<String> transacoes;
Public CartaoCredito(String titular, double limite) {
[Link] = titular;
[Link] = limite;
[Link] = 0;
[Link] = false;
[Link] = new ArrayList<>();
gerarNumeroCartao();
gerarDataValidade();
gerarCVV();
[Link](“Cartão criado – Limite: R$ “ + limite);
}
Private void gerarNumeroCartao() {
Random rand = new Random();
StringBuilder sb = new StringBuilder();
For (int i = 0; i < 4; i++) {
[Link]([Link](“%04d”, [Link](10000)));
If (i < 3) [Link](“ “);
[Link] = [Link]();
Private void gerarDataValidade() {
[Link] = [Link]().plusYears(5);
Private void gerarCVV() {
Random rand = new Random();
[Link] = [Link](900) + 100;
Public boolean realizarCompra(double valor) {
If (bloqueado) {
[Link](“Tentativa de compra recusada – Cartão
bloqueado: R$ “ + valor);
Return false;
If (valor <= 0) {
[Link](“Tentativa de compra recusada – Valor
inválido: R$ “ + valor);
Return false;
If (saldoUtilizado + valor > limite) {
[Link](“Compra recusada – Limite insuficiente: R$ “
+ valor);
Return false;
saldoUtilizado += valor;
[Link](“Compra realizada: R$ “ + [Link](“%.2f”,
valor));
return true;
Public boolean realizarPagamento(double valor) {
If (bloqueado) {
[Link](“Tentativa de pagamento recusada – Cartão
bloqueado: R$ “ + valor);
Return false;
If (valor <= 0) {
[Link](“Tentativa de pagamento recusada – Valor
inválido: R$ “ + valor);
Return false;
If (valor > saldoUtilizado) {
[Link](“Pagamento realizado: R$ “ + valor + “
(Crédito de R$ “ +
[Link](“%.2f”, (valor – saldoUtilizado)) + “
será retornado)”);
saldoUtilizado = 0;
} else {
saldoUtilizado -= valor;
[Link](“Pagamento realizado: R$ “ +
[Link](“%.2f”, valor));
Return true;
Public void bloquearCartao() {
[Link] = true;
[Link](“Cartão bloqueado pelo usuário”);
Public void desbloquearCartao() {
[Link] = false;
[Link](“Cartão desbloqueado pelo usuário”);
Public void aumentarLimite(double valor) {
[Link] += valor;
[Link](“Limite aumentado para: R$ “ +
[Link](“%.2f”, limite));
Public void exibirInformacoes() {
[Link](“\n=== INFORMAÇÕES DO CARTÃO ===”);
[Link](“Titular: “ + titular);
[Link](“Número: “ + numero);
[Link](“Validade: “ +
[Link]([Link](“MM/yyyy”)));
[Link](“CVV: “ + cvv);
[Link](“Limite total: R$ “ + [Link](“%.2f”,
limite));
[Link](“Saldo utilizado: R$ “ + [Link](“%.2f”,
saldoUtilizado));
[Link](“Limite disponível: R$ “ +
[Link](“%.2f”, (limite – saldoUtilizado)));
[Link](“Status: “ + (bloqueado ? “BLOQUEADO” :
“ATIVO”));
[Link](“============================\
n”);
Public void exibirExtrato() {
[Link](“\n=== EXTRATO DE TRANSAÇÕES ===”);
If ([Link]()) {
[Link](“Nenhuma transação realizada.”);
} else {
For (int i = 0; i < [Link](); i++) {
[Link]((i + 1) + “. “ + [Link](i));
[Link](“=============================\
n”);
}
// Getters
Public String getNumero() { return numero; }
Public String getTitular() { return titular; }
Public LocalDate getDataValidade() { return dataValidade; }
Public double getLimite() { return limite; }
Public double getSaldoUtilizado() { return saldoUtilizado; }
Public boolean isBloqueado() { return bloqueado; }
// Classe principal com menu interativo
Public class SimuladorCartaoCredito {
Private static Scanner scanner = new Scanner([Link]);
Private static CartaoCredito cartao;
Public static void main(String[] args) {
exibirMenuPrincipal();
Private static void exibirMenuPrincipal() {
Int opcao;
Do {
[Link](“=== SIMULADOR DE CARTÃO DE CRÉDITO
===”);
[Link](“1. Criar novo cartão”);
[Link](“2. Visualizar informações do cartão”);
[Link](“3. Realizar compra”);
[Link](“4. Realizar pagamento”);
[Link](“5. Bloquear/Desbloquear cartão”);
[Link](“6. Aumentar limite”);
[Link](“7. Visualizar extrato”);
[Link](“8. Sair”);
[Link](“Escolha uma opção: “);
Opcao = [Link]();
[Link](); // Limpar buffer
Switch (opcao) {
Case 1:
criarCartao();
break;
case 2:
visualizarInformacoes();
break;
case 3:
realizarCompra();
break;
case 4:
realizarPagamento();
break;
case 5:
gerenciarBloqueio();
break;
case 6:
aumentarLimite();
break;
case 7:
visualizarExtrato();
break;
case 8:
[Link](“Encerrando simulador...”);
Break;
Default:
[Link](“Opção inválida!”);
} while (opcao != 8);
Private static void criarCartao() {
[Link](“Digite o nome do titular: “);
String titular = [Link]();
[Link](“Digite o limite inicial (R$): “);
Double limite = [Link]();
[Link]();
Cartao = new CartaoCredito(titular, limite);
[Link](“Cartão criado com sucesso!”);
[Link]();
Private static void visualizarInformacoes() {
If (verificarCartaoCriado()) {
[Link]();
}
Private static void realizarCompra() {
If (verificarCartaoCriado()) {
[Link](“Digite o valor da compra (R$): “);
Double valor = [Link]();
[Link]();
If ([Link](valor)) {
[Link](“Compra realizada com sucesso!”);
} else {
[Link](“Compra recusada!”);
Private static void realizarPagamento() {
If (verificarCartaoCriado()) {
[Link](“Digite o valor do pagamento (R$): “);
Double valor = [Link]();
[Link]();
If ([Link](valor)) {
[Link](“Pagamento realizado com sucesso!”);
} else {
[Link](“Erro no pagamento!”);
}
Private static void gerenciarBloqueio() {
If (verificarCartaoCriado()) {
[Link](“Status atual: “ + ([Link]() ?
“BLOQUEADO” : “DESBLOQUEADO”));
[Link](“1. “ + ([Link]() ?
“Desbloquear” : “Bloquear”));
[Link](“2. Cancelar”);
[Link](“Escolha: “);
Int escolha = [Link]();
[Link]();
If (escolha == 1) {
If ([Link]()) {
[Link]();
[Link](“Cartão desbloqueado!”);
} else {
[Link]();
[Link](“Cartão bloqueado!”);
Private static void aumentarLimite() {
If (verificarCartaoCriado()) {
[Link](“Digite o valor do aumento (R$): “);
Double valor = [Link]();
[Link]();
If (valor > 0) {
[Link](valor);
[Link](“Limite aumentado com sucesso!”);
} else {
[Link](“Valor inválido!”);
Private static void visualizarExtrato() {
If (verificarCartaoCriado()) {
[Link]();
Private static boolean verificarCartaoCriado() {
If (cartao == null) {
[Link](“Nenhum cartão criado. Por favor, crie um
cartão primeiro.”);
Return false;
Return true;