2
respostas

Desafio: hora da prática (1/3)

Atividade 1 e 2, para conseguir mostrar as informações do titular, a partir da conta, eu criei um método dentro da conta para receber como parâmetro o titular e o adicionar para sua propriedade de TitularConta.

Conta.cs

public class Conta {
    Titular TitularConta = new Titular();
    public string? AgenciaConta { get; set; }
    public int NumeroConta { get; set; }
    public decimal SaldoConta { get; set; }
    public decimal LimiteSaldoConta {get; set;}

    public void AdicionarTitularConta (Titular titular)  {
       TitularConta = titular; 
    }  
    public void ExibirInformacoesConta() {
        Console.WriteLine("=====================");
        Console.WriteLine($"Nome do Titular: {TitularConta.Nome}");
        Console.WriteLine($"Email do Titular: {TitularConta.Email}");
        Console.WriteLine($"Senha do Titular: {TitularConta.Senha}");
        Console.WriteLine($"Agência: {AgenciaConta}");
        Console.WriteLine($"Número: {NumeroConta}");
        Console.WriteLine($"Saldo: R${Math.Round(SaldoConta, 2)}");
        Console.WriteLine($"Limite: R${Math.Round(LimiteSaldoConta, 2)}");
        Console.WriteLine("=====================");
    }
}

Titular.cs

public class Titular{
    public string? Nome {get; set;}
    public string? Email {get; set; }
    public string? Senha {get; set;}
}

Program.cs

var conta = new Conta();
var titularConta = new Titular();

titularConta.Nome = "Rafael";
titularConta.Email = "rafaelvierasantos@hotmail.com";
titularConta.Senha = "234reffgzsxdgdfdyh45";

conta.AgenciaConta = "Itau";
conta.NumeroConta = 312345;
conta.SaldoConta = 350.50m;
conta.LimiteSaldoConta = 2000.50m;

Console.Clear();
conta.AdicionarTitularConta(titularConta);
conta.ExibirInformacoesConta();

Para a atividade 3, eu criei uma classe de estoque que continha uma lista de produtos e fui adicionando valores na lista pelo método AdicionarProdutos:

EstoqueProdutos.cs

class EstoqueProdutos {
    List<Produto> listaProdutos = new List<Produto>();

    public void AdicionarProduto (Produto produtoAdicionado) {
        listaProdutos.Add(produtoAdicionado);
    }
    public void ExibirProdutos() {
        Console.WriteLine("Lista de Produtos:");
        foreach (Produto produto in listaProdutos) {
            Console.WriteLine("\n=====================================");
            Console.WriteLine($"ID: {produto.IdProduto}");
            Console.WriteLine($"Nome: {produto.NomeProduto}");
            Console.WriteLine($"Quantidade: {produto.QuantiaProduto}");
            Console.WriteLine("=====================================\n");
            Console.ReadKey();
        }
    }
}

Produto.cs

public class Produto {
    public int IdProduto {get; set;}
    public string? NomeProduto {get; set;}
    public int QuantiaProduto {get; set;} 
}

Program.cs

var EstoqueProdutos = new EstoqueProdutos();
var produto1 = new Produto();
var produto2 = new Produto();

produto1.IdProduto = 1;
produto1.NomeProduto = "Camisa";
produto1.QuantiaProduto = 10;

produto2.IdProduto = 2;
produto2.NomeProduto = "Casaco";
produto2.QuantiaProduto = 3;

EstoqueProdutos.AdicionarProduto(produto1);
EstoqueProdutos.AdicionarProduto(produto2);

Console.Clear();
EstoqueProdutos.ExibirProdutos();

A atividade 4 e 5 eu vou postar no próximo porque esse não vai ter espaço.

2 respostas

Atividade 4
Para a atividade 4 a complexidade é um pouco maior e eu tive que criar alguns métodos extras para verificar se a modelagem estaria coerente com a realidade. Assim, eu criei um pequeno representativo de um "Diagrama de Classes".

==========================================================
Aluno
- Nome: string
- Idade: int
- notaAlunoDisciplina: Dictionary<Disciplina, decimal>
==========================================================
Professor
- Nome: string
- DisciplinasLecionadas: List<Disciplina>

+ AdicionarDisciplina(Disciplina)
+ AdicionarNotaAluno(Aluno, Disciplina, Nota)
+ ExibirNotasAlunos(Disciplina)
==========================================================
Disciplina
- Nome: String
- AlunosMatriculados: List<alunos>

+ AdicionarAluno(Aluno)
==========================================================

O Aluno é uma classe apenas com suas propriedades, enquanto o professor tem suas propriedades mas também possui as funcionalidades de adicionar um aluno a uma disciplina, adicionar uma nota específica a um aluno a uma disciplina específica e também de exibir as notas de uma disciplina enquanto a disciplina só pode adicionar um aluno, o que eu poderia ter também colocar para o professor fazer mas aumentaria um pouco a quantia de parâmetros necessários nesse caso.

Aluno.cs

public class Aluno {
    public string? Nome {get; set;}
    public int Idade {get; set;}
    public Dictionary <Disciplina, decimal> notaAlunoDisciplina = new Dictionary<Disciplina, decimal>();
}

Professor.cs

public class Professor {
    public string? Nome {get; set;}
    public List<Disciplina> DisciplinasLecionadas = new List<Disciplina>();

    public void AdicionarDisciplina (Disciplina disciplina) {
        if (DisciplinasLecionadas.Contains(disciplina)) DisciplinasLecionadas.Add(disciplina);
    }
    public void AdicionarNotaAluno (Disciplina disciplina, Aluno aluno, decimal nota) {
        aluno.notaAlunoDisciplina.Add(disciplina, nota);
    }
    public void ExibirNotasAlunos(Disciplina disciplina) {
        disciplina.AlunosMatriculados.ForEach(aluno => Console.WriteLine($"{aluno.Nome} - {aluno.notaAlunoDisciplina[disciplina]}"));
    }
}

Disciplina.cs

public class Disciplina {
    public string? Nome {get ; set;}
    public List<Aluno> AlunosMatriculados = new List<Aluno>();
    public void AdicionarAluno(Aluno aluno) {
        AlunosMatriculados.Add (aluno);
    }
}

Program.cs

var Liriam = new Aluno(); Liriam.Nome = "Liriam";
var Carlos = new Aluno(); Carlos.Nome = "Carlos";

var Matematica = new Disciplina(); Matematica.Nome = "Matemática";
var Geografia = new Disciplina(); Geografia.Nome = "Geografia";
var Portugues = new Disciplina(); Portugues.Nome = "Português";

var George = new Professor(); George.Nome = "George";
var Madalena = new Professor(); Madalena.Nome = "Madalena";

George.AdicionarDisciplina(Geografia);
Madalena.AdicionarDisciplina(Matematica);
Madalena.AdicionarDisciplina(Portugues);

Matematica.AdicionarAluno(Liriam); Matematica.AdicionarAluno(Carlos);
Geografia.AdicionarAluno(Liriam); Geografia.AdicionarAluno(Carlos);
Portugues.AdicionarAluno(Liriam); Portugues.AdicionarAluno(Carlos);

George.AdicionarNotaAluno(Geografia, Liriam, 10);
George.AdicionarNotaAluno(Geografia, Carlos, 8.5m);

George.ExibirNotasAlunos(Geografia);

Para a atividade 5, eu percebi que com as classes citadas, o problema aparentemente não poderia ser modelado com tanta qualidade tanto quanto se eu adicionasse uma nova classe chamada itens para adicioná-los ao cardápio conforme seus nomes e preços.

=======================================
Restaurante
- NomeRestaurante: String
- MesasRestaurante: List<Mesas>
- CardapioRestaurante: Cardapio

+ AdicionarMesas (List<Mesa>)
+ AdicionarCardapio (Cardapio)
=======================================
Mesa
- NumeroMesa: int
- PedidosAssociados: List<Pedidos>

+ FazerPedido(Pedido)
+ VerPedidos()
=======================================
Pedido
- itensPedidos: List<Itens>
- precoPedido: decimal

+ AdicionarItemsPedido(List<Itens>)
+ DefinirPrecoPedido()
+ ExibirPedido();
=======================================
Cardapio
- NomeCardapio: string
- itensCardapio: List<Itens>

+ AdicionarItemCardapio(List<Itens>);
+ ExibirCardapio(Restaurante);
=======================================
Item
- NomeItem: string
- PrecoItem: decimal
- QuantidadeItem: int
=======================================

Program.cs


var CasaFeliz = new Restaurante();
CasaFeliz.NomeRestaurante = "Casa Feliz";

var cardapio = new Cardapio();

var suco = new Item(); 
suco.NomeItem = "Suco";
suco.PrecoItem = 10m;
suco.QuantidadeItem = 5;

var hamburguer = new Item(); 
hamburguer.NomeItem = "Hamburguer";
hamburguer.PrecoItem = 20m;
hamburguer.QuantidadeItem = 10;

var batata = new Item(); 
batata.NomeItem = "Batata";
batata.PrecoItem = 29m;
batata.QuantidadeItem = 20;

var listaItems = new List<Item> () {suco, hamburguer, batata};

cardapio.AdicionarItemsCardapio(listaItems);

Console.Clear();
Console.WriteLine("Itens do Cardápio: ");
cardapio.ExibirCardapio(); Console.ReadKey();

Console.Clear();
var pedidoCliente = new Pedido();
var listaItemsPedido = new List<Item> () {suco, hamburguer, hamburguer};
pedidoCliente.AdicionarItemsPedido(listaItemsPedido);
pedidoCliente.DefinirPrecoPedido();
pedidoCliente.ExibirPedido();

var pedidoCliente2 = new Pedido();
var listaItemsPedido2 = new List<Item> () {suco, suco, hamburguer};
pedidoCliente2.AdicionarItemsPedido(listaItemsPedido2);
pedidoCliente2.DefinirPrecoPedido();

var mesa01 = new Mesa();
var mesa02 = new Mesa();

var listaMesas = new List<Mesa>() {mesa01, mesa02};
CasaFeliz.AdicionarMesas(listaMesas);

mesa01.FazerPedido(pedidoCliente);
mesa02.FazerPedido(pedidoCliente2);

Console.ReadKey(); Console.Clear();
mesa01.VerPedidos();
mesa02.VerPedidos();

Item.cs

public class Item {
    public string? NomeItem {get; set;}
    public decimal PrecoItem {get; set;}
    public int QuantidadeItem {get; set;}
}

Pedido.cs

public class Pedido {
    public List<Item> ItensPedido = new List<Item>();
    private decimal precoPedido;

    public void AdicionarItemsPedido(List<Item> itensPedidos) {
        itensPedidos.ForEach(item => ItensPedido.Add(item));
    }
    public void DefinirPrecoPedido() {
        ItensPedido.ForEach(item => precoPedido += item.PrecoItem);
    }
    public void ExibirPedido() {
        ItensPedido.ForEach(item => Console.WriteLine($"{item.NomeItem}: R${item.PrecoItem}"));
        Console.WriteLine($"Preço Total: R${precoPedido}");
    }
}

Cardapio.cs

public class Cardapio {
    public string? NomeCardapio {get;set;}
    public List<Item> ItensCardapio = new List<Item>();

    public void AdicionarItemsCardapio(List<Item> itensCardapio) {
        itensCardapio.ForEach(item => ItensCardapio.Add(item));
    }
    public void ExibirCardapio() {
        ItensCardapio.ForEach(item => Console.WriteLine($"{item.NomeItem} - {item.PrecoItem}"));
    }
}

Mesa.cs

public class Mesa {
    public int NumeroMesa {get; set;}
    public List<Pedido> PedidosAssociados = new List<Pedido>();
    
    public void FazerPedido(Pedido pedido) {
        PedidosAssociados.Add(pedido);
    }
    public void VerPedidos() {
        Console.WriteLine("====================");
        PedidosAssociados.ForEach(pedido => pedido.ExibirPedido());
        Console.WriteLine("====================");
    }
}

Restaurante.cs

public class Restaurante {
    public string? NomeRestaurante {get; set;}
    public List<Mesa> MesasRestaurantes = new List<Mesa>();
    public Cardapio? CardapioRestaurante {get; set;}

    public void AdicionarMesas(List<Mesa> mesas) {
        mesas.ForEach(mesa => MesasRestaurantes.Add(mesa));
    }
    public void AdicionarCardapio(Cardapio cardapio) {
        CardapioRestaurante = cardapio;
    }
}