-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcandidato.h
251 lines (215 loc) · 6.63 KB
/
candidato.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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#ifndef SRC_CANDIDATO_H_
#define SRC_CANDIDATO_H_
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
#include <utility>
#include <queue>
#include "sessao.h"
using namespace std;
/**
* @class candidato
* @brief classe com as informacoes relativas a um candidato
*/
class candidato {
string nome; ///< nome do candidato
string morada; ///< morada do candidato
int dia, mes ,ano; ///< dia de nascimento do candidato
string arte; ///< arte perfomativa do candidato
static int numeroInsc ; ///< variavel do tipo static para se atribuir um numero novo a cada candidato
int numero; ///< numero do candidato
priority_queue<sessao *> participacoes; ///< priority queue com as sessoes em que o candidato participa com prioridade de data mais recente
vector<pair<vector<int>, string> > indisponibilidades; ///<vetor de pares com as indisponibilidades e as respetivas razoes
bool desistiu;
public:
/**
* @brief constructor da class candidato (inicializa dia mes e ano a zero)
*
*/
candidato();
/**
* @brief destrutor de um objecto da class candidato
*
*/
~candidato();
/**
* @brief construtor de um objecto da class candidato
* @param nome nome do candidato
* @param morada morada do candidato
* @param dia dia (data de nascimento)do candidato
* @param mes mes (data de nascimento) do candidato
* @param ano ano (data de nascimento) do candidato
* @param arte arte do candidato
* @param indisp dias em que o candidato se encontra indisponivel e a razao
*/
candidato(string nome , string morada , int dia , int mes , int ano, string arte, vector<pair<vector<int>, string> > indisp);
/**
* @brief construtor da class candidato que recebe uma string (linha do ficheiro de texto referente a candidatos)
*
* @param info string que contem informacao sobre os membros do candidato
*/
candidato(string info);
/**
* @brief funcao que devolve o nome do candidato
* @return nome do candidato
*/
string getNome () const;
/**
* @brief funcao que devolve a morada do candidato
* @return morada do candidato
*/
string getMorada() const;
/**
* @brief funcao que devolve um vector de int com a data de nascimento do candidato (dia mes ano)
* @return vector<int> dia mes ano
*/
vector<int> getDataNascimento() const;
/**
*@brief funcao que devolve as indisponibilidades do candidato
*@return vetor de pairs com as indisponibilidades em forma de vetor e a respetiva razao
*/
vector<pair<vector<int>, string> > getIndisponibilidades() const;
/**
* @brief funcao que devolve a arte em que o candidato se considera mais apto
*
* @return arte performativa do candidato
*/
string getArte() const;
/**
* @brief funcao que devolve o numero de inscricao do candidato
*
* @return numero de inscricao do candidato
*/
int getNumero() const;
/**
* @brief funcao que devolve um vector com as sessoes em que o candidato participou
*
* @return priority queue com as participacoes do candidato
*/
priority_queue<sessao *> getParticipacoes() const ;
/**
* @brief funcao que devolve uma bool se o candidato desistiu
*
* @return bool true se desistiu, false se nao
*/
bool getDesistiu() const;
/**
* @brief altera nome do candidato
*
* @param nome string com o nome para alterar
*/
void setNome(string nome) ;
/**
* @brief altera morada do candidato
*
* @param morada string com a morada para alterar
*/
void setMorada(string morada);
/**
* @brief altera data de nascimento ( dia mes ano) do candidato
*
* @param v vector que contem o dia mes e ano (nesta sequencia)
*/
void setData (vector<int> v);
/**
* @brief altera arte do candidato
*
* @param arte string com a arte a alterar
*/
void setArte(string arte);
/**
* @brief altera se um candidato desisitiu
* @param d bool para que se pretende alterar
*/
void setDesistiu(bool d);
/**
* @brief adiciona um apontador de um objeto da class sessao as participacoes do candidato
*
* @param sessao nova sessao a adicionar
*
*/
void adicionaSessao(sessao* sessao);
/**
* @brief remove uma sessao das participacoes do candidato
* @param sessao sessao a remover
*/
void removeSessao(sessao* sessao);
/**
* @brief overload do operador << para a classe candidato (ostream)
*/
friend ostream & operator<<(ostream & o, const candidato & c);
/**
* @brief overload do operador << para a classe candidato (fstream)
*/
friend ofstream & operator<<(ofstream & o, const candidato & c);
/**
* @brief verifica se o candidato ja tem alguma sessao naquele dia
* @return true se sim, false se nao;
*/
bool candidatoOcupado(vector<int> data);
/**
* @brief overload do operador < para a elementos da classe candidato
*/
bool operator<(const candidato c2) const;
};
/**
* @class candidatoNaoExiste
* @brief excepcao para quando um objeto da classe candidato nao existe
*/
class candidatoNaoExiste {
public:
string nome;///< nome do candidato
int numero; ///< numero do candidato
/**
* @brief constructor da excepcao candidatoNaoExiste (numero fica a 0)
* @param nome nome do candidato
*/
candidatoNaoExiste(string nome) {this->nome = nome; this->numero = 0;}
/**
* @brief constructor da excepcao candidatoNaoExiste (nome fica como uma sting vazia)
* @param numero numero do candidato
*/
candidatoNaoExiste(int numero) {this->nome = ""; this->numero = numero;};
};
/**
* @brief overload do operador<< para elementos da class candidatoNaoExiste
*/
std::ostream & operator<<(std::ostream &out, const candidatoNaoExiste &c);
/**
* @class candidatoJaExiste
* @brief excepcao para quando um objeto da classe candidato ja existe
*/
class candidatoJaExiste {
public:
string nome; ///< nome do candidato
/**
* @brief constructor da excepcao candidatoJaExiste
* @param nome nome do candidato
*/
candidatoJaExiste(string nome) {this->nome = nome;}
};
/**
* @brief overload do operador<< para elementos da class candidatoJaExiste
*/
std::ostream & operator<<(std::ostream &out, const candidatoJaExiste &c);
/**
* @class candidatoOcupado
* @brief excepcao para quando um objeto da classe candidato ja ja se encontra ocupado num determinado dia
*/
class candidatoOcupado {
public:
int numero; ///< numero do candidato
vector<int> data; ///< data em que se encontra ocupado
/**
* @brief constructor da excepcao candidatoOcupado
* @param numero numero do candidato
* @param data data em que esta ocupado
*/
candidatoOcupado(int numero, vector<int> data) {this->numero = numero; this->data = data;}
};
/**
* @brief overload do operador<< para elementos da class candidatoOcupado
*/
std::ostream & operator<<(std::ostream &out, const candidatoOcupado &c);
#endif /* SRC_CANDIDATO_H_ */