2
respostas

[Projeto] Desafio realizado um pouco diferente

import java.util.Scanner;

public class Desafio {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        int opcaoEscolhida = 0;
        String nomeCliente;
        double saldoInicial = 0;
        double valorRecebido = 0;
        double valorTransferido = 0;

        System.out.println("Digite o nome do cliente: ");
        nomeCliente = leitura.nextLine();

        System.out.println("Digite o saldo inicial: ");
        saldoInicial = leitura.nextDouble();

        String menu =   """
                            Operações:
                            1 - Consultar saldo
                            2 - Receber valor
                            3 - Transferir valor
                            4 - Sair
                        
                            Digite a opção desejada:
                        """;

        while (opcaoEscolhida != 4) {
            System.out.println("\n***********************");
            System.out.println("Dados iniciais do cliente:");
            System.out.println("Nome: " + nomeCliente);
            System.out.println("Saldo: R$ " + saldoInicial );
            System.out.println("***********************\n");
            System.out.println(menu);
            opcaoEscolhida = leitura.nextInt();

            switch (opcaoEscolhida) {
                case 1:
                    System.out.println("Seu saldo atualizado é de R$ " + saldoInicial);
                    break;
                case 2:
                    System.out.println("Digite o valor recebido");
                    valorRecebido = leitura.nextDouble();
                    if (valorRecebido >0) {
                        saldoInicial += valorRecebido;
                    } else {
                        System.out.println("Valor recebido é inválido!\n");
                    }
                    break;
                case 3:
                    System.out.println("Digite o valor a ser transferido");
                    valorTransferido = leitura.nextDouble();
                        if (valorTransferido <= saldoInicial) {
                            System.out.println("Operação realizada com sucesso!\n");
                            saldoInicial -= valorTransferido;
                        } else {
                            System.out.println("Saldo de R$ %.2f é insuficiente para a transferência de R$ %.2f\n".formatted(saldoInicial, valorTransferido));
                        }
                    break;
                case 4:
                    System.out.println("\nObrigado por utilizar nossos serviços!");
                    break;
                default:
                    System.out.println("Opção inválida\n");
                    break;

            }
        }
    }
}
2 respostas

O seu desafio em Java, que envolve a criação de um sistema de gerenciamento de conta bancária com um menu interativo, está bem estruturado e implementa as funcionalidades básicas de forma eficaz. Vamos analisar alguns pontos fortes do seu código e sugerir algumas melhorias que poderiam ser feitas para aumentar a robustez e a usabilidade da aplicação.

Pontos Fortes

  1. Uso de Scanner para Entrada de Dados: O uso do Scanner para leitura de dados do usuário é uma escolha comum e adequada para interações simples via console.
  2. Estrutura de Controle switch: A estrutura de controle switch é usada de forma eficaz para manejar diferentes operações baseadas na escolha do usuário.
  3. Formatação de Saída de Dinheiro: A utilização do método formatted para exibir valores monetários de forma formatada melhora a clareza da saída para o usuário.

Sugestões de Melhorias

  1. Fechar o Scanner: É uma boa prática fechar o Scanner após o seu uso para liberar recursos associados ao mesmo. Isso pode ser feito chamando leitura.close() antes de terminar o método main.

  2. Melhorar a Validação de Entrada: Implementar uma validação mais robusta para as entradas do usuário poderia prevenir erros de execução. Por exemplo, quando o usuário insere caracteres não numéricos onde um número é esperado.

  3. Refatoração para Melhorar a Organização do Código:

    • Separar a Lógica de Menu: Considerar a separação da lógica do menu em um método separado para melhorar a legibilidade e a manutenção do código.
    • Usar Métodos para Operações: Criar métodos específicos para operações como depositar e transferir pode ajudar a organizar o código e facilitar testes unitários.
  4. Prevenir a Exibição Repetida de Informações:

    • Você poderia modificar o código para que o saldo e as informações do cliente não sejam impressas antes de cada opção de menu ser mostrada, para evitar redundância, especialmente quando nenhuma operação foi realizada entre as exibições.
  5. Implementação de Validação de Usuário:

    • Considerar a adição de uma camada de autenticação antes de permitir ao usuário realizar operações pode aumentar a segurança da aplicação.
  6. Melhorar a Experiência do Usuário na Navegação do Menu:

    • Implementar uma forma de o usuário voltar ao menu principal sem precisar reiniciar o programa ou sair dele. Isso poderia ser feito através de uma opção adicional no menu.

Exemplo de Fechamento do Scanner

    leitura.close();

Incorporando essas sugestões, o seu código não só manterá as funcionalidades já implementadas, mas também melhorará em termos de eficiência, segurança, e experiência do usuário. Essas mudanças ajudarão a preparar o código para ambientes de produção mais complexos e para futuras expansões ou manutenção.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Obrigado pelo retorno e esclarecimentos valorosos