-
Notifications
You must be signed in to change notification settings - Fork 1
/
menu.h
273 lines (233 loc) · 7.5 KB
/
menu.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
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
#pragma once
#include <stack>
#include <algorithm>
#include "Managing.h"
#define MAIN_MENU 0
#define CONSULTAS_MENU 1
#define MODIFICACOES_MENU 2
#define PEDIDOS_MENU 3
#define ALUNOS_MENU 4
#define ESTUDANTES_MENU 5
#define HORARIOS_MENU 6
#define HORARIO_ALUNO 7
#define HORARIO_TURMA 8
#define HORARIO_UC 9
#define TURMA_MENU 10
#define TURMAS_MENU 11
#define UCS_MENU 12
#define ANOS_MENU 13
#define INSCREVER_ALUNO_MENU 14
#define DESINSCREVER_ALUNO_MENU 15
#define ALUNOS_ANO 16
#define ALUNOS_UC 17
#define PERMUTACAO_MENU 18
#define TROCA_SINGULAR 19
#define TROCA_DUPLA 20
#define TURMAS_DECRESCENTE_MENU 21
#define TURMAS_CRESCENTE_MENU 22
#define UCS_DECRESCENTE_MENU 23
#define UCS_CRESCENTE_MENU 24
#define LISTAR_PEDIDOS_MENU 25
#define PEDIDOS_ARQUIVADOS_MENU 26
#define EFETIVADOS_MENU 27
#define ANOS_CRESCENTE_MENU 28
#define ANOS_DECRESCENTE_MENU 29
#define TURMAS_ANO_MENU 30
#define TURMAS_UC_MENU 31
#define TURMAS_ORDEM_MENU 32
#define ESTUDANTES_NUCS 33
class Menu {
public:
Menu();
/**
*@brief
* Imprime o menu inicial. Fica à espera de input do utilizador. O(1).
*/
void mainMenu();
private:
/**
* @brief
* Atualiza o menu, consoante o menu que se encontra no topo da stack. O(1).
*/
void getMenu();
/**
* @brief
* Menu que contém todas as categorias de listagens (Alunos, Turmas, Horários, etc). O(1).
*/
void consultasMenu();
/**
* @brief
* Menu que mostra todas as modificações possíveis (mudanças de turma, inscrição, permutações). O(1).
*/
void modificacoesMenu();
/**
* @brief
* Menu que permite gerir os pedidos efetuados no menu de modificações: ver pedidos em espera, ver pedidos arquivados, efetuar pedidos. O(1).
*/
void efetivacaoMenu();
/**
* @brief
* Menu que mostra todas as listagens possíveis relativamente aos alunos (alunos inscritos, alunos inscritos por ano, alunos inscritos por UC, etc...). O(1).
*/
void alunosMenu();
/**
* @brief
* Menu que mostra todas as lsitagens possíveis relativamente às turmas (turmas por nº de alunos, turmas de um ano, etc). O(1).
*/
void turmasMenu();
/**
* @brief
* Mostra os tipos de listagens para as turmas (crescente/decrescente). O(1).
*/
void turmasOrdemMenu();
/**
* @brief
* Mostra as turmas por ordem decrescente de número de alunos. O(n log(n)).
*/
void turmasDecrescenteMenu();
/**
* @brief
* Mostra as turmas por ordem decrescente de número de alunos. O(n³), por chamar m.getOcupacaoTurmas() que tem complexidade O(n³).
*/
void turmasCrescenteMenu();
/**
* @brief
* Mostra a ocupação de turmas por ano. O(n³), por chamar m.getOcupacaoTurmas() que tem complexidade O(n³).
*/
void turmasAnoMenu();
/**
* @brief
* Mostra a ocupação de uma turma de uma UC. O(n³), por chamar m.getOcupacaoTurmas() que tem complexidade O(n³).
*/
void turmasUcMenu();
/**
* @brief
* Mostra listagens possíveis para as UCS. O(1). Em caso de o utilizador querer ver ocupação de uma UC de um ano (opção 3), O(n³) por chamar m.getOcupacaoUCS(), que tem complexidade O(n³).
*/
void ucsMenu();
/**
* @brief
* UCs por ordem decrescente de número de alunos. O(n³) por chamar m.getOcupacaoUCS(), que tem complexidade O(n³).
*/
void ucsDecrescenteMenu();
/**
* @brief
* UCs por ordem decrescente de número de alunos. O(n³) por chamar m.getOcupacaoUCS(), que tem complexidade O(n³).
*/
void ucsCrescenteMenu();
/**
* @brief
* Mostra listagens possíveis para os anos curriculares. O(1).
*/
void anosMenu();
/**
* @brief
* Mostra anos por ordem crescente de alunos. O(n²) por chamar m.getOcupacaoYear(), que tem complexidade O(n²).
*/
void anosCrescenteMenu();
/**
* @brief
* Mostra anos por ordem decrescente de alunos. O(n²) por chamar m.getOcupacaoYear(), que tem complexidade O(n²).
*/
void anosDecrescenteMenu();
/**
* @brief
* Mostra listagens possíveis para os horários. O(1).
*/
void horariosMenu();
/**
* @brief
* Mostra o horário de um aluno. O(n²) por chamar m.getStudentSchedule() que tem complexidade O(n²).
*/
void horarioAluno();
/**
* @brief
* Mostra o horário de uma UC. O(n²).
*/
void horarioUc();
/**
* @brief
* Mostra o horário de uma turma (sem estar associada a uma UC). O(n²).
*/
void horarioTurma();
/**
* @brief
* Mostra o menu de opções possíveis para listar estudantes (ordem alfabética/up(. O(n log(n)) por chamar a função chooseStudentOrder(...).
*/
void estudantesMenu();
/**
* @brief
* Mostra os alunos por turma (turma+uc). O(n²).
*/
void turmaMenu();
/**
* @brief
* Menu que vai pedindo info ao utilizador para a inscrição de um aluno. Chama a função inscricao(...), que tem complexidade ~O(n).
*/
void inscreverAluno();
/**
* @brief
* Desinscreve um aluno de uma turma. A desinscrição é imediata (não constitui um pedido) porque não carece de verificação de desequilíbrios/overlapping slots/etc. O(n).
*/
void desinscreverAluno();
/**
* @brief
* Menu inicial que pede info ao utilizador para ver alunos de um ano. O(n log(n)) por chamar a função chooseStudentOrder(...).
*/
void alunosAno();
/**
* @brief
* Mostra os alunos de uma UC. ~O(n²).
*/
void alunosUC();
/**
* @brief
* Menu que lista opções possíveis para trocas (trocar turma de estudante, trocar entre dois estudantes). O(1).
*/
void permutacaoMenu();
/**
* @brief
* Menu que trata de pedidos de mudança de turma de um aluno. ~O(n log(n)).
*/
void trocaSingular();
/**
* @brief
* Menu que trata de pedidos de mudança de turma entre dois alunos. ~O(n log(n)).
*/
void trocaDupla();
/**
* @brief
* Trata da inscrição de um aluno em turmas. ~O(n log(n)).
* @param year ano curricular.
* @param courseUnit unidade curricular para inscrição.
* @param turma turma da unidade curricular para inscrição.
* @param turmas vetor de turmas que armazena todas as turmas para onde o estudante quer ir caso eventualmente ele queira uma inscrição em várias.
*/
void inscricao(char& year, string& courseUnit, string& turma, vector<Turma>& turmas);
/**
* @brief
* Lista todos os pedidos ainda não processados/efetivados. O(1) se não existirem; O(n) se existirem -> n = número de pedidos.
*/
void listarPedidos();
/**
* @brief
* Lista todos os pedidos arquivados (arquivados == rejeitados por incompatibilidade). O(1) se não existirem; O(n) se existirem -> n = número de pedidos rejeitados.
*/
void pedidosArquivados();
/**
* @brief
* Trata do processamento/efetivação dos pedidos. Se existirem pedidos para efetivar.
*/
void efetivadosMenu();
/**
* @brief
* Menu que pede a ordem da listagens dos estudantes. O(n log(n)) porque chama a função sortStudentsByName(), que é O(n log(n)).
*/
void chooseStudentsOrder(set<Student*, studComp>);
/**
* @brief
* Menu que lista os estudantes com mais de n UCs. O(n log(n)), porque chama a função m.sortStudentsByNUCS().
*/
void estudantesNUCS();
std::stack<short int> menuState;
};