Sistema condomínio  v1.0
administrador.cpp
Ir para a documentação deste ficheiro.
1 #include <iostream>
2 #include <vector>
3 #include <fstream>
4 #include <limits>
5 
6 #include "administrador.hpp"
7 
8 using namespace std;
9 
11  cout << "1- Cadastrar Residente" << endl;
12  cout << "2- Cadastrar Funcionário" << endl;
13  cout << "3- Listar Residentes" << endl;
14  cout << "4- Listar Funcionários" << endl;
15  cout << "5- Remover Residente" << endl;
16  cout << "6- Remover Funcionário" << endl;
17  cout << "7- Buscar Residente" << endl;
18  cout << "8- Buscar Funcionário" << endl;
19  cout << "9- Sair" << endl;
20 }
21 
22 void Administrador::lerArquivo(string nomeArquivo){
23  string nome, cpf, dataNascimento, dataEntrada, dataSaida, telefone, email, matricula, funcao, setor, turno;
24  int predio, apartamento, andar, vagaGaragem;
25  float cargaHoraria, salario;
26  vector<string> linhas;
27  fstream arquivo;
28 
29  arquivo.open(nomeArquivo + ".txt", ios::in | ios::app);
30 
31  if(arquivo.is_open()){
32  string linha;
33 
34  while(getline(arquivo, linha)){
35  linhas.push_back(linha);
36  }
37 
38  arquivo.close();
39  } else{
40  cout << "Erro ao abrir o arquivo!" << endl;
41  }
42 
43  for(int i = 0; i < linhas.size(); i+= 4){
44  nome = linhas[i];
45  cpf = linhas[i + 1];
46  dataNascimento = linhas[i + 2];
47 
48  if(nomeArquivo == "archives/residentes"){
49  predio = stoi(linhas[i + 3]);
50  apartamento = stoi(linhas[i + 4]);
51  andar = stoi(linhas[i + 5]);
52  vagaGaragem = stoi(linhas[i + 6]);
53  dataEntrada = linhas[i + 7];
54  dataSaida = linhas[i + 8];
55  telefone = linhas[i + 9];
56  email = linhas[i + 10];
57 
58  Residentes novoResidente(nome, cpf, dataNascimento, predio, apartamento, andar, vagaGaragem, dataEntrada, dataSaida, telefone, email);
59  residentes.push_back(novoResidente);
60 
61  i += 8;
62  } else{
63  matricula = linhas[i + 3];
64  funcao = linhas[i + 4];
65  setor = linhas[i + 5];
66  cargaHoraria = stof(linhas[i + 6]);
67  salario = stof(linhas[i + 7]);
68  turno = linhas[i + 8];
69 
70  if(nomeArquivo == "archives/zeladores"){
71  Zelador novoZelador(nome, cpf, dataNascimento, matricula, funcao, setor, cargaHoraria, salario, turno, true);
72  zeladores.push_back(novoZelador);
73  }
74 
75  if(nomeArquivo == "archives/segurancas"){
76  Seguranca novoSeguranca(nome, cpf, dataNascimento, matricula, funcao, setor, cargaHoraria, salario, turno, true);
77  segurancas.push_back(novoSeguranca);
78  }
79  i += 6;
80  }
81  }
82 }
83 
84 void Administrador::atualizarArquivo(string nomeArquivo){
85  fstream arquivo;
86 
87  arquivo.open(nomeArquivo + ".txt", ios::out);
88 
89  if(arquivo.is_open()){
90  if(nomeArquivo == "archives/residentes"){
91  for(int i = 0; i < residentes.size(); i++){
92  arquivo << residentes[i].getNome() << endl;
93  arquivo << residentes[i].getCpf() << endl;
94  arquivo << residentes[i].getDataNascimento() << endl;
95  arquivo << residentes[i].getPredio() << endl;
96  arquivo << residentes[i].getApartamento() << endl;
97  arquivo << residentes[i].getAndar() << endl;
98  arquivo << residentes[i].getVagaGaragem() << endl;
99  arquivo << residentes[i].getDataEntrada() << endl;
100  arquivo << residentes[i].getDataSaida() << endl;
101  arquivo << residentes[i].getTelefone() << endl;
102  arquivo << residentes[i].getEmail() << endl;
103  arquivo << endl;
104  }
105  } else if(nomeArquivo == "archives/zeladores"){
106  for(int i = 0; i < zeladores.size(); i++){
107  arquivo << zeladores[i].getNome() << endl;
108  arquivo << zeladores[i].getCpf() << endl;
109  arquivo << zeladores[i].getDataNascimento() << endl;
110  arquivo << zeladores[i].getMatricula() << endl;
111  arquivo << zeladores[i].getFuncao() << endl;
112  arquivo << zeladores[i].getSetor() << endl;
113  arquivo << zeladores[i].getCargaHoraria() << endl;
114  arquivo << zeladores[i].getSalario() << endl;
115  arquivo << zeladores[i].getTurno() << endl;
116  arquivo << endl;
117  }
118  } else if(nomeArquivo == "archives/segurancas"){
119  for(int i = 0; i < segurancas.size(); i++){
120  arquivo << segurancas[i].getNome() << endl;
121  arquivo << segurancas[i].getCpf() << endl;
122  arquivo << segurancas[i].getDataNascimento() << endl;
123  arquivo << segurancas[i].getMatricula() << endl;
124  arquivo << segurancas[i].getFuncao() << endl;
125  arquivo << segurancas[i].getSetor() << endl;
126  arquivo << segurancas[i].getCargaHoraria() << endl;
127  arquivo << segurancas[i].getSalario() << endl;
128  arquivo << segurancas[i].getTurno() << endl;
129  arquivo << endl;
130  }
131  }
132  } else{
133  cout << "Erro ao abrir o arquivo!" << endl;
134  }
135 }
136 
137 int Administrador::lerInt(int numero, std::string msg){
138  bool flag = false;
139 
140  do{
141  try{
142  cout << msg;
143  cin >> numero;
144  if(cin.fail()){
145  throw runtime_error("\n---Erro: Digite um número inteiro!---\n");
146  } else{
147  flag = true;
148  }
149  } catch(runtime_error &e){
150  cout << e.what() << endl;
151  cin.clear();
152  cin.ignore(numeric_limits<streamsize>::max(), '\n');
153  }
154  } while(!flag);
155 
156  return numero;
157 }
158 
159 float Administrador::lerFloat(float numero, std::string msg){
160  bool flag = false;
161 
162  do{
163  try{
164  cout << msg;
165  cin >> numero;
166  if(cin.fail()){
167  throw runtime_error("\n---Erro: Digite um número real!---\n");
168  } else{
169  flag = true;
170  }
171  } catch(runtime_error &e){
172  cout << e.what() << endl;
173  cin.clear();
174  cin.ignore(numeric_limits<streamsize>::max(), '\n');
175  }
176  } while(!flag);
177 
178  return numero;
179 }
180 
182  string nome, cpf, dataNascimento, dataEntrada, dataSaida, telefone, email;
183  int predio, apartamento, andar, vagaGaragem;
184 
185  system("clear||cls");
186  cout << "---Casdastro de Residente---" << endl;
187  cout << "Nome: ";
188  cin.ignore();
189  getline(cin, nome);
190 
191  cout << "CPF: ";
192  getline(cin, cpf);
193 
194  cout << "Data de Nascimento: ";
195  getline(cin, dataNascimento);
196 
197  predio = lerInt(predio, "Número do Prédio: ");
198 
199  apartamento = lerInt(apartamento, "Número do Apartamento: ");
200 
201  andar = lerInt(andar, "Número do Andar: ");
202 
203  vagaGaragem = lerInt(vagaGaragem, "Número da Vaga de Garagem: ");
204 
205  cout << "Data de Entrada: ";
206  cin.ignore();
207  getline(cin, dataEntrada);
208 
209  cout << "Data de Saída: ";
210  getline(cin, dataSaida);
211 
212  cout << "Telefone: ";
213  getline(cin, telefone);
214 
215  cout << "E-mail: ";
216  getline(cin, email);
217 
218  Residentes novoResidente(nome, cpf, dataNascimento, predio, apartamento, andar, vagaGaragem, dataEntrada, dataSaida, telefone, email);
219  residentes.push_back(novoResidente);
220 
221  system("clear || cls");
222 
223  cout << "---Residente cadastrado com sucesso!\n" << endl;
224 }
225 
227  string nome, cpf, dataNascimento, matricula, funcao, setor, turno;
228  float cargaHoraria, salario;
229 
230  system("clear||cls");
231 
232  cout << "---Cadastro de Funcionário---" << endl;
233  cin.ignore();
234  cout << "Nome: ";
235  getline(cin, nome);
236 
237  cout << "CPF: ";
238  getline(cin, cpf);
239 
240  cout << "Data de Nascimento: ";
241  getline(cin, dataNascimento);
242 
243  cout << "Matrícula: ";
244  getline(cin, matricula);
245 
246  cout << "Função: ";
247  getline(cin, funcao);
248 
249  cout << "Setor: ";
250  getline(cin, setor);
251 
252  cargaHoraria = lerFloat(cargaHoraria, "Carga Horária: ");
253 
254  salario = lerFloat(salario, "Salário: ");
255 
256  cout << "Turno: ";
257  cin.ignore();
258  getline(cin, turno);
259 
260  system("clear || cls");
261 
262  if(funcao == "Zelador" || funcao == "zelador"){
263  Zelador novoZelador(nome, cpf, dataNascimento, matricula, funcao, setor, cargaHoraria, salario, turno, false);
264  zeladores.push_back(novoZelador);
265 
266  cout << "---Zelador cadastrado com sucesso!\n" << endl;
267  } else if(funcao == "Segurança" || funcao == "segurança"){
268  Seguranca novoSeguranca(nome, cpf, dataNascimento, matricula, funcao, setor, cargaHoraria, salario, turno, false);
269  segurancas.push_back(novoSeguranca);
270 
271  cout << "---Segurança cadastrado com sucesso!\n" << endl;
272  } else{
273  cout << "\n---Função inválida!" << endl;
274  cout << "---As funções válidas são: Zelador e Segurança\n" << endl;
275  }
276 }
277 
279  system("clear || cls");
280  if(residentes.size() == 0){
281  cout << "---Não há residentes cadastrados!---\n" << endl;
282  } else{
283  cout << "--------Lista de Residentes--------" << endl;
284  for(int i = 0; i < residentes.size(); i++){
285  cout << "---Residente N°" << i + 1 << endl;
286  cout << "Nome: " << residentes[i].getNome() << endl;
287  cout << "CPF: " << residentes[i].getCpf() << endl;
288  cout << "Data de Nascimento: " << residentes[i].getDataNascimento() << endl;
289  cout << "Número do Prédio: " << residentes[i].getPredio() << endl;
290  cout << "Número do Apartamento: " << residentes[i].getApartamento() << endl;
291  cout << "Número do Andar: " << residentes[i].getAndar() << endl;
292  cout << "Número da Vaga de Garagem: " << residentes[i].getVagaGaragem() << endl;
293  cout << "Data de Entrada: " << residentes[i].getDataEntrada() << endl;
294  cout << "Data de Saída: " << residentes[i].getDataSaida() << endl;
295  cout << "Telefone: " << residentes[i].getTelefone() << endl;
296  cout << "E-mail: " << residentes[i].getEmail() << endl;
297  cout << "-----------------------------------";
298  cout << endl;
299  }
300  }
301 }
302 
304  system("clear || cls");
305  cout << "-----------Lista de Funcionários-----------" << endl;
306 
307  if(zeladores.size() == 0){
308  cout << "\n---Não há zeladores cadastrados!---\n" << endl;
309  } else{
310  cout << "---Lista de Zeladores---" << endl;
311  for(int i = 0; i < zeladores.size(); i++){
312  cout << "Zelador N°" << i + 1 << endl;
313  cout << "Nome: " << zeladores[i].getNome() << endl;
314  cout << "CPF: " << zeladores[i].getCpf() << endl;
315  cout << "Data de Nascimento: " << zeladores[i].getDataNascimento() << endl;
316  cout << "Matrícula: " << zeladores[i].getMatricula() << endl;
317  cout << "Função: " << zeladores[i].getFuncao() << endl;
318  cout << "Setor: " << zeladores[i].getSetor() << endl;
319  cout << "Carga Horária: " << zeladores[i].getCargaHoraria() << endl;
320  cout << "Salário: " << zeladores[i].getSalario() << endl;
321  cout << "Turno: " << zeladores[i].getTurno() << endl;
322  cout << "-----------------------------------";
323  cout << endl;
324  }
325  }
326 
327  if(segurancas.size() == 0){
328  cout << "---Não há seguranças cadastrados!---\n" << endl;
329  } else{
330  cout << "---Lista de Seguranças---" << endl;
331  for(int i = 0; i < segurancas.size(); i++){
332  cout << "Segurança N°" << i + 1 << endl;
333  cout << "Nome: " << segurancas[i].getNome() << endl;
334  cout << "CPF: " << segurancas[i].getCpf() << endl;
335  cout << "Data de Nascimento: " << segurancas[i].getDataNascimento() << endl;
336  cout << "Matrícula: " << segurancas[i].getMatricula() << endl;
337  cout << "Função: " << segurancas[i].getFuncao() << endl;
338  cout << "Setor: " << segurancas[i].getSetor() << endl;
339  cout << "Carga Horária: " << segurancas[i].getCargaHoraria() << endl;
340  cout << "Salário: " << segurancas[i].getSalario() << endl;
341  cout << "Turno: " << segurancas[i].getTurno() << endl;
342  cout << "-----------------------------------";
343  cout << endl;
344  }
345  }
346 }
347 
349  string cpf;
350  bool residenteEncontrado = false;
351 
352  system("clear || cls");
353  cout << " ---Remover Residente---" << endl;
354  cout << "Digite o CPF do Residente (000.000.000-00): ";
355  cin.ignore();
356  getline(cin, cpf);
357 
358  for(int i = 0; i < residentes.size(); i++){
359  if(residentes[i].getCpf() == cpf){
360  residentes.erase(residentes.begin() + i);
361  residenteEncontrado = true;
362  break;
363  }
364  }
365 
366  if(residenteEncontrado){
367  cout << "---Residente removido com sucesso!\n" << endl;
368  } else{
369  cout << "---Residente não encontrado!\n" << endl;
370  }
371 }
372 
374  string matricula, funcao;
375  bool funcionarioEncontrado = false, flag = false;
376 
377  system("clear || cls");
378  cout << " ---Remover Funcionário---" << endl;
379  cin.ignore();
380 
381  do{
382  try{
383  cout << "Função do Funcionário: ";
384  getline(cin, funcao);
385 
386  if(funcao != "Zelador" && funcao != "zelador" && funcao != "Segurança" && funcao != "segurança"){
387  throw runtime_error("---Erro: Função inválida!---\n");
388  } else{
389  flag = true;
390  }
391  } catch(runtime_error &e){
392  cout << e.what() << endl;
393  cin.clear();
394  }
395  } while(!flag);
396 
397  cout << "Digite a Matrícula do Funcionário: ";
398  getline(cin, matricula);
399 
400  if(funcao == "Zelador" || funcao == "zelador"){
401  for(int i = 0; i < zeladores.size(); i++){
402  if(zeladores[i].getMatricula() == matricula){
403  zeladores.erase(zeladores.begin() + i);
404  funcionarioEncontrado = true;
405  break;
406  }
407  }
408  } else if(funcao == "Segurança" || funcao == "segurança"){
409  for(int i = 0; i < segurancas.size(); i++){
410  if(segurancas[i].getMatricula() == matricula){
411  segurancas.erase(segurancas.begin() + i);
412  funcionarioEncontrado = true;
413  break;
414  }
415  }
416  }
417 
418  if(funcionarioEncontrado){
419  cout << "---Funcionário removido com sucesso!---\n" << endl;
420  } else{
421  cout << "\n---Funcionário não encontrado!---\n" << endl;
422  }
423 }
424 
426  string cpf;
427  bool residenteEncontrado = false;
428 
429  system("clear || cls");
430  cout << " ---Buscar Residente---" << endl;
431  cout << "Digite o CPF do Residente (000.000.000-00): ";
432  cin.ignore();
433  getline(cin, cpf);
434 
435  for(int i = 0; i < residentes.size(); i++){
436  if(residentes[i].getCpf() == cpf){
437  cout << "-------Residente encontrado!-------" << endl;
438  cout << "Nome: " << residentes[i].getNome() << endl;
439  cout << "CPF: " << residentes[i].getCpf() << endl;
440  cout << "Data de Nascimento: " << residentes[i].getDataNascimento() << endl;
441  cout << "Número do Prédio: " << residentes[i].getPredio() << endl;
442  cout << "Número do Apartamento: " << residentes[i].getApartamento() << endl;
443  cout << "Número do Andar: " << residentes[i].getAndar() << endl;
444  cout << "Número da Vaga de Garagem: " << residentes[i].getVagaGaragem() << endl;
445  cout << "Data de Entrada: " << residentes[i].getDataEntrada() << endl;
446  cout << "Data de Saída: " << residentes[i].getDataSaida() << endl;
447  cout << "Telefone: " << residentes[i].getTelefone() << endl;
448  cout << "E-mail: " << residentes[i].getEmail() << endl;
449  cout << "-----------------------------------";
450  cout << endl;
451  residenteEncontrado = true;
452  break;
453  }
454  }
455 
456  if(!residenteEncontrado){
457  cout << "---Residente não encontrado!\n" << endl;
458  }
459 }
460 
462  string matricula;
463  bool funcionarioEncontrado = false;
464 
465  system("clear || cls");
466  cout << " ---Buscar Funcionário---" << endl;
467 
468  cout << "Digite a Matrícula do Funcionário: ";
469  cin.ignore();
470  getline(cin, matricula);
471 
472  if(zeladores.size() != 0){
473  for(int i = 0; i < zeladores.size(); i++){
474  if(zeladores[i].getMatricula() == matricula){
475  cout << "------Funcionário encontrado!------" << endl;
476  cout << "Nome: " << zeladores[i].getNome() << endl;
477  cout << "CPF: " << zeladores[i].getCpf() << endl;
478  cout << "Data de Nascimento: " << zeladores[i].getDataNascimento() << endl;
479  cout << "Matrícula: " << zeladores[i].getMatricula() << endl;
480  cout << "Função: " << zeladores[i].getFuncao() << endl;
481  cout << "Setor: " << zeladores[i].getSetor() << endl;
482  cout << "Carga Horária: " << zeladores[i].getCargaHoraria() << endl;
483  cout << "Salário: " << zeladores[i].getSalario() << endl;
484  cout << "Turno: " << zeladores[i].getTurno() << endl;
485  cout << "-----------------------------------";
486  cout << endl;
487  funcionarioEncontrado = true;
488  break;
489  }
490  }
491  }
492 
493  if(segurancas.size() != 0){
494  for(int i = 0; i < segurancas.size(); i++){
495  if(segurancas[i].getMatricula() == matricula){
496  cout << "------Funcionário encontrado!------" << endl;
497  cout << "Nome: " << segurancas[i].getNome() << endl;
498  cout << "CPF: " << segurancas[i].getCpf() << endl;
499  cout << "Data de Nascimento: " << segurancas[i].getDataNascimento() << endl;
500  cout << "Matrícula: " << segurancas[i].getMatricula() << endl;
501  cout << "Função: " << segurancas[i].getFuncao() << endl;
502  cout << "Setor: " << segurancas[i].getSetor() << endl;
503  cout << "Carga Horária: " << segurancas[i].getCargaHoraria() << endl;
504  cout << "Salário: " << segurancas[i].getSalario() << endl;
505  cout << "Turno: " << segurancas[i].getTurno() << endl;
506  cout << "-----------------------------------";
507  cout << endl;
508  funcionarioEncontrado = true;
509  break;
510  }
511  }
512  }
513 
514  if(!funcionarioEncontrado){
515  system("clear || cls");
516  cout << "---Funcionário não encontrado!\n" << endl;
517  }
518 }
void removerFuncionario()
Remove um funcionário (Zelador ou Segurança) com base na matrícula e função fornecidas.
void menuAdministrador()
Exibe o menu de opções para o administrador.
void atualizarArquivo(std::string nomeArquivo)
Atualiza um arquivo com os dados armazenados nos objetos de Residente, Zelador ou Segurança.
int lerInt(int numero, std::string msg)
Lê um número inteiro da entrada padrão com validação.
void buscarResidente()
Busca um residente com base no CPF fornecido.
void removerResidente()
Remove um residente com base no CPF fornecido.
float lerFloat(float numero, std::string msg)
Lê um número de ponto flutuante da entrada padrão com validação.
void lerArquivo(std::string nomeArquivo)
Lê os dados de um arquivo e os armazena em objetos de Residente, Zelador ou Segurança.
void buscarFuncionario()
Busca um funcionário (Zelador ou Segurança) com base na matrícula fornecida.
void listarResidentes()
Lista os residentes cadastrados.
void listarFuncionarios()
Lista os funcionários (Zeladores e Seguranças) cadastrados.
void cadastrarResidente()
Cadastra um novo residente com base nas informações fornecidas.
void cadastrarFuncionario()
Cadastra um novo funcionário (Zelador ou Segurança) com base nas informações fornecidas.
Classe que representa um Residente.
Definition: residentes.hpp:13
Classe que representa um Segurança.
Definition: seguranca.hpp:15
Classe que representa um Zelador.
Definition: zelador.hpp:15