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.