codice:
#include <iostream>
using namespace std;
class Paziente
{
friend ostream & operator<<(ostream & o, const Paziente & p);
private:
string nomePaziente;
int eta;
int n_ricoveri;
public:
Paziente (){};
Paziente (string npaz,int e,int nr):nomePaziente(npaz),eta(e),n_ricoveri(nr){};
string _nomePaz()const
{
return nomePaziente;
};
int _eta()const
{
return eta;
};
int _n_ricoveri()
{
return n_ricoveri;
};
bool operator == (const Paziente& p2)const
{
return(nomePaziente==p2.nomePaziente);
}
};
class Reparto
{
friend ostream & operator<<(ostream & o, const Reparto & r);
private:
string nomeReparto;
string nomePrimario;
float orari;
Paziente* pPaziente;
int n_paz;
public:
Reparto(){};
Reparto(string nrep,string np,float o):nomeReparto(nrep),nomePrimario(np),orari(o),n_paz(0),pPaziente(NULL){};
string _nomeRep()
{
return nomeReparto;
};
string _nomePrim()
{
return nomePrimario;
};
float _orari()
{
return orari;
};
const Paziente* pPaz()const
{
return pPaziente;
};
int _n_paz()const
{
return n_paz;
};
void agg_Paz (const Paziente& p)
{
Paziente* tmp1= new Paziente[++n_paz];
for(int a=0;a<n_paz-1;a++)
tmp1[a]=pPaziente[a];
tmp1[n_paz-1]=p;
delete[]pPaziente;
pPaziente=tmp1;
}
void stampa()
{
for(int a=0;a<n_paz;a++)
cout<<pPaziente[a];
}
};
class Ospedale
{
friend ostream & operator<<(ostream & o, const Ospedale & os);
private:
string nomeOsp;
string citta;
Reparto* pRep;
int nRep;
public:
Ospedale(){};
Ospedale(string no,string c):nomeOsp(no),citta(c),nRep(0),pRep(NULL){};
string _nomeOsp()
{
return nomeOsp;
};
string _citta()
{
return citta;
};
Reparto* _pRep()
{
return pRep;
};
int _nRep()const
{
return nRep;
};
void agg_Rep(const Reparto& r)
{
Reparto* tmp=new Reparto[++nRep];
for(int a=0;a<nRep-1;a++)
tmp[a]=pRep[a];
tmp[nRep-1]=r;
delete[]pRep;
pRep=tmp;
}
void stampa_rep()
{
for(int a=0;a<nRep;a++)
cout<<pRep[a]<<endl<<endl;
}
//Metodo che riceve un orario o e restituisce il nome dei reparti in cui
//è possibile effettuare visite all'orario o.
string* elenco_reparti(float o)
{
int cont=0;
for (int a=0;a<nRep;a++)
if(pRep[a]._orari()==o)
cont++;
string* tmp=new string[cont];
int i=0;
for (int a=0;a<nRep;a++)
if(pRep[a]._orari()==o)
{
tmp[i]=pRep[a]._nomeRep();
i++;
}
cout<<"L'ospedale in cui e' possibile ricevere visite all'orario "<<o<<" sono:"<<endl<<endl;
for(int a=0;a<cont;a++)
cout<<tmp[a]<<endl<<endl;
};
//Metodo della che restituisce il nome del primario del reparto in cui è
//ricoverato il degente più anziano.
string primario()
{
int max=0;
int i=0;
for(int a=0;a<nRep;a++)
for(int b=0;b<pRep[0]._n_paz();b++)
if(pRep[a].pPaz()[b]._eta()>max)
{
max=pRep[a].pPaz()[b]._eta();
i=a;
}
cout<<"Il primario del reparto in cui e' ricoverao il degente piu' anziano e': "<<endl;
return pRep[i]._nomePrim();
}
//Metodo che riceve il nome di due reparti e restituisce il nome
//dei pazienti ricoverati in entrambi i reparti ordinati per età.
string degenti(Reparto &r1,Reparto &r2)
{
int cont=0;
for(int a=0;a<r1._n_paz();a++)
for(int b=0;b<r2._n_paz();b++)
if(r1.pPaz()[a]._nomePaz()==r2.pPaz()[b]._nomePaz())
cont++;
Paziente* tmp = new Paziente[cont];
int i=0;
for(int a=0;a<r1._n_paz();a++)
for(int b=0;b<r2._n_paz();b++)
if(r1.pPaz()[a]._nomePaz()==r2.pPaz()[b]._nomePaz())
{
tmp[i]=r1.pPaz()[a];
i++;
}
int max=0;
Paziente* tmp1 = new Paziente[cont];
for(int a=0;a<cont;a++)
if(tmp[a]._eta()>max)
{
max=tmp[a]._eta();
tmp1[a]=tmp[a];
tmp[a]=tmp[a+1];
tmp[a+1]=tmp1[a];
}
for(int a=0;a<cont;a++)
cout<<tmp[a]._nomePaz();
}
};
ostream & operator<<(ostream & o, const Reparto & r)
{
o<<"NOME REPARTO: "<<r.nomeReparto<<endl;
o<<"PRIMARIO: "<<r.nomePrimario<<endl;
o<<"ORARIO: "<<r.orari<<endl<<endl;
}
ostream & operator<<(ostream & o, const Paziente & p)
{
o<<"NOME PAZIENTE: "<<p.nomePaziente<<endl;
o<<"ETÀ: "<<p.eta<<endl;
o<<"NUMERO RICOVERI: "<<p.n_ricoveri<<endl<<endl;
}
ostream & operator<<(ostream & o, const Ospedale & os)
{
o<<os.nomeOsp;
}
main()
{
Ospedale O1("\t\t\t\tButchery Hospital","Rc");
cout<<O1<<endl<<endl<<endl;
Paziente p1 ("Leo",55,3);
Paziente p2 ("Andrea",13,1);
Paziente p3 ("Carlo",24,2);
Paziente p4 ("Cosimo",78,13);
Reparto r1 ("Chirurgia","Dot. Andrea",9.31);
Reparto r2 ("Neurologia","Dot. Leo",7.45);
Reparto r3 ("Oncologia","Dot. Carlo",8.31);
Reparto r4 ("Ginecologia","Dott.sa Chiara",15.45);
Reparto r5 ("Dermatologia","Dot. Nicola",8.15);
Reparto r6 ("Psichiatria","Dot. Cosimo",7.45);
r6.agg_Paz (p1); //problema
r6.agg_Paz (p2);
r2.agg_Paz (p4);
r2.agg_Paz (p1);
r2.agg_Paz (p3);
O1.agg_Rep(r1);
O1.agg_Rep(r2);
O1.agg_Rep(r3);
O1.agg_Rep(r4);
O1.agg_Rep(r5);
O1.agg_Rep(r6);
O1.stampa_rep();
O1.elenco_reparti(7.45);
cout<<O1.primario()<<endl<<endl;
O1.degenti(r2,r6);
system ("PAUSE");
return 0;
}