2
respostas

[Projeto] Desafio: Hora da prática

1.Modelar um Pet Shop com classes como Pet, Dono, Consulta e médico.

Pet.cs

namespace PetShop.Desafio_02
{
    internal class Pet
    {
        public Pet(string nome, int tag, int idade)
        {
            Nome = nome;
            Tag = tag;
            Idade = idade;
        }

        public string Nome { get; }
        public int Tag { get; }
        public int Idade { get; }
    }
}

Dono.cs

namespace PetShop.Desafio_02
{
    internal class Dono
    {
        public string NomeDono { get; set; }
        public string Contato { get; set; }
        public Dono(string nomeDono, string contato)
        {
            NomeDono = nomeDono;
            Contato = contato;
        }
    }
}

Medico.cs

namespace PetShop.Desafio_02
{
    internal class Medico
    {
        public Medico(string nomeMedico, string especialidade)
        {
            NomeMedico = nomeMedico;
            Especialidade = especialidade;
        }

        public string NomeMedico { get; set; }
        public string Especialidade { get; set; }   
    }
}

Consulta.cs

using System;

namespace PetShop.Desafio_02
{
    internal class Consulta
    {

        public Medico Vaterinario { get; }
        public Dono DonoAnimal { get; }
        public Pet Animal { get; }
        public DateTime DataConsulta { get; private set; }
        public Consulta(Medico vaterinario, Dono donoAnimal, Pet animal, string dataConsulta)
        {
            Vaterinario = vaterinario;
            DonoAnimal = donoAnimal;
            Animal = animal;
            AgendarHorario(dataConsulta);
        }

        public void AgendarHorario (string data)
        {
            if (DateTime.TryParse(data, out DateTime dataDigitada))
            {
                DataConsulta = dataDigitada;
            }
            else
            {
                Console.WriteLine("Data de consulta inválida.");
            }
        }

    }
}

2.Modelar o funcionamento de uma oficina automobilistica.

Veiculo.cs

namespace Oficina.Modelos
{
    internal class Veiculo
    {

        public string Modelo { get; set; }
        public Cliente ID { get; set; }
        public int Ano { get; set; }
        public Veiculo(string modelo, Cliente id, int ano)
        {
            Modelo = modelo;
            ID = id;
            Ano = ano;
        }

        public void ExibirDetalhes()
        {
            Console.WriteLine($"\nModelo: {Modelo}");
            Console.WriteLine($"ID do carro/cliente: {ID.ID}");
            Console.WriteLine($"Ano: {Ano}\n");
        }
    }
}

Cliente.cs


namespace Oficina.Modelos
{
    internal class Cliente
    {

        public string Nome { get; set; }
        public int ID { get; set; }
        public string Contato { get; set; }
        public Cliente(string nome, int id, string contato)
        {
            Nome = nome;
            ID = id;
            Contato = contato;
        }
    }
}

Funcionario.cs

namespace Oficina.Modelos
{
    internal class Funcionario
    {
        public Funcionario(string nome, int iD, string especialidade)
        {
            Nome = nome;
            ID = iD;
            Especialidade = especialidade;
        }

        public string Nome { get; set; }
        public int ID { get; set; }
        public string Especialidade { get; set; }

    }
}

Oficina.cs


namespace Oficina.Modelos
{
    internal class Oficina1
    {
        public Oficina1()
        {
            VeiculoNaOficina = new List<Veiculo>();
        }

        public List<Veiculo> VeiculoNaOficina { get; set; }

       public void AgendarServico(Veiculo carro, Cliente cliente, Funcionario funcionario, string dataAgendamento)
        {
            VeiculoNaOficina.Add(carro);
            Console.WriteLine($"Serviço marcado para {carro.Modelo} com ID: {cliente.ID} em {dataAgendamento}" +
                $" com o {funcionario.Especialidade} {funcionario.Nome}\n");
        }

        public void RealizarServico(Veiculo carro, Funcionario funcionario)
        {
            Console.WriteLine($"Serviço realizado no carro {carro.Modelo}, pelo {funcionario.Especialidade}" +
                $" {funcionario.Nome}");

            VeiculoNaOficina.Remove(carro);
        }
    }
}
  1. Criar um programa Program.cs e simular o funcionamento do programa.
using Oficina.Modelos;


var cliente1 = new Cliente("Bruno", 777, "1111-11111");
var carro1 = new Veiculo("Fiat", cliente1, 2010);
var funcionario1 = new Funcionario("Bob", 123, "Mecânico");

carro1.ExibirDetalhes();

var oficina1 = new Oficina1();
oficina1.AgendarServico(carro1, cliente1, funcionario1, "01/01/2020");
oficina1.RealizarServico(carro1, funcionario1);
2 respostas

4.Escrever um programa que funcione como uma calculadora, que pode realizar as 4
operações básicas, além de calcular raiz quadrada e potências. O usuario deve
entrar com dois números e um simbolo que represente a operação a ser feita.

namespace Oficina.Calculadora
{
    internal class Calculadora
    {
        public static void Calcular(double x, string sinal, double? y = null)
        {
            switch (sinal)
            {
                case "+":
                    Console.Clear();
                    Console.WriteLine($"{x} + {y} = {x + y}");
                    break;

                case "-":
                    Console.Clear();
                    Console.WriteLine($"{x} - {y} = {x - y}");
                    break;

                case "x":
                    Console.Clear();
                    Console.WriteLine($"{x} x {y} = {x * y}");
                    break;

                case "/":
                    Console.Clear();
                    Console.WriteLine($"{x} / {y} = {x / y}");
                    break;

                case "^":
                    Console.Clear();
                    Console.WriteLine($"{x} elevado a {y} = {Math.Pow(x, y!.Value)}");
                    break;

                case "Raiz":
                    Console.Clear();
                    Console.WriteLine($"Raiz quadrada de {x} = {Math.Sqrt(x)}");
                    break;

                default:
                    Console.WriteLine("Operação inválida.");
                    break;
            }
        }
    }
}

Program.cs

using Oficina.Calculadora;


Console.WriteLine("Calculadora!");
Console.Write("Digite o primeiro número: ");
double numero1 = double.Parse(Console.ReadLine()!);

Console.WriteLine("\nEscolha qual calculo matemático deseja efetuar dentre as seguintes opções: ");
Console.WriteLine("Soma: + ");
Console.WriteLine("Subtração: - ");
Console.WriteLine("Multiplicação: x ");
Console.WriteLine("Divisão: /");
Console.WriteLine("Potência: ^");
Console.WriteLine("Raiz Quadrada: Raiz");
Console.WriteLine("\nEscolha: ");
string sinal = Console.ReadLine()!;

if (sinal == "Raiz")
{
    Calculadora.Calcular(numero1, sinal);
}
else
{
    
    Console.Write("\nDigite o segundo número: ");
    double numero2 = double.Parse(Console.ReadLine()!);

    Calculadora.Calcular(numero1, sinal, numero2);

}

Olá, Christopher! Tudo bem?

Parabéns pela dedicação em concluir todos esses desafios! Seus códigos mostram uma evolução fantástica no domínio do C# e da Orientação a Objetos. Você abordou muito bem a separação de responsabilidades (classes) e a interação entre os objetos.

Aqui estão alguns destaques e pequenas dicas sobre as suas implementações:

1. Pet Shop

  • Destaque: O uso do DateTime.TryParse na classe Consulta foi uma excelente sacada! Essa é uma ótima prática de programação defensiva, pois evita que o programa quebre (lance uma exceção) se for inserida uma data em um formato incorreto.
  • Dica: Apenas um detalhe de digitação: na classe Consulta, a propriedade acabou ficando Vaterinario em vez de Veterinario.

2. Oficina Automobilística

  • Destaque: Muito boa a utilização da List<Veiculo> dentro da classe Oficina1 para gerenciar o estado da oficina (adicionando no agendamento e removendo na finalização). Além disso, a composição (passar o objeto Cliente para dentro do Veiculo) demonstra que você entendeu como as classes se relacionam.
  • Dica Semântica: Na classe Veiculo, a propriedade se chama ID, mas ela recebe um objeto inteiro do tipo Cliente (public Cliente ID { get; set; }). Para deixar a leitura do código mais natural para outros programadores, seria legal chamá-la de Proprietario ou ClienteDono.

3. Calculadora

  • Destaque: O uso de método estático (public static void Calcular) faz todo o sentido aqui! Uma calculadora básica funciona como uma ferramenta utilitária que não precisa instanciar um objeto para guardar estado. A sua lógica de usar um parâmetro opcional e anulável (double? y = null) para tratar a Raiz Quadrada de forma isolada foi uma solução muito elegante e limpa!
  • Dica de Robustez: Em operações matemáticas, é sempre bom prever "cenários de quebra", como a divisão por zero. Adicionar um if (y == 0) retornando uma mensagem de erro no case "/" deixaria sua calculadora à prova de falhas.

O seu progresso está excelente, e a forma como você estruturou as lógicas mostra que você já pensa de forma orientada a objetos!

Pensando na sua classe Oficina1, como você implementaria uma validação no método AgendarServico para impedir que o mesmo carro fosse agendado novamente caso ele já estivesse dentro da lista VeiculoNaOficina?