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

Transferência de Conta para Conta || duvida

Estou tentando lançar uma Exception na classe Conta pra pegar caso a conta do combobox1 for igual a conta do combobox2.

Criei uma nova classe ContaIgualException : Exception e implementei o seguinte código no Botão Transferir, pois não sabia como implementar na classe Conta .Mas esse método não funcionou como queria

if (ContaSelecionada == ContaSelecionada2)
            {
                throw new ContaIgualExcepiton();
            }
catch (ContaIgualExcepiton)
            {
                MessageBox.Show("Seleciona outro destinatario para a transferencia");
            }
public partial class Form1 : Form
    {
        Conta[] contas = new Conta[3];
        TotalizadorDeContas SaldoTotal = new TotalizadorDeContas();

        public Form1()
        {
            InitializeComponent();
        }


        public void TotalSaldo()
        {
            foreach(Conta conta in contas)
            {
                SaldoTotal.Adiciona(conta);
            }
            textSaldoTotal.Text = Convert.ToString(SaldoTotal.SaldoTotal);
            foreach (Conta conta in contas)
            {
                SaldoTotal.Retira(conta);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ContaCorrente c1 = new ContaCorrente();
            c1.Titular = new Cliente();
            c1.Titular.Nome = "Alexander";
            c1.Titular.CPF = "123456789 - 00";
            c1.Titular.Emancipado = true;
            c1.Titular.Idade = 18;
            c1.Numero = 1;
            contas[0] = c1;

            ContaPoupanca c2 = new ContaPoupanca();
            c2.Titular = new Cliente();
            c2.Titular.Nome = "Bassani";
            c2.Titular.CPF = "987654321 - 00";
            c2.Titular.Emancipado = true;
            c2.Titular.Idade = 18;
            c2.Numero = 3;
            contas[1] = c2;

            ContaInvestimento c3 = new ContaInvestimento();
            c3.Titular = new Cliente();
            c3.Titular.Nome = "Amaral";
            c3.Titular.CPF = "147896325 - 00";
            c3.Titular.Emancipado = true;
            c3.Titular.Idade = 18;
            c3.Numero = 3;
            contas[2] = c3;

            foreach(Conta conta in contas)
            {
                comboContas.Items.Add(conta.Titular.Nome);
                comboTransfere.Items.Add(conta.Titular.Nome);
            }

            this.TotalSaldo();
        }

        private void comboContas_SelectedIndexChanged(object sender, EventArgs e)
        {
            int IndiceSelecionada = comboContas.SelectedIndex;
            Conta ContaSelecionada = contas[IndiceSelecionada];

            textNome.Text = ContaSelecionada.Titular.Nome;
            textNumero.Text = Convert.ToString(ContaSelecionada.Numero);
            textCPF.Text = Convert.ToString(ContaSelecionada.Titular.CPF);
            textSaldo.Text = Convert.ToString(ContaSelecionada.Saldo);
            textRendimento.Text = Convert.ToString(ContaSelecionada.RendimentoAnual());
        }

        private void Sacar_Click(object sender, EventArgs e)
        {
            int IndiceSelecionada = comboContas.SelectedIndex;
            Conta ContaSelecionada = contas[IndiceSelecionada];

            string numero = textValor.Text;
            double valor = Convert.ToDouble(numero);

            try
            {
                ContaSelecionada.Sacar(valor);
                MessageBox.Show("Dinheiro Liberado");

                textSaldo.Text = Convert.ToString(ContaSelecionada.Saldo);
                textRendimento.Text = Convert.ToString(ContaSelecionada.RendimentoAnual());

                this.TotalSaldo();
            }
            catch(SaldoInsuficienteException)
            {
                MessageBox.Show("Saldo insuficiente");
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Não é possível sacar um valor negativo");
            }

            this.TotalSaldo();
        }

        private void Depositar_Click(object sender, EventArgs e)
        {
            int IndiceSelecionada = comboContas.SelectedIndex;
            Conta ContaSelecionada = contas[IndiceSelecionada];

            string numero = textValor.Text;
            double valor = Convert.ToDouble(numero);

            try
            {
                ContaSelecionada.Deposita(valor);
                MessageBox.Show("Dinheiro Depositado");

                textSaldo.Text = Convert.ToString(ContaSelecionada.Saldo);
                textRendimento.Text = Convert.ToString(ContaSelecionada.RendimentoAnual());

                this.TotalSaldo();
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Não é possível sacar um valor negativo");
            }
        }

        private void Transferir_Click(object sender, EventArgs e)
        {
            int IndiceSelecionado = comboContas.SelectedIndex;
            Conta ContaSelecionada = contas[IndiceSelecionado];
            int IndiceSelecionado2 = comboTransfere.SelectedIndex;
            Conta ContaSelecionada2 = contas[IndiceSelecionado2];

            string numero = textValor.Text;
            double valor = Convert.ToDouble(numero);

            if (ContaSelecionada == ContaSelecionada2)
            {
                throw new ContaIgualExcepiton();
            }

            try
            {
                ContaSelecionada.Transfere(valor, ContaSelecionada2);
                MessageBox.Show("Dinheiro Transferido de "+ContaSelecionada.Titular.Nome," \npara "+ContaSelecionada2.Titular.Nome);

                textSaldo.Text = Convert.ToString(ContaSelecionada.Saldo);
                textRendimento.Text = Convert.ToString(ContaSelecionada.RendimentoAnual());

                this.TotalSaldo();

            }
            catch (SaldoInsuficienteException)
            {
                MessageBox.Show("Saldo insuficiente para transferencia");
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Não é possível transferir um valor negativo");
            }
            catch (ContaIgualExcepiton)
            {
                MessageBox.Show("Seleciona outro destinatario para a transferencia");
            }
        }

        private void TributosTotal_Click(object sender, EventArgs e)
        {
            TotalizadorDeTributos Tributos = new TotalizadorDeTributos();
            ContaInvestimento ci = new ContaInvestimento();
            ContaPoupanca cp = new ContaPoupanca();
            ci.Titular = new Cliente();
            cp.Titular = new Cliente();
            cp.Titular.Emancipado = true;
            ci.Titular.Emancipado = true;
            cp.Titular.CPF = "0000";
            ci.Titular.CPF = "0000";
            ci.Deposita(1500.0);
            cp.Deposita(1000.0);

            Tributos.Acumula(ci);
            Tributos.Acumula(cp);

            MessageBox.Show("Tributos: " + Tributos.Total);

            Tributos.Retira(ci);
            Tributos.Retira(cp);
        }

        private void ContasCorrente_Click(object sender, EventArgs e)
        {
            ContaCorrente conta = new ContaCorrente();
            MessageBox.Show("Proxima Contas:" + conta.ProximaConta());
            MessageBox.Show("Numero Contas:" + conta.NumeroDeConta());
            conta.ProximaConta();
        }
    }
abstract class Conta 
    {
        public Cliente Titular { get; set; }
        public int Numero { get; set; }
        public double Saldo { get; protected set; }

        public abstract void Sacar(double valor);

        public void Deposita(double valor)
        {
            if (valor < 0)
            {
                throw new ArgumentException("Impossivel Depositar Valor Negativo");
            }
            else
            {
                this.Saldo += valor;
            }
        }

        public void Transfere(double valor, Conta destinatario)
        {
            if (valor > this.Saldo)
            {
                throw new SaldoInsuficienteException();
            }
            if (valor < 0)
            {
                throw new ArgumentException("Impossivel Tranferir Valor Negativo");
            }
            else
            {
                this.Sacar(valor);
                destinatario.Deposita(valor);
            }
        }

        public virtual void AtualizaSaldo(double taxa)
        {
            this.Saldo -= this.Saldo * taxa;
        }
        public double RendimentoAnual()
        {
            double SaldoDoMes = this.Saldo;
            for(int i = 1; i <= 12; i++)
            {
                SaldoDoMes *= 1.007;
            }
            double Rendimento = SaldoDoMes - this.Saldo;
            return Rendimento;
        }
    }
class Cliente 
    {
        public string Nome { get; set; }
        public Cliente(string nome)
        {
            this.Nome = nome;
        }
        public Cliente() { }
        public string CPF { get; set; }
        public string RG { get; set; }
        public string Endereco { get; set; }
        public int Idade { get; set; }
        public bool Emancipado  { get; set; }
        public bool PodeAbrirConta
        {
            get
            {
                var Maior18 = this.Idade >= 18;
                var PossuiCPF = !string.IsNullOrEmpty(this.CPF);
                var EEmancipado = this.Emancipado;
                return (Maior18 || Emancipado) && PossuiCPF;
            }

        }
    }
2 respostas
solução!

Boa noite Alexander.

O seu if deve estar dentro do bloco Try para ser tratado pelo bloco catch no momento que a exceção ContaIgualExcepiton for lançada; Tente o seguinte:

try { if (ContaSelecionada == ContaSelecionada2) { throw new ContaIgualExcepiton(); }

ContaSelecionada.Transfere(valor, ContaSelecionada2); MessageBox.Show("Dinheiro Transferido de "+ContaSelecionada.Titular.Nome," \npara "+ContaSelecionada2.Titular.Nome);

textSaldo.Text = Convert.ToString(ContaSelecionada.Saldo); textRendimento.Text = Convert.ToString(ContaSelecionada.RendimentoAnual());

this.TotalSaldo();

} catch (SaldoInsuficienteException) { MessageBox.Show("Saldo insuficiente para transferencia"); } catch (ArgumentException) { MessageBox.Show("Não é possível transferir um valor negativo"); } catch (ContaIgualExcepiton) { MessageBox.Show("Seleciona outro destinatario para a transferencia"); }

Espero ter ajudado. Abraço!

Obrigado pela ajuda ^^