-
Notifications
You must be signed in to change notification settings - Fork 0
/
ElencoConti.h
180 lines (177 loc) · 5.41 KB
/
ElencoConti.h
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#ifndef ELENCOCONTI_H
#define ELENCOCONTI_H
#include <Container.h>
#include <ContoBancario.h>
#include <ContoRisparmio.h>
#include <ContoCorrente.h>
#include <iostream>
using std::ostream;
/**
* @brief Classe ElencoConti.
* Incapsula le funzionalità di un contenitore di
* ContiBancari, in particolare l'interfaccia di
* "basso livello" con il Container.
*/
class ElencoConti
{
/**
* @brief Ridefinizione dell'operatore di output per
* stampare un ElencoConti.
*/
friend ostream& operator<<(ostream&, const ElencoConti&);
public:
/**
* @brief Classe ContoPtr.
* Rappresenta l'interfaccia per accedere a un generico Conto Bancario.
* Modella un puntatore smart a un ContoBancario.
*/
class ContoPtr {
private:
ContoBancario* punt;
public:
/**
* Costruttore di default. Permette la conversione
* ContoBancario* => ContoPtr.
*/
ContoPtr(ContoBancario* =0);
/**
* Costruttore di copia. Effettua una copia profonda.
*/
ContoPtr(const ContoPtr&);
/**
* Distruttore. Si occupa si deallocare il conto
* allocato sullo heap.
*/
~ContoPtr();
/**
* Operatore di assegnazione. Effettua una copia
* profonda.
*/
ContoPtr& operator=(const ContoPtr&);
/**
* Operatore di uguaglianza.
*/
bool operator==(const ContoPtr&) const;
/**
* Operatore di disuguaglianza.
*/
bool operator!=(const ContoPtr&) const;
/**
* Operatore di dereferenziazione. Permette
* il side-effect sul conto puntato.
*/
ContoBancario& operator*();
/**
* Operatore di dereferenziazione. Non permette
* il side-effect sul conto puntato.
*/
const ContoBancario& operator*() const;
/**
* Operatore di accesso a membro. Permette il
* side-effect sull'oggetto puntato.
*/
ContoBancario* operator->();
/**
* Operatore di accesso a membro. Non permette il
* side-effect sull'oggetto puntato.
*/
const ContoBancario* operator->() const;
/**
* Test sul nome dell'intestatario del conto. Accetta
* la wildcard "*".
*/
bool hasThisName(string = "*") const;
/**
* Test sul cognome dell'intestatario del conto. Accetta
* la wildcard "*".
*/
bool hasThisSurname(string ="*") const;
/**
* Test sul saldo del conto. Accetta la wildcard "*" e i
* confronti =, >, >=, <, <=.
*/
bool hasThisBalance(double, string = "*") const;
};
/**
* @brief Costruttore di default. Crea un nuovo elenco,
* e alloca sullo heap un nuovo contenitore di conti.
*/
ElencoConti();
/**
* @brief Distruttore
*/
~ElencoConti();
/**
* @brief Aggiunge un nuovo ContoBancario all'elenco
*/
void addNewContoBancario(string, string, double =0);
/**
* @brief Aggiunge un nuovo ContoBancario all'elenco
* se e solo se quest'ultimo non si trova già al
* suo interno.
*/
void addNewContoBancarioIfNotPresent(string, string, double =0);
/**
* @brief Aggiunge un nuovo ContoCorrente all'elenco
*/
void addNewContoCorrente(string, string, double =0);
/**
* @brief Aggiunge un nuovo ContoCorrente all'elenco
* se e solo se quest'ultimo non si trova già al
* suo interno.
*/
void addNewContoCorrenteIfNotPresent(string, string, double =0);
/**
* @brief Aggiunge un nuovo ContoRisparmio all'elenco
*/
void addNewContoRisparmio(string, string, double =0);
/**
* @brief Aggiunge un nuovo ContoRisparmio all'elenco
* se e solo se quest'ultimo non si trova già al
* suo interno.
*/
void addNewContoRisparmioIfNotPresent(string, string, double =0);
/**
* @brief Cancella un ContoBancario
*/
void deleteAccount(ContoPtr&);
/**
* @brief Cancella dall'elenco il ContoBancario
* puntato dall'iteratore passato come parametro.
*/
void deleteAccount(Container<ContoPtr>::Iterator);
/**
* Ricerca all'interno dell'elenco. Permette di fare ricerche per
* nome intestatario, cognome intestatario e saldo. È possibile
* utilizzare la wildcard "*" su tutti i campi e cercare sui saldi
* in base a valori =, <, <=, >, >=.
* @return Un Container di Iterator ai conti dell'elenco che puntano
* ai risultati della ricerca.
*/
Container<Container<ElencoConti::ContoPtr>::Iterator> search(string ="*", string="*", string="*", double=0.0) const;
/**
* Commissione di prelievo sui Conti Correnti.
*/
static double getCommissionePrelievoCC();
/**
* Commissione di deposito sui Conti Correnti.
*/
static double getCommissioneDepositoCC();
/**
* Numero di conti contenuti nell'elenco.
*/
int getNumConti() const;
/**
* Somma dei saldi di tutti i conti contenuti nell'elenco.
*/
double getSaldoTotale() const;
/**
* Accesso a un conto tramite un Iteratore.
* @return Un oggetto di tipo ContoPtr che punta al conto bancario
* indicato dall'Iterator.
*/
ContoPtr& getAccount(Container<ElencoConti::ContoPtr>::Iterator);
private:
Container<ContoPtr>* elenco;
};
#endif // ELENCOCONTI_H