Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

exercício

estou com duvida na impressão das contas, e se estou utilizando o código corretamente

private void button8_Click(object sender, EventArgs e)
        {
            Conta[] c = new Conta[10];
            Cliente[] cl = new Cliente[10];
            c[0] = new Conta();
            cl[0] = new Cliente("1");
            c[0].Titular = cl[0];
            c[1] = new Conta();
            cl[1] = new Cliente("2");
            c[0].Titular = cl[0];
            c[2] = new Conta();
            cl[2] = new Cliente("3");
            c[0].Titular = cl[0];
            c[3] = new Conta();
            cl[3] = new Cliente("4");
            c[0].Titular = cl[0];

            banco banco = new banco();
            banco.Adiciona(c[0]);
            banco.Adiciona(c[1]);
            banco.Adiciona(c[2]);
            banco.Adiciona(c[3]);

        }
   class Conta
    {
        public Cliente Titular { get; set; }
        public int numero { get; set; }
        public double saldo { get; protected set; }

        public virtual bool saque (double valor)
        {
            if (this.saldo >= valor && saldo > 0)
            {
                if (this.Titular.maior18)
                {
                    this.saldo -= valor;
                    return true;
                }
                else
                {
                    if (valor <= 200)
                    {
                        this.saldo -= valor;
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }

        public void deposita(double valor)
        {
            this.saldo += valor;
        }

        public void transfere(double valor, Conta destinatario)
        {
            this.saque(valor);
            this.deposita(valor);
        }

        public virtual void atualiza(double taxa)
        {
            this.saldo -= this.saldo * taxa;
        }
    }
class Cliente
    {
        public string nome { get; set; }
        public string CPF { get; set; }
        public string RG { get; set; }
        public string endereço { get; set; }
        public int idade { get; set; }
        public bool maior18
        {
            get
            {
                return this.idade >= 18;
            }
        }
        public Cliente(string nome)
        {
            this.nome = nome;
        }
    }
class banco
    {
        private Conta[] contas = new Conta[10];

        private int quantidade;

        public void Adiciona(Conta conta)
        {
            this.contas[this.quantidade] = conta;
            this.quantidade++;
        }
    }
1 resposta
solução!

Olá Alexander.

Legal que você foi além do proposto nos exercícios, isso é muito bacana. Quanto ao seu código, existem alguns pontos a serem melhorados.

Primeira coisa, nome de classe e nome de método você tem seguido o padrão de começar o nome com letra maiúscula, porém não fez isso na classe banco, nem nos métodos da classe Conta. Inclusive, propriedades das classes é natural deixarmos em maiúscula na primeira letra, logo reconsidere deixar todas as propriedades de sua classe nesse padrão. Uma dica que te dou é utilizar o atalho CTRL + R + R no Visual Studio, assim você renomeia o nome da classe/método/atributo e isso será refletido nas referências a eles.

Segunda coisa, você deve ter notado que definir um número de 10 para contas em um banco não é nada escalável, né? Para isso, ao invés de utilizar esse array de contas, que tal utilizar uma lista de contas? Estou dizendo da classe List<T> onde T é a sua classe. É uma lista objetos tipada. Com ela, basta adicionar cada conta na sua lista de contas da classe Banco. Ex:

class Banco 
 {
    List<Conta> Contas { get; set; }

   public Banco()
   {
      Contas = new List<Contas>();
   }
 }

private void button8_Click(object sender, EventArgs e)
{
   var banco = new Banco();
   var conta = new Conta();
   conta.Titular = "João Silva";
   banco.Contas.Add(conta);
}

Esse foi só um exemplo. Um cuidado a se tomar é que toda vez que o botão é clicado, uma nova instância de Banco é criada. Ou seja, um novo objeto é criado. Isso quer dizer que aquelas contas adicionadas no clique anterior estarão no objeto antigo. Compreende o que quero dizer? Suponha que você quer colocar um nome em um campo de texto e clicar em um botão que adicione esse nome como uma conta. Contudo, você quer dar a possibilidade que o usuário continue adicionando várias outras contas, alterando o nome e clicando no botão. Depois de 20 contas ele quer imprimir todas na tela. Desse jeito que exemplifiquei, você teria que adicionar essas contas em uma instância de Banco que tenha sido inicializada em algum momento (no início da aplicação, por exemplo - método Load do formulário é uma opção) e não seja mais instanciada no clique. Ou seja, vai sempre utilizar a mesma instância, adicionando novas contas à mesma instância de Banco.

Outra coisa errada no seu código é essa linha que se repete:

c[0].Titular = cl[0];

Você repete várias vezes essa linha. Note que ela faz a mesma coisa toda vez, sem necessidade. Acredito que a ideia era ir mudando para c[1], c[2]... Enfim, com o List<T> que te comentei, a história muda.

Tente fazer algumas alterações conforme as minhas dicas e vamos evoluindo a partir daí.