diff --git a/Models/Estacionamento.cs b/Models/Estacionamento.cs new file mode 100644 index 000000000..88a3fac5a --- /dev/null +++ b/Models/Estacionamento.cs @@ -0,0 +1,122 @@ +namespace DesafioFundamentos.Models +{ + public class Estacionamento + { + private decimal precoInicial = 0; + private decimal precoPorHora = 0; + private List veiculos = new List(); + + public Estacionamento(decimal precoInicial, decimal precoPorHora) + { + this.precoInicial = precoInicial; + this.precoPorHora = precoPorHora; + } + + public void AdicionarVeiculo() + { + // TODO: Pedir para o usuário digitar uma placa (ReadLine) e adicionar na lista "veiculos" + // *IMPLEMENTE AQUI* + //CHECK + Console.WriteLine("Digite a placa do veículo para estacionar:"); + string tempcheck = Console.ReadLine().Trim(); //Trim para remover espaços + + if (string.IsNullOrEmpty(tempcheck) || string.IsNullOrWhiteSpace(tempcheck)) //Verifica se a placa e Null ou esta Vazia + { + Console.WriteLine("Placa inválida ou vazia!"); + } + else if (veiculos.Contains(tempcheck)) //Verifica se a placa ja existe + { + Console.WriteLine("Essa placa ja existe!"); + } + else + { + veiculos.Add(tempcheck); + } + //Não tenho suficiente experiência com o "Switch case" mais tenho certeza que esse código pode usar uma coisa mais eficiente do que "If, else if, else" + } + + public void RemoverVeiculo() + { + Console.WriteLine("Digite a placa do veículo para remover:"); + + // Pedir para o usuário digitar a placa e armazenar na variável placa + // *IMPLEMENTE AQUI* + //CHECK + string placa = Console.ReadLine(); + + // Verifica se o veículo existe + if (veiculos.Any(x => x.ToUpper() == placa.ToUpper())) + { + Console.WriteLine("Digite a quantidade de horas que o veículo permaneceu estacionado:"); + + // TODO: Pedir para o usuário digitar a quantidade de horas que o veículo permaneceu estacionado, + // TODO: Realizar o seguinte cálculo: "precoInicial + precoPorHora * horas" para a variável valorTotal + // *IMPLEMENTE AQUI* + //CHECK + + try //Se o úsuario coloca um espaço ou letras no input o programa da erro + { + int horas = Convert.ToInt32(Console.ReadLine()); + if(horas >= 0) //O único carro que pode voltar ao passado é o Delorean, mais todos os carros podem ficar "0" horas no lote. + { + decimal valorTotal = precoInicial + precoPorHora * horas; + Console.WriteLine($"O veículo {placa} foi removido e o preço total foi de: R$ {valorTotal}"); + veiculos.Remove(placa); + } + else + { + Console.WriteLine("Só aceitamos números positivos, tente novamente."); + } + } + catch + { + Console.WriteLine("Ups! Entrada inválida, por favor tente novamente."); //Erro génerico + } + finally + { + Console.WriteLine("Voltando ao menu principal..."); + } + // Prévia iteração, aqui cometí o erro de colocar espaço no input e me di conta da unhandled exception + /*int horas = Convert.ToInt32(Console.ReadLine()); + if(horas > 0) + { + decimal valorTotal = precoInicial + precoPorHora * horas; + Console.WriteLine($"O veículo {placa} foi removido e o preço total foi de: R$ {valorTotal}"); + veiculos.Remove(placa); + } + else + { + Console.WriteLine("Ups! Número inválido, tente novamente.\n Voltando ao menu principal..."); + }*/ + + // TODO: Remover a placa digitada da lista de veículos + // *IMPLEMENTE AQUI* + // MOVIDO PARA CIMA DEVIDO A "UNHANDLED EXCEPTION" SE O USUÁRIO COLOCA ESPAÇO E PARA NAO PERMITIR NÚMEROS NEGATIVOS + + } + else + { + Console.WriteLine("Desculpe, esse veículo não está estacionado aqui. Confira se digitou a placa corretamente"); + } + } + + public void ListarVeiculos() + { + // Verifica se há veículos no estacionamento + if (veiculos.Any()) + { + Console.WriteLine("Os veículos estacionados são:"); + // TODO: Realizar um laço de repetição, exibindo os veículos estacionados + // *IMPLEMENTE AQUI* + foreach(string placa in veiculos) + { + Console.WriteLine(placa); + } + } + else + { + Console.WriteLine("Não há veículos estacionados."); + } + } + } +} diff --git a/Program.cs b/Program.cs new file mode 100644 index 000000000..38c95cb64 --- /dev/null +++ b/Program.cs @@ -0,0 +1,74 @@ +using DesafioFundamentos.Models; + +// Coloca o encoding para UTF8 para exibir acentuação +Console.OutputEncoding = System.Text.Encoding.UTF8; + +decimal precoInicial = 0; +decimal precoPorHora = 0; + +Console.WriteLine("Seja bem vindo ao sistema de estacionamento!"); +//Possivel excepção pelo input do úsuario +do +{ + try //Verificar se o código da erro + { + Console.WriteLine("Digite o preço inicial:"); + precoInicial = Convert.ToDecimal(Console.ReadLine()); //Números negativos permitidos + + Console.WriteLine("Agora digite o preço por hora:"); + precoPorHora = Convert.ToDecimal(Console.ReadLine()); + break; // Se o "try" não detecta nenhuma excepção, quebrar o loop e continuar o programa. + // Poderia dar uma melhorada para que o úsuario não tivesse que inserir o preço inicial duas veces em caso de falha no preco por hora, mais isso funciona :^) + } + catch + { + Console.WriteLine("Entrada Inválida, tente novamente"); + continue; // Se o "try" for pegar uma exepção, tentar de novo. + } +} +while (true); //Comecei com booleano mais lembrei que o "break" e "continue" existiam então usei eles. + +// Instancia a classe Estacionamento, já com os valores obtidos anteriormente +Estacionamento es = new Estacionamento(precoInicial, precoPorHora); + +string opcao = string.Empty; +bool exibirMenu = true; + +// Realiza o loop do menu +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");