Domanda Raga potete aiutarmi?

Stato
Discussione chiusa ad ulteriori risposte.

Stefanokj

Utente Bronze
13 Maggio 2015
5
1
0
34
Ciao ragazzi!
Sono davvero in difficoltà per la realizzazione di un programma in java.
Praticamente dovrei creare un programma che gestisca un pronto soccorso.
I pazienti del pronto soccorso sono divisi in tre categorie: urgenti (colore rosso), normali (colore giallo), poco urgenti (colore bianco).

Ogni volta che entra un nuovo paziente viene "analizzata" l'urgenza: se è rosso supera tutti i bianchi e i gialli e si pone di seguito all'ultimo rosso; se è giallo supera solo i bianchi ecc.

Di ogni paziente è salvato il nome, cognome e codice.

Tutto questo deve essere gestito da un programma visuale che abbia diversi pulsanti: quello di andare nella prima posizione del vettore, due pulsanti che permettono di scorrere nel vettore e di visualizzare le info dei pazienti (questi due pulsanti incrementano e decrementano la variabile del vettore), il pulsante "visita" che rimuove il paziente (e fa scalare gli altri), i due pulsanti salva e carica (si salva in un file .bin) ed infine il pulsante nuovo che crea un altro paziente.


Ho creato a grandi linee la parte grafica:
Codice:
import java.io.*;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
import javax.swing.*;


class Form5
{  private static TextField  Tnumpaz= new TextField(30);
   private static TextField  Tnompaz= new TextField(30);
   private static TextField  Tcogpaz= new TextField(30);
   private static TextField  Tcodpaz= new TextField(30);
   private static TextField  Tnumtot= new TextField(30);
   private static Frame fr = new Frame("Pronto soccorso");
   private static Panel Pan = new Panel();   //pannello globale
   private static Label Lnumpaz = new Label("Numero paziente");
   private static Label Lnompaz = new Label("Nome paziente");
   private static Label Lcogpaz = new Label("Cognome paziente");
   private static Label Lcodpaz = new Label("Codice paziente");
   private static Label Lnumtot = new Label("Numero totale");
   private static GridLayout G0 = new GridLayout (8,5); //griglia 1x1
   private static ImageIcon    ICprimo  = new ImageIcon("primo.png");
   private static JButton Bprimo = new JButton("Primo",ICprimo);
   private static ImageIcon    ICSu  = new ImageIcon("su.png");
   private static JButton BSu  = new JButton(ICSu);
   private static ImageIcon    ICGiu  = new ImageIcon("giu.png");
   private static JButton BGiu = new JButton(ICGiu);
   private static ImageIcon    ICvisita  = new ImageIcon("visita.png");
   private static JButton Bvisita = new JButton("Visita",ICvisita);
   private static ImageIcon    ICnuovo  = new ImageIcon("new.png");
   private static JButton Bnuovo = new JButton("Nuovo",ICnuovo);
   private static ImageIcon    ICsalva  = new ImageIcon("save.png");
   private static JButton Bsalva = new JButton("Salva",ICsalva);

/*public void mouseEntered(MouseEvent e) {
Object obj = e.getSource();
if (obj == button) {
button.setBorder(BorderFactory.createEtchedBorder( ));
}
}
*/
  

/*   public static ActionListener operazioni = new ActionListener () {
       public void mouseExited(MouseEvent e) {
         String nome = e.getSource();
         if(nome=="Salva")
            System.out.println("transito");
     /*Object obj = e.getSource();
     if (obj == button) {
     button.setBorder(null);*/

   // }
     Bsalva.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
       
       
        }       
     }
  };
  public static void main(String[] arg){

    Bprimo.setBackground(Color.LIGHT_GRAY);
    BSu.setBackground(Color.LIGHT_GRAY);
    BGiu.setBackground(Color.LIGHT_GRAY);
    Bvisita.setBackground(Color.LIGHT_GRAY);
    Bnuovo.setBackground(Color.LIGHT_GRAY);
    Bsalva.setBackground(Color.LIGHT_GRAY);

    Pan.setLayout(G0);
    Pan.add(Lnumpaz);
    Pan.add(Tnumpaz);
    Pan.add(Lnompaz);
    Pan.add(Tnompaz);
    Pan.add(Lcogpaz);
    Pan.add(Tcogpaz);
    Pan.add(Lcodpaz);
    Pan.add(Tcodpaz);
    Pan.add(Lnumtot);
    Pan.add(Tnumtot);

    Bprimo.addActionListener(operazioni);
    BSu.addActionListener(operazioni);
    BGiu.addActionListener(operazioni);
    Bvisita.addActionListener(operazioni);
    Bnuovo.addActionListener(operazioni);
    Bsalva.addActionListener(operazioni);

    Pan.add(Bprimo);
    Pan.add(BSu);
    Pan.add(BGiu);
    Pan.add(Bvisita);
    Pan.add(Bnuovo);
    Pan.add(Bsalva);

    fr.addWindowListener(new GestoreFinestre());
    fr.setLocation(0,0);
    fr.setSize(270,380);
    fr.add(Pan);
    fr.setVisible(true);

  }

}

(non fate caso al segmento di codice da 32 a 47...stavo provando una cosa)

e praticamente dovrei unirla con questo:
Codice:
package prontosoccorso;

import java.io.*;
import java.util.Vector;

/**
*
* @author concas_em-cantarelli
*/
public class ProntoSoccorso {

   private Vector pazienti = new Vector(0);
  
   int rossi = 0,gialli = 0,bianchi = 0;
   
    public void addPaziente(String nominativo, char priorita){
        paziente paz = new paziente(nominativo, priorita);

        if(priorita == 'R'){
            pazienti.insertElementAt(paz, rossi);
            rossi++;
        }else if(priorita == 'G'){
            pazienti.insertElementAt(paz, rossi+gialli);
            gialli++;
        }else if(priorita == 'B'){
            pazienti.insertElementAt(paz, rossi+gialli+bianchi);
            bianchi++;
        }  
    }
   
    public paziente recuperoNominativoMaxUrgenza(){
        paziente paz = (paziente)pazienti.elementAt(0);
        if(paz.getPriorita() == 'R'){
            rossi--;
        }else if(paz.getPriorita() == 'G'){
            gialli--;
        }else if(paz.getPriorita() == 'B'){
            bianchi--;
        }
        pazienti.removeElementAt(0);
        return paz;
    }
   
    public void numPazienti(){
        System.out.println(rossi + " " + gialli + " " + bianchi);
    }
   
    public void eliminaPaziente(String nominativo){
        for(int i = 0; i < pazienti.size(); i++){
            paziente paz = (paziente)pazienti.elementAt(i);
            if(paz.getNominativo() == nominativo){
                pazienti.removeElementAt(i);
                break;
            }
        }
    }
   
    public void vediLista(){
        for(int i = 0; i < pazienti.size(); i++){
            System.out.println(pazienti.elementAt(i).toString());
        }
    }
   
    public void salva() throws java.io.IOException{
        ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("pazienti.bin"));
        stream.writeObject(pazienti);
        stream.writeObject(rossi);
        stream.writeObject(gialli);
        stream.writeObject(bianchi);
        stream.close();
    }
   
    public void carica() throws java.io.IOException{
        ObjectInputStream stream = new ObjectInputStream(new FileInputStream("pazienti.bin"));
        try{
            pazienti = (Vector)stream.readObject();
            rossi = (int)stream.readObject();
            gialli = (int)stream.readObject();
            bianchi = (int)stream.readObject();
        }
        catch(Exception ex){
           
        }
       
        stream.close();
    }
   
    public static void main(String[] args) throws java.io.IOException{
        int opz = 0;
       
           
        InputStreamReader input = new InputStreamReader(System.in);
        BufferedReader Tastiera = new BufferedReader(input);
   
       
        ProntoSoccorso osp = new ProntoSoccorso();
       
        while(opz != 8){           
            System.out.println("1) Inserisci");
            System.out.println("2) Recupero urgenza massima");
            System.out.println("3) Numero Pazienti");
            System.out.println("4) Elimina Paziente");
            System.out.println("5) Visualizza");
            System.out.println("6) Salva");
            System.out.println("7) Carica");
            System.out.println("8) Esci");
           
            try{
                opz = Integer.parseInt(Tastiera.readLine());
            }
            catch(IOException exception) {
                System.out.print("Errore lettura intero");
            }
           
           
            switch(opz){
                case 1:
                    String nome;
                    char priorita;
                    System.out.println();
                    System.out.println();
                    System.out.println("Inserisci");
                   
                    nome = Tastiera.readLine();
                    priorita = Tastiera.readLine().charAt(0);
                   
                    if(nome != ""){
                        osp.addPaziente(nome, priorita);
                    }else{
                        System.out.println("Un campo è vuoto.");
                    }
                    System.out.println();
                break;
                case 2:
                    try{
                        paziente paz = osp.recuperoNominativoMaxUrgenza();
                        System.out.println("Prossimo paziente: " + paz.getNominativo());
                    }
                    catch(Exception ex){
                        System.out.println("Lista finita.");
                    }
                break;
                case 3:
                    osp.numPazienti();
                break;
                case 4:
                    String nome2;
                   
                    nome2 = Tastiera.readLine();
                   
                    osp.eliminaPaziente(nome2);
                break;
                case 5:
                    osp.vediLista();
                break;
                case 6:
                    osp.salva();
                break;
                case 7:
                    osp.carica();
                break;
            }     
        }


qui invece c'è la classe paziente (con get e set di nome, cognome ecc)
Codice:
public class Pazienti{
private String Nome;
private String Cognome;
private String Codice;

public Pazienti(String Nome,String Cognome,String Codice){
this.Nome=Nome;
this.Cognome=Cognome;
this.Codice=Codice;
}

public String getNome(){
return Nome;
}

public void setNome(String Nom){
Nome=Nom;
}

public String getCognome(){
return Cognome;
}

public void setCognome(String Cogn){
Cognome=Cogn;
}

public String getCodice(){
return Codice;
}

public void setCodice(String Cod){
Codice=Cod;
}

public String tostring(){
String Stringa=" ";
Stringa=Stringa+ Nome + Cognome + Codice;
return Stringa;
}
}


Potete aiutarmi?
Sono arrivato a questo punto...e ora non so come uscirne fuori.
Sopratutto nella parte della gestione dei pulsanti...
help.gif
help.gif
 
Ultima modifica:
Allora, premesso che ci sono alcuni errori nel programma, mi soffermo su quello che ricordo mentre lo sistemavo.

Form5
  • Non è nel package prontosoccorso;
  • java.io.* e java.lang.* non ti servono qui;
  • Per i listener sui pulsanti lascia stare (a questo giro) i vari Bprimo.addActionListener(operazioni); e implementa tutto come hai fatto con il Bsalva;
  • Rimuovi anche fr.addWindowListener(new GestoreFinestre());
  • Se usi Java 8 dai un'occhiata alle funzioni lambda, "puliscono" parecchio il codice.
ProntoSoccorso
  • Considera sempre l'utilizzo la classe ArrayList al posto di Vector quando non lavori in multithreading;
  • Sia con ArrayList che Vector, ricordati di scrivere nel template la classe su cui lavora
    PHP:
    private List<Paziente> pazienti = new ArrayList<Paziente>();
    E sii più generale possibile in modo da lavorare con la massima astrazione possibile. Ah, in maniera più breve si può usare anche l'operatore "diamante":
    PHP:
    private List<Paziente> pazienti = new ArrayList<>();
  • Considera di usare 3 liste separate per le urgenze;
  • Al posto di un semplice vettore è molto più conveniente usare una struttura dati più adatta, in particolare una stack o coda: Deque. Magari nella sua implementazione tramite array: ArrayDeque;
  • Al metodo addPaziente() passa direttamente un oggetto di tipo Paziente, costruito nell'actionPerformed() dell'apposito bottone, recuperando le informazioni dai TextField;
  • Usando una struttura a stack si demanda a quella la maggior parte delle funzioni, quindi i metodi risultano più semplificati (andranno comunque fatti controlli e altro).
Pazienti
  • Rinomina in Paziente
  • Non è nel package prontosoccorso;
  • Aggiungi un campo priorita qui, non è sensato memorizzarlo in ProntoSoccorso;
  • Per la priorità può essere una buona scelta usare un Enum;
  • Il codice di un paziente dovrebbe essere univoco;
  • Il tostring() dev'essere sovrascritto come toString(), con la S maiuscola.
Non ho controllato ed eventualmente sistemato le funzioni di salvataggio e caricamento, intanto ti dovrei aver dato qualche spunto.
 
Allora, premesso che ci sono alcuni errori nel programma, mi soffermo su quello che ricordo mentre lo sistemavo.

Form5
  • Non è nel package prontosoccorso;
  • java.io.* e java.lang.* non ti servono qui;
  • Per i listener sui pulsanti lascia stare (a questo giro) i vari Bprimo.addActionListener(operazioni); e implementa tutto come hai facco con il Bsalva;
  • Rimuovi anche fr.addWindowListener(new GestoreFinestre());
  • Se usi Java 8 dai un'occhiata alle funzioni lambda, "puliscono" parecchio il codice.
ProntoSoccorso
  • Considera sempre l'utilizzo la classe ArrayList al posto di Vector quando non lavori in multithreading;
  • Sia con ArrayList che Vector, ricordati di scrivere nel template la classe su cui lavora
    PHP:
    private List<Paziente> pazienti = new ArrayList<Paziente>();
    E sii più generale possibile in modo da lavorare con la massima astrazione possibile. Ah, in maniera più breve si può usare anche l'operatore "diamante":
    PHP:
    private List<Paziente> pazienti = new ArrayList<>();
  • Considera di usare 3 liste separate per le urgenze;
  • Al posto di un semplice vettore è molto più conveniente usare una struttura dati più adatta, in particolare una stack o coda: Deque. Magari nella sua implementazione tramite array: ArrayDeque;
  • Al metodo addPaziente() passa direttamente un oggetto di tipo Paziente, costruito nell'actionPerformed() dell'apposito bottone, recuperando le informazioni dai TextField;
  • Usando una struttura a stack si demanda a quella la maggior parte delle funzioni, quindi i metodi risultano più semplificati (andranno comunque fatti controlli e altro).
Pazienti
  • Rinomina in Paziente
  • Non è nel package prontosoccorso;
  • Aggiungi un campo priorita qui, non è sensato memorizzarlo in ProntoSoccorso;
  • Per la priorità può essere una buona scelta usare un Enum;
  • Il codice di un paziente dovrebbe essere univoco;
  • Il tostring() dev'essere sovrascritto come toString(), con la S maiuscola.
Non ho controllato ed eventualmente sistemato le funzioni di salvataggio e caricamento, intanto ti dovrei aver dato qualche spunto.
La maggior parte delle cose che mi hai corrette sono state imposte dal professore.
Non posso usare altri comandi per la gestione della finestra :(
 
La maggior parte delle cose che mi hai corrette sono state imposte dal professore.
Non posso usare altri comandi per la gestione della finestra :(
Allora consigliagli di aggiornarsi. :p Scherzi a parte, le poche differenze "pesanti" sono l'utilizzo della struttura stack ma puoi continuare a usare Vector. Poi lo spostamento dell'attributo priorita in Paziente, perché è una cosa legata al singolo individuo. Al massimo si può pensare di fare Paziente come sottoclasse di, non so, Persona e specializzare con il codice e la priorità. Tenerla in ProntoSoccorso è certamente possibile ma oltre a sballare la logica aggiunge anche un buon grado di complessità e possibili errori. E diversi metodi usano il parametro nominativo, anche se messo così ha poco senso, anche perché poi il Paziente ha i suoi diversi attributi.

Per la gestione della finestra non ho aggiunto altro, si tratta di implementare tutto come hai già fatto per il bottone di salvataggio, ripetendo lo stesso procedimento sugli altri.

Ah, per Vector, lo stai sempre usando nel modo sbagliato. La sintassi corretta è questa:
PHP:
private Vector<Paziente> pazienti = new Vector<Paziente>();
Così costruisci un vettore di oggetti Paziente.
 
Stato
Discussione chiusa ad ulteriori risposte.