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

[Projeto] Desafio do curso

Arquivo principal Main.java

package banco_vinicius_desafio_alura;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Main app = new Main();

        ContaCorrente contaOrigem = new ContaCorrente(1000.0);
        Cliente cliente = new Cliente("Vinicius", contaOrigem);

        ContaCorrente contaDestino = new ContaCorrente(500.0);

        System.out.println("***********************      ");
        System.out.println("Dados iniciais do cliente: \n");
        System.out.println(cliente.extrato());
        System.out.println("***********************    \n");

        Scanner teclado = new Scanner(System.in);

        int opcao = 0;
        while (opcao != 4) {
            System.out.println();
            app.menuOperacoes();
            try {
                opcao = app.lerOpcao(teclado);
                switch (opcao) {
                    case 1 -> {
                        System.out.println();
                        System.out.println(cliente.extrato());
                    }
                    case 2 -> {
                        System.out.println("Quanto irá receber? ");
                        double valor = app.lerValor(teclado);
                        cliente.receberValor(valor);
                        System.out.println("Valor de " + valor +  " recebido!");
                    }
                    case 3 -> {
                        System.out.println("Quanto irá enviar? ");
                        double valor = app.lerValor(teclado);
                        cliente.transferir(valor, contaDestino);
                        System.out.println("Valor de " + valor + " enviado!");
                    }
                    case 4 -> {
                        break;
                    }
                }
            } catch (TransferenciaExcecao ex) {
                System.out.println(ex.getMessage());
            } catch (InputMismatchException ex) {
                System.out.println(ex.getMessage());
                teclado.nextLine();
            }
        }
        teclado.close();

        System.out.println("Desconectado do app.");

    }

    public void mostrarDados(Cliente cliente) {
        System.out.println(cliente.extrato());
    }

    public void menuOperacoes() {
        System.out.print("""
            Operações

            1- Consultar saldos
            2- Receber valor
            3- Transferir valor
            4- Sair

            Digite a opção desejada (1-4): """);
    }

    public int lerOpcao(Scanner teclado) throws InputMismatchException {
        int opcao = 0;
        try {
            opcao = teclado.nextInt();
            return opcao;
        } catch (InputMismatchException ex) {
            throw new InputMismatchException("Teclar apenas um dos valores (1, 2, 3, 4): ");
        }
    }
    public double lerValor(Scanner teclado) {
        double valor;
        try {
            valor = teclado.nextDouble();
            return valor;
        } catch (InputMismatchException ex) {
            throw new InputMismatchException("Valor inválido digitado: ");
        }
    }
}

Arquivo Conta.java:

package banco_vinicius_desafio_alura;

public class Conta {
    protected double saldo;

    public Conta(double saldoInicial) {
        this.saldo = saldoInicial;
    }

    public void depositar(double valor) {
        if (valor <= 0) {
            throw new TransferenciaExcecao("Exceção: Valor inválido para receber (<= 0)");
        }
        this.saldo += valor;
    }

    public void sacar(double valor) {
        if (valor <= 0) {
            throw new TransferenciaExcecao("Exceção: Valor inválido para retirada (<= 0)");
        }
        if (this.saldo <= valor) {
            throw new TransferenciaExcecao("Exceção: saldo insuficiente para "
                    + "saques/transferências. Saldo: " + this.saldo 
                    + " Valor digitado: " + valor );
        }
        this.saldo -= valor;
    }
}

Todos os arquivos: https://github.com/viniciusw95/banco_vinicius_desafio_alura/tree/main/src/banco_vinicius_desafio_alura:

Tentei aplicar tudo que já sei de Java. Algumas partes no código se repetiram ou ficaram semelhantes. Se alguém quiser sugerir melhorias, pode ficar à vontade!

2 respostas
solução!

Olá!

Parabéns por criar sua primeira aplicação em Java! É muito legal ver que você está aplicando seus conhecimentos e se desafiando a aprender cada vez mais.

Sobre o código que você postou, parece que está tudo funcionando corretamente. É importante lembrar que sempre podemos melhorar nosso código, então se você quiser, pode continuar estudando e aprimorando suas habilidades em Java.

Uma sugestão que eu tenho é utilizar o conceito de encapsulamento para proteger os atributos da classe ContaCorrente. Dessa forma, você pode garantir que esses atributos só serão acessados e modificados dentro da própria classe, o que pode ajudar a evitar erros e tornar seu código mais seguro.

Além disso, você pode utilizar o recurso de exceções para tratar erros de forma mais elegante e eficiente. Por exemplo, ao invés de imprimir mensagens de erro diretamente no console, você pode criar uma exceção personalizada e lançá-la quando ocorrer algum erro. Isso pode tornar seu código mais fácil de entender e manter.

Se ainda não souber fazer essas coisas, talvez seja porque você verá nos próximos cursos/aulas.

Espero ter ajudado e bons estudos!

Obrigado pela avaliação. Continuarei na trilha.. essa é uma versão web do projeto no youtube.