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

Realizando o saque e deposito em todas as contas ao mesmo tempo!

O saque e o deposito está sendo efetuado em todas as contas existentes, como posso resolver esse problema ?

4 respostas

Oi Wanderley,

Precisamos ver o seu código para saber o que está acontecendo.

Coloque aqui a sua classe Form.cs e a classe Conta.cs

public partial class Form1 : Form
    {

        Conta[] contas;

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            contas = new Conta[2];

            contas[0] = new ContaPoupanca();

            contas[0].Titular = "Wanderley Soares";

            contas[0].Numero = 1;

            contas[0].Deposito(90000.0);

            contas[1] = new ContaPoupanca();

            contas[1].Titular = "Caroline Prado";

            contas[1].Numero = 2;

            contas[1].Deposito(10000.0);

            foreach(Conta conta in contas)

            {

                comboContas.Items.Add(conta.Titular);

            }

            foreach(Conta conta in contas)

            {

                destinoDaTransferencia.Items.Add(conta.Titular);

            }

        }

        private void comboContas_SelectedIndexChanged(object sender, EventArgs e)

        {

            this.MostrarConta();

        }

        private void btnSacar_Click(object sender, EventArgs e)

        {

            foreach (Conta conta in contas)

            {

                string valorSacar = textValor.Text;

                double valorDoSaque = Convert.ToDouble(valorSacar);

                conta.Sacar(valorDoSaque);

                this.MostrarConta();

                MessageBox.Show("Saque efetuado com sucesso ! No valor de: " + valorDoSaque);


            }

        }


        private void btnDepositar_Click(object sender, EventArgs e)

        {

            foreach (Conta conta in contas)

            {

                string valorDeposito = textValor.Text;

                double deposito = Convert.ToDouble(valorDeposito);

                conta.Deposito(deposito);

                this.MostrarConta();

                MessageBox.Show("Deposito efetuado com sucesso ! Valor depositado: " + deposito);

            }

public void MostrarConta()

        {

            int indiceItemSelecionado = comboContas.SelectedIndex;

            Conta contaSelecionada = contas[indiceItemSelecionado];

            textTitular.Text = contaSelecionada.Titular;

            textNumero.Text = Convert.ToString(contaSelecionada.Numero);

            textSaldo.Text = Convert.ToString(contaSelecionada.Saldo);

        }

        }

//Classe Conta

abstract class Conta

    {

        public string Titular { get; set; }

        public double Numero { get; set; }

        public double Saldo { get; protected set; }

        public void Deposito(double valor)

        {

            this.Saldo += valor;

        }

        public void Sacar(double valor)

        {

            this.Saldo -= valor;

        }


    }
solução!

Olá, Wanderley.

Obrigado pelos códigos. Achei o problema. Seu método de depósito do botão está com um loop percorrendo todas as contas do seu vetor:

private void btnDepositar_Click(object sender, EventArgs e)
{
    foreach (Conta conta in contas) // Esse loop está realizando o depósito em todas as contas.
    {
        string valorDeposito = textValor.Text;

        double deposito = Convert.ToDouble(valorDeposito);

        conta.Deposito(deposito);

        this.MostrarConta();

        MessageBox.Show("Deposito efetuado com sucesso ! Valor depositado: " + deposito);
    }
}

O depósito deveria ser realizado somente na conta que foi selecionada:

private void btnDepositar_Click(object sender, EventArgs e)
{
    // Recupera o índice da conta selecionada para depositar
    int indiceItemSelecionado = comboContas.SelectedIndex;

    // Recupera a conta selecionada a partir do índice
    Conta contaSelecionada = contas[indiceItemSelecionado];

    string valorDeposito = textValor.Text;

    double deposito = Convert.ToDouble(valorDeposito);

    contaSelecionada.Deposito(deposito);

    this.MostrarConta();

    MessageBox.Show("Deposito efetuado com sucesso ! Valor depositado: " + deposito);
}

O mesmo problema acontece no seu método de saque. Você saca dinheiro de todas as contas ao invés de sacar somente da conta selecionada.

Sugiro que faça o mesmo no método de saque.

Bons estudos!

Muito obrigado !! Deu certo hehe !