public static bool ChequearCompatibilidadPreRequisito(Estudiante estudiante, CursoCurricular cursoCurricular)
        {
            //MessageBox.Show("Hay " + estudiante.avanceMalla.Count.ToString() + " cursos en el avance de malla");
            //MessageBox.Show("El curso tiene " + cursoCurricular.cursosPreRequisito.Count.ToString() + " cursos prerequisitos");
            if (cursoCurricular.cursosPreRequisito.Count == 0)
            {
                return(true);
            }
            cursosNoAprobados.Clear();
            bool hayCursosNoAprobados = false;

            foreach (string cur in cursoCurricular.cursosPreRequisito)
            {
                if (!estudiante.avanceMalla.Contains(cur))
                {
                    cursosNoAprobados.Add(cur);
                    hayCursosNoAprobados = true;
                }
            }
            if (hayCursosNoAprobados)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
예제 #2
0
        public static void EliminarCurso()
        {
            Program.ImprimirNegativo("Eliminar Curso");
            Console.WriteLine("Seleccione el NRC del curso a eliminar:");

            ImprimirCursos();


            List <string> listadoNRC = Aplicacion.GetCursoCurricular().Select(x => x.nrc).ToList();

            string option = "";

            while (!listadoNRC.Contains(option))
            {
                Console.Write("NRC:> ");
                option = Console.ReadLine();
            }

            CursoCurricular curso = Aplicacion.GetCursoCurricular().Find(x => x.nrc == option);

            Aplicacion.cursos.Remove(curso);
            Program.ImprimirPositivo($"Curso {curso.nombre} removido exitosamente!");
            Console.WriteLine("Presione cualquier tecla para continuar...");
            Console.ReadKey();

            return;
        }
        public static bool ChequearCompatibilidadHorario(Estudiante estudiante, CursoCurricular cursoInscribir)
        {
            List <string> listaBloquesUsados = new List <string>();

            foreach (Curso curso in estudiante.listaInscripcion)
            {
                CursoCurricular cursoCurricular = (CursoCurricular)curso;
                foreach (Evento bloqueHorario in cursoCurricular.eventosCurso)
                {
                    if (bloqueHorario.tipo == TipoEvento.PRBA || bloqueHorario.tipo == TipoEvento.EXTRAP)
                    {
                        continue;
                    }
                    listaBloquesUsados.Add(bloqueHorario.hora);
                }
            }
            if (cursoInscribir is null)
            {
                return(false);
            }
            foreach (Evento evento in cursoInscribir.eventosCurso)
            {
                if (evento.tipo == TipoEvento.PRBA)
                {
                    continue;
                }
                if (listaBloquesUsados.Contains(evento.hora))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #4
0
        public static void CargarUsuarios(string fileName = "saveData.csv")
        {
            try
            {
                string path = Path.GetFullPath(@"..\..");
                path = Path.Combine(path, "archivos");
                Directory.CreateDirectory(path);
                Program.ImprimirPositivo("Users:\tDir: " + path);
                path = Path.Combine(path, fileName);

                StreamReader file = new StreamReader(path);
                string       linea;
                while ((linea = file.ReadLine()) != null)
                {
                    string[] lineaSeparada = linea.Split(';');
                    string   nombre        = lineaSeparada[0];
                    string   contraseña    = lineaSeparada[1];
                    bool     admin;

                    if (lineaSeparada[2] == "true")
                    {
                        admin = true;
                        Administrador administrador = new Administrador(nombre, contraseña, admin);
                        usuarios.Add(administrador);
                    }
                    else
                    {
                        string especialidad, añoIngreso, concentracion, avanceMalla;
                        especialidad  = lineaSeparada[4];
                        añoIngreso    = lineaSeparada[5];
                        concentracion = lineaSeparada[6];
                        avanceMalla   = lineaSeparada[7];
                        List <CursoCurricular> listaAvanceMalla = new List <CursoCurricular>();

                        foreach (string nrc in lineaSeparada[7].Split(','))
                        {
                            CursoCurricular curso = cursos.Find(x => x.nrc == nrc);
                            listaAvanceMalla.Add(curso);
                        }
                        Estudiante estudiante = new Estudiante(listaAvanceMalla, Especialidad.ICA, Concentracion.Algoritmos, nombre, contraseña, false);
                        usuarios.Add(estudiante);
                    }
                }
                file.Close();
            }
            catch (FileNotFoundException e1)
            {
                System.Console.WriteLine(e1.Message);
                Program.ImprimirNegativo("Hubo un error al cargar los Usuarios!");
                Console.WriteLine("Presione cualquier tecla para continuar...");
                Console.ReadKey();
            }
        }
예제 #5
0
        public static bool CrearCursoCurricular(string nrc, string nombreCurso, string profesor, int creditos, Especialidad especialidad, List <Evento> eventosCurso)
        {
            List <string> listadoNRC = Aplicacion.GetCursoCurricular().Select(x => x.nrc).ToList();

            if (listadoNRC.Contains(nrc))
            {
                return(false);
            }
            CursoCurricular c = Aplicacion.cursos[3];

            Aplicacion.AñadirCurso(new CursoCurricular(nrc, creditos, new List <string>(), especialidad, eventosCurso, nombreCurso.ToUpper(), profesor, TipoCurso.Curricular));
            return(true);
        }
예제 #6
0
        public static void LeerCurso()
        {
LeerCurso:
            Console.Clear();
            Program.ImprimirBanner("Leer Curso");
            ImprimirCursos();
            Console.WriteLine("\nSeleccione El NRC del curso que desea leer: ");
            List <string> listadoNRC = Aplicacion.GetCursoCurricular().Select(x => x.nrc).ToList();
            string        option     = "";


            do
            {
                Console.Write("NRC:> ");
                option = Console.ReadLine();
                if (!listadoNRC.Contains(option))
                {
                    Program.ImprimirNegativo("NRC No Valido");
                }
            } while (!listadoNRC.Contains(option));


            CursoCurricular curso = Aplicacion.GetCursoCurricular().Find(x => x.nrc == option);

            Console.Clear();
            Console.WriteLine($"NRC: {curso.nrc}\nNombre: {curso.nombre}\n" +
                              $"Creditos: {curso.creditos}\nProfesor: {curso.profesor}\nEventos:\n");

            foreach (Evento evento in curso.eventosCurso)
            {
                Console.WriteLine($"\t{evento.nombre} [{evento.tipo.ToString()}] hora:{evento.hora} fecha:{evento.fecha}");
            }

            Console.Write("\n¿Leer Otro Curso?\n" +
                          "1. Si\n" +
                          "2. No\n:> ");
            int opcion = Program.ChequearOpcion(1, 2);

            if (opcion == 1)
            {
                goto LeerCurso;
            }
            if (opcion == 2)
            {
                Console.Clear(); return;
            }
            else
            {
                return;
            }
        }
예제 #7
0
        public static bool ActualizarCurso(string nrc, string parametro, object cambio)
        {
            CursoCurricular curso = Aplicacion.GetCursoCurricular().Find(x => x.nrc == nrc);

            if (parametro == "nrc")
            {
                foreach (CursoCurricular c in Aplicacion.GetCursoCurricular())
                {
                    if (c.nrc == cambio.ToString())
                    {
                        MessageBox.Show("Ese NRC ya existe");
                        return(false);
                    }
                }
                curso.nrc = cambio.ToString();
            }

            else if (parametro == "nombre")
            {
                curso.nombre = cambio.ToString();
            }

            else if (parametro == "creditos")
            {
                curso.creditos = Int32.Parse(cambio.ToString());
            }

            else if (parametro == "especialidad")
            {
                curso.especialidad = (Especialidad)Enum.Parse(typeof(Especialidad), cambio.ToString());
            }

            else if (parametro == "profesor")
            {
                curso.profesor = cambio.ToString();
            }
            return(true);
        }
예제 #8
0
        public static bool ChequearCompatibilidad(Estudiante estudiante, CursoCurricular cursoInscribir)
        {
            List <string> listaBloquesUsados = new List <string>();

            foreach (Curso curso in estudiante.listaInscripcion)
            {
                CursoCurricular cursoCurricular = (CursoCurricular)curso;
                foreach (Evento bloqueHorario in cursoCurricular.eventosCurso)
                {
                    listaBloquesUsados.Add(bloqueHorario.hora);
                }
            }

            foreach (Evento evento in cursoInscribir.eventosCurso)
            {
                if (listaBloquesUsados.Contains(evento.hora))
                {
                    return(false);
                }
            }


            return(true);
        }
예제 #9
0
        static void InscribirCurso(Estudiante estudiante)
        {
            int quiereAgregar = 1;

            while (quiereAgregar == 1)
            {
                if (Aplicacion.GetCursoCurricular().Count == 0)
                {
                    Console.WriteLine("No hay cursos disponibles para inscribir");
                    goto SinCursosDisponiblesParaInscribir;
                }

                Console.WriteLine("Seleccione un curso para inscribir: ");
                foreach (CursoCurricular curs in Aplicacion.GetCursoCurricular())
                {
                    Console.WriteLine("NRC:{0}\nNombre: {1}\nProfesor: {2}\n", curs.nrc, curs.nombre, curs.profesor);
                }

                List <string> listadoNRC = Aplicacion.GetCursoCurricular().Select(x => x.nrc).ToList();

                string option = "";


                do
                {
                    Console.Write("NRC:> ");
                    option = Console.ReadLine();
                    if (!listadoNRC.Contains(option))
                    {
                        Program.ImprimirNegativo("NRC No Valido");
                    }
                } while (!listadoNRC.Contains(option));

                CursoCurricular curso = Aplicacion.GetCursoCurricular().Find(x => x.nrc == option);

                bool compatibilidad = ChequearCompatibilidad(estudiante, curso);
                if (estudiante.listaInscripcion.Contains(curso))
                {
                    Program.ImprimirNegativo($"El curso {curso.nombre} ya esta agregado\n");
                }
                else if (compatibilidad == false)
                {
                    Program.ImprimirNegativo($"El curso {curso.nombre} posee un tope de horario\n");
                }
                else
                {
                    estudiante.listaInscripcion.Add(curso);
                    Program.ImprimirPositivo("Curso agregado");
                    Program.Log(quiereAgregar.ToString(), "Agregar curso");
                }

                Console.WriteLine("\n¿Quiere agregar otro curso?\n" +
                                  "1. Si\n" +
                                  "2. No");
                int opcion = Program.ChequearOpcion(1, 2);
                if (opcion == 2)
                {
                    quiereAgregar = 2;
                }
            }

SinCursosDisponiblesParaInscribir:

            return;
        }
예제 #10
0
 public static void AñadirCurso(CursoCurricular curso)
 {
     cursos.Add(curso);
 }
예제 #11
0
        public static void CargarCursos(string fileName = "dataCursosDisponibles.csv")
        {
            try
            {
                //Encuentra el directorio donde se encuentra el archivo csv de cursos
                string path = Path.GetFullPath(@"..\..");
                path = Path.Combine(path, "archivos");
                Directory.CreateDirectory(path);
                Program.ImprimirPositivo("Cursos:\tDir: " + path);
                path = Path.Combine(path, fileName);

                StreamReader file = new StreamReader(path);
                string       line;
                string       previoNRC = string.Empty;
                string       nombre, profesor, nrc, carrera;
                int          creditos;


                //El csv posee varias lineas de un mismo curso. Esto genera conjuntos de la lineas
                //del mismo curso.
                List <List <string> > conjuntoCursosDistintos = new List <List <string> >();
                conjuntoCursosDistintos.Add(new List <string>()
                {
                    file.ReadLine()
                });
                while ((line = file.ReadLine()) != null)
                {
                    string[] datosLine = line.Split(';');
                    nrc = datosLine[0];
                    if (previoNRC == nrc || previoNRC == "")
                    {
                        conjuntoCursosDistintos[conjuntoCursosDistintos.Count() - 1].Add(line);
                    }
                    else
                    {
                        conjuntoCursosDistintos.Add(new List <string>());
                        conjuntoCursosDistintos[conjuntoCursosDistintos.Count() - 1].Add(line);
                    }
                    previoNRC = nrc;
                }


                foreach (List <string> curso in conjuntoCursosDistintos)
                {
                    List <Evento> listaEvento          = new List <Evento>();
                    List <string> listaHorariosBloques = new List <string>();
                    int           contadorLineaCurso   = 1;
                    foreach (string linea in curso)
                    {
                        string[]      datosLinea        = linea.Split(';');
                        List <string> listaHorarioLinea = new List <string>();    //listaHorarioLinea es el conjunto de horarios que se encuentra en una linea
                        for (int i = 6; i < 12; i++)
                        {
                            if (datosLinea[i] != "") //Si en la casilla existe un horario entonces...
                            {
                                string fecha = datosLinea[12].Replace('-', ':');
                                if (datosLinea[12] == "")
                                {
                                    fecha = "A";
                                }
                                listaHorarioLinea.Add((datosLinea[14] + ":" + (i - 6) + ":" + datosLinea[i] + ":" + fecha).Replace(" -", ":"));
                            }
                        }
                        List <string> bloquesHorario = new List <string>();

                        for (int i = 0; i < listaHorarioLinea.Count; i++)
                        {
                            string stringHorario = string.Empty;
                            stringHorario = listaHorarioLinea[i];
                            listaEvento.AddRange(generarEvento(stringHorario));
                        }

                        if (contadorLineaCurso == curso.Count)
                        {
                            string[] datosLinea2 = linea.Split(';');
                            nombre   = datosLinea2[4];
                            profesor = datosLinea2[15];
                            nrc      = datosLinea2[0];
                            carrera  = datosLinea2[1];
                            creditos = Convert.ToInt32(datosLinea2[5]);
                            CursoCurricular cursoCurricular = new CursoCurricular(nrc, creditos, new List <CursoCurricular>(),
                                                                                  Especialidad.ICA, listaEvento, nombre, profesor, TipoCurso.Curricular);
                            cursos.Add(cursoCurricular);
                        }
                        contadorLineaCurso++;
                    }
                }

                List <Evento> generarEvento(string stringHorario)
                {
                    //Console.WriteLine(stringHorario);Console.ReadKey();
                    //ingresa string del tipo           PRBA:D:8:30:11:20:A  ||  PRBA:D:8:30:11:20:20:03:2018
                    //retorna List<Evento>
                    string nombreEvento = string.Empty;
                    int    diaSemana    = Convert.ToInt32(stringHorario.Split(':')[1]);
                    int    horaInicio   = Convert.ToInt32(stringHorario.Split(':')[2]);
                    int    horaTermino  = Convert.ToInt32(stringHorario.Split(':')[4]);

                    int           cantBloques        = horaTermino - horaInicio;
                    List <Evento> returnListaEventos = new List <Evento>();

                    string     tipoEvento  = (stringHorario.Split(':')[0]);
                    TipoEvento tipo_Evento = (TipoEvento)System.Enum.Parse(typeof(TipoEvento), tipoEvento);

                    if (stringHorario.Split(':')[6] != "A") //Si posee una fecha entonces...
                    {
                        string fechaDia = (stringHorario.Split(':')[6]);
                        string fechaMes = (stringHorario.Split(':')[7]);
                        string fechaAño;
                        try
                        {
                            fechaAño = (stringHorario.Split(':')[8]);
                        }
                        catch
                        {
                            fechaAño = "2018";
                        }

                        string fecha = fechaDia + "-" + fechaMes + "-" + fechaAño;

                        for (int i = 0; i < cantBloques; i++)
                        {
                            string inicioBloque = $"{diaSemana}-{horaInicio + i}:30";
                            Evento evento       = new Evento(nombreEvento, inicioBloque, fecha, "B-23", tipo_Evento);
                            returnListaEventos.Add(evento);
                        }
                        return(returnListaEventos);
                    }
                    else
                    {
                        for (int i = 0; i < cantBloques; i++)
                        {
                            string inicioBloque = $"{diaSemana}-{horaInicio + i}:30";
                            Evento evento       = new Evento(nombreEvento, inicioBloque, "C-102", tipo_Evento);
                            returnListaEventos.Add(evento);
                        }
                        return(returnListaEventos);
                    }
                }

                file.Close();
            }
            catch (FileNotFoundException e)
            {
                System.Console.WriteLine(e.Message);
                Program.ImprimirNegativo("Hubo un error al cargar los Cursos!");
                Console.WriteLine("Presione cualquier tecla para continuar...");
                Console.ReadKey();
            }
        }
 public static bool ChequearCompatibilidadEspecialidadyConcentracion(Estudiante estudiante, CursoCurricular cursoCurricular)
 {
     if (cursoCurricular.especialidad == Especialidad.ING)
     {
         return(true);
     }
     else
     {
         if (estudiante.especialidad != cursoCurricular.especialidad)
         {
             if (estudiante.concentracion == Concentracion.Algoritmos)
             {
                 if ((cursoCurricular.nombre == "PROGRAMACION BAJO NIVEL") || (cursoCurricular.nombre == "ALGORITHMS AND COMPETITIVE PRO")) //falta uno de los 3 cursos de la concentración
                 {
                     return(true);
                 }
             }
             if (estudiante.concentracion == Concentracion.AplicacionesWeb)
             {
                 if ((cursoCurricular.nombre == "PROGRAMACION ORIENTADA A OBJET") || (cursoCurricular.nombre == "BASES DE DATOS") || (cursoCurricular.nombre == "WEB TECHNOLOGIES"))
                 {
                     return(true);
                 }
             }
             if (estudiante.concentracion == Concentracion.Bioprocesos)
             {
                 if ((cursoCurricular.nombre == "FUNDAMENTOS DE ING DE PROCESOS") || (cursoCurricular.nombre == "MICROBIOLOGIA INDUSTRIAL Y AMBIENTAL") || (cursoCurricular.nombre == "INGIENERIA DE BIOPROCESOS AMBI"))
                 {
                     return(true);
                 }
             }
             if (estudiante.concentracion == Concentracion.Hidraulica)
             {
                 if ((cursoCurricular.nombre == "FLUID MECHANICS") || (cursoCurricular.nombre == "HIDRAULICA") || (cursoCurricular.nombre == "HIDROLOGIA"))
                 {
                     return(true);
                 }
             }
             if (estudiante.concentracion == Concentracion.Modelacion)
             {
                 if ((cursoCurricular.nombre == "METODOS ESTADISTICOS PARA LA G") || (cursoCurricular.nombre == "PROGRAMACION MATEMATICA") || (cursoCurricular.nombre == "MODELOS ESTOCASTICOS"))
                 {
                     return(true);
                 }
             }
             if (estudiante.concentracion == Concentracion.Señales)
             {
                 if ((cursoCurricular.nombre == "SEÑALES Y SISTEMAS") || (cursoCurricular.nombre == "PROCESAMIENTO DE SEÑALES") || (cursoCurricular.nombre == "INTRODUCCION A LAS COMUNICACIO"))
                 {
                     return(true);
                 }
             }
             return(false);
         }
         return(true);
     }
 }
        public static Estudiante InscribirCurso(Estudiante estudiante, string cursoInscripcion)
        {
            CursoCurricular curso = Aplicacion.GetCursoCurricular().Find(x => x.nrc == cursoInscripcion);

            bool compatibilidadHorario      = ChequearCompatibilidadHorario(estudiante, curso);
            bool compatibilidadPreRequisito = ChequearCompatibilidadPreRequisito(estudiante, curso);

            bool compatibilidadEspecialidadyConcentracion = ChequearCompatibilidadEspecialidadyConcentracion(estudiante, curso);
            bool compatibilidadCantidadCreditos           = ChequearCompatibilidadCantidadCreditos(estudiante, curso);

            if (estudiante.listaInscripcion.Contains(curso))
            {
                MessageBox.Show("El Curso ya está inscrito.", "Error de Inscripción");
            }
            else
            {
                if ((compatibilidadHorario == false) || (compatibilidadPreRequisito == false) || (compatibilidadEspecialidadyConcentracion == false) || (compatibilidadCantidadCreditos == false))
                {
                    if (compatibilidadHorario == false)
                    {
                        MessageBox.Show($"El curso {curso.nombre} posee un tope de horario\n", "Error de Inscripción");
                    }
                    if (compatibilidadPreRequisito == false)
                    {
                        //MessageBox.Show($"Todavia no has aprobado cursos prerequisitos del curso {curso.nombre}", "Error de Inscripcion");
                        //MessageBox.Show($"No has aprobado {cursosNoAprobados[0]}");

                        cursosNoAprobados.Insert(0, $"Todavía no has aprobado los siguientes cursos, que son prerrequisitos de {curso.nombre}:");
                        var mensaje = string.Join(Environment.NewLine, cursosNoAprobados);
                        cursosNoAprobados.RemoveAt(0);
                        MessageBox.Show(mensaje);
                    }
                    if (compatibilidadEspecialidadyConcentracion == false)
                    {
                        MessageBox.Show($"El curso {curso.nombre} es de la especialidad {curso.especialidad}, pero tú eres de {estudiante.especialidad}, y tu concenctración tecnológica es {estudiante.concentracion}", "Error de Inscripción");
                    }
                    if (compatibilidadCantidadCreditos == false)
                    {
                        MessageBox.Show($"Al inscribir {curso.nombre} tendrías {ContarCreditos(estudiante) + curso.creditos} créditos, y no puedes exceder los 11", "Error de Inscripción");
                    }

                    //MessageBox.Show($"El curso {curso.nombre} es de la especialidad {curso.especialidad}, pero tú eres de {estudiante.especialidad}", "Error de Inscripción");
                }

                /*
                 * else if ((compatibilidadHorario == false) || (compatibilidadPreRequisito == false))
                 * {
                 *  MessageBox.Show($"No puedes inscribir el curso {curso.nombre}", "Error de Inscripcion");
                 * }
                 */

                else
                {
                    //MessageBox.Show("Agregado Exitosamente");
                    estudiante.listaInscripcion.Add(curso);
                    //cantidadCreditos += curso.creditos;
                    MessageBox.Show(curso.nombre + " inscrito con éxito");
                    MessageBox.Show($"Llevas {ContarCreditos(estudiante)} créditos");
                    return(estudiante);
                }
            }

            return(estudiante);
        }
 public static bool ChequearCompatibilidadCantidadCreditos(Estudiante estudiante, CursoCurricular cursoCurricular)
 {
     if (ContarCreditos(estudiante) + cursoCurricular.creditos > 33)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }