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

Projeto Conta Bancária - Projeto Final

import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;

import static java.lang.String.*;

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

        Locale brasil = new Locale("pt", "BR");
        Scanner sc = new Scanner(System.in);

        String nomeCliente = "Adriano Silva";
        String tipoConta = "CONTA CORRENTE";
        int numeroContaCorrente = 22333;
        int senha = 12345;
        int opcao = 0;
        double saldoEmConta = 2500;

        //Formatação de conta e saldo
        String contaFormatada = formatarConta(numeroContaCorrente);
        String saldoFormatado = NumberFormat.getCurrencyInstance(brasil).format(saldoEmConta);

        //Programa pede número conta e só permite sair do loop, quando digita a conta corrente
        String contaDigitada = "";
        while (!contaDigitada.equals(valueOf(numeroContaCorrente))) {
            System.out.print("Digite o número de sua Conta Corrente: ");
            contaDigitada = sc.next();

            if (!contaDigitada.equals(valueOf(numeroContaCorrente))) {
                System.out.println("Conta inválida! Tente novamente.\n");
            }
        }

        /*Depois que usuário valida conta, programa pede senha. Até 3 tentativas: Errando tentativas, sai do programa
        Trata digitação de outros caracteres. Só aceita números*/
        boolean usuarioAutentica = false;
        for (int tentativa = 1; tentativa <= 3; tentativa++) {
            System.out.printf("Digite sua senha:\n> ");

            if (!sc.hasNextInt()) {
                System.out.println("Entrada Inválida. Digite apenas números");
                sc.next();//inutiliza o que foi digitado anteriormente
                int restaDigitar = 3 - tentativa;
                if (restaDigitar > 0) System.out.println("Tentativas restantes: " + tentativa + "\n");
                continue;
            }

            int senhaDigitada = sc.nextInt();

            if (senhaDigitada == senha) {
                usuarioAutentica = true;
                break;
            } else {
                int restaDigitar = 3 - tentativa;
                if (restaDigitar > 0) {
                    System.out.println("Senha incorreta! Tentativas restantes: " + restaDigitar + "\n");
                }
            }
        }

        if (!usuarioAutentica) {
            System.out.println("Tentativas esgotadas. Acesso negado.");
            sc.close();
            return; // encerra o programa
        }

        // --- Mensagem para Cliente (após autenticar) ---
        System.out.println();
        System.out.println("==============================================");
        System.out.println("Seja bem-vindo(a), " + nomeCliente + "!");
        System.out.println("Tipo de conta: " + tipoConta);
        System.out.println("C/C: " + contaFormatada);
        System.out.println("Saldo disponível em C/C: " + saldoFormatado);
        System.out.println("==============================================");
        System.out.println();

========== CONTINUA ================

2 respostas
    //Opções menu para usuário
    String menu = """
              == Digite sua Opção ==
            
              1 - Consultar saldo
              2 - Transferir valor
              3 - Receber valor
              4 - Sair
            
            """;

    while (opcao != 4) {
        System.out.println(menu);
        opcao = sc.nextInt();


        switch (opcao) {
            case 1:
                System.out.println("==============================================");
                System.out.println("Seu saldo é: " + saldoFormatado);
                System.out.println("==============================================\n");
                break;

            case 2:
                System.out.printf("Digite o Valor da Transferência: ");
                double valorATransferir = sc.nextDouble();

                if (valorATransferir > saldoEmConta) {
                    System.out.println("==============================================");
                    System.out.println("Saldo Insuficiente para Transferência!");
                    System.out.println("==============================================\n");
                } else {
                    saldoEmConta -= valorATransferir;
                    System.out.println("==============================================");
                    System.out.println("Transferência realizada. Seu saldo atual é: " +
                            NumberFormat.getCurrencyInstance(brasil).format(saldoEmConta));
                    System.out.println("==============================================\n");
                }
                break;

            case 3:
                System.out.printf("Digite o valor a ser recebido: ");
                double valorAReceber = sc.nextDouble();
                saldoEmConta += valorAReceber;
                System.out.println("==============================================");
                System.out.printf("Valor recebido! Seu saldo atual é: %s.%n",
                        NumberFormat.getCurrencyInstance(brasil).format(saldoEmConta));
                System.out.println("==============================================\n");
                break;

            case 4:
                System.out.println("====================================================");
                System.out.println("Estamos felizes em ter te atendido. Volte sempre!");
                System.out.println("==================================================\n");
                break;

            default:
                System.out.println("==============================================");
                System.out.println("Opção inválida! Tente novamente.");
                System.out.println("==============================================\n");
        }
    }

    sc.close();
}

//Método para configura a conta corrente
public static String formatarConta(int conta) {
    String contaStr = format("% 05d", conta); //formata com 7 dígitos
    String primeirosDigitos = contaStr.substring(0, contaStr.length() - 1); //formata primeiros dígitos
    String ultimosDigitos = contaStr.substring(contaStr.length() - 1); //formata últimos dígitos
    return primeirosDigitos.replaceAll("(\\d)(?=(\\d{3})+$)", "$1.") + "-" + ultimosDigitos;
}

}

solução!

Bom dia! Como está?

Incrível! Continue resolvendo e compartilhando os desafios com a comunidade Alura.

Notei que você utilizou o laço while e for para controle de fluxo e autenticação, aplicou de forma eficaz o NumberFormat com Locale para formatar valores monetários e compreendeu a importância do uso de métodos personalizados para modularizar e reutilizar partes do código.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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