public void gerarGradeAleatoria() { _valor = 0; //Percorrendo todas as turmas disponíveis foreach (DAO.Curso curso in cursos) { foreach (DAO.Periodo periodo in curso.periodos) { foreach (DAO.Turma turma in periodo.turmas) { Sorteio.Disciplinas disciplinasPorPeriodo = new Sorteio.Disciplinas(periodo.disciplinas, disciplinas.disciplinas); List <Sorteio.Disciplina> disciplinasTentadas = new List <Sorteio.Disciplina>(); while (!disciplinasPorPeriodo.todasJaSorteadas) { Sorteio.Disciplina disciplinaSorteada = disciplinasPorPeriodo.sortear(); if (disciplinaSorteada == null) { break; } DAO.HorarioTurma horario = null; DAO.Professor professor = null; if (!sortearHorario(disciplinaSorteada, turma, disciplinasTentadas, ref horario, ref professor)) { continue; } if (horario != null) { horario.disciplina = disciplinaSorteada.disciplina; horario.professor = professor; disciplinaSorteada.cargaHorariaRestante -= (horario.horario.horaFinal - horario.horario.horaInicial); } else { if ((from x in disciplinasTentadas where x == disciplinaSorteada select x).Count() >= 15) { disciplinaSorteada.cargaHorariaRestante = new DateTime(); continue; } else { disciplinasTentadas.Add(disciplinaSorteada); } } } } } } }
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); }