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);
            }
        }
        public CadastrarNota()
        {
            notaService    = new NotaService(new RepositorioBase <Nota>(new Contexto()));
            alunoService   = new AlunoService(new RepositorioBase <Aluno>(new Contexto()));
            materiaService = new MateriaService(new RepositorioBase <Materia>(new Contexto()));


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


            var nota = new Nota();

            var alunoInvalido = true;
            var aluno         = new Aluno();

            while (alunoInvalido)
            {
                Console.Write("Aluno (Digite o CPF): ");

                var cpf = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(cpf))
                {
                    Console.Clear();
                    Console.WriteLine("Preencha o CPF do aluno.\n Aperte qualquer tecla para continuar.\n");
                    Console.ReadLine();
                }

                if (!int.TryParse(cpf, out _))
                {
                    Console.Clear();
                    Console.WriteLine("O CPF deve conter apenas números.\n Aperte qualquer tecla para continuar.\n");
                    Console.ReadLine();
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("Espere um pouco...");
                    aluno = alunoService.BuscarPorCpf(cpf);

                    if (aluno == null)
                    {
                        Console.Clear();
                        Console.WriteLine("O aluno inserido não existe.\n Aperte qualquer tecla para continuar.\n");
                        Console.ReadLine();
                    }
                    else
                    {
                        alunoInvalido = false;
                        nota.AlunoId  = aluno.Id;
                    }
                }
                Console.Clear();
            }

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

            var materiaInvalida = true;
            var materia         = new Materia();

            while (materiaInvalida)
            {
                Console.Clear();

                Console.Write("Matéria (Digite a 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
                {
                    Console.Clear();
                    Console.WriteLine("Espere um pouco...");

                    materia = materiaService.BuscarPorDescricao(descricao);

                    if (materia == null)
                    {
                        Console.Clear();
                        Console.WriteLine("A materia inserida não existe.\n Aperte qualquer tecla para continuar.\n");
                        Console.ReadLine();
                    }
                    else
                    {
                        materiaInvalida = false;
                        nota.MateriaId  = materia.Id;
                    }
                }
                Console.Clear();
            }

            Console.Clear();

            var notaInvalida = true;

            while (notaInvalida)
            {
                Console.Clear();
                Console.Write("Nota (De 0 a 100): ");
                var valor = Console.ReadLine();

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

                if (decimal.TryParse(valor, out var notaConvertida))
                {
                    if (notaConvertida >= 0 || notaConvertida <= 100)
                    {
                        notaInvalida = false;
                        nota.Valor   = notaConvertida;
                    }
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("Digite uma nota válida (número de 0 a 100).\nAperte qualquer tecla para continuar.\n");
                    Console.ReadLine();
                }
            }

            var opcao = "";

            do
            {
                Console.Clear();
                Console.WriteLine("Universidade Ecológica do Sitio do Caqui" +
                                  "\n---------------------------------------------------------\n" +
                                  "Cadastro de nota" +
                                  "\n---------------------------------------------------------\n" +
                                  "Aluno: " + aluno.Nome + " " + aluno.Sobrenome + "\n" +
                                  "Matéria: " + materia.Descricao + "\n" +
                                  "Nota: " + nota.Valor.ToString("F2") + "\n" +
                                  "\n---------------------------------------------------------\n" +
                                  "01 - Voltar | 02 - Salvar | 03 - Excluir" +
                                  "\n---------------------------------------------------------");

                opcao = Console.ReadLine();

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

                    case 2:
                        notaService.Cadastrar(nota);
                        Console.Clear();
                        Console.WriteLine("Nota salva com sucesso!\nAperte qualquer tecla para continuar.");
                        Console.ReadLine();
                        opcao = "";
                        new MenuPrincipal();
                        break;

                    case 3:
                        new MenuPrincipal();
                        break;

                    default:
                        OpcaoInvalida();
                        break;
                    }
                }
                else
                {
                    OpcaoInvalida();
                }
            }while (string.IsNullOrWhiteSpace(opcao));
        }