示例#1
0
 public bool seCruzan(Grupo g)
 {
     if (this.Materia.Codigo == g.Materia.Codigo)
         return true;
     for (int i = 0; i < g.Clases.Count(); i++)
     {
         for (int j = 0; j < Clases.Count(); j++)
         {
             if (g.Clases[i].cruzaClase(Clases[j]))
                 return true;
         }
     }
     return false;
 }
示例#2
0
 private static void pintarHorario(object[,] horariosArray, Horario horario, int rCnt, Dictionary <string, Color> colores, int counter)
 {
     string[] dias = new string[] { "Lunes", "Martes", "Miercoles", "Jueves", "Viernes!", "Sabado", "Domingo", "", "Horario# " + counter, "Codigo: " + horario.Id };
     for (int i = 0; i < dias.Length; i++)
     {
         horariosArray[rCnt, i + 1] = dias[i];
     }
     rCnt++;
     horario.Sort((a, b) => a.Materia.Nombre.CompareTo(b.Materia.Nombre));
     for (int i = 0; i < horario.Count(); i++)
     {
         Grupo        grupo   = horario[i];
         Materia      materia = grupo.Materia;
         List <Clase> clases  = grupo.Clases;
         for (int j = 0; j < clases.Count(); j++)
         {
             Clase clase = clases[j];
             int   dia   = clase.NumeroDia + 1;
             horariosArray[rCnt, dia] = FileManager.reporteClase(grupo, clase);
         }
         rCnt++;
     }
 }
示例#3
0
 public void Add(Grupo g)
 {
     Grupos.Add(g);
 }
示例#4
0
 public void Add(Grupo g)
 {
     Grupos.Add(g);
 }
示例#5
0
 public static string reporteClase(Grupo g, Clase c)
 {
     return "Gr-" + g.Id + Environment.NewLine + g.Materia.Nombre.Trim() + Environment.NewLine + "Prof: " + g.NombreCortoProfesor + Environment.NewLine + c.HoraInicio + "-" + c.HoraFin;
 }
示例#6
0
        public static void leerArchivo(Excel.Worksheet hoja, Carrera carrera, int semestre)
        {
            Excel.Range range = hoja.UsedRange;

            int totalFilas = range.Rows.Count;
            var startCell = (Range)hoja.Cells[1, 1];
            var endCell = (Range)hoja.Cells[totalFilas, 4];
            var toGetRange = hoja.Range[startCell, endCell];
            object[,] data = toGetRange.Value2;

            int filaActual = 1;
            while (filaActual <= totalFilas)
            {
                if (data[filaActual, 1] != null)
                {
                    string nombre = (string)data[filaActual, 1];
                    int creditos = 0;
                    string strCod = (string)data[filaActual, 3];
                    if ((nombre != null) && (strCod != null))
                    {
                        int codigo = Convert.ToInt32(strCod);
                        Materia m = new Materia(nombre, creditos, codigo);
                        int grupoActual = 0;
                        Grupo g = null;
                        do
                        {
                            string cadena = (string)data[filaActual, 2];
                            if (cadena != null)
                            {
                                string[] cadenas = cadena.Split(' ');
                                int numGrupo = Convert.ToInt32(cadenas[0]);
                                if (grupoActual != numGrupo)
                                {
                                    grupoActual = numGrupo;
                                    string nombreProfesor = "";
                                    for (int j = 1; j < cadenas.Length; j++)
                                        nombreProfesor += cadenas[j] + " ";
                                    nombreProfesor = nombreProfesor.TrimEnd();
                                    g = new Grupo(nombreProfesor, m, grupoActual);
                                    m.Add(g);
                                }
                                do
                                {
                                    string[] clase = ((string)data[filaActual, 4]).Split(' ');
                                    string salon = clase[3];
                                    int horaInicioInt = Convert.ToInt32(clase[1].Replace(":", ""));
                                    int horaFinInt = Convert.ToInt32(clase[2].Replace(":", ""));
                                    bool contiene = false;
                                    for (int i = 0; i < g.Clases.Count && !contiene; i++)
                                    {
                                        Clase ca = g.Clases[i];
                                        contiene = (ca.HoraInicio == horaInicioInt && ca.HoraFin == horaFinInt && ca.NumeroDia == Clase.GetDiaSubStringToInt(clase[0]));
                                    }
                                    if (!contiene)
                                        g.Add(new Clase(Clase.GetDiaSubStringToInt(clase[0]), horaInicioInt, horaFinInt, salon));
                                    filaActual++;
                                } while (filaActual <= totalFilas && (data[filaActual, 2] == null || ((string)data[filaActual, 2]) == "") && data[filaActual, 4] != null);
                                filaActual--;
                            }
                            filaActual++;
                        } while (filaActual <= totalFilas && data[filaActual, 1] == null && data[filaActual, 4] != null);
                        filaActual--;
                        carrera.Semestres[semestre - 1].Materias.Add(m);
                    }
                }
                filaActual++;
            }
        }
示例#7
0
 private bool verificar(Grupo grupo, Horario array, Dictionary<string, int> indicedGrupo)
 {
     int indice = indicedGrupo[grupo.Materia.Nombre + "" + grupo.Id];
     foreach (Grupo g in array)
     {
         if (!g.Compatibles[indice])
             return false;
     }
     return true;
 }
示例#8
0
 public void eliminarGrupo(Grupo g)
 {
     Grupos.Remove(g);
 }
示例#9
0
        private int GetNextGroupIndex(Dictionary <string, int> indicesGrupos, Horario horario)
        {
            Grupo g = horario[horario.Count() - 1];

            return(indicesGrupos[g.Materia.Nombre + "" + g.Id] + 1);
        }
示例#10
0
 public void eliminarGrupo(Grupo g)
 {
     Grupos.Remove(g);
 }
示例#11
0
        public List <Horario> GenerarHorarios(int diasLibresEsperados, bool enSemana)
        {
            if (existenMateriasRepetidas())
            {
                throw new Exception("Existen materias repetidas en la selección actual." + Environment.NewLine + "Revise las materias seleccionadas.");
            }
            if (Materias.Count > 8)
            {
                throw new Exception("Debe seleccionar máximo " + EasyHour.LIMITE_MATERIAS + " materias");
            }

            List <Horario> iniciales = horariosInicialesDeGrupos(Grupos);

            List <Horario>[] horariosPorMaterias = new List <Horario> [9];
            for (int i = 0; i < horariosPorMaterias.Length; i++)
            {
                horariosPorMaterias[i] = new List <Horario>();
            }
            foreach (Horario h in iniciales)
            {
                horariosPorMaterias[1].Add(h);
            }

            Dictionary <string, int> indicesGrupos = new Dictionary <string, int>(500);

            for (int i = 0; i < Grupos.Count; i++)
            {
                Grupo g = Grupos[i];
                g.Compatibles = new bool[Grupos.Count];
                indicesGrupos.Add(g.Materia.Nombre + "" + g.Id, i);
            }
            for (int i = 0; i < Grupos.Count; i++)
            {
                Grupo g1 = Grupos[i];
                for (int j = i; j < Grupos.Count; j++)
                {
                    Grupo g2  = Grupos[j];
                    bool  ver = g1.seCruzan(g2);
                    g1.Compatibles[j] = g2.Compatibles[i] = !ver;
                }
            }
            combinarHorarios(horariosPorMaterias, iniciales, Grupos, indicesGrupos);
            List <Horario> listaGenerados    = horariosPorMaterias[Materias.Count];
            int            horariosGenerados = listaGenerados.Count;

            if (horariosGenerados != 0)
            {
                bool a = buscarHorariosRepetidos(horariosPorMaterias);
                int  b = filtrarPorDias(listaGenerados);
                ordenarHorariosPorHoraMedia(listaGenerados);
                eliminarHorariosSinRestriccionesIdeales(listaGenerados);
                if (diasLibresEsperados != 0)
                {
                    filtrarDiasCantidadLibre(listaGenerados, diasLibresEsperados, enSemana);
                }
                int c = filtrarHoraDia(listaGenerados);
            }
            horariosPorMaterias = null;
            GC.Collect();
            return(listaGenerados);
        }
示例#12
0
        public static void leerArchivo(Excel.Worksheet hoja, Carrera carrera, int semestre)
        {
            Excel.Range range = hoja.UsedRange;

            int totalFilas = range.Rows.Count;
            var startCell  = (Range)hoja.Cells[1, 1];
            var endCell    = (Range)hoja.Cells[totalFilas, 4];
            var toGetRange = hoja.Range[startCell, endCell];

            object[,] data = toGetRange.Value2;

            int filaActual = 1;

            while (filaActual <= totalFilas)
            {
                if (data[filaActual, 1] != null)
                {
                    string nombre   = (string)data[filaActual, 1];
                    int    creditos = 0;
                    string strCod   = (string)data[filaActual, 3];
                    if ((nombre != null) && (strCod != null))
                    {
                        int     codigo      = Convert.ToInt32(strCod);
                        Materia m           = new Materia(nombre, creditos, codigo);
                        int     grupoActual = 0;
                        Grupo   g           = null;
                        do
                        {
                            string cadena = (string)data[filaActual, 2];
                            if (cadena != null)
                            {
                                string[] cadenas  = cadena.Split(' ');
                                int      numGrupo = Convert.ToInt32(cadenas[0]);
                                if (grupoActual != numGrupo)
                                {
                                    grupoActual = numGrupo;
                                    string nombreProfesor = "";
                                    for (int j = 1; j < cadenas.Length; j++)
                                    {
                                        nombreProfesor += cadenas[j] + " ";
                                    }
                                    nombreProfesor = nombreProfesor.TrimEnd();
                                    g = new Grupo(nombreProfesor, m, grupoActual);
                                    m.Add(g);
                                }
                                do
                                {
                                    string[] clase         = ((string)data[filaActual, 4]).Split(' ');
                                    string   salon         = clase[3];
                                    int      horaInicioInt = Convert.ToInt32(clase[1].Replace(":", ""));
                                    int      horaFinInt    = Convert.ToInt32(clase[2].Replace(":", ""));
                                    bool     contiene      = false;
                                    for (int i = 0; i < g.Clases.Count && !contiene; i++)
                                    {
                                        Clase ca = g.Clases[i];
                                        contiene = (ca.HoraInicio == horaInicioInt && ca.HoraFin == horaFinInt && ca.NumeroDia == Clase.GetDiaSubStringToInt(clase[0]));
                                    }
                                    if (!contiene)
                                    {
                                        g.Add(new Clase(Clase.GetDiaSubStringToInt(clase[0]), horaInicioInt, horaFinInt, salon));
                                    }
                                    filaActual++;
                                } while (filaActual <= totalFilas && (data[filaActual, 2] == null || ((string)data[filaActual, 2]) == "") && data[filaActual, 4] != null);
                                filaActual--;
                            }
                            filaActual++;
                        } while (filaActual <= totalFilas && data[filaActual, 1] == null && data[filaActual, 4] != null);
                        filaActual--;
                        carrera.Semestres[semestre - 1].Materias.Add(m);
                    }
                }
                filaActual++;
            }
        }
示例#13
0
 public static string reporteClase(Grupo g, Clase c)
 {
     return("Gr-" + g.Id + Environment.NewLine + g.Materia.Nombre.Trim() + Environment.NewLine + "Prof: " + g.NombreCortoProfesor + Environment.NewLine + c.HoraInicio + "-" + c.HoraFin);
 }