Esercitazione JAVA 2019: differenze tra le versioni
(→Modellazione dello Scenario) |
(→Implementazione completa di uno scenario ospedaliero) |
||
Riga 173: | Riga 173: | ||
o.stampaPazienti(); | o.stampaPazienti(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | == Implementazione della coda == | ||
+ | Implementazione della coda delle prenotazioni e update delle classi esistenti | ||
+ | |||
+ | Classe Persona: classe base da cui far derivare le classi Medico e Paziente. | ||
+ | |||
+ | <syntaxhighlight lang="java" line> | ||
+ | |||
+ | public class Persona { | ||
+ | protected String nome; | ||
+ | protected String cognome; | ||
+ | protected String CF; | ||
+ | |||
+ | public Persona(String N, String C, String cf) | ||
+ | { | ||
+ | nome = N; | ||
+ | cognome = C; | ||
+ | CF = cf; | ||
+ | } | ||
+ | |||
+ | public String getNome() | ||
+ | { | ||
+ | return nome; | ||
+ | } | ||
+ | |||
+ | public String getCognome() | ||
+ | { | ||
+ | return cognome; | ||
+ | } | ||
+ | |||
+ | public String getCF() | ||
+ | { | ||
+ | return CF; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Classe Medico: derivata dalla classe Persona, definisce un medico in base alla propria specializzazione. | ||
+ | Nella classe è stata aggionta la coda delle prenotazioni. | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | |||
+ | public class Medico extends Persona { | ||
+ | |||
+ | private String specializzazione; | ||
+ | |||
+ | private Prenotazione[] codaPrenotazioni; | ||
+ | |||
+ | // Variabili per la gestione della coda | ||
+ | private int head; | ||
+ | private int tail; | ||
+ | private int length; | ||
+ | private int size; | ||
+ | |||
+ | public Medico(String N, String C, String cf, | ||
+ | String spec, int DimCoda) { | ||
+ | super(N, C, cf); | ||
+ | specializzazione = spec; | ||
+ | |||
+ | length = DimCoda; | ||
+ | head = 0; | ||
+ | tail = 0; | ||
+ | size = 0; | ||
+ | |||
+ | codaPrenotazioni = new Prenotazione[length]; | ||
+ | } | ||
+ | |||
+ | public String getInfo() | ||
+ | { | ||
+ | String info = nome + "\t" + cognome + "\t" + CF + "\t" + specializzazione; | ||
+ | return info; | ||
+ | } | ||
+ | |||
+ | public boolean isAvailable() | ||
+ | { | ||
+ | if (size == length) | ||
+ | return false; | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | public int utentiInCoda() | ||
+ | { | ||
+ | return size; | ||
+ | } | ||
+ | |||
+ | |||
+ | public void stampaStatoCoda() | ||
+ | { | ||
+ | int i = 0; | ||
+ | if (size == 0) | ||
+ | System.out.println("Nessuna prenotazione"); | ||
+ | else | ||
+ | { | ||
+ | System.out.println("Prenotazioni in coda:"); | ||
+ | for (i = 0; i < size; i++) { | ||
+ | System.out.println((i+1) + "\t" + codaPrenotazioni[(head + i) % length].stampaInfoPrenotazione()); | ||
+ | } | ||
+ | } | ||
+ | System.out.println(); | ||
+ | } | ||
+ | |||
+ | public void accettaPazienteInCoda(Prenotazione P) | ||
+ | { | ||
+ | codaPrenotazioni[tail] = P; | ||
+ | tail = (tail + 1) % length; | ||
+ | size++; | ||
+ | } | ||
+ | |||
+ | public void curaProssimoPaziente(Ospedale o) | ||
+ | { | ||
+ | if (size == 0) | ||
+ | { | ||
+ | System.out.println("Nessuna Prenotazione in coda"); | ||
+ | } | ||
+ | else { | ||
+ | Prenotazione temp = codaPrenotazioni[head]; | ||
+ | head = (head + 1) % length; | ||
+ | size--; | ||
+ | |||
+ | eseguiVisita(temp, o); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | private void eseguiVisita(Prenotazione p, Ospedale o) | ||
+ | { | ||
+ | Visita v = new Visita(this.CF, p.getPaziente().getDiagnosi(), p.getTrattamento(), o.getNome()); | ||
+ | p.getPaziente().aggiungiVisita(v); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Classe Paziente: derivata dalla classe Persona, definisce un paziente in base ad una diagnosi. | ||
+ | La classe Paziente contiene una lista che mantiene tutte le visite effettuate da ciascun paziente. | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | import java.util.LinkedList; | ||
+ | |||
+ | public class Paziente extends Persona { | ||
+ | |||
+ | private String diagnosi; | ||
+ | private LinkedList<Visita> cartellaClinica; | ||
+ | |||
+ | public Paziente(String N, String C, String cf, String D) { | ||
+ | super(N, C, cf); | ||
+ | diagnosi = D; | ||
+ | cartellaClinica = new LinkedList<Visita>(); | ||
+ | } | ||
+ | |||
+ | public String getInfo() | ||
+ | { | ||
+ | String info = nome + "\t" + cognome + "\t" + CF + "\t" + diagnosi; | ||
+ | return info; | ||
+ | } | ||
+ | |||
+ | public String getDiagnosi() | ||
+ | { | ||
+ | return diagnosi; | ||
+ | } | ||
+ | |||
+ | public void aggiungiVisita(Visita v) | ||
+ | { | ||
+ | cartellaClinica.add(v); | ||
+ | } | ||
+ | |||
+ | public void stampaCartellaClinica() | ||
+ | { | ||
+ | System.out.println("Paziente:\t" + nome + "\t" + cognome); | ||
+ | if (cartellaClinica.size() == 0) | ||
+ | { | ||
+ | System.out.println("Nessuna visita effettuata finora"); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | for (int i = 0; i < cartellaClinica.size(); i++) | ||
+ | { | ||
+ | cartellaClinica.get(i).stampaInformazioniVisita(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Classe Ospedale: deve contenere tutti i medici e tutti i pazienti afferenti ad ogni ospedale. Sono state implementate le funzioni di aggiunta medici e pazienti, oltre alle funzioni di stampa delle informazioni. | ||
+ | L'ospedale assegna la prenotazione al medico che contiene meno prenotazioni in coda. | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | import java.util.ArrayList; | ||
+ | import java.util.LinkedList; | ||
+ | |||
+ | public class Ospedale { | ||
+ | private String nomeOspedale; | ||
+ | |||
+ | private ArrayList<Medico> listaMedici; | ||
+ | private LinkedList<Paziente> listaPazienti; | ||
+ | |||
+ | |||
+ | public Ospedale(String N) | ||
+ | { | ||
+ | nomeOspedale = N; | ||
+ | listaMedici = new ArrayList<Medico>(); | ||
+ | listaPazienti = new LinkedList<Paziente>(); | ||
+ | } | ||
+ | |||
+ | public String getNome() | ||
+ | { | ||
+ | return nomeOspedale; | ||
+ | } | ||
+ | |||
+ | public void aggiungiMedici(Medico M) | ||
+ | { | ||
+ | listaMedici.add(M); | ||
+ | System.out.println("Medico Aggiunto"); | ||
+ | } | ||
+ | |||
+ | public void aggiungiMedici(ArrayList<Medico> LM) | ||
+ | { | ||
+ | listaMedici.addAll(LM); | ||
+ | System.out.println("Medici Aggiunti"); | ||
+ | } | ||
+ | |||
+ | public void aggiungiPazienti(Paziente P) | ||
+ | { | ||
+ | listaPazienti.add(P); | ||
+ | System.out.println("Paziente Aggiunto"); | ||
+ | } | ||
+ | |||
+ | public void aggiungiPazienti(ArrayList<Paziente> LP) | ||
+ | { | ||
+ | listaPazienti.addAll(LP); | ||
+ | System.out.println("Pazienti Aggiunti"); | ||
+ | } | ||
+ | |||
+ | public void stampaMedici() | ||
+ | { | ||
+ | System.out.println("Lista Medici:"); | ||
+ | for (int i = 0; i < listaMedici.size(); i++) | ||
+ | { | ||
+ | System.out.println((i+1) + ": " + listaMedici.get(i).getInfo()); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public void stampaPazienti() | ||
+ | { | ||
+ | System.out.println("Lista Pazienti:"); | ||
+ | for (int i = 0; i < listaPazienti.size(); i++) | ||
+ | { | ||
+ | System.out.println((i+1) + ": " + listaPazienti.get(i).getInfo()); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public void assegnaPrenotazioneMedico(Prenotazione P) | ||
+ | { | ||
+ | int idx = trovaMedicoLibero(); | ||
+ | if (idx > -1) | ||
+ | listaMedici.get(idx).accettaPazienteInCoda(P); | ||
+ | else | ||
+ | System.out.println("Nessun medico disponibile ad accettare la prenotazione " + P.stampaInfoPrenotazione()); | ||
+ | } | ||
+ | |||
+ | private int trovaMedicoLibero () | ||
+ | { | ||
+ | // Restituisce l'indice della lista dei medici con il medico con meno utenti in coda | ||
+ | int idx_min = -1; | ||
+ | if (listaMedici.size() != 0) | ||
+ | { | ||
+ | // Devo trovare il primo medico disponibile | ||
+ | for(int i = 0; i < listaMedici.size(); i++) | ||
+ | { | ||
+ | if(listaMedici.get(i).isAvailable()) | ||
+ | { | ||
+ | idx_min = i; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | if (idx_min > -1) | ||
+ | { | ||
+ | for (int i = idx_min + 1; i < listaMedici.size(); i++) | ||
+ | { | ||
+ | if (listaMedici.get(i).isAvailable() && (listaMedici.get(i).utentiInCoda() < listaMedici.get(idx_min).utentiInCoda())) | ||
+ | { | ||
+ | idx_min = i; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | return idx_min; | ||
+ | } | ||
+ | |||
+ | public void stampaStatoMedici() | ||
+ | { | ||
+ | for (int i = 0; i < listaMedici.size(); i++) | ||
+ | { | ||
+ | System.out.println("Medico: " + listaMedici.get(i).getCognome()); | ||
+ | listaMedici.get(i).stampaStatoCoda(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Classe Prenotazione: modella la prenotazione di un paziente | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | |||
+ | public class Prenotazione { | ||
+ | |||
+ | private Paziente p; | ||
+ | private String trattamento; | ||
+ | |||
+ | public Prenotazione(Paziente P, String T) | ||
+ | { | ||
+ | p = P; | ||
+ | trattamento = T; | ||
+ | } | ||
+ | |||
+ | public String stampaInfoPrenotazione() | ||
+ | { | ||
+ | String info = "Paziente:\t" + p.getCF() + "\tTrattamento: " + trattamento; | ||
+ | return info; | ||
+ | } | ||
+ | |||
+ | public Paziente getPaziente() | ||
+ | { | ||
+ | return p; | ||
+ | } | ||
+ | |||
+ | public String getTrattamento() | ||
+ | { | ||
+ | return trattamento; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Classe Visita: Modella la visita di un medico che esegue un trattamento ad un paziente. | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | public class Visita { | ||
+ | private String medico; | ||
+ | private String diagnosi; | ||
+ | private String trattamento; | ||
+ | private String ospedale; | ||
+ | |||
+ | public Visita(String M, String D, String T, String O) | ||
+ | { | ||
+ | medico = M; | ||
+ | diagnosi = D; | ||
+ | trattamento = T; | ||
+ | ospedale = O; | ||
+ | } | ||
+ | |||
+ | public void stampaInformazioniVisita() | ||
+ | { | ||
+ | System.out.println("Diagnosi: " + diagnosi + " Visita effettuata dal medico: " + medico + " che ha eseguito il seguente trattamento: " + trattamento + | ||
+ | " presso il seguente ospedale: " + ospedale); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Classe Principale: classe che contiene il metodo main. | ||
+ | <syntaxhighlight lang="java" line> | ||
+ | import java.util.ArrayList; | ||
+ | |||
+ | public class Principale { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Ospedale o = new Ospedale("Policlinico"); | ||
+ | |||
+ | Medico m1 = new Medico("M_Nome1", "M_Cognome1", "M_Codice1", "Chirurgia", 3); | ||
+ | Medico m2 = new Medico("M_Nome2", "M_Cognome2", "M_Codice2", "Radiologia", 3); | ||
+ | Medico m3 = new Medico("M_Nome3", "M_Cognome3", "M_Codice3", "Cardiologia", 5); | ||
+ | |||
+ | ArrayList<Medico> lm = new ArrayList<Medico>(); | ||
+ | lm.add(m1); | ||
+ | lm.add(m3); | ||
+ | o.aggiungiMedici(m2); | ||
+ | o.aggiungiMedici(lm); | ||
+ | |||
+ | Paziente p1 = new Paziente("P_Nome1", "P_Cognome1", "P_Codice1", "Frattura"); | ||
+ | Paziente p2 = new Paziente("P_Nome2", "P_Cognome2", "P_Codice2", "Tumore"); | ||
+ | Paziente p3 = new Paziente("P_Nome3", "P_Cognome3", "P_Codice3", "Infarto"); | ||
+ | |||
+ | ArrayList<Paziente> lp = new ArrayList<Paziente>(); | ||
+ | lp.add(p1); | ||
+ | lp.add(p2); | ||
+ | o.aggiungiPazienti(p3); | ||
+ | o.aggiungiPazienti(lp); | ||
+ | |||
+ | System.out.println(); | ||
+ | System.out.println("////////////////////////////////////////////////"); | ||
+ | o.stampaMedici(); | ||
+ | System.out.println(); | ||
+ | o.stampaPazienti(); | ||
+ | |||
+ | Prenotazione pren1 = new Prenotazione(p1, "Trattamento1"); | ||
+ | Prenotazione pren2 = new Prenotazione(p2, "Trattamento2"); | ||
+ | Prenotazione pren3 = new Prenotazione(p3, "Trattamento3"); | ||
+ | Prenotazione pren4 = new Prenotazione(p1, "Trattamento4"); | ||
+ | Prenotazione pren5 = new Prenotazione(p1, "Trattamento5"); | ||
+ | Prenotazione pren6 = new Prenotazione(p3, "Trattamento6"); | ||
+ | o.assegnaPrenotazioneMedico(pren1); | ||
+ | o.assegnaPrenotazioneMedico(pren2); | ||
+ | o.assegnaPrenotazioneMedico(pren3); | ||
+ | o.assegnaPrenotazioneMedico(pren4); | ||
+ | o.assegnaPrenotazioneMedico(pren5); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | |||
+ | System.out.println("-----------------------"); | ||
+ | o.stampaStatoMedici(); | ||
+ | |||
+ | System.out.println("-----------------------"); | ||
+ | m2.curaProssimoPaziente(o); | ||
+ | p1.stampaCartellaClinica(); | ||
+ | p2.stampaCartellaClinica(); | ||
+ | |||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | o.assegnaPrenotazioneMedico(pren6); | ||
+ | |||
+ | System.out.println("-----------------------"); | ||
+ | o.stampaStatoMedici(); | ||
+ | |||
+ | System.out.println("-----------------------"); | ||
+ | m1.curaProssimoPaziente(o); | ||
+ | m1.curaProssimoPaziente(o); | ||
+ | m1.curaProssimoPaziente(o); | ||
+ | m1.curaProssimoPaziente(o); | ||
+ | |||
+ | p1.stampaCartellaClinica(); | ||
+ | p2.stampaCartellaClinica(); | ||
+ | p3.stampaCartellaClinica(); | ||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Versione delle 13:11, 13 mag 2019
Indice
Implementazione completa di uno scenario ospedaliero
Modellazione dello Scenario
Modellazione iniziale delle classi utili all'implementazione delo scenario richiesto.
Classe Persona: classe base da cui far derivare le classi Medico e Paziente.
public class Persona {
protected String nome;
protected String cognome;
protected String CF;
public Persona(String N, String C, String cf)
{
nome = N;
cognome = C;
CF = cf;
}
}
Classe Medico: derivata dalla classe Persona, definisce un medico in base alla propria specializzazione.
public class Medico extends Persona {
private String specializzazione;
public Medico(String N, String C, String cf, String spec) {
super(N, C, cf);
specializzazione = spec;
}
public String getInfo()
{
String info = nome + "\t" + cognome + "\t" + CF + "\t" + specializzazione;
return info;
}
}
Classe Paziente: derivata dalla classe Persona, definisce un paziente in base ad una diagnosi.
public class Paziente extends Persona {
private String diagnosi;
public Paziente(String N, String C, String cf, String D) {
super(N, C, cf);
diagnosi = D;
}
public String getInfo()
{
String info = nome + "\t" + cognome + "\t" + CF + "\t" + diagnosi;
return info;
}
}
Classe Ospedale: deve contenere tutti i medici e tutti i pazienti afferenti ad ogni ospedale. SOno state implementate le funzioni di aggiunta medici e pazienti, oltre alle funzioni di stampa delle informazioni.
import java.util.ArrayList;
import java.util.LinkedList;
public class Ospedale {
private String nomeOspedale;
private ArrayList<Medico> listaMedici;
private LinkedList<Paziente> listaPazienti;
public Ospedale(String N)
{
nomeOspedale = N;
listaMedici = new ArrayList<Medico>();
listaPazienti = new LinkedList<Paziente>();
}
public void aggiungiMedici(Medico M)
{
listaMedici.add(M);
System.out.println("Medico Aggiunto");
}
public void aggiungiMedici(ArrayList<Medico> LM)
{
listaMedici.addAll(LM);
System.out.println("Medici Aggiunti");
}
public void aggiungiPazienti(Paziente P)
{
listaPazienti.add(P);
System.out.println("Paziente Aggiunto");
}
public void aggiungiPazienti(ArrayList<Paziente> LP)
{
listaPazienti.addAll(LP);
System.out.println("Pazienti Aggiunti");
}
public void stampaMedici()
{
System.out.println("Lista Medici:");
for (int i = 0; i < listaMedici.size(); i++)
{
System.out.println((i+1) + ": " + listaMedici.get(i).getInfo());
}
}
public void stampaPazienti()
{
System.out.println("Lista Pazienti:");
for (int i = 0; i < listaPazienti.size(); i++)
{
System.out.println((i+1) + ": " + listaPazienti.get(i).getInfo());
}
}
}
Classe Principale: classe che contiene il metodo main.
import java.util.ArrayList;
public class Principale {
public static void main(String[] args) {
Ospedale o = new Ospedale("Policlinico");
Medico m1 = new Medico("M_Nome1", "M_Cognome1", "M_Codice1", "Chirurgia");
Medico m2 = new Medico("M_Nome2", "M_Cognome2", "M_Codice2", "Radiologia");
Medico m3 = new Medico("M_Nome3", "M_Cognome3", "M_Codice3", "Cardiologia");
ArrayList<Medico> lm = new ArrayList<Medico>();
lm.add(m1);
lm.add(m3);
o.aggiungiMedici(m2);
o.aggiungiMedici(lm);
Paziente p1 = new Paziente("P_Nome1", "P_Cognome1", "P_Codice1", "Frattura");
Paziente p2 = new Paziente("P_Nome2", "P_Cognome2", "P_Codice2", "Tumore");
Paziente p3 = new Paziente("P_Nome3", "P_Cognome3", "P_Codice3", "Infarto");
ArrayList<Paziente> lp = new ArrayList<Paziente>();
lp.add(p1);
lp.add(p2);
o.aggiungiPazienti(p3);
o.aggiungiPazienti(lp);
System.out.println();
System.out.println("////////////////////////////////////////////////");
o.stampaMedici();
System.out.println();
o.stampaPazienti();
}
}
Implementazione della coda
Implementazione della coda delle prenotazioni e update delle classi esistenti
Classe Persona: classe base da cui far derivare le classi Medico e Paziente.
public class Persona {
protected String nome;
protected String cognome;
protected String CF;
public Persona(String N, String C, String cf)
{
nome = N;
cognome = C;
CF = cf;
}
public String getNome()
{
return nome;
}
public String getCognome()
{
return cognome;
}
public String getCF()
{
return CF;
}
}
Classe Medico: derivata dalla classe Persona, definisce un medico in base alla propria specializzazione. Nella classe è stata aggionta la coda delle prenotazioni.
public class Medico extends Persona {
private String specializzazione;
private Prenotazione[] codaPrenotazioni;
// Variabili per la gestione della coda
private int head;
private int tail;
private int length;
private int size;
public Medico(String N, String C, String cf,
String spec, int DimCoda) {
super(N, C, cf);
specializzazione = spec;
length = DimCoda;
head = 0;
tail = 0;
size = 0;
codaPrenotazioni = new Prenotazione[length];
}
public String getInfo()
{
String info = nome + "\t" + cognome + "\t" + CF + "\t" + specializzazione;
return info;
}
public boolean isAvailable()
{
if (size == length)
return false;
return true;
}
public int utentiInCoda()
{
return size;
}
public void stampaStatoCoda()
{
int i = 0;
if (size == 0)
System.out.println("Nessuna prenotazione");
else
{
System.out.println("Prenotazioni in coda:");
for (i = 0; i < size; i++) {
System.out.println((i+1) + "\t" + codaPrenotazioni[(head + i) % length].stampaInfoPrenotazione());
}
}
System.out.println();
}
public void accettaPazienteInCoda(Prenotazione P)
{
codaPrenotazioni[tail] = P;
tail = (tail + 1) % length;
size++;
}
public void curaProssimoPaziente(Ospedale o)
{
if (size == 0)
{
System.out.println("Nessuna Prenotazione in coda");
}
else {
Prenotazione temp = codaPrenotazioni[head];
head = (head + 1) % length;
size--;
eseguiVisita(temp, o);
}
}
private void eseguiVisita(Prenotazione p, Ospedale o)
{
Visita v = new Visita(this.CF, p.getPaziente().getDiagnosi(), p.getTrattamento(), o.getNome());
p.getPaziente().aggiungiVisita(v);
}
}
Classe Paziente: derivata dalla classe Persona, definisce un paziente in base ad una diagnosi. La classe Paziente contiene una lista che mantiene tutte le visite effettuate da ciascun paziente.
import java.util.LinkedList;
public class Paziente extends Persona {
private String diagnosi;
private LinkedList<Visita> cartellaClinica;
public Paziente(String N, String C, String cf, String D) {
super(N, C, cf);
diagnosi = D;
cartellaClinica = new LinkedList<Visita>();
}
public String getInfo()
{
String info = nome + "\t" + cognome + "\t" + CF + "\t" + diagnosi;
return info;
}
public String getDiagnosi()
{
return diagnosi;
}
public void aggiungiVisita(Visita v)
{
cartellaClinica.add(v);
}
public void stampaCartellaClinica()
{
System.out.println("Paziente:\t" + nome + "\t" + cognome);
if (cartellaClinica.size() == 0)
{
System.out.println("Nessuna visita effettuata finora");
}
else
{
for (int i = 0; i < cartellaClinica.size(); i++)
{
cartellaClinica.get(i).stampaInformazioniVisita();
}
}
}
}
Classe Ospedale: deve contenere tutti i medici e tutti i pazienti afferenti ad ogni ospedale. Sono state implementate le funzioni di aggiunta medici e pazienti, oltre alle funzioni di stampa delle informazioni.
L'ospedale assegna la prenotazione al medico che contiene meno prenotazioni in coda.
import java.util.ArrayList;
import java.util.LinkedList;
public class Ospedale {
private String nomeOspedale;
private ArrayList<Medico> listaMedici;
private LinkedList<Paziente> listaPazienti;
public Ospedale(String N)
{
nomeOspedale = N;
listaMedici = new ArrayList<Medico>();
listaPazienti = new LinkedList<Paziente>();
}
public String getNome()
{
return nomeOspedale;
}
public void aggiungiMedici(Medico M)
{
listaMedici.add(M);
System.out.println("Medico Aggiunto");
}
public void aggiungiMedici(ArrayList<Medico> LM)
{
listaMedici.addAll(LM);
System.out.println("Medici Aggiunti");
}
public void aggiungiPazienti(Paziente P)
{
listaPazienti.add(P);
System.out.println("Paziente Aggiunto");
}
public void aggiungiPazienti(ArrayList<Paziente> LP)
{
listaPazienti.addAll(LP);
System.out.println("Pazienti Aggiunti");
}
public void stampaMedici()
{
System.out.println("Lista Medici:");
for (int i = 0; i < listaMedici.size(); i++)
{
System.out.println((i+1) + ": " + listaMedici.get(i).getInfo());
}
}
public void stampaPazienti()
{
System.out.println("Lista Pazienti:");
for (int i = 0; i < listaPazienti.size(); i++)
{
System.out.println((i+1) + ": " + listaPazienti.get(i).getInfo());
}
}
public void assegnaPrenotazioneMedico(Prenotazione P)
{
int idx = trovaMedicoLibero();
if (idx > -1)
listaMedici.get(idx).accettaPazienteInCoda(P);
else
System.out.println("Nessun medico disponibile ad accettare la prenotazione " + P.stampaInfoPrenotazione());
}
private int trovaMedicoLibero ()
{
// Restituisce l'indice della lista dei medici con il medico con meno utenti in coda
int idx_min = -1;
if (listaMedici.size() != 0)
{
// Devo trovare il primo medico disponibile
for(int i = 0; i < listaMedici.size(); i++)
{
if(listaMedici.get(i).isAvailable())
{
idx_min = i;
break;
}
}
}
if (idx_min > -1)
{
for (int i = idx_min + 1; i < listaMedici.size(); i++)
{
if (listaMedici.get(i).isAvailable() && (listaMedici.get(i).utentiInCoda() < listaMedici.get(idx_min).utentiInCoda()))
{
idx_min = i;
}
}
}
return idx_min;
}
public void stampaStatoMedici()
{
for (int i = 0; i < listaMedici.size(); i++)
{
System.out.println("Medico: " + listaMedici.get(i).getCognome());
listaMedici.get(i).stampaStatoCoda();
}
}
}
Classe Prenotazione: modella la prenotazione di un paziente
public class Prenotazione {
private Paziente p;
private String trattamento;
public Prenotazione(Paziente P, String T)
{
p = P;
trattamento = T;
}
public String stampaInfoPrenotazione()
{
String info = "Paziente:\t" + p.getCF() + "\tTrattamento: " + trattamento;
return info;
}
public Paziente getPaziente()
{
return p;
}
public String getTrattamento()
{
return trattamento;
}
}
Classe Visita: Modella la visita di un medico che esegue un trattamento ad un paziente.
public class Visita {
private String medico;
private String diagnosi;
private String trattamento;
private String ospedale;
public Visita(String M, String D, String T, String O)
{
medico = M;
diagnosi = D;
trattamento = T;
ospedale = O;
}
public void stampaInformazioniVisita()
{
System.out.println("Diagnosi: " + diagnosi + " Visita effettuata dal medico: " + medico + " che ha eseguito il seguente trattamento: " + trattamento +
" presso il seguente ospedale: " + ospedale);
}
}
Classe Principale: classe che contiene il metodo main.
import java.util.ArrayList;
public class Principale {
public static void main(String[] args) {
Ospedale o = new Ospedale("Policlinico");
Medico m1 = new Medico("M_Nome1", "M_Cognome1", "M_Codice1", "Chirurgia", 3);
Medico m2 = new Medico("M_Nome2", "M_Cognome2", "M_Codice2", "Radiologia", 3);
Medico m3 = new Medico("M_Nome3", "M_Cognome3", "M_Codice3", "Cardiologia", 5);
ArrayList<Medico> lm = new ArrayList<Medico>();
lm.add(m1);
lm.add(m3);
o.aggiungiMedici(m2);
o.aggiungiMedici(lm);
Paziente p1 = new Paziente("P_Nome1", "P_Cognome1", "P_Codice1", "Frattura");
Paziente p2 = new Paziente("P_Nome2", "P_Cognome2", "P_Codice2", "Tumore");
Paziente p3 = new Paziente("P_Nome3", "P_Cognome3", "P_Codice3", "Infarto");
ArrayList<Paziente> lp = new ArrayList<Paziente>();
lp.add(p1);
lp.add(p2);
o.aggiungiPazienti(p3);
o.aggiungiPazienti(lp);
System.out.println();
System.out.println("////////////////////////////////////////////////");
o.stampaMedici();
System.out.println();
o.stampaPazienti();
Prenotazione pren1 = new Prenotazione(p1, "Trattamento1");
Prenotazione pren2 = new Prenotazione(p2, "Trattamento2");
Prenotazione pren3 = new Prenotazione(p3, "Trattamento3");
Prenotazione pren4 = new Prenotazione(p1, "Trattamento4");
Prenotazione pren5 = new Prenotazione(p1, "Trattamento5");
Prenotazione pren6 = new Prenotazione(p3, "Trattamento6");
o.assegnaPrenotazioneMedico(pren1);
o.assegnaPrenotazioneMedico(pren2);
o.assegnaPrenotazioneMedico(pren3);
o.assegnaPrenotazioneMedico(pren4);
o.assegnaPrenotazioneMedico(pren5);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
System.out.println("-----------------------");
o.stampaStatoMedici();
System.out.println("-----------------------");
m2.curaProssimoPaziente(o);
p1.stampaCartellaClinica();
p2.stampaCartellaClinica();
o.assegnaPrenotazioneMedico(pren6);
o.assegnaPrenotazioneMedico(pren6);
System.out.println("-----------------------");
o.stampaStatoMedici();
System.out.println("-----------------------");
m1.curaProssimoPaziente(o);
m1.curaProssimoPaziente(o);
m1.curaProssimoPaziente(o);
m1.curaProssimoPaziente(o);
p1.stampaCartellaClinica();
p2.stampaCartellaClinica();
p3.stampaCartellaClinica();
}
}