using System.Collections.Generic;
public uint Numero { get; private set; }
public uint Agencia { get; private set; }
public decimal Saldo { get; private set; }
public string Titular { get; private set; }
public Conta(uint numero, uint agencia, decimal saldoInicial, string titular)
this.Saldo = saldoInicial;
public string Logradouro { get; private set; }
public string Numero { get; private set; }
public string Complemento { get; private set; }
public string Bairro { get; private set; }
public uint CEP { get; private set; }
public string Municipio { get; private set; }
public string Estado { get; private set; }
public string Pais { get; private set; }
public Endereco(string logradouro, string numero, string complemento, string bairro, uint cep, string municipio, string estado, string pais)
this.Logradouro = logradouro;
this.Complemento = complemento;
this.Municipio = municipio;
public override string ToString()
return string.Format("{0}, {1}", this.Logradouro, this.Numero) + (!string.IsNullOrWhiteSpace(this.Complemento) ? string.Format(", {0}", this.Complemento) : string.Empty) + Environment.NewLine +
string.Format("{0}, {1}", this.Bairro, this.CEP) + Environment.NewLine +
string.Format("{0}/{1} - {2}", this.Municipio, this.Estado, this.Pais);
public uint CodigoPais { get; private set; }
public uint DDD { get; private set; }
public uint Numero { get; private set; }
public Telefone(uint codigoPais, uint ddd, uint numero)
this.CodigoPais = codigoPais;
public override string ToString()
return string.Format("+{0} {1} {2}", this.CodigoPais, this.DDD, this.Numero);
public IList<Conta> Contas { get; private set; }
public string Nome { get; private set; }
public Endereco Endereco { get; private set; }
public Telefone Telefone { get; private set; }
public string Email { get; private set; }
public Banco(string nome, Endereco endereco, Telefone telefone, string email)
this.Contas = new List<Conta>();
this.Endereco = endereco;
this.Telefone = telefone;
public bool AddConta(Conta conta)
bool adicionar = conta != null;
public abstract class TemplateRelatorio
public string GerarRelatorio(Banco banco)
return GerarCabecalho(banco) +
"__________________________________________________________________________________" +
"__________________________________________________________________________________" +
protected abstract string GerarCabecalho(Banco banco);
protected abstract string GerarCorpo(Banco banco);
protected abstract string GerarRodape(Banco banco);
public class RelatorioSimples : TemplateRelatorio
protected override string GerarCabecalho(Banco banco)
protected override string GerarCorpo(Banco banco)
string corpo = string.Empty;
foreach(Conta conta in banco.Contas)
corpo += string.Format("Titular: {0}\t\tSaldo: R$ {1:0.00}", conta.Titular, conta.Saldo) + Environment.NewLine;
if(!string.IsNullOrWhiteSpace(corpo))
corpo = corpo.Remove(corpo.LastIndexOf(Environment.NewLine));
protected override string GerarRodape(Banco banco)
return banco.Telefone.ToString();
public class RelatorioComplexo : TemplateRelatorio
protected override string GerarCabecalho(Banco banco)
return banco.Nome + Environment.NewLine +
banco.Endereco + Environment.NewLine +
protected override string GerarCorpo(Banco banco)
string corpo = string.Empty;
foreach(Conta conta in banco.Contas)
corpo += string.Format("Titular: {0}\t\tAgência: {1}\t\tConta: {2}\t\tSaldo: R$ {3:0.00}", conta.Titular, conta.Agencia, conta.Numero, conta.Saldo) + Environment.NewLine;
if(!string.IsNullOrWhiteSpace(corpo))
corpo = corpo.Remove(corpo.LastIndexOf(Environment.NewLine));
protected override string GerarRodape(Banco banco)
return banco.Email + Environment.NewLine +
public static void Main()
Banco banco = new Banco("Banco Inventado S.A.",
new Endereco("Rua Teste", "123A", string.Empty, "TESTE", 32632500, "Cidade Teste", "MG", "Brasil"),
new Telefone(55, 31, 33333333),
"teste@bancoinventado.com.br");
banco.AddConta(new Conta(1, 3232, 1250.50M, "José"));
banco.AddConta(new Conta(2, 3232, 2500.75M, "Antônio"));
banco.AddConta(new Conta(3, 3232, 736.44M, "Osvaldo"));
banco.AddConta(new Conta(4, 3232, 114650.37M, "Leandro"));
RelatorioSimples relatorioSimples = new RelatorioSimples();
RelatorioComplexo relatorioComplexo = new RelatorioComplexo();
Console.WriteLine(relatorioSimples.GerarRelatorio(banco));
Console.WriteLine(Environment.NewLine + Environment.NewLine);
Console.WriteLine(relatorioComplexo.GerarRelatorio(banco));