public static void menu(AgenciaViagem agenciaViagem) { string num; BancoDeDados banco = new BancoDeDados(); do { Console.Clear(); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("------------- Menu -------------"); Console.ResetColor(); Console.WriteLine("[1] Cadastros"); Console.WriteLine("[2] Exibir"); Console.WriteLine("[3] Atribuir um carro a uma viagem"); Console.WriteLine("[4] Dirigir"); Console.WriteLine("[5] Abastecer um carro"); Console.WriteLine("[0] Sair do programa"); num = Console.ReadLine(); switch (num) { case "1": //Faz o cadastro do veiculo ou de um Percurso Console.Clear(); SubMenuCadastro.Cadastro(agenciaViagem); banco.Salvar(agenciaViagem); break; case "2": //Função para Exibir Veiculos, Percursos e viagens em espera Console.Clear(); SubMenuExibicao.Exibicao(agenciaViagem); break; case "3": Console.Clear(); agenciaViagem.CadastrarCarroPercurso(); banco.Salvar(agenciaViagem); break; //Função para abastecer o veiculo case "4": if (agenciaViagem.CarroPercursos.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Não tem nenhum carro, aperte enter para voltar ao menu"); Console.ResetColor(); Console.ReadLine(); } else { agenciaViagem.ExibirCarrosPercursos(); Console.WriteLine("Digite a placa do veiculo"); string placa = Console.ReadLine(); CarroPercurso carroPercurso = agenciaViagem.CarroPercursos.Find(x => x.Veiculo.Placa == placa); carroPercurso.Dirigir(agenciaViagem, carroPercurso); banco.Salvar(agenciaViagem); } break; case "5": if (agenciaViagem.CarroPercursos.Count == 0 && agenciaViagem.Veiculos.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Não tem nenhum carro, aperte enter para voltar ao menu"); Console.ResetColor(); Console.ReadLine(); } else { Console.WriteLine("========== Carros atribuidos ===========\n"); agenciaViagem.CarroPercursos.ForEach(x => x.Veiculo.MostrarVeiculo()); Console.WriteLine("\n======== carros não atribuidos ========="); agenciaViagem.ExibirVeiculos(); Veiculo veiculo; do { Console.WriteLine("Digite a Placa do veiculo que deseja abastecer"); string placa = Console.ReadLine(); veiculo = agenciaViagem.Veiculos.Find(x => x.Placa == placa); if (veiculo == null) { veiculo = agenciaViagem.CarroPercursos.Find(x => x.Veiculo.Placa == placa).Veiculo; } if (veiculo == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Veiculo não encontrado, aperte enter para tentar novamente"); Console.ResetColor(); Console.ReadLine(); } }while (veiculo == null); veiculo.EncherTanque(); } break; //Sair do programa case "0": Console.Write("Sair do programa selecionado, se tem certeza disso aperte enter, senão aperte esc para voltar ao menu"); if (Console.ReadKey().Key == ConsoleKey.Escape) { num = "6"; } break; default: Console.WriteLine("Opcao invalida, aperte enter para tentar novamente"); Console.ReadLine(); menu(agenciaViagem); break; } }while (num != "0"); }
public void Dirigir(AgenciaViagem agenciaViagem, CarroPercurso carroPercurso) { Relatorio Relatorio = agenciaViagem.Relatorios.Find(x => x.CarroPercurso.Percurso.Id == Percurso.Id); if (Relatorio == null) { Relatorio = new Relatorio { CarroPercurso = carroPercurso }; agenciaViagem.Relatorios.Add(Relatorio); } double MenuDirigir() { string num; double viagem2; Console.WriteLine("[1] Dirigir até acabar o combustivel\n\n[2] Dirigir uma distancia especifica"); num = Console.ReadLine(); switch (num) { case "1": viagem2 = Percurso.Trajeto; return(viagem2); case "2": Console.Write("Digite o valor que quer viajar: "); double.TryParse(Console.ReadLine(), out viagem2); if (viagem2 == 0 || viagem2 > Percurso.Trajeto) { Console.WriteLine("Valor invalido, tente novamente"); return(MenuDirigir()); } return(viagem2); default: Console.WriteLine("Opcao invalida, tente novamente"); return(MenuDirigir()); } } double viagem = MenuDirigir(); CalculoClima(Veiculo, Percurso.Clima); //Dirigir com todos os tipos de combustivel for (double km = 0; km <= Percurso.Trajeto; km = Math.Round((km + 0.1), 1)) { if (Relatorio.KmPercorrida == Percurso.Trajeto) { Console.Clear(); agenciaViagem.CarroPercursos.Remove(agenciaViagem.CarroPercursos.Find(x => x.Percurso == Percurso)); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Viagem finalizada, aperte enter para voltar ao menu"); Console.ResetColor(); Console.ReadLine(); } else if (viagem == 0) { Console.Clear(); MenuViagem(); double MenuViagem() { Console.WriteLine("Chegou na sua parada\n\nO que deseja fazer?\n"); Console.WriteLine("[1] Abastecer\n\n[2] Calibrar Pneu\n\n[3] Continuar viagem"); string num = Console.ReadLine(); switch (num) { case "1": if (Veiculo.Flex) { Veiculo.AbastecerFlex(); } else { Veiculo.Abastecer(); } return(MenuViagem()); case "2": Veiculo.CalibrarPneu(); return(MenuViagem()); case "3": viagem = MenuDirigir(); return(viagem); default: Console.WriteLine("Opcao invalida, aperte enter para tentar novamente"); Console.ReadLine(); return(MenuViagem()); } } } else if (Veiculo.QtdGasolina <= 0 && Veiculo.QtdAlcool <= 0 && Veiculo.QtdCombustivel <= 0 && km != Percurso.Trajeto) { Veiculo.QtdGasolina = 0; Veiculo.QtdAlcool = 0; Veiculo.QtdCombustivel = 0; Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Sem Combustivel, Abasteça"); Console.ResetColor(); Console.WriteLine($"Faltam {Percurso.Trajeto - Relatorio.KmPercorrida} KM"); Veiculo.EncherTanque(); Relatorio.QtdAbastecimentos++; Console.WriteLine("Deseja calibrar o pneu? Se sim, aperte enter, ou aperte esc para continuar a viagem"); if (Console.ReadKey().Key == ConsoleKey.Enter) { Veiculo.CalibrarPneu(); CalculoClima(Veiculo, Percurso.Clima); Relatorio.QtdCalibragens++; } km = Math.Round((km - 0.1), 2); } else { //Se for Flex if (Veiculo.Flex) { if (Veiculo.QtdAlcool > 0) { Veiculo.QtdAlcool = Math.Round((Veiculo.QtdAlcool - (0.1 / Veiculo.AutonomiaA)), 4); Relatorio.LitrosConsumidos = Math.Round((Relatorio.LitrosConsumidos + (0.1 / Veiculo.AutonomiaA)), 4); Relatorio.KmPercorrida = Math.Round((Relatorio.KmPercorrida + 0.1), 1); viagem = Math.Round((viagem - 0.1), 1); } else { Veiculo.QtdGasolina = Math.Round((Veiculo.QtdGasolina - (0.1 / Veiculo.AutonomiaG)), 4); Relatorio.LitrosConsumidos = Math.Round((Relatorio.LitrosConsumidos + (0.1 / Veiculo.AutonomiaG)), 4); Relatorio.KmPercorrida = Math.Round((Relatorio.KmPercorrida + 0.1), 1); viagem = Math.Round((viagem - 0.1), 1); } } else { //Se for Alcool if (Veiculo.TipoCombustivel == "Alcool") { Veiculo.QtdCombustivel = Math.Round((Veiculo.QtdCombustivel - (0.1 / Veiculo.AutonomiaA)), 4); Relatorio.LitrosConsumidos = Math.Round((Relatorio.LitrosConsumidos + (0.1 / Veiculo.AutonomiaA)), 4); Relatorio.KmPercorrida = Math.Round((Relatorio.KmPercorrida + 0.1), 1); viagem = Math.Round((viagem - 0.1), 1); } //Se for Gasolina else { Veiculo.QtdCombustivel = Math.Round((Veiculo.QtdCombustivel - (0.1 / Veiculo.AutonomiaG)), 4); Relatorio.LitrosConsumidos = Math.Round((Relatorio.LitrosConsumidos + (0.1 / Veiculo.AutonomiaG)), 4); Relatorio.KmPercorrida = Math.Round((Relatorio.KmPercorrida + 0.1), 1); viagem = Math.Round((viagem - 0.1), 1); } } } if (km % 100 == 0 && km > 0 && km != Percurso.Trajeto) { int cli = new Random().Next(1, 4); Relatorio.AlteracaoClimatica.AppendLine($"Alteracao Climatica: {km} KM -- Clima: {cli}"); Percurso.Clima = cli.ToString(); int pneu = new Random().Next(0, 2); Veiculo.Pneu = (int.Parse(Veiculo.Pneu) - pneu).ToString(); if (Veiculo.Pneu == "0") { Console.Clear(); Console.WriteLine("Pneu Furou, calibrar"); Relatorio.DesgastePneu.AppendLine($"Desgaste de Pneu: {km} KM -- Pneu: {Veiculo.Pneu}"); Veiculo.Pneu = Veiculo.CalibrarPneu(); Relatorio.QtdCalibragens++; } Relatorio.DesgastePneu.AppendLine($"Desgaste de Pneu: {km} KM -- Pneu: {Veiculo.Pneu}"); CalculoClima(Veiculo, Percurso.Clima); } } }