1
resposta

Desafio Oficina

Olá, tudo bem?

Segue sugestão para o desafio da Oficina. Caso tenha algo para ajustar vai ajudar a me aprimorar:

Modelos/Cliente.cs

namespace OficinaAutomobilistica;

public class Cliente
{
    private List<Veiculo> veiculos = new();
    public Cliente(string nome)
    {
        Nome = nome;
    }
    public string Nome { get; }
    public List<Veiculo> Veiculos => veiculos;
    
    public bool AdicionarVeiculo(Veiculo veiculo)
    {
        if(veiculos.Any(v => v.Placa == veiculo.Placa))
        {
            Console.WriteLine($"O veículo com a placa {veiculo.Placa} já existe na lista");
            return false;
        }
        veiculos.Add(veiculo);
        return true;
    }

    public void ExibirVeiculos()
    {
        Console.WriteLine($"Veiculos de {this.Nome}:");
        foreach(var veiculo in Veiculos)
        {
           Console.WriteLine($"{veiculo.Placa} | {veiculo.Modelo}"); 
        }
    }
}

Modelos/Mecanico.cs

namespace OficinaAutomobilistica;

public class Mecanico
{
    public Mecanico(string nome)
    {
        Nome = nome;
    }
    public string Nome { get; }
}

Modelos/OrdemDeServico.cs

namespace OficinaAutomobilistica;

public class OrdemDeServico
{
    public OrdemDeServico(Veiculo veiculoDoCliente, Mecanico mecanico, string servico, string dataParaEntrega)
    {
        VeiculoDoCliente = veiculoDoCliente;
        Mecanico = mecanico;
        Servico = servico;
        DataParaEntrega = dataParaEntrega;

        veiculoDoCliente.ServicosExecutados.Add(this);
    }
    public Veiculo VeiculoDoCliente { get; }
    public Mecanico Mecanico { get; }
    public string Servico { get; }
    public string DataParaEntrega { get; }

    public void ExibirOrdemDeServico()
    {
        Console.WriteLine($"""
        **Ordem de serviço**
        Veiculo: {VeiculoDoCliente.InformacoesVeiculo}
        Cliente: {VeiculoDoCliente.Dono.Nome}
        Mecânico: {Mecanico.Nome}
        Serviço: {this.Servico}
        Data Para entrega: {this.DataParaEntrega}
        """);
    }
    
}

Modelos/Veiculo.cs

using System.Dynamic;

namespace OficinaAutomobilistica;

 public class Veiculo
{
    private List<OrdemDeServico> servicosExecutados = new();
    
    public Veiculo(string marca, string modelo, int ano, string placa, Cliente dono)
    {
        Marca = marca;
        Modelo = modelo;
        Ano = ano;
        Placa = placa;
        Dono = dono;

        if (!dono.AdicionarVeiculo(this))
        {
            throw new InvalidOperationException("Veículo com a mesma placa já existe para este cliente.");
        }

        Console.WriteLine($"Veículo adicionado com sucesso:\n{InformacoesVeiculo}");
    }

    public string Marca { get; }
    public string Modelo { get; }
    public int Ano { get; }
    public string Placa { get; }
    public Cliente Dono { get; }
    public List<OrdemDeServico> ServicosExecutados => servicosExecutados;
    public string InformacoesVeiculo => $"Marca: {this.Marca} | Modelo: {this.Modelo} | Ano: {this.Ano} | Placa: {this.Placa} | Dono: {this.Dono.Nome}";

    public void ExibirServicosExecutados()
    {
        Console.WriteLine($"Serviços executados no veículo [{this.InformacoesVeiculo}]:");
        for(int servico = 0; servico < ServicosExecutados.Count; servico++)
        {
            Console.WriteLine($"\n{servico+1}");
            ServicosExecutados[servico].ExibirOrdemDeServico();
        }

    }
}

Program.cs

using OficinaAutomobilistica;

class Program
{
    static void Main(string[] args)
    {

        Cliente cliente1 = new("Roberto Melo");

        Veiculo veiculo1 = new("Volkswagen", "T-Cross TSI ", 2023, "PLACA1", cliente1);

        cliente1.AdicionarVeiculo(veiculo1);

        System.Console.WriteLine();
        cliente1.ExibirVeiculos();

        Mecanico mecanico1 = new Mecanico("Mecânico 1");

        OrdemDeServico ordemDeServico1 = new(veiculo1, mecanico1, "Troca de Óleo", "2024-05-25");
        OrdemDeServico ordemDeServico2 = new(veiculo1, mecanico1, "Revisão geral", "2024-06-04");

        System.Console.WriteLine();
        ordemDeServico1.ExibirOrdemDeServico();

        System.Console.WriteLine();
        veiculo1.ExibirServicosExecutados();
    }
}
1 resposta

Oii Roberto, tudo bem?

Seu código está muito bem estruturado e cobre os principais aspectos da orientação a objetos em C#! Muito obrigada por compartilhar com a gente.

Continue os bons estudos.

Um abraço.