Exemple #1
0
        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);
                }
            }
        }