public CadastrarMateria()
        {
            materiaService = new MateriaService(new RepositorioBase <Materia>(new Contexto()));

            Console.Clear();
            Console.WriteLine("Universidade Ecológica do Sitio do Caqui" +
                              "\n---------------------------------------------------------\n" +
                              "Cadastro de Matéria" +
                              "\n---------------------------------------------------------");


            var materia = new Materia();

            var descricaoInvalida = true;

            while (descricaoInvalida)
            {
                Console.Write("Descrição: ");

                var descricao = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(descricao))
                {
                    Console.Clear();
                    Console.WriteLine("Preencha a descrição.\n Aperte qualquer tecla para continuar.\n");
                    Console.ReadLine();
                }

                if (!Regex.IsMatch(descricao, @"[\p{L} ]+$"))
                {
                    Console.Clear();
                    Console.WriteLine("A descrição deve conter apenas letras e espaços.\n Aperte qualquer tecla para continuar.\n");
                    Console.ReadLine();
                }
                else
                {
                    descricaoInvalida = false;
                    materia.Descricao = descricao;
                }
                Console.Clear();
            }

            Console.Clear();
            Console.WriteLine("Espere um pouco...");

            var materiaExistente = materiaService.BuscarPorDescricao(materia.Descricao);

            Console.Clear();

            if (materiaExistente != null)
            {
                Console.Clear();
                Console.WriteLine("Universidade Ecológica do Sitio do Caqui" +
                                  "\n---------------------------------------------------------\n" +
                                  "Cadastro de matéria" +
                                  "\n---------------------------------------------------------\n" +
                                  "Descricão: " + materiaExistente.Descricao + "\n" +
                                  "Data de Cadastro: " + materiaExistente.DataDeCadastro.ToShortDateString() + "\n" +
                                  "Situacão: " + materiaExistente.Situacao.ToString() + "\n" +
                                  "\n---------------------------------------------------------\n" +
                                  "01 - Voltar | 02 - Salvar | 03 - Ativar/Inativar" +
                                  "\n---------------------------------------------------------");

                do
                {
                    var opcao = Console.ReadLine();

                    if (int.TryParse(opcao, out var opcaoValida))
                    {
                        switch (opcaoValida)
                        {
                        case 1:
                            new MenuPrincipal();
                            break;

                        case 2:
                            new MenuPrincipal();
                            break;

                        case 3:
                            materiaService.AlterarStatus(materiaExistente);
                            Console.Clear();
                            Console.WriteLine("Status da materia alterado com sucesso.\n Aperte qualquer tecla para continuar.\n");
                            Console.ReadLine();
                            new MenuPrincipal();
                            break;

                        default:
                            OpcaoInvalida();
                            break;
                        }
                    }
                    else
                    {
                        OpcaoInvalida();
                    }
                }while (true);
            }
            else
            {
                var dataInvalida = true;

                while (dataInvalida)
                {
                    Console.Clear();
                    Console.Write("Data de Cadastro: ");

                    var data = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(data))
                    {
                        Console.Clear();
                        Console.WriteLine("Preencha a data.\n Aperte qualquer tecla para continuar.\n");
                        Console.ReadLine();
                        continue;
                    }

                    if (DateTime.TryParse(data, out var dataConvertida))
                    {
                        if (dataConvertida < DateTime.MinValue || dataConvertida > DateTime.MaxValue)
                        {
                            Console.Clear();
                            Console.WriteLine("A data esta fora do alcance permitido. Digite uma data válida.\n Aperte qualquer tecla para continuar.\n");
                            Console.ReadLine();
                        }

                        if (dataConvertida > DataMaxima)
                        {
                            Console.Clear();
                            Console.WriteLine("A data não pode ser maior que a data atual.\n Aperte qualquer tecla para continuar.\n");
                            Console.ReadLine();
                        }
                        else
                        {
                            materia.DataDeCadastro = dataConvertida;
                            dataInvalida           = false;
                        }
                    }
                    else
                    {
                        Console.Clear();
                        Console.WriteLine("Formado de data inválido. Digite no formato dia/mês/ano.\nAperte qualquer tecla para continuar.\n");
                        Console.ReadLine();
                    }
                }

                var situacaoInvalida = true;

                while (situacaoInvalida)
                {
                    Console.Clear();
                    Console.Write("Situação (Ativo/Inativo): ");
                    var situacao = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(situacao))
                    {
                        Console.Clear();
                        Console.WriteLine("Preencha a situação.\n Aperte qualquer tecla para continuar.\n");
                        Console.ReadLine();
                        continue;
                    }

                    if (situacao.Equals("ativo", StringComparison.InvariantCultureIgnoreCase))
                    {
                        materia.Situacao = Situacao.Ativo;
                        situacaoInvalida = false;
                    }
                    else if (situacao.Equals("inativo", StringComparison.InvariantCultureIgnoreCase))
                    {
                        materia.Situacao = Situacao.Inativo;
                        situacaoInvalida = false;
                    }
                    else
                    {
                        Console.Clear();
                        Console.WriteLine("Digite uma situação válida (Ativo/Inativo).\nAperte qualquer tecla para continuar.\n");
                        Console.ReadLine();
                    }
                }

                do
                {
                    Console.Clear();
                    Console.WriteLine("Universidade Ecológica do Sitio do Caqui" +
                                      "\n---------------------------------------------------------\n" +
                                      "Cadastro de matéria" +
                                      "\n---------------------------------------------------------\n" +
                                      "Descricão: " + materia.Descricao + "\n" +
                                      "Data de Cadastro: " + materia.DataDeCadastro.ToShortDateString() + "\n" +
                                      "Situacão: " + materia.Situacao.ToString() + "\n" +
                                      "\n---------------------------------------------------------\n" +
                                      "01 - Voltar | 02 - Salvar | 03 - Excluir" +
                                      "\n---------------------------------------------------------");

                    var opcao = Console.ReadLine();

                    if (int.TryParse(opcao, out var opcaoValida))
                    {
                        switch (opcaoValida)
                        {
                        case 1:
                            new MenuPrincipal();
                            break;

                        case 2:
                            materiaService.Cadastrar(materia);
                            Console.Clear();
                            Console.WriteLine("Matéria salva com sucesso!\nAperte qualquer tecla para continuar.");
                            Console.ReadLine();
                            new MenuPrincipal();
                            break;

                        case 3:
                            materiaService.Excluir(materia);
                            Console.Clear();
                            Console.WriteLine("Matéria excluida.\nAperte qualquer tecla para continuar.");
                            Console.ReadLine();
                            new MenuPrincipal();
                            break;

                        default:
                            OpcaoInvalida();
                            break;
                        }
                    }
                    else
                    {
                        OpcaoInvalida();
                    }
                }while (true);
            }
        }