Esempio n. 1
0
        /// <summary>
        /// Tela para realizacao de saques
        /// </summary>
        private void Sacar()
        {
            LimparTela();

            int valor = default(int);

            Escrever(Caixa.RetornarNotasDisponiveis());

            valor = EscreverLerInt("Informe o valor que deseja sacar - 0 para voltar");

            if (valor == 0)
            {
                return;
            }
            else if (valor < 0)
            {
                Escrever("Valor invalido.");
                AguardarTecla("Aperte qualque tecla para voltar.");
                return;
            }
            else if (valor > Caixa.RetornarSaldo())
            {
                Escrever("Saldo insuficiente.");
                AguardarTecla("Aperte qualque tecla para voltar.");
                return;
            }
            else
            {
                int quantidadeNotasCinquenta = default(int);
                int quantidadeNotasVinte     = default(int);
                int quantidadeNotasDez       = default(int);
                int quantidadeNotasCinco     = default(int);
                int quantidadeNotasDois      = default(int);

                while (valor > 1)
                {
                    // São realizadas as seguintes verificações:
                    // 1 - Quantidade de notas maior que 0
                    // 2 - Quantidade de notas a ser sacada menor que quantidade de notas disponiveis
                    // 3 - Valor deve ser maior que o valor da Nota
                    if (Caixa.NotaCinquenta > 0 &&
                        quantidadeNotasCinquenta < Caixa.NotaCinquenta &&
                        valor >= 50
                        )
                    {
                        quantidadeNotasCinquenta++;
                        valor -= 50;
                    }
                    else if (Caixa.NotaVinte > 0 &&
                             quantidadeNotasVinte < Caixa.NotaVinte &&
                             valor >= 20)
                    {
                        quantidadeNotasVinte++;
                        valor -= 20;
                    }
                    else if (Caixa.NotaDez > 0 &&
                             quantidadeNotasDez < Caixa.NotaDez &&
                             valor >= 10)
                    {
                        quantidadeNotasDez++;
                        valor -= 10;
                    }
                    // O resto do valor dividido por 5 não pode ser impar
                    // Senão buga em casos como 58 (1 nota- 50 / 1 nota- 5 / 4 notas- 2)
                    else if (Caixa.NotaCinco > 0 &&
                             quantidadeNotasCinco < Caixa.NotaCinco &&
                             (valor % 5) % 2 == 0 &&
                             valor >= 5)
                    {
                        quantidadeNotasCinco++;
                        valor -= 5;
                    }
                    else if (Caixa.NotaDois > 0 &&
                             quantidadeNotasDois < Caixa.NotaDois &&
                             valor >= 2)
                    {
                        quantidadeNotasDois++;
                        valor -= 2;
                    }
                    else
                    {
                        break;
                    }
                }

                // Se no final o valor ainda for maior (unica opção é ser 1)
                // Operação não pode ser efetuada
                if (valor != 0)
                {
                    Escrever("Operacao nao pode ser efetuada.");
                    AguardarTecla("Aperte qualquer tecla para voltar.");
                    return;
                }
                else
                {
                    // Efetiva o saque com as quantidades pré definidas
                    Caixa.SacarNota(50, quantidadeNotasCinquenta);
                    Caixa.SacarNota(20, quantidadeNotasVinte);
                    Caixa.SacarNota(10, quantidadeNotasDez);
                    Caixa.SacarNota(5, quantidadeNotasCinco);
                    Caixa.SacarNota(2, quantidadeNotasDois);

                    Escrever("Saque efetuado com sucesso!");
                    Escrever($"50 - {quantidadeNotasCinquenta} | 20 - {quantidadeNotasVinte} | 10 - {quantidadeNotasDez} | 5 - {quantidadeNotasCinco} | 2 - {quantidadeNotasDois}");
                    AguardarTecla("Aperte qualquer tecla para voltar");
                    return;
                }
            }
        }