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(); }
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; } }
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); }
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]); } }