-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDoctor.cpp
111 lines (94 loc) · 2.75 KB
/
Doctor.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "Doctor.hpp"
//--------------------------
// Mètodes privats auxiliars
//--------------------------
void Doctor::ordenarVisites(){
for(int i = 1; i < int(visites.size()); ++i){
Visita x = visites[i];
int j = i;
while(j > 0 and x.getData() < visites[j - 1].getData()){
visites[j] = visites[j - 1];
--j;
}
visites[j] = x;
}
}
//-------------
// Constructors
//-------------
Doctor::Doctor(){
nom = "";
visites = vector<Visita>(0, Visita(Data(), Pacient())); // L'inicialitzem sense elements, instanciats a visites buides
}
Doctor::Doctor(const string &nom){
this->nom = nom;
visites = vector<Visita>(0, Visita(Data(), Pacient())); // L'inicialitzem sense elements, instanciats a visites buides
}
Doctor::Doctor(const string &nom, vector<Visita> &visites){
this->nom = nom;
this->visites = visites;
}
Doctor::~Doctor(){
}
//-------------
// Consultors
//-------------
string Doctor::getName() const{
return nom;
}
//-------------
// Modificadors
//-------------
void Doctor::afegirVisita(Visita visita){
visites.push_back(visita);
}
void Doctor::eliminarVisita(Visita visita){
vector<Visita> aux(0, Visita(Data(), Pacient())); // L'inicialitzem sense elements, instanciats a visites buides
bool found = false;
int i = 0;
while(not found and i < int(visites.size())){
// Es copien tots els elements, fins el que es vol eliminar (aquest no el copiem)
if(not (visites[i].getData() == visita.getData() and (visites[i].getPacient().mateixesDades(visita.getPacient())))){
aux.push_back(visites[i]);
}
else{
found = true;
}
++i;
}
if(found){
while(i < int(visites.size())){
// Copia els elements restants
aux.push_back(visites[i]);
++i;
}
visites = aux;
}
else{
cout << " error" << endl;
}
}
void Doctor::eliminarVisites(Pacient &p){
vector<Visita> aux(0, Visita(Data(), Pacient())); // L'inicialitzem sense elements, instanciats a visites buides
for(int i = 0; i < int(visites.size()); ++i){
if(not visites[i].getPacient().mateixesDades(p)){
aux.push_back(visites[i]);
}
}
visites = aux;
}
//-----------
// L/E
//-----------
istream& operator>>(istream &is, Doctor &d){
is >> d.nom;
return is;
}
ostream& operator<<(ostream &os, Doctor &d){
os << " " << d.nom << endl;
d.ordenarVisites();
for(int i = 0; i < int(d.visites.size()); ++i){
os << " " << d.visites[i].getData().getDia() << "/" << d.visites[i].getData().getMes() << "/" << d.visites[i].getData().getAny() << " " << d.visites[i].getPacient().getNom() << endl;
}
return os;
}