Пример #1
0
        void mostrarEstatisticas(Estatistica estatistica, List <EstatisticaComb> estatisticaPorGuiches)
        {
            /*
             * MessageBox.Show("tempoTotalUsuarios: " + estatistica.tempoTotalUsuarios + "\n" +
             *                          "quantidadeUsuarios: " + estatistica.quantidadeUsuarios + "\n" +
             *                          "médiaTempoTotalUsuarios " + estatistica.tempoTotalUsuarios / estatistica.quantidadeUsuarios);
             *
             *
             * MessageBox.Show("usuarioMaiorTempo: " + estatistica.usuarioMaiorTempo + "\n" +
             *              "maiorTempo: " + estatistica.maiorTempo);
             *
             * int k = 0;
             * for (int i = 0; i < estatistica.guicheTempoFila.Length; i++)
             * {
             *  MessageBox.Show("tempofilamedio da fila do guiche " + (guiches[k].guiche) + " : " + estatistica.guicheTempoFila[i] / estatistica.quantidadePessoasFila[i]);
             *  k += guiches[k].guichesIguais;
             * }
             * for(int i = 0; i<estatisticaPorGuiches.Count; i++)
             *  MessageBox.Show("Tempo médio da combinação "+estatisticaPorGuiches[i].combinacao+": "+estatisticaPorGuiches[i].quantidadeTurnos / estatisticaPorGuiches[i].quantidadePessoas);
             * //Mostrando estatísticas por combinação de guiche
             * //foreach()
             */
            Estatisticas janelaEstatistica = new Estatisticas(estatistica, estatisticaPorGuiches, guiches);

            janelaEstatistica.ShowDialog();
        }
Пример #2
0
        void atualizarFilas(GuichesSetup[] guiches, Queue <Pessoas>[] fila, Estatistica estatistica, int turno)
        {
            for (int j = 0; j < guiches.Length; j++)
            {
                for (int k = 0; k < guiches[j].guichesIguais; k++)
                {
                    if (guiches[j + k].atendente == true && guiches[j + k].vazio == true && fila[j].Count != 0)
                    {
                        entrarGuiches(fila[j].Dequeue(), guiches[j + k]);


                        estatistica.guicheTempoFila[guiches[j + k].guiche - 'A'] += turno - guiches[j + k].pessoaDentro.entradaFila;
                        estatistica.quantidadePessoasFila[guiches[j + k].guiche - 'A']++;
                    }
                }
                j += guiches[j].guichesIguais - 1;
            }
        }
Пример #3
0
        void processo(Queue <Pessoas>[] fila, String pathFila, GuichesSetup[] guiches, double tempo)
        {
            int turno = 1;

            int guichesDiferentes = GuichesSetup.getGuichesDiferentes(guiches);

            List <EstatisticaComb> estatisticaPorGuiches = new List <EstatisticaComb>();
            Estatistica            estatistica           = new Estatistica(guichesDiferentes);


            GuichesSetup.resetGuiches(guiches, atendentesIniciais);

            System.IO.StreamReader arquivo = new System.IO.StreamReader(pathFila); //carrega a fila
            String linha = arquivo.ReadLine();                                     //inicializa lendo a linha

            linha += ';';                                                          //já adiciona o . no final da linha

            Boolean continuar = true;


            //esse laço vai até entrar todas as pessoas nas filas
            while (continuar)
            {
                //lê as pessoas da fila e joga elas na fila do guiche A
                lerFila(fila[0], turno, ref linha, arquivo, ref continuar);

                //essa função atualiza se o tempo de troca de um atendente que vai de um guiche a outro já passou
                atualizarTempoTroca(guiches);

                //jogando as primeiras pessoas das filas nos guiches
                atualizarFilas(guiches, fila, estatistica, turno);

                //atualizando os guiches e jogando as pessoas pras respectivas filas
                atualizarGuiches(guiches, fila, estatistica, estatisticaPorGuiches, turno);

                //Verificando se vale a pena fazer trocas
                if (troca != 0)
                {
                    realizarTrocas(guiches, fila);
                }

                //jogando as primeiras pessoas das filas nos guiches
                atualizarFilas(guiches, fila, estatistica, turno);

                //atualizando as barras de progresso
                atualizarBarrasProgresso();

                //atualizando a cor dos botões
                atualizarCorBotoes(guiches);

                //Atualizando o label que conta os turnos
                textoTurno.Text = "Turno: " + turno;

                Application.DoEvents();

                turno = contarTurnos(tempo, turno);
            }

            //Atualizando o label que conta os turnos
            textoTurno.Text = "Turno: " + turno;

            for (int k = 0; k < textoFila.Length; k++)
            {
                if (textoFila[k] != null)
                {
                    textoFila[k].Text = "" + fila[k].Count;
                }
            }

            // Refresh();

            //esse laço vai até esvaziar todos os guiches, assim, terminando
            continuar = true;
            while (continuar)
            {
                //essa função atualiza se o tempo de troca de um atendente que vai de um guiche a outro já passou
                atualizarTempoTroca(guiches);

                //jogando as primeiras pessoas das filas nos guiches
                atualizarFilas(guiches, fila, estatistica, turno);

                //atualizando os guiches e jogando as pessoas pras respectivas filas
                atualizarGuiches(guiches, fila, estatistica, estatisticaPorGuiches, turno);

                //Verificando se vale a pena fazer trocas
                if (troca != 0)
                {
                    realizarTrocas(guiches, fila);
                }

                //jogando as primeiras pessoas das filas nos guiches
                atualizarFilas(guiches, fila, estatistica, turno);

                //atualizando as barras de progresso
                atualizarBarrasProgresso();

                //atualizando a cor dos botões
                atualizarCorBotoes(guiches);

                //testando se todos os guiches estão vazios, se algum não estiver vazio, então continuar se torna verdade
                continuar = false;
                for (int j = 0; j < guiches.Length; j++)
                {
                    if (guiches[j].vazio == false)
                    {
                        continuar = true;
                    }
                }


                if (continuar == false && troca != 0)
                {
                    continuar = condicaoEspecial(guiches, fila);
                }

                //Atualizando o label que conta os turnos
                textoTurno.Text = "Turno: " + turno;
                textoTurno.Refresh();
                // Refresh();

                Application.DoEvents();

                turno = contarTurnos(tempo, turno);
            }
            MessageBox.Show("Turno terminado: " + (turno - 1));
            mostrarEstatisticas(estatistica, estatisticaPorGuiches);
        }
Пример #4
0
        void atualizarGuiches(GuichesSetup[] guiches, Queue <Pessoas>[] fila, Estatistica estatistica, List <EstatisticaComb> estatisticaPorGuiches, int turno)
        {
            int  quantidadeGuiches = guiches.Length;
            char proximoGuiche;

            for (int i = 0; i < guiches.Length; i++)
            {
                if (guiches[i].vazio == false && guiches[i].ultimoTurno < guiches[i].turnosNecessarios)
                {
                    guiches[i].ultimoTurno++;
                }
                else if (guiches[i].vazio == false && guiches[i].ultimoTurno >= guiches[i].turnosNecessarios)
                {
                    guiches[i].vazio       = true;
                    guiches[i].ultimoTurno = 1;
                    guiches[i].pessoaDentro.atualGuiche++;

                    //testando se a pessoa ainda tem guiches pra ir, se não, ela cai no esquecimento e segue o jogo
                    if (guiches[i].pessoaDentro.atualGuiche >= guiches[i].pessoaDentro.guiches.Length)
                    {
                        estatistica.tempoTotalUsuarios += turno - guiches[i].pessoaDentro.chegada;
                        estatistica.quantidadeUsuarios++;

                        //testando se é o maior tempo dentre os usuários
                        if (turno - guiches[i].pessoaDentro.chegada > estatistica.maiorTempo)
                        {
                            estatistica.usuarioMaiorTempo = guiches[i].pessoaDentro.usuario;
                            estatistica.maiorTempo        = turno - guiches[i].pessoaDentro.chegada;
                        }
                        //adicionando a estatistica por combinação
                        EstatisticaComb estatisticaComb = new EstatisticaComb();

                        estatisticaComb.setEstatisticaComb(guiches[i].pessoaDentro.guiches, turno - guiches[i].pessoaDentro.chegada, 1);

                        string          aux       = new string(guiches[i].pessoaDentro.guiches);
                        EstatisticaComb resultado = estatisticaPorGuiches.Find(x => x.combinacao == aux);

                        if (resultado != null)
                        {
                            resultado.quantidadePessoas++;
                            resultado.quantidadeTurnos += turno - guiches[i].pessoaDentro.chegada;
                        }
                        else
                        {
                            estatisticaPorGuiches.Add(estatisticaComb);
                        }

                        return;
                    }
                    //verificando o proximo guiche que ela tem que ir
                    proximoGuiche = guiches[i].pessoaDentro.guiches[guiches[i].pessoaDentro.atualGuiche];

                    //achando o guiche que a pessoa tem de ir
                    int j = 0;
                    while (guiches[j].guiche != proximoGuiche)
                    {
                        j++;
                    }

                    //enviando a pessoa para a fila
                    fila[j].Enqueue(guiches[i].pessoaDentro);
                    guiches[i].pessoaDentro.entradaFila = turno;
                }
            }
        }
        public Estatisticas(Estatistica estatistica, List <EstatisticaComb> estatisticaPorGuiches, GuichesSetup[] guiches)
        {
            //InitializeComponent();
            ClientSize           = new System.Drawing.Size(370, 700);
            StartPosition        = FormStartPosition.CenterScreen;
            this.AutoScroll      = true;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

            //estatisticas de tempo médio
            Label textoMedioTotal = new Label();


            textoMedioTotal.AutoSize = true;
            textoMedioTotal.Font     = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            textoMedioTotal.Location = new System.Drawing.Point(10, 10);
            textoMedioTotal.Text     = "Tempo médio entre usuarios: " + estatistica.tempoTotalUsuarios / estatistica.quantidadeUsuarios;

            Controls.Add(textoMedioTotal);

            //estatisticas de maior usuario
            Label textoUsuarioMaior = new Label();

            textoUsuarioMaior.Font     = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            textoUsuarioMaior.AutoSize = true;
            textoUsuarioMaior.Location = new System.Drawing.Point(10, 50);
            textoUsuarioMaior.Text     = "Maior tempo entre usuarios: " + estatistica.maiorTempo + "\n" + "Usuario com maior tempo: " + estatistica.usuarioMaiorTempo;

            Controls.Add(textoUsuarioMaior);

            Label[] textoMediaFila = new Label[estatistica.guicheTempoFila.Length];

            //estatisticas por tempo
            int k      = 0;
            int espaco = 0;

            for (int i = 0; i < estatistica.guicheTempoFila.Length; i++)
            {
                textoMediaFila[i]          = new Label();
                textoMediaFila[i].Font     = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                textoMediaFila[i].AutoSize = true;
                textoMediaFila[i].Location = new System.Drawing.Point(10, 120 + i * 20);
                textoMediaFila[i].Text     = " ";
                textoMediaFila[i].Text     = "Tempo médio da fila do guiche " + (guiches[k].guiche) + " : " + Math.Round(estatistica.guicheTempoFila[i] / estatistica.quantidadePessoasFila[i], 2);
                k += guiches[k].guichesIguais;

                Controls.Add(textoMediaFila[i]);
                espaco = (i * 50);
            }
            //estatisticas por combinação
            Label[] textoMediaComb = new Label[estatisticaPorGuiches.Count];

            for (int i = 0; i < estatisticaPorGuiches.Count; i++)
            {
                textoMediaComb[i]          = new Label();
                textoMediaComb[i].Font     = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                textoMediaComb[i].AutoSize = true;
                textoMediaComb[i].Location = new System.Drawing.Point(10, espaco + i * 20);
                textoMediaComb[i].Text     = " ";
                textoMediaComb[i].Text     = "Tempo médio da combinação " + estatisticaPorGuiches[i].combinacao + ": " + estatisticaPorGuiches[i].quantidadeTurnos / estatisticaPorGuiches[i].quantidadePessoas;

                Controls.Add(textoMediaComb[i]);
            }
        }