public frmFormulasV2(int IdFormula) { InitializeComponent(); this.IdFormula = IdFormula; ribbonPageGroup2.Visible = (IdFormula > 0); btnBaja.Visibility = (IdFormula > 0) ? BarItemVisibility.Always : BarItemVisibility.Never; string connectionString = ConfigurationManager.ConnectionStrings["sdprolizaEntitiessp"].ConnectionString; cnDetallesFormulas = new CNDetallesFormulas(connectionString); cnFormulas = new CNFormulas(connectionString); reporteador = new Reporteador(connectionString); cnProductos = new CNProductos(connectionString); cnTipoDeCambio = new CNTipoDeCambio(connectionString); cnFamiliaFormulas = new CNFamiliaFormulas(connectionString); cnInsumos = new CNInsumos(connectionString, -1, null, false, 0); llenarComboFamilia(); llenarComboUnidadMedida(); llenarComboInsumos(); if (IdFormula > 0) { DataTable Formula = cnFormulas.ConsultaPorId(IdFormula); txtFormula.Text = Formula.Rows[0]["NombreFormula"].ToString(); txtFormula.Properties.ReadOnly = (Convert.ToInt32(Formula.Rows[0]["IdFamilia"]) == 1); cmbFamilia.EditValue = Convert.ToInt32(Formula.Rows[0]["IdFamilia"]); txtCantidad.Text = Formula.Rows[0]["Cantidad"].ToString(); cmbUnidadMedida.EditValue = Formula.Rows[0]["Capacidad"].ToString(); foreach (DataRow item in cnDetallesFormulas.ConsultaPorFormula(IdFormula).Rows) { AgregarNuevoRegistro(Convert.ToInt32(item["IdDetalle"]), Convert.ToInt32(item["IdInsumo"]), item["CantidadInsumo"].ToString(), item["UnidadMedidaInsumo"].ToString()); } } }
public frmDetallesFormulas(int IdFormula) { InitializeComponent(); string connectionString = ConfigurationManager.ConnectionStrings["sdprolizaEntitiessp"].ConnectionString; cnFormulas = new CNFormulas(connectionString); cnDetallesFormulas = new CNDetallesFormulas(connectionString); actualizaFormulas = new ActualizaFormulas(connectionString); cnTipoDeCambio = new CNTipoDeCambio(connectionString); cnProductos = new CNProductos(connectionString); reporteador = new Reporteador(connectionString); cnInsumos = new CNInsumos(connectionString, -1, null, false, 0); llenarComboInsumos(); cmbInsumos.Focus(); if (IdFormula > 0) { ribbonPageGroup1.Visible = true; Actualizar = true; DataTable Formula = cnFormulas.ConsultaPorId(IdFormula); lblIdFormula.Text = Formula.Rows[0]["IdFormula"].ToString(); txtFormula.Text = Formula.Rows[0]["NombreFormula"].ToString(); txtFamilia.Text = Formula.Rows[0]["NombreFamilia"].ToString(); txtCantidadFormula.Text = Formula.Rows[0]["Cantidad"] + " " + Formula.Rows[0]["Capacidad"]; Cantidad = Convert.ToDecimal(Formula.Rows[0]["Cantidad"]); UnidadMedida = Formula.Rows[0]["UnidadMedida"].ToString(); lblCosto.Text = "0.00"; // T.Rows[0]["CostoTotal"].ToString(); foreach (DataRow item in cnDetallesFormulas.ConsultaPorFormula(IdFormula).Rows) { AgregarNuevoRegistro(Convert.ToInt32(item["IdDetalle"]), Convert.ToInt32(item["IdInsumo"]), item["CantidadInsumo"].ToString(), item["UnidadMedidaInsumo"].ToString()); } } }
static void Main(string[] args) { //AppDomain.CurrentDomain.ProcessExit += finalizarAplicacion; //AppDomain.CurrentDomain.ProcessExit += (o, s)=> Console.WriteLine("Adios Adios"); var engine = new EscuelaEngine(); engine.inicializar(); var objetosEscuela = engine.ListaObj(traerEvaluaciones: false, traerAsignaturas: false); var nuevoReporteador = new Reporteador(engine.GetObjetosDiccionario()); var listaevaluaciones = nuevoReporteador.getNotas(); /*foreach (var item in listaevaluaciones) * { * Console.WriteLine($"{item.Nombre} NOTA : {item.Nota}"); * }*/ nuevoReporteador.getAlumnos(); //engine.imprimirDiccionario(dicc); //Util.Timbrar(); /* Util.printTitle($"Bienvenidos a la Escuela {engine.Escuela.Nombre}"); * foreach (var curso in engine.Escuela.Cursos) * { * foreach (var al in curso.Alumnos) * { * Util.printTitle($"{al.Nombre} curso {curso.Nombre}"); * foreach (var asignatura in al.Asignaturas) * { * Util.printTitle(asignatura.Nombre); * foreach (var evaluacion in asignatura.Evaluaciones) * { * Console.WriteLine($"{evaluacion.Nombre} Nota {evaluacion.Nota}"); * * } * } * } * }*/ }
static void Main(string[] args) { /******EVENTOOOSSS*/ //AppDomain es de .netcore y es donde se ejecutan las aplicaciones en un momento determinado //current domain es donde se esta ejecutando la aplicacion //este evento es lo que pasa cuando la aplicacion esta finalizando AppDomain.CurrentDomain.ProcessExit += accionDelMetodo; //se puede tener dos eventos para un caso y se acumulan //la expresion lamda recibe cualquiercosa por parametros, pero el los pide dependiendo el metodo AppDomain.CurrentDomain.ProcessExit += (s, h) => Console.WriteLine("evento2 saliendo"); //se pueden tener la candidad de delegados que uno quiera como eventos, asi se puede quitar la accion, y nunca la realiza AppDomain.CurrentDomain.ProcessExit -= accionDelMetodo; var engine = new EscuelaEngine(); engine.Inicializar(); Printer.dibujarTitulo("Bienvenidos a la escuela"); //En el diccionario las llaves son unicas Dictionary <int, string> diccionario = new Dictionary <int, string>(); diccionario.Add(10, "JuanK"); diccionario.Add(23, "Lorem Psum"); foreach (var keyVailPair in diccionario) { Console.WriteLine("LLave es : " + keyVailPair.Key + " valor : " + keyVailPair.Value); } Printer.dibujarTitulo("Acceso a diccionario"); diccionario[0] = "prueba 0"; Console.WriteLine(diccionario[23]); Printer.dibujarTitulo("Otro Diccionario"); var dic = new Dictionary <string, string>(); var dicTemp = engine.GetDiccionarioObjetos(); engine.ImprimirDiccionario(dicTemp); var repor = new Reporteador(engine.GetDiccionarioObjetos()); var evaList = repor.getListaEvaluaciones(); var asigList = repor.GetListaAsignaturas(); var listaEvaluacionesXAsing = repor.GetDicEvaluXAsign(); var listaPromXasign = repor.getPromedioAlumnAsignatura(); }
static void Main(string[] args) { //Las siguientes dos instrucciones asignan un delegado al evento de ProcessExit que es cuando //termina la ejecución del sistema, si no se remueve alguno de los delegados, el evento será //ejecutado tantas veces como delegados tenga asignados, en este ejemplo serian 2 AppDomain.CurrentDomain.ProcessExit += AccionDelEvento; AppDomain.CurrentDomain.ProcessExit += (o, s) => Printer.WriteTitle("Terminando la ejecución 2"); //La siguiente instrucción remueve el delegado al evento, removiendo solo se ejecutaria 1 AppDomain.CurrentDomain.ProcessExit -= AccionDelEvento; var engine = new EscuelaEngine(); engine.Inicializar(); ImprimirCursosEscuela(engine.Escuela); Dictionary <int, string> diccionario = new Dictionary <int, string>(); diccionario.Add(12, "Juan K"); diccionario.Add(13, "Lorem Ipsum"); foreach (var keyValPair in diccionario) { WriteLine($"Key: {keyValPair.Key} Valor: {keyValPair.Value}"); } Printer.WriteTitle("Acceso a diccionario"); var dic = engine.GetDiccionarioObjetos(); engine.ImprimirDiccionario(dic, true); var rep = new Reporteador(engine.GetDiccionarioObjetos()); // var rep = new Reporteador(null); rep.GetListaEvaluacion(); var evalList = rep.GetListaEvaluacion(); var listaAsig = rep.GetListaAsignatura(); var listaEvalPorAsig = rep.GetDiccEvaluacionesPorAsignatura(); var listaPromXAsig = rep.GetPromedioAlumnosPorAsignatura(); }
static void Main(string[] args) { AppDomain.CurrentDomain.ProcessExit += SaliendoApp; AppDomain.CurrentDomain.ProcessExit += (obj, s) => Printer.Beep(1000, 1000, 1); AppDomain.CurrentDomain.ProcessExit -= SaliendoApp; // var escuela = new Escuela("Platzi Academy",foundation_year: 2012); // var escuela = new Escuela("Platzi Academy", 2012, Types_School.Secundaria, country: "Colombia", city: "Bogota"); // escuela.Country = "Colombia"; // escuela.City = "Bogota"; // escuela.Type_School = Types_School.PreEscolar; // var curso1 = new Course() { // Name = "101" // }; // var curso2 = new Course() { // Name = "201" // }; // var curso3 = new Course() { // Name = "301" // }; // Console.WriteLine(escuela.Name); // Console.WriteLine(escuela); // System.Console.WriteLine("=========================="); // // System.Console.WriteLine(curso1.Name + "," + curso1.Unique_Id); // // System.Console.WriteLine($"{curso2.Name},{curso2.Unique_Id}"); // // System.Console.WriteLine(curso3); // var cursos = new Course[3]; // cursos[0] = new Course() { // Name = "101" // }; // cursos[1] = curso2; // cursos[2] = new Course { // Name = "101" // }; // System.Console.WriteLine("While ==========================>"); // ImprimirCursosWhile(cursos); // System.Console.WriteLine("DoWhile ==========================>"); // ImprimirCursosDoWhile(cursos); // System.Console.WriteLine("For ==========================>"); // ImprimirCursosFor(cursos); // System.Console.WriteLine("ForEach ==========================>"); // ImprimirCursosForEach(cursos); // escuela.Arreglo_Cursos = new Course[] { // new Course() { Name = "101"}, // new Course() { Name = "201"}, // new Course { Name = "301", Tipo_Jornada = Tipos_Jornada.Morning} // }; // escuela.Lista_Cursos = new List<Course> { // new Course() { Name = "101"}, // new Course() { Name = "201"}, // new Course { Name = "301", Tipo_Jornada = Tipos_Jornada.Morning} // }; // escuela.Lista_Cursos.Add(new Course() { Name = "402", Tipo_Jornada = Tipos_Jornada.Afternoon }); // escuela.Lista_Cursos.Add(new Course { Name = "102", Tipo_Jornada = Tipos_Jornada.Afternoon }); // var otros_cursos = new List<Course> { // new Course() { Name = "401"}, // new Course() { Name = "501"}, // new Course { Name = "601"} // }; // escuela.Lista_Cursos.AddRange(otros_cursos); // otros_cursos.RemoveAt(2); // otros_cursos.Clear(); // var otro = new Course() { Name = "602", Tipo_Jornada = Tipos_Jornada.Evening }; // Console.WriteLine($"HashCode: {otro.GetHashCode()}"); // escuela.Lista_Cursos.Add(otro); // escuela = null; // escuela.Cursos = null; // ImprimirCursos(escuela); // Console.WriteLine("================"); // escuela.Lista_Cursos.Remove(otro); // escuela.Lista_Cursos.RemoveAll(Predicado); // escuela.Lista_Cursos.RemoveAll(x => x.Tipo_Jornada == Tipos_Jornada.Pending_Assignment); // ImprimirCursos(escuela); var engine = new Escuela_Engine(); engine.Inicializar(); Printer.Dibujar_Titulo("Bienvenidos a la Escuela"); ImprimirCursos(engine.Escuela); //ObjetoEscuelaBase xx = new ObjetoEscuelaBase(); //Printer.Ring_Bell(); int conteoEvaluaciones, conteoAlumnos, conteoAsignaturas, conteoCursos = 0; var tt = engine.GetObjetosEscuela(false, false, false, false); var listaObjetos = engine.GetObjetosEscuela(out conteoEvaluaciones, out conteoAlumnos, out conteoAsignaturas, out conteoCursos, traeCursos: false, traeEvaluaciones: false); var listaILugar = from obj in listaObjetos where obj is ILugar select(ILugar) obj; engine.Escuela.LimpiarLugar(); Dictionary <int, string> dic = new Dictionary <int, string>(); dic[88] = "Hola"; dic[40] = "Rangel"; foreach (var item in dic) { Console.WriteLine($"Key: {item.Key} Value: {item.Value}"); } var dictmp = engine.GetDiccionarioObjetos(); engine.ImprimirDiccionario(dictmp); var reporteador = new Reporteador(engine.GetDiccionarioObjetos()); reporteador.GetListaEvaluaciones(); var listaAsig = reporteador.GetListaAsignaturas(); var listaEvalXAsig = reporteador.GetDicEvalXAsig(); var listaPromedioAlumno = reporteador.GetPromedioAlumnoPorAsignatura(); var listaTopPromedioAlumno = reporteador.GetListaTopPromedio(10); Printer.Dibujar_Titulo("Captura de Evaluacion por Consola"); var newEval = new Evaluacion(); string nombre, notastr; Console.WriteLine("Ingrese el nombre de la evaluacion:"); Printer.presioneEnter(); nombre = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nombre)) { Printer.Dibujar_Titulo("El valor del nombre no puede ser vacio."); Console.WriteLine("Saliendo del programa..."); } else { newEval.Name = nombre.ToLower(); Console.WriteLine("El nombre de la evaluacion ha sido ingresado correctamente."); } Console.WriteLine("Ingrese la nota de la evaluacion:"); Printer.presioneEnter(); notastr = Console.ReadLine(); try { if (string.IsNullOrWhiteSpace(notastr)) { Printer.Dibujar_Titulo("El valor de la nota no puede ser vacio."); Console.WriteLine("Saliendo del programa..."); } else { newEval.Nota = float.Parse(notastr); if (newEval.Nota < 0 || newEval.Nota > 5) { throw new ArgumentOutOfRangeException("La nota debe de estar entre 0 y 5"); } Console.WriteLine("La nota de la evaluacion ha sido ingresada correctamente."); Printer.Dibujar_Linea(); Console.WriteLine($"Nombre de la Evaluacion: {newEval.Name} "); Console.WriteLine($"Nota de la Evaluacion: {newEval.Nota} "); } } catch (ArgumentOutOfRangeException arge) { Printer.Dibujar_Titulo(arge.Message); Console.WriteLine("Saliendo del programa..."); } catch (Exception) { Printer.Dibujar_Titulo("El valor de la nota no es numero valido."); Console.WriteLine("Saliendo del programa..."); } finally { Printer.Dibujar_Titulo("FINALLY"); } }
static void Main(string[] args) { var engine = new EscuelaEngine(); engine.Inicializar(); Printer.WriteTitle("BIENVENIDOS A LA ESCUELA!"); Printer.Beep(); Printer.Beep(10000, cantidad: 10); //Se utiliza los métodos creados en la clase Printer //Printer.DibujarLinea(20); //Printer.DibujarLinea(); //ImprimirCursosEscuela(engine.Escuela); //POLIMORFISMO //El polimorfismo se refiere a la sobrescritura de los métodos de la clase padre por sus clases hijas esto para que cada clase hija tenga un comportamiento diferente para ese método. //El polimorfismo permite que un método de la clase PADRE se herede pero tambi[en que cambie su comportamiento en la clase hija(si así lo desea). /*Printer.DrawLine(20); * Printer.DrawLine(20); * Printer.DrawLine(20); * Printer.WriteTitle("Pruebas de Polimorfismo"); * //Alumno es de tipo "Alumno" que hereda de "ObjetoEscuelaBase" * var alumnoTest = new Alumno { Nombre = "Claire Murillo" }; * //Objetos compatibles por el polimorfismo * ObjetoEscuelaBase ob = alumnoTest; * * Printer.WriteTitle("Alumno"); * WriteLine($"Alumno: {alumnoTest.Nombre}"); * WriteLine($"Alumno: {alumnoTest.UniqueId}"); * WriteLine($"Alumno: {alumnoTest.GetType()}"); * * Printer.WriteTitle("ObjetoEscuela"); * WriteLine($"Alumno: {ob.Nombre}"); * WriteLine($"Alumno: {ob.UniqueId}"); * WriteLine($"Alumno: {ob.GetType()}"); * * var evaluacion = new Evaluacion() { Nombre = "Evaluacion de matematicas", Nota = 4.5f }; * Printer.WriteTitle("Evaluacion"); * WriteLine($"Evaluacion: {evaluacion.Nombre}"); * WriteLine($"Evaluacion: {evaluacion.UniqueId}"); * WriteLine($"Evaluacion: {evaluacion.Nota}"); * WriteLine($"Evaluacion: {evaluacion.GetType()}"); * * ob = evaluacion; * Printer.WriteTitle("ObjetoEscuela"); * WriteLine($"Evaluacion: {ob.Nombre}"); * WriteLine($"Evaluacion: {ob.UniqueId}"); * WriteLine($"Evaluacion: {ob.GetType()}"); * * //EVITAR ERRORES EN TIEMPO DE EJECUCIÓN - VALIDACIÓN CON "IS" y "AS" * //"IS" PARA PREGUNTAR SI UN OBJETO ES DE UN TIPO DETERMINADO * // * if(ob is Alumno) * { * var alumnoRecuperado = (Alumno)ob; * } * //Si obj lo puede tomar como Alumno, devuelve el obj transformado en Alumno. Pero si obj no lo puede transformar en alumno entonces devuelve null. * //"AS" tome este objeto como si fuera este objeto * //Mas recomendada * Alumno alumnoRecuperado2 = ob as Alumno;*/ //------------------------------------------------------------------------------------------------------------------------ //Solicitar el metodo GetObjetosEscuela //1era implementación //var listaObjetos = engine.GetObjetosEscuela(false, false, false, false); //2nda implementacion: haciendo un conteo de objetos con contadores. En este caso, listaObjetos es una TUPLA //var listaObjetos = engine.GetObjetosEscuela(true, false, false, false); //3era implementacion: /*int dummy = 0; // Reemplazar en caso de no querer obtener ese conteo. * var listaObjetos = engine.GetObjetosEscuela( * out int conteoEvaluaciones, * out int conteoCursos, * out int conteoAsignaturas, * out int conteoAlumnos);*/ //Las 3 implementaciones responden AL PROBLEMA DE OBTENER UNA LISTA DE OBJETOS Y PODERLOS CLASIFICAR. //Implementación de los métodos con SOBRECARGA var listaObjetos = engine.GetObjetosEscuela(); //Llamar al Limpiar definido en el Interface Ilugar engine.Escuela.LimpiarLugar(); //Desde el punto de vista de la programación orientada a objetos cualquier objeto puede ser visto como una interfaz. //Haciendo uso de Linq vamos a seleccionar de nuestra lista de objetos todos los objetos y les haremos casting con ILugar.Si no declaramos que nos retorne sólo los objetos que sean de tipo ILugar, entonces el programa al realizar el casting va a causar errores silenciosos. /*var listaIlugar = from obj in listaObjetos * where obj is Alumno * select (Alumno)obj;*/ //CREACION DE DICCIONARIO DE DATOS /*Dictionary<int, string> diccionario = new Dictionary<int, string>(); * diccionario.Add(10, "JuanK"); //Llave, Valor * diccionario.Add(12, "LoremIpsus"); * diccionario[0] = "Nato"; * * foreach (var keyValPair in diccionario) * { * WriteLine($"Key: {keyValPair.Key}, Valor: {keyValPair.Value}"); * } * //Otra forma de recorrer un diccionario * Printer.WriteTitle("Acceso a diccionario"); * WriteLine(diccionario[12]); * WriteLine(diccionario[0]); * Printer.WriteTitle("Otro diccionario"); * var dic = new Dictionary<string, string>(); * dic["Luna"] = "Cuerpo Celeste que gira alrededor de la Tierra"; * WriteLine(dic["Luna"]); * dic["Luna"] = "Protagonista de Soy Luna"; * WriteLine(dic["Luna"]); * //En el caso de adicionar un campo con la misma llave y otro valor, falla ya que la llave debe ser única.*/ var dictmp = engine.GetDiccionarioObjetos(); engine.ImprimirDiccionario(dictmp); //MANEJADOR DE EVENTO AppDomain.CurrentDomain.ProcessExit += AccionDelEvento; //Acumulación de DELEGADOS o MULTICAST DELEGATE AppDomain.CurrentDomain.ProcessExit += (o, s) => Printer.Beep(2000, 1000, 1); // REPORTEADOR var reporteador = new Reporteador(engine.GetDiccionarioObjetos()); var evalList = reporteador.GetListaEvaluaciones(); var listaAsig = reporteador.GetListaAsignaturas(); var listaEvalXAsig = reporteador.GetDicEvaluaXAsig(); var listaPromedioxAsig = reporteador.GetPromAlumnPorAsignatura(); Printer.WriteTitle("Captura de una Evaluación por Consola"); var newEval = new Evaluacion(); string nombre, notastring; float nota; WriteLine("Ingrese el nombre de la evaluación y presione Enter:"); Printer.PresioneENTER(); //CAPTURAR EL ENTER nombre = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nombre)) { Printer.WriteTitle("El valor del nombre no puede ser vacio"); WriteLine("Saliendo del programa."); } else { newEval.Nombre = nombre.ToLower(); WriteLine("El nombre de la evaluacion ha sido ingresado correctamente."); } ///////////////-------------------------------------------- NOTA WriteLine("Ingrese la nota de la evaluación y presione Enter:"); Printer.PresioneENTER(); //CAPTURAR EL ENTER notastring = Console.ReadLine(); if (string.IsNullOrWhiteSpace(notastring)) { Printer.WriteTitle("El valor de la nota no puede ser vacio"); WriteLine("Saliendo del programa."); } else { try { newEval.Nota = float.Parse(notastring); if (newEval.Nota < 0 || newEval.Nota > 5) { throw new ArgumentOutOfRangeException("La nota debe estar entre 0 y 5"); } WriteLine("La nota de la evaluación ha sido ingresada correctamente."); } catch (ArgumentOutOfRangeException arg0) { Printer.WriteTitle(arg0.Message); WriteLine("Saliendo del programa"); } catch (Exception) { Printer.WriteTitle("El valor de la nota no es un número válido."); WriteLine("Saliendo del programa"); } finally { Printer.WriteTitle("FINALLY!"); Printer.Beep(2500, 500, 3); } } Console.ReadKey(); }
static void Main(string[] args) { AppDomain.CurrentDomain.ProcessExit += AccionDelEvento; AppDomain.CurrentDomain.ProcessExit += (o, s) => Printer.Beep(100, 1000, 1); AppDomain.CurrentDomain.ProcessExit -= AccionDelEvento; var engine = new EscuelaEngine(); engine.Inicializar(); Printer.WriteTitle("Bienvenidos a la Escuela"); var reporteador = new Reporteador(engine.GetDiccionarioObjetos()); var listaEval = reporteador.GetListaEvaluaciones(); var listaAsig = reporteador.GetListaAsignaturas(); var listaEvalXAsig = reporteador.GetDiccEvaluaXAsig(); var listaPromXAsig = reporteador.GetPromAlumPorAsignatura(); var listaMejoresPromXAsig = reporteador.GetMejoresPromAlumPorAsignatura(5); Printer.WriteTitle("Captura de una Evaluacion por Consola"); var newEval = new Evaluacion(); string nombre, notaString; WriteLine("Ingrese el nombre de la evaluación"); Printer.PresioneENTER(); nombre = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nombre)) { Printer.WriteTitle("El valor del nombre no puede ser vacio"); WriteLine("Saliendo del programa"); } else { newEval.Nombre = nombre.ToLower(); WriteLine("El nombre se ingresó correctamente."); } WriteLine("Ingrese la nota de la evaluación"); Printer.PresioneENTER(); notaString = Console.ReadLine(); if (string.IsNullOrWhiteSpace(notaString)) { Printer.WriteTitle("El valor de la nota no puede ser vacio"); WriteLine("Saliendo del programa"); } else { try { newEval.Nota = float.Parse(notaString); if (newEval.Nota < 0 || newEval.Nota > 5) { throw new ArgumentOutOfRangeException("La nota debe estar entre 0 y 5"); } WriteLine("La nota se ingresó correctamente."); } catch (ArgumentOutOfRangeException arge) { Printer.WriteTitle(arge.Message); WriteLine("Saliendo del programa"); } catch (Exception) { Printer.WriteTitle("El valor de la nota no es un número válido."); WriteLine("Saliendo del programa"); } finally { Printer.WriteTitle("Finally."); Printer.Beep(2500, 500, 3); } } }
static void Main(string[] args) { AppDomain.CurrentDomain.ProcessExit += AccionDelEvento; AppDomain.CurrentDomain.ProcessExit += (Object sender, EventArgs e) => Printer.WriteTitle("Despues de salir"); AppDomain.CurrentDomain.ProcessExit -= AccionDelEvento; var engine = new EscuelaEngine(); engine.Inicializar(); Printer.WriteTitle("BIENVENIDOS A LA ESCUELA"); var reporteador = new Reporteador(engine.GetDiccionarioObjetos()); reporteador.GetDicEvaluacionesXAsignatura(); reporteador.GetPromedioAlumnosXAsig(); Printer.WriteTitle("Captura de una evaluación por consola"); var newEval = new Evaluacion(); string nombre, notaString; float nota; WriteLine("Ingrese el nombre de la evaluación"); Printer.PresioneEnter(); nombre = Console.ReadLine(); if (string.IsNullOrEmpty(nombre)) { throw new ArgumentException("el valor del nombre no puede ser vacio"); } else { newEval.Nombre = nombre.ToLower(); WriteLine("El nombre de la evaluación ha sido ingresado correctamente"); } WriteLine("Ingrese la nota de la evaluación"); Printer.PresioneEnter(); notaString = Console.ReadLine(); if (string.IsNullOrEmpty(notaString)) { throw new ArgumentException("el valor del nombre no puede ser vacio"); } else { try { newEval.Nota = float.Parse(notaString); if (newEval.Nota < 0 || newEval.Nota > 5) { throw new ArgumentOutOfRangeException("La nota debe estar entre 0 y 5"); } WriteLine("La nota de la evaluación ha sido ingresada correctamente"); } catch (ArgumentOutOfRangeException arg) { WriteLine(arg.Message); } catch (System.Exception) { WriteLine("El valor de la nota no es un número válido"); } finally { WriteLine("FINALLY"); } } }
static void Main(string[] args) { ///Etapa 9 Printer.WriteTitle("Captura de una evaluación por Consola."); var newEval = new Evaluacion(); string nombre, notaEvaluacion; float nota; WriteLine("Ingrese el nombre de la evaluación."); Printer.PresioneEnter(); nombre = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nombre)) { ///throw new ArgumentException("El valor del nombre no puede ser nulo."); Printer.WriteTitle("El valor del nombre no puede ser vacío"); WriteLine("Saliendo del programa"); } else { newEval.Nombre = nombre.ToLower(); WriteLine("El nombre de la evaluación ha sido creada correctamente."); } WriteLine("Ingrese la nota de la evaluación."); Printer.PresioneEnter(); notaEvaluacion = Console.ReadLine(); if (string.IsNullOrWhiteSpace(notaEvaluacion)) { ////throw new ArgumentException("El valor de la nota no puede ser vacío."); Printer.WriteTitle("El valor de la nota no puede ser vacío"); WriteLine("Saliendo del programa"); } else { try { newEval.Nota = float.Parse(notaEvaluacion); if (newEval.Nota < 0 || newEval.Nota > 5) { throw new ArgumentOutOfRangeException("la nota debe estar entre 0 y 5"); } WriteLine("La nota de la evaluación ha sido ingresada correctamente."); } catch (ArgumentOutOfRangeException arge) { Printer.WriteTitle(arge.Message); WriteLine("Saliendo del programa"); } catch (Exception) { Printer.WriteTitle("El valor de la nota no es número valido. "); WriteLine("Saliendo del programa"); } finally { Printer.WriteTitle("Finalmente"); Printer.Beep(2500, 500, 3); } } return; #region Etapa 8 var engine = new EscuelaEngine(); engine.Inicializar(); Printer.WriteTitle("==== Etapa 8 ===="); //Para que me visualice el mensaje de error. ////var reporteador = new Reporteador(null); var reporteador = new Reporteador(engine.GetDiccionarioObjetos()); var evaluacionesList = reporteador.GetListaEvaluaciones(); ///Nos importa la lista de asignaturas que han sido evaluadas 3.0f no me importa si han sido evaluadas varias veces. var listaAsignaturas = reporteador.GetListaAsignaturas(); var listaEvaXAsig = reporteador.GetDicEvaluacionesXAsignatura(); var listaPromedioXAsig = reporteador.GetPromedioAlumnoPorAsignatura(); var listaPromedioXAsigTop5 = reporteador.GetPromedioAlumnoPorAsignaturaTop(5); return; #endregion ///Inicio de la Etapa 7 Funcionalidades Variables de Salida, Diccionario de Datos #region Etapa 7 ///Un evento genera varias acciones, este evento se dispara cada vez que finaliza la aplicación ///cada vez que ocurre este evento haga algo. AppDomain.CurrentDomain.ProcessExit += AccionDelEvento; ///Es sumale a lo que ya tiene es como una sobre carga del operador. ///Tengo mi controlador de Eventos, sumele a lo que ya hice. ///vamos a colocarle como una expresión lamda ///vamos a poner un pitido diferente, Necesito tener la firma del Evento ///un objeto y unos argumentos, asi no los tenga me va pedir (0,s) ///Lo que se puede decir es un multicast delegate que recibe muchos delegados. AppDomain.CurrentDomain.ProcessExit += (o, s) => Printer.Beep(2000, 1000, 1); ///Ya no quiero este manejador de Evento o este predicado. AppDomain.CurrentDomain.ProcessExit -= AccionDelEvento; ///var engine = new EscuelaEngine(); engine.Inicializar(); Printer.WriteTitle("==== Etapa 7 ===="); //Printer.Beep(1000, cantidad: 10); ImprimirCursosEscuelaEtapa4(engine.Escuela); //Ya no es una lista es una tupla una colección de dos valores. var listaObjetosSinEvaluciones = engine.GetObjetosEscuela(isTraeEvaluaciones: false); var listaObjetosEvaluacionesConteo = engine.GetObjetosEscuela( true, false, false, false); var listaObjetos = engine.GetObjetosEscuela( out int conteoEvaluaciones, out int conteoAlumnos, out int conteoAsignaturas, out int conteoCursos, true, false, false, false); ///Aca si me permite agregar ya que no es de solo lectura listaObjetos.Add(new Evaluacion { Nombre = "Curso Loco" }); var listaObjetosLectura = engine.GetObjetosEscuelaLectura( out conteoEvaluaciones, out conteoAlumnos, out conteoAsignaturas, out conteoCursos, true, false, false, false); ///Yo trato de adicionar una Evaluación me sale una advertencia ya que es solo de lectura ////listaObjetosLectura.Add( new Evaluacion{Nombre="Curso Loco"}); Dictionary <int, string> diccionario = new Dictionary <int, string>(); diccionario.Add(10, "Danilo"); diccionario.Add(23, "Pedro Cando"); ///Tambien puedo adicionar objetos de esta manera. diccionario[0] = "Pekerman"; foreach (var keyvalorPair in diccionario) { WriteLine($"key: {keyvalorPair.Key}, Valor: {keyvalorPair.Value}"); } Printer.WriteTitle("Acceso a Diccionario"); ///Me devuelve una cadena WriteLine(diccionario[23]); WriteLine(diccionario[0]); Printer.WriteTitle("Otro Diccionario"); ///Diciconario Polimórfico: Que tiene o puede tener varias formas. var dic = new Dictionary <string, string>(); dic["Luna"] = "Cuerpo celeste que gira al rededor de Planeta Tierra."; foreach (var keyvalorPair in dic) { WriteLine($"key: {keyvalorPair.Key}, Valor: {keyvalorPair.Value}"); } ///Las llaves en los diccionarios son irrepetibles. dic["Luna"] = "Protagonista de Soy Luna"; WriteLine(dic["Luna"]); var diccionariotemporal = engine.GetDiccionarioObjetos(); engine.ImprimirDiccionario(diccionariotemporal, true); return; #endregion ///Inicio de la Etapa #6 Interfaces #region Etapa 6 ////var engine = new EscuelaEngine(); engine.Inicializar(); Printer.WriteTitle("==== Etapa 6 ===="); //Printer.Beep(1000, cantidad: 10); ImprimirCursosEscuelaEtapa4(engine.Escuela); ////var listaObjetos = engine.GetObjetosEscuela(); ///engine.Escuela.LimpiarLugar(); #region INTERFACE vs ABSTRACT CLASS /* * INTERFACE vs ABSTRACT CLASS * * 1)Access Specifier 1)Especificador de Acceso * * C# INTERFACE * In C#, Interface cannot have access specifier for functions. It is public by default. * En C#, Interface no puede tener especificador de acceso a funciones, es PUBLICO por defecto. * * C# ABSTRACT CLASS * In C#, abstract class can have access specifier for functions. * En # La Clase abstracta puede tener especificador de acceso para funciones. * * 2) Implementation 2) Implementación * * C# INTERFACE * In C#, an interface can only have signature not the implementation. * En C#, una interface solo puede tener firma o declaraciones pero no la implementación. * * C# ABSTRACT CLASS * Abstract class can provide complete implementation. * Una clase abstracta puede proporcionar una implementación completa en su definición. * * 3) Speed 3) Velocidad * * C# INTERFACE * Interface is comparatively slow. * Interface es comparativamente lento. * * C# ABSTRACT CLASS * Abstract class is fast. * Clase abstracta es rápida. * * 4) Instantiate 4) Instanciamiento * * C# INTERFACE * Interface is absolutely abstract and cannot be instantiated. * la interfaz es absolutamente abstracta y no puede ser instanciada. * * C# ABSTRACT CLASS * Abstract class cannot be instantiated. * La clase abstracta no puede ser instanciada. * * 5) Fields 5) Campos * * C# INTERFACE * Interface cannot have fields. * La interfaz no puede tener campos. * * C# ABSTRACT CLASS * Abstract class can have defined and constants. * La clase abstracta puede tener campos definidos y constantes. * * 6) Methods 6) Métodos * * C# INTERFACE * Interface has only abstract methods. * La interfaz solamente tiene métodos abstractos. * * C# ABSTRACT CLASS * Abstract class can have non-abstract methods. * La clase abstracta puede tener métodos no abstractos. */ #endregion ///Podemos extender el polimorfismo a travez de Interfaces. ///Debemos pensar las Interfaces de algo más abstracto, que solo objeto de Interfaces de C# ///Hemos utilizado interfaces para cumplir una funcionalidad especifica. ///de los objetos que cumplan con la implementación de la Interfaz. var listaILugar = from obj in listaObjetos where obj is ILugar select(ILugar) obj; ///La nueva lista me trae solo objetos de Alumnos. var listaAlumnos = from obj in listaObjetos where obj is Alumno select(Alumno) obj; ///return; #endregion ///Inicio Etapa 5 Herencia - Polimorfismo #region Etapa 5 ////var engine = new EscuelaEngine(); ////engine.Inicializar(); Printer.WriteTitle("==== Etapa 5 ===="); //Printer.Beep(1000, cantidad: 10); ImprimirCursosEscuelaEtapa4(engine.Escuela); Printer.DrawLine(20); Printer.DrawLine(20); Printer.DrawLine(20); Printer.WriteTitle("Prueba de Polimorfismo"); var alumnoTest = new Alumno { Nombre = "Claire UnderWood" }; Printer.WriteTitle("Alumno"); WriteLine($"Alumno: {alumnoTest.Nombre}"); WriteLine($"Alumno: {alumnoTest.UniqueId}"); WriteLine($"Alumno: {alumnoTest.GetType()}"); ObjetoEscuelaBase ob = alumnoTest; Printer.WriteTitle("ObjetoEscuela"); WriteLine($"Alumno: {ob.Nombre}"); WriteLine($"Alumno: {ob.UniqueId}"); WriteLine($"Alumno: {ob.GetType()}"); /* * ///Una clase abstacta no se puede instanciar si se le quita abstrac es para un ejemplo * var objDummy = new ObjetoEscuelaBase() { Nombre = "Frank Underwood" }; * Printer.WriteTitle("ObjetoEscuelaBase"); * WriteLine($"Alumno: {objDummy.Nombre}"); * WriteLine($"Alumno: {objDummy.UniqueId}"); * WriteLine($"Alumno: {objDummy.GetType()}"); */ alumnoTest = (Alumno)ob; Printer.WriteTitle("ObjetoEscuela Es un Alumno si puede verlo como un Alumno"); WriteLine($"Alumno: {alumnoTest.Nombre}"); WriteLine($"Alumno: {alumnoTest.UniqueId}"); WriteLine($"Alumno: {alumnoTest.GetType()}"); ///Este objeto nunca fue un Alumno. ///Nunca podemos hacer que se vea como un objeto hijo. ///ya que fue un objeto Padre ///Ya que no tiene todas las características que tiene el hijo. // alumnoTest = (Alumno)objDummy; // Printer.WriteTitle("ObjetoEscuela Es un Alumno si puede verlo como un Alumno"); // WriteLine($"Alumno: {alumnoTest.Nombre}"); // WriteLine($"Alumno: {alumnoTest.UniqueId}"); // WriteLine($"Alumno: {alumnoTest.GetType()}"); var evaluacion = new Evaluacion() { Nombre = "Evaluación de Matemáticas", Nota = 4.7f }; Printer.WriteTitle("Evaluación"); WriteLine($"Evaluación: {evaluacion.Nombre}"); WriteLine($"Evaluación: {evaluacion.UniqueId}"); WriteLine($"Evaluación: {evaluacion.Nota}"); WriteLine($"Evaluación: {evaluacion.GetType()}"); ob = evaluacion; Printer.WriteTitle("ObjetoEscuela"); WriteLine($"Alumno: {ob.Nombre}"); WriteLine($"Alumno: {ob.UniqueId}"); WriteLine($"Alumno: {ob.GetType()}"); ///Evaluación no es compatible con Alumno. ///El polimorfismo es bueno nos puede llevar a cometer errores. ///alumnoTest = (Alumno)evaluacion; //Si es posible convertirle if (ob is Alumno) { Alumno alumnoRecuperado = (Alumno)ob; } ob = evaluacion; if (ob is Alumno) { Alumno alumnoRecuperado = (Alumno)ob; } ///ob as Alumno = Objeto le puede tomar como Alumno (Tome este objeto como si fuera este objeto). ///El me va devolver el objeto transformado como Alumno, ///Pero si objeto no me puede transformar como alumno me va devolver null. Alumno alumnoRecuperado2 = ob as Alumno; ///Esto seria una pregunta subsecuente if (alumnoRecuperado2 != null) { } ////return; #endregion ///Etapa 4 Generar Colecciones #region Etapa 4 /* var engine = new EscuelaEngine(); * engine.Inicializar(); * * ////Printer.DibujarLinea(); * Printer.WriteTitle("==== Etapa 4 ===="); * Printer.Beep(1000,cantidad:10); * ImprimirCursosEscuelaEtapa4(engine.Escuela); * * return; */ #endregion //////========= Inicio Etapa 3 Arreglos ========== #region Etapa 3 /* var escuela = new Escuela("Sisfel", 2021); * escuela.Pais="Ecuador"; * escuela.Ciudad ="Cuenca"; * escuela.TipoEscuela = TiposEscuela.Primaria; * * Console.WriteLine(escuela); */ /* var arregloCursos = new Curso[3]; * * arregloCursos[0] = new Curso() * { * Nombre = "101" * }; * * arregloCursos[1] = new Curso() * { * Nombre = "102" * }; * * arregloCursos[2] = new Curso() * { * Nombre = "103" * }; */ /* var curso1 = new Curso() * { * Nombre = "101" * }; * * var curso2 = new Curso() * { * Nombre = "201" * }; * * var curso3 = new Curso() * { * Nombre = "301" * }; */ /* Curso[] arregloCursos = { * * new Curso * { * Nombre = "101" * }, * new Curso() { Nombre = "201" }, * new Curso { Nombre = "301" } * }; */ /* var listaCursos = new List<Curso>{ * new Curso { Nombre = "101"}, * new Curso() { Nombre = "201" }, * new Curso { Nombre = "301" } * }; */ var escuela = new Escuela("Sisfel", 2021, TiposEscuela.Primaria, ciudad: "Cuenca", pais: "Ecuador" ); escuela.ListaCursos = new List <Curso> { new Curso { Nombre = "101", Jornada = TiposJornada.Manana }, new Curso() { Nombre = "201", Jornada = TiposJornada.Manana }, new Curso { Nombre = "301", Jornada = TiposJornada.Manana } }; ///Le quito el parentisis porque no voy a utilizar un parámetro en el Curso. ///escuela.ListaCursos.Add(new Curso() { Nombre = "102", Jornada = TiposJornada.Tarde }); escuela.ListaCursos.Add(new Curso { Nombre = "102", Jornada = TiposJornada.Tarde }); escuela.ListaCursos.Add(new Curso { Nombre = "202", Jornada = TiposJornada.Tarde }); var otraColeccion = new List <Curso> { new Curso { Nombre = "401", Jornada = TiposJornada.Manana }, new Curso() { Nombre = "501", Jornada = TiposJornada.Manana }, new Curso() { Nombre = "501", Jornada = TiposJornada.Tarde }, new Curso { Nombre = "601", Jornada = TiposJornada.Manana } }; escuela.Cursos = new Curso[] { new Curso { Nombre = "101" }, new Curso() { Nombre = "201" }, new Curso { Nombre = "301" } }; WriteLine(escuela); WriteLine("==========="); /* Console.WriteLine(curso1.Nombre+","+curso1.UniqueId); * Console.WriteLine($"{curso2.Nombre}, {curso2.UniqueId}"); * Console.WriteLine(curso3); */ /* Console.WriteLine(arregloCursos[0].Nombre); * Console.WriteLine("Presione enter para continuar."); * Console.ReadLine(); * Console.WriteLine(arregloCursos[5].Nombre); */ /* ImprimirCursosWhile(arregloCursos); * Console.WriteLine("==========="); * ImprimirCursosDoWhile(arregloCursos); * Console.WriteLine("==========="); * ImprimirCursosFor(arregloCursos); * Console.WriteLine("==========="); * ImprimirCursosForEach(arregloCursos); */ Curso temporal = new Curso { Nombre = "101-Vacacional", Jornada = TiposJornada.Noche }; ///Eliminar todos los elementos de la lista. ////otraColeccion.Clear(); escuela.ListaCursos.AddRange(otraColeccion); escuela.ListaCursos.Add(temporal); ImprimirCursosEscuela(escuela); WriteLine("Curso.Hash" + temporal.GetHashCode()); escuela.ListaCursos.Remove(temporal); WriteLine("==========="); ///Predicate Generico de Curso lo que voy hacer voy a ponerle un nombre ///es más esto se llama encapsulación de algoritmos le voy asignaral método Precicado ///Porque estoy haciendo este paso adicional. ///Resulta si Yo miro este Predicate, Preciono Ctrl en Predicado me dice que es un delegado ///y ese delegado devuelve booleano y que recibe un parámetro Generico de un tipo de dato. ///Yo le puedo asignar metodos que devuelvan boleano y que reciban como parámetro el tipo de dato ///Generico especificado. Predicate <Curso> miAlgoritmo = Predicado; escuela.ListaCursos.RemoveAll(miAlgoritmo); ///Desde C# 3.5 hay inferencia de tipos el ya sabe que este predicado cumple con la especificación ///que nos pide este Predicate, es capaz de darse cuenta que cumple no hay necesidad de hacer el Mapping ///Puede inferir con un tipo o el otro ///Como le puedo recibir diferente hay una expresión Lamda y hay otra cosa que se llama delegado. ///Puede reescribirlo de la siguiente manera ///El delegate recibe algo como parámetro curso no necesito decirle el tipo por ahora ///Le digo que esto conlleva (=>) Con lleva a evaluar que curso sea 301. escuela.ListaCursos.RemoveAll(delegate(Curso cur) { return(cur.Nombre == "301"); }); ///Expresiones lamda que a la final también son un delegado escuela.ListaCursos.RemoveAll((Curso cur) => cur.Nombre == "401"); ///Inclusive puede sin definir el tipo simplemente voy a recibir un cur esta lista es generica de Cursos ///por ende lo que voy a recibir de cur es de tipo Curso inclusive ya le incluyo. escuela.ListaCursos.RemoveAll((cur) => cur.Nombre == "501" && cur.Jornada == TiposJornada.Manana); ImprimirCursosEscuela(escuela); int a, b, c; a = 7; b = a; c = b++; b = a + b * c; c = a >= 100 ? b : c / 10; a = (int)Math.Sqrt(b * b + c * c); string s = "String literal"; char l = s[s.Length - 1]; var numbers = new List <int>(new[] { 1, 2, 3 }); b = numbers.FindLast(n => n > 1); var direction = Directions.Right; Console.WriteLine($"Map view direction is {direction}"); /* var orientation = direction switch * { * Directions.Up => Orientation.North, * Directions.Right => Orientation.East, * Directions.Down => Orientation.South, * Directions.Left => Orientation.West, * }; * Console.WriteLine($"Cardinal orientation is {orientation}"); */ #endregion }