예제 #1
0
  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;

  }
예제 #2
0
  /**  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();
   }