Esercitazione JAVA 2019: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(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


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.

  1. public class Persona {
  2. 	protected String nome;
  3. 	protected String cognome;
  4. 	protected String CF;
  5.  
  6. 	public Persona(String N, String C, String cf)
  7. 	{
  8. 		nome = N;
  9. 		cognome = C;
  10. 		CF = cf;
  11. 	}
  12. }


Classe Medico: derivata dalla classe Persona, definisce un medico in base alla propria specializzazione.

  1. public class Medico extends Persona {
  2.  
  3. 	private String specializzazione;
  4.  
  5. 	public Medico(String N, String C, String cf, String spec) {
  6. 		super(N, C, cf);
  7. 		specializzazione = spec;	
  8. 	}
  9.  
  10. 	public String getInfo()
  11. 	{
  12. 		String info = nome + "\t" + cognome + "\t" + CF + "\t" + specializzazione;
  13. 		return info;
  14. 	}
  15.  
  16. }


Classe Paziente: derivata dalla classe Persona, definisce un paziente in base ad una diagnosi.

  1. public class Paziente extends Persona {
  2.  
  3. 	private String diagnosi;
  4.  
  5. 	public Paziente(String N, String C, String cf, String D) {
  6. 		super(N, C, cf);
  7. 		diagnosi = D;
  8. 	}
  9.  
  10. 	public String getInfo()
  11. 	{
  12. 		String info = nome + "\t" + cognome + "\t" + CF + "\t" + diagnosi;
  13. 		return info;
  14. 	}
  15.  
  16. }


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.

  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3.  
  4. public class Ospedale {
  5. 	private String nomeOspedale;
  6.  
  7. 	private ArrayList<Medico> listaMedici;
  8. 	private LinkedList<Paziente> listaPazienti;
  9.  
  10. 	public Ospedale(String N)
  11. 	{
  12. 		nomeOspedale = N;
  13. 		listaMedici = new ArrayList<Medico>();
  14. 		listaPazienti = new LinkedList<Paziente>();
  15. 	}
  16.  
  17. 	public void aggiungiMedici(Medico M)
  18. 	{
  19. 		listaMedici.add(M);
  20. 		System.out.println("Medico Aggiunto");
  21. 	}
  22.  
  23. 	public void aggiungiMedici(ArrayList<Medico> LM)
  24. 	{
  25. 		listaMedici.addAll(LM);
  26. 		System.out.println("Medici Aggiunti");
  27. 	}
  28.  
  29. 	public void aggiungiPazienti(Paziente P)
  30. 	{
  31. 		listaPazienti.add(P);
  32. 		System.out.println("Paziente Aggiunto");
  33. 	}
  34.  
  35. 	public void aggiungiPazienti(ArrayList<Paziente> LP)
  36. 	{
  37. 		listaPazienti.addAll(LP);
  38. 		System.out.println("Pazienti Aggiunti");
  39. 	}
  40.  
  41. 	public void stampaMedici()
  42. 	{
  43. 		System.out.println("Lista Medici:");
  44. 		for (int i = 0; i < listaMedici.size(); i++)
  45. 		{
  46. 			System.out.println((i+1) + ": " + listaMedici.get(i).getInfo());
  47. 		}
  48. 	}
  49.  
  50. 	public void stampaPazienti()
  51. 	{
  52. 		System.out.println("Lista Pazienti:");
  53. 		for (int i = 0; i < listaPazienti.size(); i++)
  54. 		{
  55. 			System.out.println((i+1) + ": " + listaPazienti.get(i).getInfo());
  56. 		}
  57. 	}
  58. }


Classe Principale: classe che contiene il metodo main.

  1. import java.util.ArrayList;
  2.  
  3. public class Principale {
  4.  
  5. 	public static void main(String[] args) {
  6.  
  7. 		Ospedale o = new Ospedale("Policlinico");
  8.  
  9. 		Medico m1 = new Medico("M_Nome1", "M_Cognome1", "M_Codice1", "Chirurgia");
  10. 		Medico m2 = new Medico("M_Nome2", "M_Cognome2", "M_Codice2", "Radiologia");
  11. 		Medico m3 = new Medico("M_Nome3", "M_Cognome3", "M_Codice3", "Cardiologia");
  12.  
  13. 		ArrayList<Medico> lm = new ArrayList<Medico>();
  14. 		lm.add(m1);
  15. 		lm.add(m3);
  16. 		o.aggiungiMedici(m2);
  17. 		o.aggiungiMedici(lm);
  18.  
  19. 		Paziente p1 = new Paziente("P_Nome1", "P_Cognome1", "P_Codice1", "Frattura");
  20. 		Paziente p2 = new Paziente("P_Nome2", "P_Cognome2", "P_Codice2", "Tumore");
  21. 		Paziente p3 = new Paziente("P_Nome3", "P_Cognome3", "P_Codice3", "Infarto");
  22.  
  23. 		ArrayList<Paziente> lp = new ArrayList<Paziente>();
  24. 		lp.add(p1);
  25. 		lp.add(p2);
  26. 		o.aggiungiPazienti(p3);
  27. 		o.aggiungiPazienti(lp);
  28.  
  29. 		System.out.println();
  30. 		System.out.println("////////////////////////////////////////////////");
  31. 		o.stampaMedici();
  32. 		System.out.println();
  33. 		o.stampaPazienti();
  34.  
  35. 	}
  36. }


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.

  1. public class Persona {
  2. 	protected String nome;
  3. 	protected String cognome;
  4. 	protected String CF;
  5.  
  6. 	public Persona(String N, String C, String cf)
  7. 	{
  8. 		nome = N;
  9. 		cognome = C;
  10. 		CF = cf;
  11. 	}
  12.  
  13. 	public String getNome()
  14. 	{
  15. 		return nome;
  16. 	}
  17.  
  18. 	public String getCognome()
  19. 	{
  20. 		return cognome;
  21. 	}
  22.  
  23. 	public String getCF()
  24. 	{
  25. 		return CF;
  26. 	}
  27. }

Classe Medico: derivata dalla classe Persona, definisce un medico in base alla propria specializzazione. Nella classe è stata aggionta la coda delle prenotazioni.

  1. public class Medico extends Persona {
  2.  
  3. 	private String specializzazione;
  4.  
  5. 	private Prenotazione[] codaPrenotazioni;
  6.  
  7. 	// Variabili per la gestione della coda
  8. 	private int head;
  9. 	private int tail;
  10. 	private int length;
  11. 	private int size;
  12.  
  13. 	public Medico(String N, String C, String cf, 
  14. 			String spec, int DimCoda) {
  15. 		super(N, C, cf);
  16. 		specializzazione = spec;	
  17.  
  18. 		length = DimCoda;
  19. 		head = 0;
  20. 		tail = 0;
  21. 		size = 0;
  22.  
  23. 		codaPrenotazioni = new Prenotazione[length];
  24. 	}
  25.  
  26. 	public String getInfo()
  27. 	{
  28. 		String info = nome + "\t" + cognome + "\t" + CF + "\t" + specializzazione;
  29. 		return info;
  30. 	}
  31.  
  32. 	public boolean isAvailable()
  33. 	{
  34. 		if (size == length)
  35. 			return false;
  36. 		return true;
  37. 	}
  38.  
  39. 	public int utentiInCoda()
  40. 	{
  41. 		return size;
  42. 	}
  43.  
  44.  
  45. 	public void stampaStatoCoda()
  46. 	{
  47. 		int i = 0;
  48. 		if (size == 0)
  49. 			System.out.println("Nessuna prenotazione");
  50. 		else
  51. 		{
  52. 			System.out.println("Prenotazioni in coda:");
  53. 			for (i = 0; i < size; i++) {
  54. 				System.out.println((i+1) + "\t" + codaPrenotazioni[(head + i) % length].stampaInfoPrenotazione());
  55. 			}
  56. 		}
  57. 		System.out.println();
  58. 	}
  59.  
  60. 	public void accettaPazienteInCoda(Prenotazione P)
  61. 	{
  62. 		codaPrenotazioni[tail] = P;
  63. 		tail = (tail + 1) % length;
  64. 		size++;
  65. 	}
  66.  
  67. 	public void curaProssimoPaziente(Ospedale o) 
  68. 	{
  69. 		if (size == 0)
  70. 		{
  71. 			System.out.println("Nessuna Prenotazione in coda");
  72. 		}
  73. 		else {
  74. 			Prenotazione temp = codaPrenotazioni[head];
  75. 			head = (head + 1) % length;
  76. 			size--;
  77.  
  78. 			eseguiVisita(temp, o);
  79. 		}
  80. 	}
  81.  
  82. 	private void eseguiVisita(Prenotazione p, Ospedale o)
  83. 	{
  84. 		Visita v = new Visita(this.CF, p.getPaziente().getDiagnosi(), p.getTrattamento(), o.getNome());
  85. 		p.getPaziente().aggiungiVisita(v);
  86. 	}
  87. }

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.

  1. import java.util.LinkedList;
  2.  
  3. public class Paziente extends Persona {
  4.  
  5. 	private String diagnosi;
  6. 	private LinkedList<Visita> cartellaClinica;
  7.  
  8. 	public Paziente(String N, String C, String cf, String D) {
  9. 		super(N, C, cf);
  10. 		diagnosi = D;
  11. 		cartellaClinica = new LinkedList<Visita>();
  12. 	}
  13.  
  14. 	public String getInfo()
  15. 	{
  16. 		String info = nome + "\t" + cognome + "\t" + CF + "\t" + diagnosi;
  17. 		return info;
  18. 	}
  19.  
  20. 	public String getDiagnosi()
  21. 	{
  22. 		return diagnosi;
  23. 	}
  24.  
  25. 	public void aggiungiVisita(Visita v)
  26. 	{
  27. 		cartellaClinica.add(v);
  28. 	}
  29.  
  30. 	public void stampaCartellaClinica() 
  31. 	{
  32. 		System.out.println("Paziente:\t" + nome + "\t" + cognome);
  33. 		if (cartellaClinica.size() == 0)
  34. 		{
  35. 			System.out.println("Nessuna visita effettuata finora");
  36. 		}
  37. 		else
  38. 		{
  39. 			for (int i = 0; i < cartellaClinica.size(); i++)
  40. 			{
  41. 				cartellaClinica.get(i).stampaInformazioniVisita();
  42. 			}
  43. 		}
  44. 	}
  45. }


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.

  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3.  
  4. public class Ospedale {
  5. 	private String nomeOspedale;
  6.  
  7. 	private ArrayList<Medico> listaMedici;
  8. 	private LinkedList<Paziente> listaPazienti;
  9.  
  10.  
  11. 	public Ospedale(String N)
  12. 	{
  13. 		nomeOspedale = N;
  14. 		listaMedici = new ArrayList<Medico>();
  15. 		listaPazienti = new LinkedList<Paziente>();
  16. 	}
  17.  
  18. 	public String getNome()
  19. 	{
  20. 		return nomeOspedale;
  21. 	}
  22.  
  23. 	public void aggiungiMedici(Medico M)
  24. 	{
  25. 		listaMedici.add(M);
  26. 		System.out.println("Medico Aggiunto");
  27. 	}
  28.  
  29. 	public void aggiungiMedici(ArrayList<Medico> LM)
  30. 	{
  31. 		listaMedici.addAll(LM);
  32. 		System.out.println("Medici Aggiunti");
  33. 	}
  34.  
  35. 	public void aggiungiPazienti(Paziente P)
  36. 	{
  37. 		listaPazienti.add(P);
  38. 		System.out.println("Paziente Aggiunto");
  39. 	}
  40.  
  41. 	public void aggiungiPazienti(ArrayList<Paziente> LP)
  42. 	{
  43. 		listaPazienti.addAll(LP);
  44. 		System.out.println("Pazienti Aggiunti");
  45. 	}
  46.  
  47. 	public void stampaMedici()
  48. 	{
  49. 		System.out.println("Lista Medici:");
  50. 		for (int i = 0; i < listaMedici.size(); i++)
  51. 		{
  52. 			System.out.println((i+1) + ": " + listaMedici.get(i).getInfo());
  53. 		}
  54. 	}
  55.  
  56. 	public void stampaPazienti()
  57. 	{
  58. 		System.out.println("Lista Pazienti:");
  59. 		for (int i = 0; i < listaPazienti.size(); i++)
  60. 		{
  61. 			System.out.println((i+1) + ": " + listaPazienti.get(i).getInfo());
  62. 		}
  63. 	}
  64.  
  65. 	public void assegnaPrenotazioneMedico(Prenotazione P)
  66. 	{
  67. 		int idx = trovaMedicoLibero();
  68. 		if (idx > -1)
  69. 			listaMedici.get(idx).accettaPazienteInCoda(P);
  70. 		else
  71. 			System.out.println("Nessun medico disponibile ad accettare la prenotazione " + P.stampaInfoPrenotazione());
  72. 	}
  73.  
  74. 	private int trovaMedicoLibero () 
  75. 	{
  76. 		// Restituisce l'indice della lista dei medici con il medico con meno utenti in coda
  77. 		int idx_min = -1;
  78. 		if (listaMedici.size() != 0)
  79. 		{
  80. 			// Devo trovare il primo medico disponibile
  81. 			for(int i = 0; i < listaMedici.size(); i++)
  82. 			{
  83. 				if(listaMedici.get(i).isAvailable())
  84. 				{
  85. 					idx_min = i;
  86. 					break;
  87. 				}
  88. 			}
  89. 		}
  90. 		if (idx_min > -1)
  91. 		{
  92. 			for (int i = idx_min + 1; i < listaMedici.size(); i++) 
  93. 			{
  94. 				if (listaMedici.get(i).isAvailable() &&  (listaMedici.get(i).utentiInCoda() < listaMedici.get(idx_min).utentiInCoda()))
  95. 				{
  96. 					idx_min = i;
  97. 				}
  98. 			}
  99.  
  100. 		}
  101. 		return idx_min;
  102. 	}
  103.  
  104. 	public void stampaStatoMedici()
  105. 	{
  106. 		for (int i = 0; i < listaMedici.size(); i++)
  107. 		{
  108. 			System.out.println("Medico: " + listaMedici.get(i).getCognome());
  109. 			listaMedici.get(i).stampaStatoCoda();
  110. 		}
  111. 	}
  112.  
  113. }

Classe Prenotazione: modella la prenotazione di un paziente

  1. public class Prenotazione {
  2.  
  3. 	private Paziente p;
  4. 	private String trattamento;
  5.  
  6. 	public Prenotazione(Paziente P, String T)
  7. 	{
  8. 		p = P;
  9. 		trattamento = T;
  10. 	}
  11.  
  12. 	public String stampaInfoPrenotazione()
  13. 	{
  14. 		String info = "Paziente:\t" + p.getCF() + "\tTrattamento: " + trattamento;
  15. 		return info;
  16. 	}
  17.  
  18. 	public Paziente getPaziente() 
  19. 	{
  20. 		return p;
  21. 	}
  22.  
  23. 	public String getTrattamento() 
  24. 	{
  25. 		return trattamento;
  26. 	}
  27. }

Classe Visita: Modella la visita di un medico che esegue un trattamento ad un paziente.

  1. public class Visita {
  2. 	private String medico;
  3. 	private String diagnosi;
  4. 	private String trattamento;
  5. 	private String ospedale;
  6.  
  7. 	public Visita(String M, String D, String T, String O)
  8. 	{	
  9. 		medico = M;
  10. 		diagnosi = D;
  11. 		trattamento = T;
  12. 		ospedale = O;
  13. 	}
  14.  
  15. 	public void stampaInformazioniVisita() 
  16. 	{
  17. 		System.out.println("Diagnosi:  " + diagnosi	+ " Visita effettuata dal medico: " + medico + " che ha eseguito il seguente trattamento: " + trattamento + 
  18. 				" presso il seguente ospedale: " + ospedale);
  19. 	}
  20. }


Classe Principale: classe che contiene il metodo main.

  1. import java.util.ArrayList;
  2.  
  3. public class Principale {
  4.  
  5. 	public static void main(String[] args) {
  6.  
  7. 		Ospedale o = new Ospedale("Policlinico");
  8.  
  9. 		Medico m1 = new Medico("M_Nome1", "M_Cognome1", "M_Codice1", "Chirurgia", 3);
  10. 		Medico m2 = new Medico("M_Nome2", "M_Cognome2", "M_Codice2", "Radiologia", 3);
  11. 		Medico m3 = new Medico("M_Nome3", "M_Cognome3", "M_Codice3", "Cardiologia", 5);
  12.  
  13. 		ArrayList<Medico> lm = new ArrayList<Medico>();
  14. 		lm.add(m1);
  15. 		lm.add(m3);
  16. 		o.aggiungiMedici(m2);
  17. 		o.aggiungiMedici(lm);
  18.  
  19. 		Paziente p1 = new Paziente("P_Nome1", "P_Cognome1", "P_Codice1", "Frattura");
  20. 		Paziente p2 = new Paziente("P_Nome2", "P_Cognome2", "P_Codice2", "Tumore");
  21. 		Paziente p3 = new Paziente("P_Nome3", "P_Cognome3", "P_Codice3", "Infarto");
  22.  
  23. 		ArrayList<Paziente> lp = new ArrayList<Paziente>();
  24. 		lp.add(p1);
  25. 		lp.add(p2);
  26. 		o.aggiungiPazienti(p3);
  27. 		o.aggiungiPazienti(lp);
  28.  
  29. 		System.out.println();
  30. 		System.out.println("////////////////////////////////////////////////");
  31. 		o.stampaMedici();
  32. 		System.out.println();
  33. 		o.stampaPazienti();
  34.  
  35. 		Prenotazione pren1 = new Prenotazione(p1, "Trattamento1");
  36. 		Prenotazione pren2 = new Prenotazione(p2, "Trattamento2");
  37. 		Prenotazione pren3 = new Prenotazione(p3, "Trattamento3");
  38. 		Prenotazione pren4 = new Prenotazione(p1, "Trattamento4");
  39. 		Prenotazione pren5 = new Prenotazione(p1, "Trattamento5");
  40. 		Prenotazione pren6 = new Prenotazione(p3, "Trattamento6");
  41. 		o.assegnaPrenotazioneMedico(pren1);
  42. 		o.assegnaPrenotazioneMedico(pren2);
  43. 		o.assegnaPrenotazioneMedico(pren3);
  44. 		o.assegnaPrenotazioneMedico(pren4);
  45. 		o.assegnaPrenotazioneMedico(pren5);
  46. 		o.assegnaPrenotazioneMedico(pren6);
  47. 		o.assegnaPrenotazioneMedico(pren6);
  48. 		o.assegnaPrenotazioneMedico(pren6);
  49. 		o.assegnaPrenotazioneMedico(pren6);
  50. 		o.assegnaPrenotazioneMedico(pren6);
  51. 		o.assegnaPrenotazioneMedico(pren6);
  52. 		o.assegnaPrenotazioneMedico(pren6);
  53. 		o.assegnaPrenotazioneMedico(pren6);
  54.  
  55. 		System.out.println("-----------------------");
  56. 		o.stampaStatoMedici();
  57.  
  58. 		System.out.println("-----------------------");
  59. 		m2.curaProssimoPaziente(o);
  60. 		p1.stampaCartellaClinica();
  61. 		p2.stampaCartellaClinica();
  62.  
  63. 		o.assegnaPrenotazioneMedico(pren6);
  64. 		o.assegnaPrenotazioneMedico(pren6);
  65.  
  66. 		System.out.println("-----------------------");
  67. 		o.stampaStatoMedici();
  68.  
  69. 		System.out.println("-----------------------");
  70. 		m1.curaProssimoPaziente(o);
  71. 		m1.curaProssimoPaziente(o);
  72. 		m1.curaProssimoPaziente(o);
  73. 		m1.curaProssimoPaziente(o);
  74.  
  75. 		p1.stampaCartellaClinica();
  76. 		p2.stampaCartellaClinica();
  77. 		p3.stampaCartellaClinica();
  78. 	}
  79. }