bool FicheroPacientes::buscar(const std::string& a1, const std::string& a2){ Paciente* act; //paciente actual Paciente b; //paciente buscado b.set_apellido1(a1); b.set_apellido2(a2); std::list<Contacto*>::iterator it = _pacientes->begin(); while(it!=_pacientes->end()){ if(b == *it){ // si lo encuentra, sale del bucle y _activo // apunta primer paciente encontrado _activo = it; guardar(); return true; } ++it; } //si no encuentra el exacto, //buscamos coincidencias por primer apellido it = _pacientes->begin(); while(it!=_pacientes->end()){ act = dynamic_cast<Paciente*>(*it); if(b.get_apellido1().get_contenido() == act->get_apellido1().get_contenido()){ // si lo encuentra, sale del bucle y _activo // apunta primer paciente encontrado _activo = it; guardar(); return true; } ++it; } return false; }
/** Borra el contenido previo de la lista * carga lista de contactos desde el * fichero por defecto * POR HACER: que devuelva iterador al nuevo primer elemento de la lista */ std::list<Contacto*>::iterator FicheroPacientes::cargar(){ Paciente* nuevo; std::string linea; char separador = ':'; std::string titulo; std::string contenido; std::ifstream fichero; fichero.open(_filename.c_str()); // si no abre el fichero, terminar if(!fichero) return _activo; while(!fichero.eof()){ std::getline(fichero,linea); std::istringstream split(linea); //inicio paciente if(linea=="***"){ nuevo = new Paciente(); } //fin paciente else if(linea=="---"){ _pacientes->push_back(nuevo); } //interpretar atributo else{ std::getline(split,titulo,separador); std::getline(split,contenido,separador); // frecuencia if(titulo=="FRECUENCIA"){ nuevo->set_frecuencia(contenido); } // favorito else if(titulo=="FAVORITO"){ if(contenido=="true") nuevo->set_favorito(); else nuevo->reset_favorito(); } // apellido1 else if(titulo=="APELLIDO 1"){ nuevo->set_apellido1(contenido); } // apellido2 else if(titulo=="APELLIDO 2"){ nuevo->set_apellido2(contenido); } // nombre else if(titulo=="NOMBRE"){ nuevo->set_nombre(contenido); } // sexo else if(titulo=="SEXO"){ nuevo->set_sexo(contenido); } // fecha nacimiento else if(titulo=="FECHA NACIMIENTO"){ nuevo->set_fecha_nacimiento(contenido); } // ATRIBUTOS MULTIPLES // nota else if(titulo=="NOTA"){ nuevo->add_nota(contenido); } // telefono else if(titulo=="TELEFONO"){ nuevo->add_telefono(contenido); } // direccion else if(titulo=="DIRECCION"){ nuevo->add_direccion(contenido); } // red social else if(titulo=="RED SOCIAL"){ nuevo->add_nota(contenido); } else if(titulo=="DNI"){ nuevo->set_dni(contenido); } } }/*end while*/ fichero.close(); _pacientes->sort(Paciente::cmp_apellidos); //reordenar, puede que el fichero estubiera desordenado. _activo = _pacientes->begin(); }