Sistema condomínio  v1.0
porteiro.cpp
Ir para a documentação deste ficheiro.
1 #include <iostream>
2 #include <vector>
3 #include <fstream>
4 #include <limits>
5 #include "porteiro.hpp"
6 
7 
8 using namespace std;
9 
11  cout << "1- Cadastrar visitante" << endl;
12  cout << "2- Cadastrar encomenda" << endl;
13  cout << "3- Listar visitantes" << endl;
14  cout << "4- Buscar encomenda" << endl;
15  cout << "5- Buscar visitante por data" << endl;
16  cout << "6- Listar encomendas" << endl;
17  cout << "7- Sair" << endl;
18 }
19 
20 
21 void Porteiro::lerArquivo(string nomeArquivo){
22  string nomeRemetente, nomeDestinatario,cpfDestinatario, numeroApartamento, dataRecebimento;
23  string nomeVisitante, nomeVisitado, dataVisita;
24  int apartamento, andar;
25  vector<string> linhas;
26  fstream arquivo;
27 
28  arquivo.open(nomeArquivo + ".txt", ios::in | ios::app);
29 
30  if(arquivo.is_open()){
31  string linha;
32 
33  while(getline(arquivo, linha)){
34  linhas.push_back(linha);
35  }
36 
37  arquivo.close();
38  } else{
39  cout << "Erro ao abrir o arquivo!" << endl;
40  }
41 
42  if(nomeArquivo == "archives/visitantes"){
43  for(int i = 0; i < linhas.size(); i+=6){
44  nomeVisitante = linhas[i];
45  nomeVisitado = linhas[i+1];
46  apartamento = stoi(linhas[i+2]);
47  andar = stoi(linhas[i+3]);
48  dataVisita = linhas[i+4];
49 
50  Visitante visitante(nomeVisitante, nomeVisitado, apartamento, andar, dataVisita);
51  Visitantes.push_back(visitante);
52  }
53  } else if(nomeArquivo == "archives/encomendas"){
54  for(int i = 0; i < linhas.size(); i+=6){
55  nomeRemetente = linhas[i];
56  nomeDestinatario = linhas[i+1];
57  cpfDestinatario = linhas[i+2];
58  numeroApartamento = linhas[i+3];
59  dataRecebimento = linhas[i+4];
60 
61  Encomenda encomenda(nomeRemetente, nomeDestinatario, cpfDestinatario, numeroApartamento, dataRecebimento);
62  encomendas.push_back(encomenda);
63  }
64  }
65 }
66 
67 void Porteiro::atualizarArquivo(string nomeArquivo){
68  fstream arquivo;
69  arquivo.open(nomeArquivo + ".txt", ios::out | ios::trunc);
70 
71  if(arquivo.is_open()){
72  if(nomeArquivo == "archives/visitantes"){
73  for(int i = 0; i < Visitantes.size(); i++){
74  arquivo << Visitantes[i].getNomeVisitante() << endl;
75  arquivo << Visitantes[i].getNomeVisitado() << endl;
76  arquivo << Visitantes[i].getApartamento() << endl;
77  arquivo << Visitantes[i].getAndar() << endl;
78  arquivo << Visitantes[i].getDataVisita() << endl;
79  arquivo << endl;
80  }
81  } else if(nomeArquivo == "archives/encomendas"){
82  for(int i = 0; i < encomendas.size(); i++){
83  arquivo << encomendas[i].getNomeRemetente() << endl;
84  arquivo << encomendas[i].getNomeDestinatario() << endl;
85  arquivo << encomendas[i].getCpfDestinatario() << endl;
86  arquivo << encomendas[i].getNumeroApartamento() << endl;
87  arquivo << encomendas[i].getDataRecebimento() << endl;
88  arquivo << endl;
89  }
90  }
91  arquivo.close();
92  } else{
93  cout << "Erro ao abrir o arquivo!" << endl;
94  }
95 }
96 
97 int Porteiro::lerInt(int numero, std::string msg){
98  bool flag = false;
99 
100  do{
101  try{
102  cout << msg;
103  cin >> numero;
104  if(cin.fail()){
105  throw runtime_error("\n---Erro: Digite um número inteiro!---\n");
106  } else{
107  flag = true;
108  }
109  } catch(runtime_error &e){
110  system("clear || cls");
111  cout << e.what() << endl;
112  cin.clear();
113  cin.ignore(numeric_limits<streamsize>::max(), '\n');
114  }
115  } while(!flag);
116 
117  return numero;
118 }
119 
121  string nomeRemetente, nomeDestinatario, cpfDestinatario, numeroApartamento, dataRecebimento;
122 
123  system("clear || cls");
124  cout << "Cadastro de encomenda" << endl;
125  cout << "Nome do remetente: ";
126  cin.ignore();
127  getline(cin, nomeRemetente);
128  cout << "Nome do destinatário: ";
129  getline(cin, nomeDestinatario);
130  cout << "CPF do destinatário: ";
131  getline(cin, cpfDestinatario);
132  cout << "Número do apartamento: ";
133  getline(cin, numeroApartamento);
134  cout << "Data de recebimento: ";
135  getline(cin, dataRecebimento);
136 
137  system("clear || cls");
138  cout << "---Encomenda cadastrada com sucesso!---\n" << endl;
139  Encomenda encomenda(nomeRemetente, nomeDestinatario, cpfDestinatario, numeroApartamento, dataRecebimento);
140  encomendas.push_back(encomenda);
141 
142  fstream arquivo;
143  arquivo.open("archives/encomendas.txt", ios::out | ios::app);
144  if(arquivo.is_open()){
145  arquivo << nomeRemetente << endl;
146  arquivo << nomeDestinatario << endl;
147  arquivo << cpfDestinatario << endl;
148  arquivo << numeroApartamento << endl;
149  arquivo << dataRecebimento << endl;
150  arquivo << endl;
151  arquivo.close();
152  }
153 
154 }
155 
157  string nomeVisitante, nomeVisitado, dataVisita;
158  int apartamento, andar;
159 
160  system("clear || cls");
161  cout << "Cadastro de visitante" << endl;
162  cout << "Nome do visitante: ";
163  cin.ignore();
164  getline(cin, nomeVisitante);
165  cout << "Nome do visitado: ";
166  getline(cin, nomeVisitado);
167  apartamento = lerInt(apartamento, "Número do apartamento: ");
168  andar = lerInt(andar, "Número do andar: ");
169  cin.ignore();
170  cout << "Data da visita: ";
171  getline(cin, dataVisita);
172 
173  system("clear || cls");
174  cout << "---Visitante cadastrado com sucesso!---\n" << endl;
175  Visitante visitante(nomeVisitante, nomeVisitado, apartamento, andar, dataVisita);
176  Visitantes.push_back(visitante);
177 
178  fstream arquivo;
179  arquivo.open("archives/visitantes.txt", ios::out | ios::app);
180  if(arquivo.is_open()){
181  arquivo << nomeVisitante << endl;
182  arquivo << nomeVisitado << endl;
183  arquivo << apartamento << endl;
184  arquivo << andar << endl;
185  arquivo << dataVisita << endl;
186  arquivo << endl;
187  arquivo.close();
188  }
189 }
190 
192  system("clear || cls");
193  if(Visitantes.size() == 0){
194  cout << "---Não há visitantes cadastrados!" << endl;
195  } else{
196  cout << " -----Lista de visitantes-----" << endl;
197  for(int i = 0; i < Visitantes.size(); i++){
198  cout << "Visitante Nº " << i + 1 << endl;
199  cout << "Nome do visitante: " << Visitantes[i].getNomeVisitante() << endl;
200  cout << "Nome do visitado: " << Visitantes[i].getNomeVisitado() << endl;
201  cout << "Número do apartamento: " << Visitantes[i].getApartamento() << endl;
202  cout << "Número do andar: " << Visitantes[i].getAndar() << endl;
203  cout << "Data da visita: " << Visitantes[i].getDataVisita() << endl;
204  cout << "---------------------------------\n" << endl;
205  }
206  }
207 }
208 
210  string cpfDestinatario;
211  bool encontrou = false;
212 
213  system("clear || cls");
214  cout << "Digite o CPF do destinatário: ";
215  cin.ignore();
216  getline(cin, cpfDestinatario);
217 
218  if(encomendas.size() == 0){
219  system("clear || cls");
220  cout << "---Não há encomendas cadastradas!---\n" << endl;
221  } else{
222  for(int i = 0; i < encomendas.size(); i++){
223  if(encomendas[i].getCpfDestinatario() == cpfDestinatario){
224  cout << "---------------------------------" << endl;
225  cout << "Nome do remetente: " << encomendas[i].getNomeRemetente() << endl;
226  cout << "Nome do destinatário: " << encomendas[i].getNomeDestinatario() << endl;
227  cout << "CPF do destinatário: " << encomendas[i].getCpfDestinatario() << endl;
228  cout << "Número do apartamento: " << encomendas[i].getNumeroApartamento() << endl;
229  cout << "Data de recebimento: " << encomendas[i].getDataRecebimento() << endl;
230  cout << "---------------------------------\n" << endl;
231  encontrou = true;
232  }
233  }
234  }
235 
236  if(!encontrou){
237  system("clear || cls");
238  cout << "---Não há encomendas cadastradas para esse CPF!---\n" << endl;
239  }
240 }
241 
243  string buscarData;
244  bool encontrou = false;
245 
246  system("clear || cls");
247  cout << "Digite a data da visita: ";
248  cin.ignore();
249  getline(cin, buscarData);
250 
251  if(Visitantes.size() == 0){
252  cout << "---Não há visitantes cadastrados!---\n" << endl;
253  } else{
254  for(int i = 0; i < Visitantes.size(); i++){
255  if(Visitantes[i].getDataVisita() == buscarData){
256  cout << "---------------------------------" << endl;
257  cout << "Nome do visitante: " << Visitantes[i].getNomeVisitante() << endl;
258  cout << "Nome do visitado: " << Visitantes[i].getNomeVisitado() << endl;
259  cout << "Número do apartamento: " << Visitantes[i].getApartamento() << endl;
260  cout << "Número do andar: " << Visitantes[i].getAndar() << endl;
261  cout << "Data da visita: " << Visitantes[i].getDataVisita() << endl;
262  cout << "---------------------------------\n" << endl;
263  encontrou = true;
264  }
265  }
266  }
267 
268  if(!encontrou){
269  system("clear || cls");
270  cout << "---Não há visitantes cadastrados nessa data!---\n" << endl;
271  }
272 }
273 
275  system("clear || cls");
276  if(encomendas.size() == 0){
277  cout << "---Não há encomendas cadastradas!" << endl;
278  } else{
279  cout << " -----Lista de encomendas-----" << endl;
280  for(int i = 0; i < encomendas.size(); i++){
281  cout << "Nome do remetente: " << encomendas[i].getNomeRemetente() << endl;
282  cout << "Nome do destinatário: " << encomendas[i].getNomeDestinatario() << endl;
283  cout << "CPF do destinatário: " << encomendas[i].getCpfDestinatario() << endl;
284  cout << "Número do apartamento: " << encomendas[i].getNumeroApartamento() << endl;
285  cout << "Data de recebimento: " << encomendas[i].getDataRecebimento() << endl;
286  cout << "---------------------------------\n" << endl;
287  }
288  }
289 }
Classe que representa uma encomenda.
Definition: encomenda.hpp:10
void buscarVisitanteData()
Busca visitantes com base em uma data específica.
Definition: porteiro.cpp:242
void cadastrarVisitante()
Cadastra um novo visitante.
Definition: porteiro.cpp:156
void buscarEncomenda()
Busca uma encomenda pelo CPF.
Definition: porteiro.cpp:209
void lerArquivo(std::string nomeArquivo)
Lê informações de um arquivo e carrega os dados do objeto.
Definition: porteiro.cpp:21
void menuPorteiro()
Exibe o menu do Porteiro.
Definition: porteiro.cpp:10
void listarVisitantes()
Lista todos os visitantes cadastrados.
Definition: porteiro.cpp:191
void cadastrarEncomenda()
Cadastra uma nova encomenda.
Definition: porteiro.cpp:120
int lerInt(int numero, std::string msg)
Lê um número inteiro da entrada padrão com validação.
Definition: porteiro.cpp:97
void listarEncomendas()
Lista todas as encomendas.
Definition: porteiro.cpp:274
void atualizarArquivo(std::string nomeArquivo)
Atualiza as informações do arquivo com base nos dados do objeto.
Definition: porteiro.cpp:67
Classe que representa um Visitante.
Definition: visitante.hpp:10