Simulador Fila Banco

Ola, eu estou com uma dificuldade em um simulador de fila de banco, são dois painéis um onde o cliente pega a senha e o outro onde o funcionário disponibiliza seu caixa pra fazer a chamada, e funciona da seguinte forma, são três botões no painel do cliente (Comum, Rápido, Prioritário) e o cliente recebe a senha de acordo com o seu tipo, numa situação onde 5 clientes pegam a senha na respectiva ordem Prioritário, Rápido, Rápido, Comum e Prioritário a senhas seriam P-1 R-2 R-3 C-4 P-5, o quadro fica da seguinte maneira

a logica que eu usei para o cliente foi a seguinte:

    private void BtnCActionPerformed(java.awt.event.ActionEvent evt) {                                     
 i++;
 TpSenha[i] = ("C-");
 NroSenha[i] = i;
 Senha[i] = TpSenha[i] + NroSenha[i];
 jLSenhaf.setText(Senha[i]);
}                                    


private void BtnRActionPerformed(java.awt.event.ActionEvent evt) {                                     
 i++;
 TpSenha[i] = ("R-");
 NroSenha[i] = i;
 Senha[i] = TpSenha[i] + NroSenha[i];
 jLSenhaf.setText(Senha[i]);
}                                    

private void BtnPActionPerformed(java.awt.event.ActionEvent evt) {                                     
 i++;
 TpSenha[i] = ("P-");
 NroSenha[i] = i;
 Senha[i] = TpSenha[i] + NroSenha[i];
 jLSenhaf.setText(Senha[i]);
}                           

a logica do funcionário deveria ser a seguinte

Caixa 1: realiza os atendimentos preferenciais. Se não houver atendimentos preferenciais na fila, atende o próximo (rápido ou comum).

– Caixas 2 e 3: atendem primeiro as senhas de atendimento rápido. Se não houver atendimento rápido, atendem o próximo da fila (prioritário ou comum).

– Caixa 4: realiza os atendimentos comum. Se não houver atendimentos comuns na fila, atende o próximo (rápido ou prioritário).

eu to tentando fazer a logica da seguinte maneira

 private void BtnCx1ActionPerformed(java.awt.event.ActionEvent evt) {                                       
for (k=0;k<100;k++){
    if(TpSenha[k].equals("P-")){
        jLSenha.setText(Senha[k]);
        k = 101;
    }
}

       for (k=0;k<100;k++){
    if(TpSenha[k].equals("C-")||TpSenha[k].equals("R-") ){
        jLSenha.setText(Senha[k]);
        k = 101;
    }
}
  
    
}     

mas ele continua dando erro, alguém pode me explicar por favor o motivo? eu preciso entregar isso urgentemente e não tenho mais caminho por onde ir; não sei onde ta o erro na logica, já fiz e refiz o código três vezes e nada funciona

Você está implementando a lógica na sua própria tela?

Eu implementei esse sistema da seguinte forma:
Encapsulei toda a lógica dentro de um pacote model com as seguintes classes:

  • Um enum Atendimento, com os três tipos de atendimento: COMUM, PREFERENCIAL e RAPIDO;

  • Uma classe Senha, que recebe um Atendimento como parâmetro e que possui um atributo numero, que é inicializado no construtor através de sequenciador estático.

  • Uma classe Fila, que encapsula uma lista de Senha e possui um método para gerar uma nova Senha a partir do Atendimento informado e outro método para chamar uma senhas de acordo com o Atendimento informado.

  • Uma super classe abstrata Caixa, responsável por retirar as Senhas da Fila, essa classe possui três especializações, uma para atendimento Preferencial, outra pra atendimento Rápido e outra pra atendimento Comum, cada especialização tem seu próprio algoritmo para chamar o próximo da fila.

  • Uma classe Controle, responsável por manipular a Fila, os Caixas e as Senhas, ela também define os métodos que realizam as operações chamadas pelos botões da interface de usuário.

Desenvolvi a tela do sistema num pacote view com as seguintes classes:

  • JanelaPrincipal, como nome sugere, é a janela principal do sistema.

  • PainelClientes, definindo o painel de botões utilizado pelos clientes.

  • PainelCaixas, definindo o painel de botões utilizado pelos caixas.

Print Screen da tela:

exemplo

Que confuso, hein? Eu simplifiquei, no construtor do PainelCaixas eu inicializo os botões e registro o método pra tratar o evento:

JButton buttonCaixa1 = new JButton("Caixa 1");
buttonCaixa1.addActionListener(event -> clicouBotaoCaixa1());

JButton buttonCaixa2 = new JButton("Caixa 2");
buttonCaixa2.addActionListener(event -> clicouBotaoCaixa2());

JButton buttonCaixa3 = new JButton("Caixa 3");
buttonCaixa3.addActionListener(event -> clicouBotaoCaixa3());

JButton buttonCaixa4 = new JButton("Caixa 4");
buttonCaixa4.addActionListener(event -> clicouBotaoCaixa4());

E assim ficou a implementação dos métodos propriamente ditos:

private void clicouBotaoCaixa1() {
    controle.chamarCaixa1();
}

private void clicouBotaoCaixa2() {
    controle.chamarCaixa2();
}

private void clicouBotaoCaixa3() {
    controle.chamarCaixa3();
}

private void clicouBotaoCaixa4() {
    controle.chamarCaixa4();
}

Graças à magia do polimorfismo, eu não preciso me preocupar com a lógica na interface de usuário, eu sei que o Controle vai chamar o método do Caixa pra chamar a próxima Senha da Fila.

A classe Caixa define este método:

public abstract Senha chamarProximo(Fila fila);

Aí cada subclasse implementa seguindo suas regras específicas, veja:

Caixa de atendimento comum:

public class CaixaComum extends Caixa {

    @Override
    public Senha chamarProximo(Fila fila) {
        Senha senha = fila.chamarSenha(Atendimento.COMUM);
        if (senha != null) {
            return senha;
        }
        senha = fila.chamarSenha(Atendimento.RAPIDO);
        if (senha != null) {
            return senha;
        }
        return fila.chamarSenha(Atendimento.PREFERENCIAL);
    }
}

Caixa de atendimento rápido:

public class CaixaRapido extends Caixa {

    @Override
    public Senha chamarProximo(Fila fila) {
        Senha senha = fila.chamarSenha(Atendimento.RAPIDO);
        if (senha != null) {
            return senha;
        }
        senha = fila.chamarSenha(Atendimento.PREFERENCIAL);
        if (senha != null)
            return senha;
        }
        return fila.chamarSenha(Atendimento.COMUM);
    }
}

Caixa de atendimento preferencial:

public class CaixaPreferencial extends Caixa {

    @Override
    public Senha chamarProximo(Fila fila) {
        Senha senha = fila.chamarSenha(Atendimento.PREFERENCIAL);
        if (senha != null) {
            return senha;
        }
        senha = fila.chamarSenha(Atendimento.RAPIDO);
        if (senha != null) {
            return senha;
        }
        return fila.chamarSenha(Atendimento.COMUM);
    }
}

O método chamarSenha da classe Fila, implementei dessa forma:

public Senha chamarSenha(Atendimento tipo) {
    for (int i = 0; i < senhas.size(); i++) {
        if (senhas.get(i).getAtendimento().equals(tipo)) {
            return senhas.remove(i);
        }
    }
    return null;
}

Uma pergunta sobre o arquivo Html estou tentando fazer so que nao estou conseguindo poderia me dar uma dica de como faço?

Rapaz, esse tópico tem uns 9 meses e não tem nada de html. Recomendo que tu crie um tópico novo com sua dúvida bem detalhada. Vlws!

1 curtida