Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Implementando um sistema de conta bancária

Agora chegou a sua vez! Implemente um sistema simples de conta bancária em PHP, com as opções de consultar saldo, sacar e depositar dinheiro, como foi mostrado no vídeo. Utilize um loop do-while para manter o programa em execução até que o usuário escolha a opção de sair e também fgets(STDIN) para ler as operações de entrada do usuário para realizar as operações de saque e depósito.

2 respostas
solução!

Boa noite pessoal! Segue a solução que pensei para o problema apresentado.

<?php

/*
********************
Titular: Vinicius Dias
Saldo atual: R$ 1000
*********************
1. Consultar saldo atual
2. Sacar valor
3. Depositar valor
4. Sair

Gostaríamos que você supervisionasse o controle do saldo de uma conta. Nesse sentido, é importante incluir informações como o titular da conta, embora por enquanto consideremos que apenas o titular e o saldo sejam suficientes. Além disso, algumas operações devem ser possíveis, como consultar o saldo atual, fazer saques, depósitos ou sair do programa.
*/
$titular = "Eliel Matos";
$saldo = 1000;


while (true) {
    echo "\n************************\n";
    echo "Titular: $titular\n";
    echo "Saldo: $saldo\n";
    echo "\n************************\n";
    echo "1. Consultar Saldo Atual\n2. Sacar valor\n3. Depositar valor\n4. Sair\n************************\n";

    $validador = fgets(STDIN);

    switch ($validador) {

        case $validador == 1:
            echo "\n SALDO ATUAL:" . $saldo . "\n";
            sleep(3);
            break;
        case $validador == 2:
            echo "Insira o valor a ser sacado: ";
            $valorASerSacado = (float) trim(fgets(STDIN)); // Aqui utilizei o TRIM para remover a quebra de linha do STDIN

            if ($valorASerSacado > $saldo) {
                echo "Saldo Insuficiente!";
                sleep(3);
            } else {
                $saldo -= $valorASerSacado;
                echo "Realizado o saque de: $valorASerSacado R$!\n";
                sleep(3);
            }

            break;
        case $validador == 3:
            echo "Insira o valor a ser depositado: ";
            $valorASerDepositado = (float) trim(fgets(STDIN));
            $saldo += $valorASerDepositado;
            echo "Realizado o deposito de: $valorASerDepositado R$!\n";
            sleep(3);
            break;
        case $validador == 4:
            echo "Adeus!\n";
            exit(1);
        default:
            echo "Valor Inserido é inválido";
            sleep(3);
    }
}

Oii, Eliel! Tudo bem por aí?

Parabéns pela dedicação e por compartilhar a sua solução com a comunidade da Alura! O seu código ficou muito bem estruturado e atende perfeitamente aos requisitos do projeto proposto no curso de PHP.

Queria destacar alguns pontos bacanas do que você fez:

  • Uso do trim(): Foi uma excelente sacada adicionar o trim() junto com o (float) na leitura do valor do saque e do depósito. Isso evita problemas chatos com a quebra de linha gerada pelo fgets(STDIN).
  • Validação de saldo: A verificação para impedir que o usuário saque mais do que possui na conta garante que a lógica de negócio funcione corretamente.
  • Organização das opções: O menu ficou claro e a utilização do switch organizou muito bem o fluxo de cada operação.

Como ponto de melhoria para futuras versões do seu projeto, você pode observar que, no bloco switch, utilizar case $validador == 1: acaba comparando um booleano com o valor digitado. Em PHP, como o switch faz uma comparação padrão, o código funciona, mas o ideal seria usar diretamente case 1: ou até mesmo a estrutura match que veio nas versões mais recentes do PHP para deixar tudo ainda mais limpo.

Para continuarmos trocando ideias sobre essa implementação: Você já pensou em como adaptar essa lógica para lidar com múltiplas contas ao mesmo tempo, utilizando arrays ou orientação a objetos?

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