/*---------------------------------------------------VIAGEM---------------------------------------------------------------------------*/ //Gerar viagem public Viagem GerarViagem(List <Veiculo> veiculos, List <Percurso> percursos) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\n===== Viajar =====\n"); Console.ResetColor(); //escolher o percurso para a viagem MostrarPercursos(percursos); Console.WriteLine("Escolha um percurso? \n Insira o numero: "); uint opcaoPercurso; while (!uint.TryParse(Console.ReadLine(), out opcaoPercurso)) { Console.WriteLine($"Invalido! Escolha um percurso? \n Insira o numero: "); } //escolher o veiculo para a viagem MostarVeiculo(veiculos, false); Console.WriteLine("Escolha um veiculo? \n Insira o numero: "); uint opcaoVeiculo; while (!uint.TryParse(Console.ReadLine(), out opcaoVeiculo)) { Console.WriteLine("Invalido! Escolha um veiculo? \n Insira o numero: "); } Veiculo veiculo = veiculos.Find(buscaVeiculo => buscaVeiculo.IdVeiculo == opcaoVeiculo); Percurso percurso = percursos.Find(buscaPercurso => buscaPercurso.IdPercurso == opcaoPercurso); double distancia = percurso.KM; double kmPercorrido; double kmLitroAlcool = veiculo.KmLitroAlcool; double kmLitroGas = veiculo.KmLitroGas; //calculos de desconto de autonomia // se o veiculo for flex if (veiculo.Flex == true) { // verifica se a autonomia é suficiente para percorrer a viagem. se não for if (distancia > (veiculo.QuantidadeAtualAlcool * veiculo.KmLitroAlcool + veiculo.QuantidadeAtualGas * veiculo.KmLitroGas)) { if (veiculo.QuantidadeAtualAlcool == 0) { kmPercorrido = (distancia / veiculo.KmLitroGas); veiculo.QuantidadeAtualGas -= kmPercorrido; } kmPercorrido = (distancia / veiculo.KmLitroAlcool); veiculo.QuantidadeAtualAlcool -= kmPercorrido; Console.WriteLine($"Você percorreu {kmPercorrido:F2} km."); if (veiculo.QuantidadeAtualAlcool + veiculo.QuantidadeAtualGas == 0) // se acabar o combustivel { while (distancia > 0) { Console.WriteLine("A quantidade atual de combustivel, não percorre a distancia solicitada. Deseja abastecer o veiculo? (S ou N)"); string opcaoAbastecer = Console.ReadLine().ToUpper().Trim(); while (opcaoAbastecer != "S" && opcaoAbastecer != "N") { Console.WriteLine("Invalido! Deseja abastecer o veiculo? (S ou N) "); opcaoAbastecer = Console.ReadLine().ToUpper().Trim(); } if (opcaoAbastecer == "S") // se quiser abastecer { Abastecer(veiculos); } else // se não quiser { Console.WriteLine("Você optou por não abastecer"); return(new Viagem { VeiculoViagem = veiculo, PercursoViagem = percurso, StatusViagem = $"Viagem Pausada, distancia restante{distancia}" });; } distancia -= kmPercorrido; if (veiculo.QuantidadeAtualAlcool == 0) { veiculo.QuantidadeAtualAlcool -= kmPercorrido / veiculo.KmLitroAlcool; } else { veiculo.QuantidadeAtualGas -= kmPercorrido / veiculo.KmLitroGas; } } } } //se a quantidade de combustivel for suficiente else { if (veiculo.QuantidadeAtualAlcool == 0) { kmPercorrido = (distancia / veiculo.KmLitroGas); veiculo.QuantidadeAtualGas -= kmPercorrido; } kmPercorrido = (distancia / veiculo.KmLitroAlcool); veiculo.QuantidadeAtualAlcool -= kmPercorrido; } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\nVocê concluiu o percurso total\n"); Console.ResetColor(); } else // se o veiculo não for flex { if (veiculo.TipoCombustivel == "A") // se o veiculo for a alcool { while (distancia > 0) { if (veiculo.KmLitroAlcool * veiculo.QuantidadeAtualAlcool < distancia) { double quantidadePercorridaKM = veiculo.QuantidadeAtualAlcool * kmLitroAlcool; double quantidadePercorridaLitros = quantidadePercorridaKM / kmLitroAlcool; veiculo.QuantidadeAtualAlcool -= quantidadePercorridaLitros; distancia -= quantidadePercorridaKM; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\n Não é possivel percorrer a distancia total."); Console.WriteLine($"\n A distancia percorrida foi de {quantidadePercorridaKM:F2}KM. Ainda restam {distancia:F2}KM \n"); Console.ResetColor(); Console.WriteLine(" Deseja abastecer? (S ou N) "); string opcaoAbastecer = Console.ReadLine().ToUpper().Trim(); while (opcaoAbastecer != "S" && opcaoAbastecer != "N") { Console.WriteLine("Invalido! Deseja abastecer o veiculo? (S ou N) "); opcaoAbastecer = Console.ReadLine().ToUpper().Trim(); } if (opcaoAbastecer == "S") { Abastecer(veiculos); } else { Console.WriteLine("Você optou por não abastecer! A corrida foi cancelada"); return(new Viagem { VeiculoViagem = veiculo, PercursoViagem = percurso, StatusViagem = $"Viagem Pausada, distancia restante{distancia}" }); } } else // caso tem combustivel suficiente para fazer a corrida { double litrosNecessarios = distancia / kmLitroAlcool; double quantidadePercorridaKM = litrosNecessarios * kmLitroAlcool; distancia -= quantidadePercorridaKM; veiculo.QuantidadeAtualAlcool -= (quantidadePercorridaKM / kmLitroAlcool); } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\nVocê concluiu o percurso total\n"); Console.ResetColor(); } else // se o carro for a gasolina { while (distancia > 0) { if (veiculo.KmLitroGas * veiculo.QuantidadeAtualGas < distancia) { double quantidadePercorridaKM = veiculo.QuantidadeAtualGas * kmLitroGas; double quantidadePercorridaLitros = quantidadePercorridaKM / kmLitroGas; veiculo.QuantidadeAtualGas -= quantidadePercorridaLitros; distancia -= quantidadePercorridaKM; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\n Não é possivel percorrer a distancia total."); Console.WriteLine($"\n A distancia percorrida foi de {quantidadePercorridaKM:F2}KM. Ainda restam {distancia:F2}KM \n"); Console.ResetColor(); Console.WriteLine(" Deseja abastecer? (S ou N) "); string opcaoAbastecer = Console.ReadLine().ToUpper().Trim(); while (opcaoAbastecer != "S" && opcaoAbastecer != "N") { Console.WriteLine("Invalido! Deseja abastecer o veiculo? (S ou N) "); opcaoAbastecer = Console.ReadLine().ToUpper().Trim(); } if (opcaoAbastecer == "S") { Abastecer(veiculos); } else { Console.WriteLine("Você optou por não abastecer! A corrida foi cancelada"); return(new Viagem { VeiculoViagem = veiculo, PercursoViagem = percurso, StatusViagem = $"Viagem Pausada, distancia restante{distancia}" }); } } else // caso tem combustivel suficiente para fazer a corrida { double litrosNecessarios = distancia / kmLitroGas; double quantidadePercorridaKM = litrosNecessarios * kmLitroGas; distancia -= quantidadePercorridaKM; veiculo.QuantidadeAtualGas -= (quantidadePercorridaKM / kmLitroGas); Console.WriteLine($"\nDistancia percorrida com sucesso! \n"); } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\nVocê concluiu o percurso total\n"); Console.ResetColor(); } } return(new Viagem { VeiculoViagem = veiculo, PercursoViagem = percurso, StatusViagem = "Viagem Concluida" }); }
public void Abastecer(List <Veiculo> veiculos, bool calibrar = true) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\n===== Abastecer =====\n"); Console.ResetColor(); MostarVeiculo(veiculos, false); Console.WriteLine("Escolha um veiculo? \n Insira o numero: "); uint opcaoVeiculo; while (!uint.TryParse(Console.ReadLine(), out opcaoVeiculo)) { Console.WriteLine("Invalido! Escolha um veiculo? \n Insira o numero: "); } Veiculo veiculo = veiculos.Find(buscaVeiculo => buscaVeiculo.IdVeiculo == opcaoVeiculo); if (veiculo.Flex == true) // se for flex { Console.WriteLine("Qual combustivel você quer abastecer? \n A- Alcool G- Gasolina"); //pergunta o tipo de combustivel que deseja string opcaoAbastecer = Console.ReadLine().ToUpper(); while (opcaoAbastecer != "A" && opcaoAbastecer != "G") // validação { Console.WriteLine("\nInvalido! Qual é o tipo do combuistivel: \n A- Alcool G- Gasolina"); opcaoAbastecer = Console.ReadLine().ToUpper(); } //---------------------------------------------------------------------------------------------------------------------- if (opcaoAbastecer == "A") // se quiser abastecer alcool { Console.WriteLine("Deseja completar o tanque? (S ou N)"); //opcao de completar string opcaoCompletar = Console.ReadLine().Trim().ToUpper(); while (opcaoCompletar != "S" && opcaoCompletar != "N")//validacao completar { Console.WriteLine("Invalido! Deseja completar o tanque do veiculo? (S ou N) "); opcaoCompletar = Console.ReadLine().ToUpper().Trim(); } if (opcaoCompletar == "S")// se quiser completar { double completar = veiculo.CapacidadeTanque - (veiculo.QuantidadeAtualAlcool + veiculo.QuantidadeAtualGas); veiculo.QuantidadeAtualAlcool += completar; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else // se não quiser completar { double aux; Console.WriteLine("Quantos litros de alcool você quer abastecer? "); while ((!double.TryParse(Console.ReadLine(), out aux) || aux <= 0)) { Console.WriteLine("Invalido! Quantos litros de alcool você quer abastecer: "); } if (veiculo.CapacidadeTanque >= aux + (veiculo.QuantidadeAtualAlcool + veiculo.QuantidadeAtualGas)) { veiculo.QuantidadeAtualAlcool += aux; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { Console.WriteLine("\n A quantidade que você quer colocar ultrapassa o limite! \n"); } } } //---------------------------------------------------------------------------------------------------------------------- else // se quiser abastecer gasolina { Console.WriteLine("Deseja completar o tanque? (S ou N)"); string opcaoCompletar = Console.ReadLine().Trim().ToUpper(); while (opcaoCompletar != "S" && opcaoCompletar != "N") { Console.WriteLine("Invalido! Deseja completar o tanque do veiculo? (S ou N) "); opcaoCompletar = Console.ReadLine().ToUpper().Trim(); } if (opcaoCompletar == "S") { double completar = veiculo.CapacidadeTanque - (veiculo.QuantidadeAtualGas + veiculo.QuantidadeAtualAlcool); veiculo.QuantidadeAtualGas += completar; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { double aux; Console.WriteLine("Quantos litros de gasolina você quer abastecer? "); while ((!double.TryParse(Console.ReadLine(), out aux) || aux <= 0)) { Console.WriteLine("Invalido! Quantos litros de gasolina você quer abastecer: "); } if (veiculo.CapacidadeTanque >= aux + (veiculo.QuantidadeAtualGas + veiculo.QuantidadeAtualAlcool)) { veiculo.QuantidadeAtualGas += aux; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { Console.WriteLine("\n A quantidade que você quer colocar ultrapassa o limite! \n"); } } } } //---------------------------------------------------------------------------------------------------------------------- else // se não for flex { if (veiculo.TipoCombustivel == "A") // se o carro for alcool { Console.WriteLine("Deseja completar o tanque? (S ou N)"); //opcao de completar string opcaoCompletar = Console.ReadLine().Trim().ToUpper(); while (opcaoCompletar != "S" && opcaoCompletar != "N")//validacao completar { Console.WriteLine("Invalido! Deseja completar o tanque do veiculo? (S ou N) "); opcaoCompletar = Console.ReadLine().ToUpper().Trim(); } if (opcaoCompletar == "S")// se quiser completar { double completar = veiculo.CapacidadeTanque - veiculo.QuantidadeAtualAlcool; veiculo.QuantidadeAtualAlcool += completar; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { double aux; Console.WriteLine("Quantos litros de alcool você quer abastecer? "); while ((!double.TryParse(Console.ReadLine(), out aux) || aux <= 0)) { Console.WriteLine("Invalido! Quantos litros de alcool você quer abastecer: "); } if (veiculo.CapacidadeTanque >= aux + veiculo.QuantidadeAtualAlcool) { veiculo.QuantidadeAtualAlcool += aux; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { Console.WriteLine("\n A quantidade que você quer colocar ultrapassa o limite! \n"); } } } //---------------------------------------------------------------------------------------------------------------------- else { Console.WriteLine("Deseja completar o tanque? (S ou N)"); string opcaoCompletar = Console.ReadLine().Trim().ToUpper(); while (opcaoCompletar != "S" && opcaoCompletar != "N") { Console.WriteLine("Invalido! Deseja completar o tanque o veiculo? (S ou N) "); opcaoCompletar = Console.ReadLine().ToUpper().Trim(); } if (opcaoCompletar == "S") { double completar = veiculo.CapacidadeTanque - veiculo.QuantidadeAtualGas; veiculo.QuantidadeAtualGas += completar; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { double aux; Console.WriteLine("Quantos litros de gasolina você quer abastecer? "); while ((!double.TryParse(Console.ReadLine(), out aux) || aux <= 0)) { Console.WriteLine("Invalido! Quantos litros de gasolina você quer abastecer: "); } if (veiculo.CapacidadeTanque >= aux + veiculo.QuantidadeAtualGas) { veiculo.QuantidadeAtualGas += aux; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\n Veiculo abastecido com sucesso\n"); Console.ResetColor(); } else { Console.WriteLine("\n A quantidade que você quer colocar ultrapassa o limite! \n"); } } } } if (calibrar) { Console.WriteLine("Deseja calibrar o pneu? (S ou N)"); //opcao de completar string opcaoCalibrar = Console.ReadLine().Trim().ToUpper(); while (opcaoCalibrar != "S" && opcaoCalibrar != "N")//validacao completar { Console.WriteLine("Invalido! Deseja completar o tanque do veiculo? (S ou N) "); opcaoCalibrar = Console.ReadLine().ToUpper().Trim(); } if (opcaoCalibrar == "S") { CalibrarPneu(veiculos); } else { Console.WriteLine("\n Você optou por não calibrar! "); } } }