static void Main(string[] args)
        {
            AppDomain.CurrentDomain.ProcessExit += AccionDelEvento;
            var engine = new EscuelaEngine();

            engine.Inicializar();

            var diccionarioObj = engine.ObtenerDiccionarioObjetos();
            var reporteador    = new Reporteador(diccionarioObj);

            while (true)
            {
                Clear();
                Printer.DibujarMenuPrincipal(engine.Escuela.Nombre);
                var opcion = ReadKey();
                try
                {
                    switch (opcion.Key)
                    {
                    case ConsoleKey.D0:
                    case ConsoleKey.NumPad0:
                        Clear();
                        WriteLine("Terminando el programa...");
                        return;

                    case ConsoleKey.D1:
                    case ConsoleKey.NumPad1:
                        var lsEvaluaciones = reporteador.ObtenerEvaluaciones();
                        if (lsEvaluaciones.Count() == 0)
                        {
                            WriteLine("No se encontraron registros");
                        }
                        else
                        {
                            ReportePaginado(lsEvaluaciones, "Reporte de Evaluaciones");
                        }
                        break;

                    case ConsoleKey.D2:
                    case ConsoleKey.NumPad2:
                        var lsEvalAsig = reporteador.ObtenerEvaluacionesPorAsignatura();
                        if (lsEvalAsig.Count() == 0)
                        {
                            WriteLine("No se encontraron registros");
                        }
                        else
                        {
                            SubMenu(lsEvalAsig, "Reporte de Evaluaciones por Asignatura");
                        }
                        break;

                    case ConsoleKey.D3:
                    case ConsoleKey.NumPad3:
                        var lsPromedio = reporteador.ObtenerPromedioAlumnoPorAsignatura();
                        if (lsPromedio.Count() == 0)
                        {
                            WriteLine("No se encontraron registros");
                        }
                        else
                        {
                            SubMenu(lsPromedio, "Reporte de Promedio Alumno por Asignatura");
                        }
                        break;

                    case ConsoleKey.D4:
                    case ConsoleKey.NumPad4:
                        Clear();
                        WriteLine("Ingrese la cantidad Top");
                        var cantidadStr = ReadLine();
                        if (int.TryParse(cantidadStr, out int cantidad))
                        {
                            var lsTopPromedio = reporteador.ObtenerPromedioAlumnoPorAsignatura(cantidad);
                            if (lsTopPromedio.Count() == 0)
                            {
                                WriteLine("No se encontraron registros");
                            }
                            else
                            {
                                SubMenu(lsTopPromedio, $"Reporte de Top {cantidad} Promedio Alumno por Asignatura");
                            }
                        }
                        break;
                    }
                }
                catch (Exception)
                {
                    WriteLine("Ocurrió un error inesperado");
                    WriteLine("Volviendo al menú");
                }
                finally
                {
                }
            }
        }