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

Exercicio aplicativo sobre Banco - C# II: Orientação a objetos

Boa noite. O curso é C# II: Orientação a objetos, meu aplicativo esta funcionando parcialmente normal, digo isso prq algo esta me incomodando e não consegui encontrar a solução.

Quando eu passo um valor para o aplicativo depositar na conta, por exemplo, 400. Ele recebe esse valor como STRING TEXTO e converte para DOUBLE

string textoDeposito = textoValor.Text;
            double valorDeposito = Convert.ToDouble(textoDeposito);
            this.conta.Deposito(valorDeposito);

            //MessageBox.Show("Operação realizada com sucesso");

            this.MostraConta();

Só que esse valor em DOUBLE não esta indo com casas decimais. Tanto que se eu digitar "100.0" na caixa de texto, ao apertar o botão (tanto de depósito quanto de sacar) ele vai depositar e/ou sacar "1000" e não os 100 reais.

A classe MostraConta();

 private void MostraConta()
        {

            textoNumero.Text = Convert.ToString(this.conta.Numero);
            textoSaldo.Text = Convert.ToString(this.conta.Saldo);
            textoTitular.Text = conta.Titular.Nome;

        }

Abaixo a classe CONTA que faz o cálculo da conta deposito/sacar

namespace banco2
{
    public class Conta
    {
        public Cliente Titular { get; set; }
        public double Saldo { get; set; }
        public int Numero { get; set; }
        // métodos sacar e depositar
        public virtual void Sacar (double sacar)
        {
            this.Saldo -= sacar;
        }
        public void Deposito (double deposito)
        {
            this.Saldo += deposito;
        }

    }
}

Até ai o código funciona perfeitamente, eu queria adicionar ao código agora a classe poupança, que como adiciona +0.10 se a conta for uma poupança, deveria me retornar valores double/quebrados, como 899.9 e não 900 como vem retornando:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace banco2
{
    class poupancaConta : Conta
    {
        public int Tipo;
        public override void Sacar(double sacar)
        {
            if (this.Tipo == 1) { 
            base.Sacar(sacar+0.10);
            } else
            {
                base.Sacar(sacar);
            }
        }
    }
}

Desde já agradeço!

2 respostas

O trecho do código responsável pelo click no botão SACAR

 private void button2_Click(object sender, EventArgs e)
        {
            string textoSaque = textoValor.Text;
            double valorSaque = Convert.ToDouble(textoSaque);
            this.poupanConta.Sacar(valorSaque);

            this.conta.Sacar(valorSaque);
            this.MostraConta();
        }
solução!

Oi Bruno, tudo bom?

Me parece que o problema está nessa verificação:

public override void Sacar(double sacar)
        {
            if (this.Tipo == 1) {  // aqui verificamos se tipo é igual a um
            base.Sacar(sacar+0.10);
            } else // caso tipo não seja igual a 1 ele recaiera nesta condição, sem a taxa de 0.10
            {
                base.Sacar(sacar);
            }
        }

Verifique se você realmente definiu esta property Tipo na sua poupanConta no arquivo form.cs

Neste link:

https://github.com/alura-cursos/csharp/raw/master/Capitulo11-C%232.zip

Você encontra o projeto pronto do curso. Pode ser uma boa referência para te guiar no caminho certo! Ao fim de cada capitulo, também é disponibilzado o projeto pronto até aquele ponto.

Qualquer dificuldade, compartilhe com a gente seu código de form.cs para que possamos discutir melhor =)

Abraço, bons estudos!