Ejemplo n.º 1
0
void Moderador::editarPonto(Logradouro &L,vector<Pessoa *> &usuarios){
	int opcao,ncomentario;
	float area;
	string descricao,cep,rua,referencia,nomelocal;
	Comentario comentantigo,comentnovo;
	Usuario *ptrU;
	
	cout<<"Informacoes do local a ser editado: "<<endl;
	getch();
	
	cout<<L;
	getch();
	
	do{
		cout<<"Escolha um dado para editar: "<<endl;
		getch();
		cout<<"1. Nome: "<<endl;
		cout<<"2. Area: "<<endl;
		cout<<"3. Descricao: "<<endl;
		cout<<"4. Comentarios: "<<endl;
		cout<<"5. CEP: "<<endl;
		cout<<"6. Rua: "<<endl;
		cout<<"7. Referencia"<<endl;
		cout<<"8. Voltar: "<<endl;
		cin >> opcao;
		
		switch(opcao){
			case 1:
				do{
					cout<<"Digite o novo nome do local: "<<endl;
					cin >> nomelocal;
					nomelocal = Logradouro::validaNome(nomelocal);
					if (nomelocal == "Padrao"){
						cout<<"Nome digitado e' invalido!"<<endl;
						getch();
					}
				}while(nomelocal == "Padrao");
					
				cout<<"Nome modificado de '"<<L.getNome()<<"' para '"<<nomelocal<<"'. "<<endl;
				
				L.setNome(nomelocal);
				getch();
				break;
			case 2:
				do{
					cout<<"Digite a nova area em km²(digite -1 caso nao saiba o valor correto): "<<endl;
					cin >> area;
					if (area == 0 || area < -1){
						cout<<"Valor invalido!"<<endl;
						getch();
					}
				}while(area == 0 || area < -1);
				
				cout<<"Area modificada de '"<<L.getArea()<<"' km² para '"<<area<<"' km². "<<endl;
				getch();
				L.setArea(area);
				break;
			case 3:
				cout<<"Digite a nova descricao para o Local "<<L.getNome()<<": "<<endl;
				cin.sync();
				getline(cin,descricao);
				
				cout<<"Descricao antiga: "<<endl;
				cout<<" - "<<L.getDescricao()<<"."<<endl;
				getch();
				
				cout<<"Descricao nova: "<<endl;
				cout<<" - "<<descricao<<"."<<endl;
				getch();
				
				L.setDescricao(descricao);
				break;
			case 4:
				if (L.getNComentarios() > 0){
					L.mostrarComentarios();
					
					do{
						cout<<"Digite o numero do comentario que deseja editar: "<<endl;
						cin >> ncomentario;
						if (ncomentario < 1 || ncomentario > L.getNComentarios()){
							cout<<"Opcao invalida!"<<endl;
							getch();
						}
					}while(ncomentario < 1 || ncomentario > L.getNComentarios());
					
					//modifica o comentario dentro do objeto B do tipo Bairro
					comentantigo = L.getComentario(ncomentario);
					comentnovo = comentantigo;
					this->editarComentario(comentnovo);
					L.setComentario(ncomentario,comentnovo);
					
					for (unsigned int i = 0;i < usuarios.size();i++){ //atualiza com o texto novo os comentários de todos os usuários
						ptrU = dynamic_cast<Usuario *>(usuarios[i]);
						if(ptrU && ptrU->getUsername() == comentantigo.getNomeUsuario())
							this->editarComentario(*ptrU,comentantigo.getTexto(),comentnovo.getTexto());
					}
					
				}
				else{
					cout<<"O local nao tem nenhum comentario!"<<endl;
					getch();
				}
				break;
			case 5:
				do{
					cout<<"Digite o novo CEP: "<<endl;
					cin >> cep;
					cep = Logradouro::validaCEP(cep);
					if (cep == "00000000000")
						cout<<"CEP invalido!"<<endl;
				}while(cep == "00000000000");
				cout<<"CEP modificado de '"<<L.getCEP()<<"' para '"<<cep<<"'. "<<endl;
				getch();
				L.setCEP(cep);
				break;
			case 6:
				cout<<"Digite o novo nome da rua do local '"<<L.getNome()<<"'. "<<endl;
				cin.sync();
				getline(cin,rua);
				cout<<"Rua modificada de '"<<L.getRua()<<"' para '"<<rua<<"'. "<<endl;
				getch();
				L.setRua(rua);
				break;
			case 7:
				cout<<"Digite a nova referencia do local '"<<L.getNome()<<"'. "<<endl;
				cin.sync();
				getline(cin,referencia);
				cout<<"Referencia modificada de '"<<L.getReferencia()<<"' para '"<<referencia<<"'. "<<endl;
				getch();
				L.setReferencia(referencia);
				break;
			case 8:
				break;
			default:
				cout<<"Opcao invalida!"<<endl;
				getch();
				break;
		}