Ejemplo n.º 1
0
        public Horario(DAO.Turma turma)
        {
            this.turma    = turma;
            this.horarios = new List <DAO.HorarioTurma>();
            List <DAO.HorarioTurma> horariosFimDeSemana = new List <DAO.HorarioTurma>();

            foreach (var dia in turma.dias)
            {
                foreach (DAO.HorarioTurma horario in dia.horarios)
                {
                    if (horario.disciplina == null)
                    {
                        if (dia.diaSemana == DAO.DiaSemana.Domingo || dia.diaSemana == DAO.DiaSemana.Sabado)
                        {
                            horariosFimDeSemana.Add(horario);
                        }
                        else
                        {
                            horarios.Add(horario);
                        }
                    }
                }
            }

            if (horarios.Count == 0)
            {
                horarios = horariosFimDeSemana;
            }
        }
Ejemplo n.º 2
0
        private void crossoverTurma(DAO.Turma turmaResult, DAO.Turma turmaOther)
        {
            int ini = 0, fim = 6;

            if (diaVazio(turmaResult.getDia(DAO.DiaSemana.Domingo)) && diaVazio(turmaOther.getDia(DAO.DiaSemana.Domingo)))
            {
                ini = 1;
            }
            if (diaVazio(turmaResult.getDia(DAO.DiaSemana.Sabado)) && diaVazio(turmaOther.getDia(DAO.DiaSemana.Sabado)))
            {
                fim = 5;
            }

            int diaSemana1 = Sorteio.Random.Next(ini, fim);

            DAO.Dia diaResult = turmaResult.getDia((DAO.DiaSemana)diaSemana1);
            DAO.Dia diaOther  = turmaOther.getDia((DAO.DiaSemana)diaSemana1);

            int horario = Sorteio.Random.Next(0, diaResult.horarios.Count - 1);

            List <DAO.HorarioTurma> horariosTrocaEquivalente = new List <DAO.HorarioTurma>();

            foreach (DAO.Dia item in turmaResult.dias)
            {
                foreach (DAO.HorarioTurma horarioTurma in item.horarios)
                {
                    if ((horarioTurma.disciplina == null && diaOther.horarios[horario].disciplina == null) ||
                        (horarioTurma.disciplina != null && diaOther.horarios[horario].disciplina != null &&
                         horarioTurma.disciplina.id == diaOther.horarios[horario].disciplina.id))
                    {
                        if ((ini == 1 && horarioTurma.dia.diaSemana == DAO.DiaSemana.Sabado) || (fim == 5 && horarioTurma.dia.diaSemana == DAO.DiaSemana.Domingo))
                        {
                            continue;
                        }
                        horariosTrocaEquivalente.Add(horarioTurma);
                    }
                }
            }

            if (horariosTrocaEquivalente.Count == 0)
            {
                return;
            }

            int horarioTrocEquivalente = Sorteio.Random.Next(0, horariosTrocaEquivalente.Count - 1);

            horariosTrocaEquivalente[horarioTrocEquivalente].professor  = diaResult.horarios[horario].professor;
            horariosTrocaEquivalente[horarioTrocEquivalente].disciplina = diaResult.horarios[horario].disciplina;

            diaResult.horarios[horario].professor  = diaOther.horarios[horario].professor;
            diaResult.horarios[horario].disciplina = diaOther.horarios[horario].disciplina;
        }
Ejemplo n.º 3
0
        private bool sortearHorario(Sorteio.Disciplina disciplinaSorteada, DAO.Turma turma, List <Sorteio.Disciplina> disciplinasTentadas, ref DAO.HorarioTurma horario, ref DAO.Professor professor)
        {
            Sorteio.Professores sortProf = new Sorteio.Professores(disciplinaSorteada, turma.turno);
            professor = sortProf.sortear();

            if (professor == null)
            {
                sortProf  = new Sorteio.Professores(disciplinaSorteada);
                professor = sortProf.sortear();
            }

            Sorteio.Horario sortHorario = null;
            horario = null;

            if (professor != null)
            {
                sortHorario = new Sorteio.Horario(professor, turma);
                horario     = sortHorario.sortear();

                if (horario == null)
                {
                    sortHorario = new Sorteio.Horario(turma);
                    horario     = sortHorario.sortear();
                }
            }
            else
            {
                if ((from x in disciplinasTentadas where x == disciplinaSorteada select x).Count() >= 15)
                {
                    disciplinaSorteada.cargaHorariaRestante = new DateTime();
                    return(false);
                }
                else
                {
                    disciplinasTentadas.Add(disciplinaSorteada);
                }
            }

            return(true);
        }
Ejemplo n.º 4
0
        public Horario(DAO.Professor professor, DAO.Turma turma)
        {
            this.turma    = turma;
            this.horarios = new List <DAO.HorarioTurma>();

            foreach (DAO.PreferenciaDiaTurno prefDiaTurno in professor.prefDiaTurno)
            {
                if (prefDiaTurno.valor == 0 || prefDiaTurno.turno.id != turma.turno.id)
                {
                    continue;
                }

                DAO.Dia dia = turma.getDia(prefDiaTurno.diaSemana);

                foreach (DAO.HorarioTurma horario in dia.horarios)
                {
                    if (horario.disciplina == null)
                    {
                        horarios.Add(horario);
                    }
                }
            }
        }