Exemple #1
0
        private Grafo GerarGrafoBase(List <Vertice> vertices, out List <Aula> aulasSemHorario)
        {
            aulasSemHorario = new List <Aula>();
            List <Aula> aulasVazias = new List <Aula>();

            if (vertices == null)
            {
                return(new Grafo());
            }
            Grafo            grafo = new Grafo();
            List <DiaSemana> dias  = this.GerarDiasDaSemana();
            List <Aula>      aulas = new List <Aula>();
            DiaSemana        diaDisponivel;
            Aresta           aresta;
            Vertice          verticeDia;
            Vertice          verticeAula;
            int totalDiasRestantes = 0;

            this.AdicionarVerticesEmVerticeEListas(grafo, dias, aulas, vertices);
            grafo.AddVertice(Vertice.ConverterParaVertice(new List <IDado>(dias)));
            totalDiasRestantes = this.GetTotalDiasRestantesAulas(aulas);

            while (totalDiasRestantes > 0)
            {
                aulas.ForEach(aula =>
                {
                    if (aula.GetAulasPorSemanaRestante() > 0)
                    {
                        diaDisponivel = this.GetDiaDisponivelParaMateria(aula, dias);
                        if (diaDisponivel != null)
                        {
                            verticeDia  = grafo.GetVertice(diaDisponivel);
                            verticeAula = grafo.GetVertice(aula);

                            aresta = new Aresta(verticeDia, verticeAula, 0);

                            verticeDia.AddAresta(aresta);
                            verticeAula.AddAresta(aresta);
                            ((DiaSemana)verticeDia.GetDado()).AdicionarAula((Aula)verticeAula.GetDado());
                            aula.SetAulaAlocada(true);
                        }
                    }
                    else if (!aula.GetAulaAlocada())
                    {
                        aulasVazias.Add(aula);
                    }
                    aula.DiminuirAulasPorSemanasRestante();
                });
                totalDiasRestantes = this.GetTotalDiasRestantesAulas(aulas);
            }
            aulasSemHorario = aulasVazias;
            return(grafo);
        }
Exemple #2
0
        /// <summary>
        /// Lê o arquivo com as informações das aulas, gera o grafo e exibe ele na tela
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGerarGrafo_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();

            if (openFile.ShowDialog() == DialogResult.OK)
            {
                FileInfo info = new FileInfo(openFile.FileName);
                txtFilePath.Text = info.FullName;

                try
                {
                    List <string> arquivo = LeitorArquivo.Ler(info.FullName);
                    this.LimparValoresTela();

                    List <Aula> aulas = this.aulaService.CriarListaDeAulas(arquivo);
                    this.lblTotalAulasArquivo.Text = "Total Aulas arquivo: " + this.CalcularTotalAulasArquivo(aulas);
                    List <IDado> dadosAula = new List <IDado>();

                    dadosAula.AddRange(aulas);
                    List <string> grafo = this.grafoService.GerarHorariosFormatados(Vertice.ConverterParaVertice(dadosAula), out this.aulasSemHorario);
                    this.groupFiltro.Enabled = true;
                    this.InserirResultadosNaTabela(grafo);
                    this.InserirListasNoComboBox();
                    this.PreencherValoresLabel(grafo.Count);
                }
                catch (Exception error)
                {
                    MessageBox.Show("Houve um problema na leitura do arquivo. Erro retornado: " + error.Message,
                                    "Falha leitura arquivo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (this.aulasSemHorario.Count > 0)
                {
                    DialogResult resultado = MessageBox.Show("Existem aulas que não foram encaixadas em um horário. Deseja ve-las agora ?",
                                                             "Aulas", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (resultado == DialogResult.Yes)
                    {
                        this.btnMateriasSemHorario.Visible = true;
                        this.formMateriasSemAula           = new FormMateriasSemAula(this.aulasSemHorario);
                        this.formMateriasSemAula.ShowDialog();
                    }
                }
            }
        }