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();
}
}