Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desafio concluído #237

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions Models/Estacionamento.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
namespace DesafioFundamentos.Models
{
public class Estacionamento
{
private decimal precoInicial = 0;
private decimal precoPorHora = 0;
private List<string> veiculos = new List<string>();

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.");
}
}
}
}
74 changes: 74 additions & 0 deletions Program.cs
Original file line number Diff line number Diff line change
@@ -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");