Oii, Arthur! Como vai?
Parabéns pela sua dedicação em resolver o desafio! Achei excelente que você decidiu ir além do básico e utilizou um array associativo ($conta) para armazenar o titular e o saldo. Essa é uma ótima prática para organizar dados relacionados.
Seu código está muito bem estruturado, o uso do while e do switch está correto para criar o menu. Tenho apenas algumas observações para te ajudar a refinar a lógica, principalmente na parte do saque, que é um ponto crítico em sistemas bancários.
Vamos analisar juntos?
- A lógica do saque (
case 2)
Atualmente, a ordem das ações no seu código está assim:
- Você pergunta o valor.
- Você subtrai o valor do saldo imediatamente (
$conta['saldo'] -= $valorSaque;). - Só depois você verifica se o saldo era suficiente.
O problema: Se o usuário tiver R$ 100 e tentar sacar R$ 200, o seu código vai subtrair primeiro (o saldo vai para -R$ 100) e depois avisar que é impossível realizar o saque. Porém, o saldo já foi alterado pra negativo na memória do programa!
A solução: A verificação (if) deve acontecer antes de mexer no dinheiro. Algo assim:
case 2:
echo "Qual o valor que voce deseja sacar? ";
$valorSaque = (float) trim(fgets(STDIN));
// Primeiro verificamos se o saldo É MAIOR ou IGUAL ao saque
if ($conta['saldo'] >= $valorSaque) {
$conta['saldo'] -= $valorSaque; // Só subtrai se tiver saldo
echo "Seu saque foi realizado com sucesso\n";
} else {
echo "Saldo insuficiente para realizar o saque\n";
}
break;
2. Tipos de dados (Int vs Float)
Notei que você usou (int) para converter a entrada. Pra valores monetários, é interessante usar (float), pois o usuário pode querer sacar R$ 50.50 (cinquenta reais e cinquenta centavos), por exemplo. O int arredondaria esse valor, ignorando os centavos.
3. Detalhe na declaração
Logo no início, você declarou $escolha; duas vezes seguidas:
$valorDeposito;
$valorSaque;
$escolha; // Uma vez
$escolha; // Duas vezes (essa linha pode ser removida)
Isso não gera erro, mas limpar o código duplicado deixa ele mais legível.
Você mandou muito bem na estrutura geral! Fazer essas pequenas correções de lógica é exatamente o que um programador faz no dia a dia. Continue praticando assim.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!