image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF

AA

Ayrton António03/07/2023 11:12
Compartilhe

Como desenvolver um Sistema de Estacionamento em C#

    Título: Desenvolvendo um Sistema de Estacionamento em C#

    Introdução:

    Um sistema de estacionamento é uma aplicação útil e comum em diversas situações, seja para gerenciar vagas de estacionamento em um estabelecimento comercial, condomínio ou até mesmo em uma cidade. Neste artigo, vamos desenvolver um sistema de estacionamento em C# utilizando a linguagem de programação e os princípios de orientação a objetos.

    Parte 1: Implementação da Classe Estacionamento

    Vamos começar implementando a classe `Estacionamento`, responsável por gerenciar os veículos estacionados. O código a seguir apresenta a estrutura básica da classe:

    namespace DesafioFundamentos.Models
    {
     public class Estacionamento
     {
         private decimal precoInicial = 0;
         private decimal precoPorHora = 0;
         private List<string> veiculos = new List<string>();
     
         // Construtor da classe
         public Estacionamento(decimal precoInicial, decimal precoPorHora)
         {
             this.precoInicial = precoInicial;
             this.precoPorHora = precoPorHora;
         }
     
         // Método para adicionar um veículo ao estacionamento
         public void AdicionarVeiculo()
         {
             // ...
         }
     
         // Método para remover um veículo do estacionamento
         public void RemoverVeiculo()
         {
             // ...
         }
     
         // Método para listar os veículos estacionados
         public void ListarVeiculos()
         {
             // ...
         }
     }
    }
    

    A classe `Estacionamento` possui três atributos privados: `precoInicial`, `precoPorHora` e `veiculos`. O construtor da classe recebe como parâmetros o preço inicial e o preço por hora do estacionamento.

    Adicionar veículos

    Vamos agora implementar o método `AdicionarVeiculo()` na classe `Estacionamento` e explicar cada etapa em detalhes.

    public void AdicionarVeiculo()
    {
     Console.WriteLine("Digite a placa do veículo para estacionar:");
     string placa = Console.ReadLine();
     
     if (veiculos.Any(v => v.Equals(placa.ToUpper())))
     {
         Console.WriteLine("Já existe um veículo com essa placa.");
     }
     else
     {
         veiculos.Add(placa);
         Console.WriteLine("Veículo estacionado com sucesso!");
     }
    }
    

    O método `AdicionarVeiculo()` tem a responsabilidade de adicionar um novo veículo ao estacionamento. Vamos analisar cada parte do código:

    1. Primeiro, exibimos uma mensagem para o usuário: "Digite a placa do veículo para estacionar:". Nessa etapa, solicitamos que o usuário insira a placa do veículo que deseja estacionar.

    2. Em seguida, lemos a entrada do usuário utilizando `Console.ReadLine()` e armazenamos o valor digitado na variável `placa`.

    3. Utilizamos a expressão `veiculos.Any(v => v.Equals(placa.ToUpper()))` para verificar se já existe um veículo com a mesma placa no estacionamento. Essa expressão percorre a lista de veículos (`veiculos`) e verifica se alguma placa (`v`) é igual à placa digitada (`placa.ToUpper()`, convertida para letras maiúsculas).

    4. Se a expressão retornar `true`, ou seja, se já existir um veículo com a mesma placa no estacionamento, exibimos a mensagem "Já existe um veículo com essa placa.". Isso indica que o veículo não pode ser adicionado novamente, pois já está estacionado.

    5. Caso a expressão retorne `false`, ou seja, se não existir nenhum veículo com a mesma placa no estacionamento, executamos o bloco de código dentro do `else`. Nesse bloco, adicionamos a placa do veículo à lista de veículos (`veiculos.Add(placa)`) e exibimos a mensagem "Veículo estacionado com sucesso!".

    Após a explicação detalhada do método `AdicionarVeiculo()`, é possível entender que ele recebe a entrada do usuário (a placa do veículo), verifica se o veículo já está estacionado e, caso não esteja, adiciona o veículo à lista de veículos estacionados. Isso permite que o sistema de estacionamento mantenha um registro dos veículos presentes no local.

    Remover veiculo

    Vamos implementar o método `RemoverVeiculo()` na classe `Estacionamento` e explicar cada etapa em detalhes.

    public void RemoverVeiculo()
    {
     Console.WriteLine("Digite a placa do veículo para remover: ");
     string placa = Console.ReadLine();
     
     if (veiculos.Any(x => x.ToUpper() == placa.ToUpper()))
     {
         Console.WriteLine("Digite a quantidade de horas que o veículo permaneceu estacionado:");
         int horas = Convert.ToInt32(Console.ReadLine());
     
         decimal valorTotal = precoInicial + precoPorHora * horas;
     
         veiculos.Remove(placa.ToUpper());
     
         Console.WriteLine($"O veículo {placa} foi removido e o preço total foi de: {valorTotal}$");
     }
     else
     {
         Console.WriteLine("Desculpe, esse veículo não está estacionado aqui. Confira se digitou a placa corretamente.");
     }
    }
    

    Agora, vamos analisar cada parte do código e explicar o funcionamento do método `RemoverVeiculo()`:

    1. Primeiro, exibimos uma mensagem para o usuário: "Digite a placa do veículo para remover:". Nessa etapa, solicitamos que o usuário insira a placa do veículo que deseja remover.

    2. Em seguida, lemos a entrada do usuário utilizando `Console.ReadLine()` e armazenamos o valor digitado na variável `placa`.

    3. Utilizamos a expressão `veiculos.Any(x => x.ToUpper() == placa.ToUpper())` para verificar se existe um veículo com a placa digitada no estacionamento. Essa expressão percorre a lista de veículos (`veiculos`) e verifica se alguma placa (`x`) é igual à placa digitada (`placa.ToUpper()`, convertida para letras maiúsculas).

    4. Se a expressão retornar `true`, ou seja, se existir um veículo com a placa digitada no estacionamento, executamos o bloco de código dentro do `if`. Nesse bloco, solicitamos ao usuário que digite a quantidade de horas que o veículo permaneceu estacionado (`int horas = Convert.ToInt32(Console.ReadLine())`).

    5. Em seguida, calculamos o valor total a ser pago pelo estacionamento, utilizando a fórmula `valorTotal = precoInicial + precoPorHora * horas`. O valor inicial (`precoInicial`) é somado ao produto do preço por hora (`precoPorHora`) pelo número de horas (`horas`).

    6. Removemos o veículo da lista de veículos estacionados utilizando o método `Remove()` da lista, passando a placa do veículo convertida para letras maiúsculas (`veiculos.Remove(placa.ToUpper())`).

    7. Por fim, exibimos uma mensagem informando que o veículo foi removido e mostramos o preço total a ser pago pelo estacionamento: $"O veículo {placa} foi removido e o preço total foi de: {valorTotal}$".

    8. Caso a expressão do passo 3 retorne `false`, ou seja, se não existir um veículo com a placa digitada no estacionamento, executamos o bloco de código dentro do `else`. Nesse bloco, exibimos a mensagem "Desculpe, esse veículo não está estacionado aqui. Confira se digitou a placa corretamente.".

    Listagem dos veículos

    Certamente! Vou implementar o método `ListarVeiculos()` na classe `Estacionamento` e explicar cada etapa em detalhes.

    public void ListarVeiculos()
    {
     if (veiculos.Any())
     {
         Console.WriteLine("Os veículos estacionados são:");
         foreach (var v in veiculos)
         {
             Console.WriteLine(v);
         }
     }
     else
     {
         Console.WriteLine("Não há veículos estacionados.");
     }
    }
    

    Agora, vamos analisar cada parte do código e explicar o funcionamento do método `ListarVeiculos()`:

    1. Primeiro, verificamos se há algum veículo estacionado na lista `veiculos` utilizando o método `Any()`. Esse método retorna `true` se houver pelo menos um elemento na lista e `false` caso contrário.

    2. Se a condição `veiculos.Any()` retornar `true`, ou seja, se houver veículos estacionados na lista, executamos o bloco de código dentro do `if`.

    3. Dentro do `if`, exibimos a mensagem "Os veículos estacionados são:" para indicar ao usuário que a seguir serão listados os veículos estacionados.

    4. Utilizamos um loop `foreach` para percorrer a lista de veículos (`veiculos`). Em cada iteração do loop, armazenamos a placa do veículo na variável `v`.

    5. Dentro do loop, exibimos a placa do veículo utilizando `Console.WriteLine(v)`. Dessa forma, cada placa de veículo é mostrada em uma linha separada.

    6. Após percorrer todos os veículos estacionados, o método `ListarVeiculos()` é concluído.

    7. Caso a condição `veiculos.Any()` retorne `false`, ou seja, se não houver veículos estacionados na lista, executamos o bloco de código dentro do `else`.

    8. Dentro do `else`, exibimos a mensagem "Não há veículos estacionados." para informar ao usuário que não há veículos registrados no estacionamento.

    O método `ListarVeiculos()` verifica se há veículos estacionados e, se houver, os exibe um por linha. Caso não haja veículos estacionados, é exibida uma mensagem informando sobre a ausência de veículos. Dessa forma, o usuário tem acesso à lista de veículos estacionados no momento.

    Parte 2: Implementação do Programa Principal

    Agora, vamos implementar o programa principal que irá interagir com a classe `Estacionamento`. O código a seguir apresenta a estrutura básica do programa:

    using DesafioFundamentos.Models;
     
    // Coloca o encoding para UTF8 para exibir acentuação
    Console.OutputEncoding = System.Text.Encoding.UTF8;
     
    // Declaração das variáveis
    decimal precoInicial = 0;
    decimal precoPorHora = 0;
     
    // Obtém os preços do usuário
    Console.WriteLine("Seja bem-vindo ao sistema de estacionamento!\n" +
                   "Digite o preço inicial:");
    precoInicial = Convert.ToDecimal(Console.ReadLine());
     
    Console.WriteLine("Agora digite o preço por hora:");
    precoPorHora = Convert.ToDecimal(Console.ReadLine());
     
    // Instancia a classe Estacionamento, já com os valores obtidos anteriormente
    Estacionamento es = new Estacionamento(precoInicial, precoPorHora);
     
    // Loop do menu
    string opcao = string.Empty;
    bool exibirMenu = true;
     
    while (exibirMenu)
    {
     Console.Clear();
     Console.WriteLine("Digite a sua opção:");
     Console.WriteLine("1 - Cadastrar veículo");
     Console.WriteLine("2 - Remover veículo");
     Console.WriteLine("3 - Listar veículos");
     Console.WriteLine("4 - Encerrar");
     
     switch (Console.ReadLine())
     {
         case "1":
             es.AdicionarVeiculo();
             break;
     
         case "2":
             es.RemoverVeiculo();
             break;
     
         case "3":
             es.ListarVeiculos();
            
     
     break;
     
         case "4":
             exibirMenu = false;
             break;
     
         default:
             Console.WriteLine("Opção inválida");
             break;
     }
     
     Console.WriteLine("Pressione uma tecla para continuar");
     Console.ReadLine();
    }
     
    Console.WriteLine("O programa se encerrou");
    

    O programa principal inicia solicitando ao usuário os valores do preço inicial e do preço por hora do estacionamento. Em seguida, a classe `Estacionamento` é instanciada com os valores fornecidos. O programa entra em um loop do menu, onde o usuário pode escolher entre cadastrar veículo, remover veículo, listar veículos ou encerrar o programa. Cada opção chama os métodos correspondentes da classe `Estacionamento`.

    Conclusão

    Neste artigo, desenvolvemos um sistema de estacionamento em C# utilizando a linguagem de programação e os princípios básicos de orientação a objetos. A classe `Estacionamento` foi implementada para gerenciar os veículos estacionados, enquanto o programa principal interage com essa classe, oferecendo opções ao usuário. Esperamos que este artigo tenha sido útil para você entender como desenvolver um sistema básico de estacionamento em C# e possa servir como ponto de partida para aprimoramentos e personalizações.

    Compartilhe
    Comentários (0)