/*
Uno studio medico ha 100 pazienti.
Per ogni paziente si mantiene una informazione sulla età (tra 14 e 90) e
sulle iniziali dei loro nomi e cognomi (due caratteri).
Assegnando a caso i dati relativi ai pazienti, si vuole un programma JAVA che consenta di sapere
a) i dati completi del paziente più anziano;
b) quanti pazienti hanno iniziali assegnate e superano una certa età.
Le iniziali e la età sono inserite con un dialogo interattivo da parte dell’utente.
*/
import javax.swing.JOptionPane;
class Paziente {
private int eta;
private String iniziali;
//costruttore
public Paziente() {
//inizializzo il paziente casualmente
eta = (int)(Math.random()*(90-14+1)+14);
iniziali = String.valueOf(letteracasuale()).
concat(String.valueOf(letteracasuale()));
}
//membro privato
private char letteracasuale() {
//estrae una lettera casuale tra A e Z
return (char)((int)(Math.random()*26+65));
}
//metodi pubblici
public String toString() {
return ("Paziente '" + iniziali + "' eta': " + eta);
}
public String getIniziali() {return iniziali;}
public int getEta() {return eta;}
}
class Studio {
//collezione di pazienti
private Paziente[] pazienti;
//membri privati
private int numpazienti;
private final int DEFAULT = 100;
//costruttori: ne faccio 2 (è più professionale)
public Studio() {
//#1. Nessun parametro, crea uno studio di default
numpazienti = DEFAULT;
creaPazienti();
}
public Studio(int numpazienti) {
//#2. un parametro, crea uno studio con num di paz. specificato.
this.numpazienti = numpazienti;
creaPazienti();
}
//crea i pazienti (usato dai costruttori)
private void creaPazienti() {
pazienti = new Paziente[numpazienti];
for (int c=0; c<numpazienti; c++)
pazienti[c] = new Paziente();
}
//membri pubblici
public int getNumPazienti() {return numpazienti;}
//restituisce il riferimento ad un singolo paziente
public Paziente getPaziente(int n) {return pazienti[n];}
//restituisce il paziente più anziano
public Paziente getAnziano() {
int max = 0, item = 0;
for (int c=0; c<numpazienti; c++)
if (pazienti[c].getEta() > max) {
max = pazienti[c].getEta();
item = c;
}
return pazienti[item];
}
//restituisce numero di pazienti che hanno iniziali specificate e > di eta
public int cercaPazienti(String iniziali, int eta) {
int count=0;
//determina quanti sono
for (int c=0; c<numpazienti; c++) {
if (pazienti[c].getIniziali().equals(iniziali) && pazienti[c].getEta()>eta) count++;
}
return count;
}
}
public class StudioMedico {
public static void main(String[] args) {
//Crea Studio medico con costruttore di default (100 pazienti)
Studio sm = new Studio(10);
for (;;) {
//Mostra i pazienti
String out = "Studio medico di " + sm.getNumPazienti() + " pazienti.\nElenco:\n";
for (int c=0; c<sm.getNumPazienti(); c++)
out += (c+1) + " " + sm.getPaziente(c) + "\n";
//Mostra più anziano
out += "\nIl paziente più anziano e' " + sm.getAnziano();
JOptionPane.showMessageDialog(null, out);
String iniz="";
int eta;
try { //previene errori nell'input dell'utente
do { //le iniziali devono essere DUE!
iniz = JOptionPane.showInputDialog("Inserisci Iniziali Paziente (solo 2 lettere)");
} while (iniz.length() != 2);
eta = Integer.parseInt(JOptionPane.showInputDialog("Inserisci età (0k per uscire)"));
} catch (Exception e) {eta=0;}
if (eta==0) break;
//Mostra ricerca
JOptionPane.showMessageDialog(null, "I pazienti con iniziali '"+iniz.toUpperCase()
+"' e maggiori di "+eta+" anni sono: " +
sm.cercaPazienti(iniz.toUpperCase(), eta));
}
System.exit(0);
}
}