[C con Clase] Ayúda para Interpretar Este Código

FernandO LópeZ j_fernando1010 en hotmail.com
Mie Mayo 25 00:42:28 CEST 2011


Saludos..


Por favor si alguien tiene conocimiento de que realiza este código le estaré agradecido.
Es un directorio, que almacena personas con su id, Nombre, cargo, correo, tel fijo y tel movil.
Utiliza las librerias de QT.


Aquí va el Código:


Directorio::Directorio()
{  
}

Directorio::~Directorio()
{
}

void Directorio::setPersona(Persona persona)
{
	this->persona=persona;	
}

Persona Directorio::getPersona()
{
	return this->persona;
}


bool Directorio::siguienteToken(istream &flujo, string &token, char delimitador)
{
	stringbuf buffer;
	
	// verificar si se puede extraer algo del buffer con good()
	// y si el primer caracter no es el de fin de linea
	if ( flujo.good() )
	{ 
		// saltar los delimitadores al comienzo, si los hay
		while ( flujo.peek() == delimitador )
			flujo.get();

		// extraer los caracteres hasta encontrar el 
		// siguiente delimitador e insertarlos en buffer
		flujo.get(buffer, delimitador);

   	// saltar los delimitadores al final, si los hay
		while ( flujo.peek() == delimitador )
			flujo.get();
	
		// obtener el string extraido
		token = buffer.str();
			
	}

}
 

void Directorio::insertar() throw(Excepcion)
{
	Excepcion excepcion;
	int code;//vector <string> archivo;
	
	string rutaArchivo, rutaArchivo2, token, linea, tempo;
	int existe, noexiste;
	existe = 0;
	rutaArchivo = "BaseDatos.txt";
	
	
	ifstream flujoDeArchivo(rutaArchivo.c_str());
	string palabra;
      // El extractor >> solo lee hasta que encuentra un espacio en blanco.
      // Ademas, retorna false cuando ya ha leido todo el flujo:
	while(flujoDeArchivo >> palabra)
	dir.push_back(palabra); 
	rutaArchivo2 = "BaseDatos.txt";
	ifstream flujoDeArchivo2(rutaArchivo2.c_str());
	tempo = persona.getNombre();
	if(tempo.size() == 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getCargo();
	if(tempo.size() == 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getCorreo();
	if(tempo.size() == 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getFijo();
	if(tempo.size() == 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getMovil();
	if(tempo.size() == 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
      
	
	for(int i = 0; i < dir.size(); i++)
	{ 
		//conten "flujo" , cout;
		linea = dir[i];
		stringstream flujo(linea);
		siguienteToken(flujo,token,',');
		if(token == persona.getId())
		{
			//cout <<"Persona ya existe"<<endl;
			existe = 1;
			code = excepcion.codigo = Excepcion::REGISTRO_YA_EXISTE;
			throw  excepcion;
		}
		else
		{
			noexiste = 1;
			
			//os <<persona.imprimirPersona() << endl;
		}
		

	}
	
	
	filebuf fb;
	fb.open ("BaseDatos.txt",ios::out);
	ostream os(&fb);
	
	
	if (os.fail())
	 { 
	    
	      code = excepcion.codigo = Excepcion::ERROR_EN_EL_SERVIDOR;
	      throw  excepcion;
	 }	
	
	imprimir(os);//Imprime el Flujo que capturo de la Base de Datos
	if(dir.size() == 0)
	{
		os <<persona.imprimirPersona() << endl;//imprime la persona nueva si la Base de Datos se encuentra vacia.
		existe = 1;			
	}	
	if(existe == 0 && noexiste == 1) 
	{
		os <<persona.imprimirPersona() << endl;	//impreme la persona nueva al final del archivo
	}
    //os <<persona.imprimirPersona() << endl;
	
		
		
	
	
	
	//persona.imprimirPersona();
}
void Directorio::imprimir(ostream &flujo)
{
  // Imprime las palabras
  for(int i = 0; i < dir.size(); i++)
    flujo << dir[i] << endl;   
} 

void Directorio::consultar() throw(Excepcion)
{
	Excepcion excepcion;
	int code;//vector <string> archivo;
	code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;
	string rutaArchivo, rutaArchivo2, token, linea, tempo;
	int existe, noexiste;
	existe = 0;
	rutaArchivo = "BaseDatos.txt";
	ifstream flujoDeArchivo(rutaArchivo.c_str());
	string palabra;

	while(flujoDeArchivo >> palabra)
	dir.push_back(palabra); // Busca la palabra al final del archivo.
	rutaArchivo2 = "BaseDatos.txt";
	ifstream flujoDeArchivo2(rutaArchivo2.c_str());
  
	tempo = persona.getNombre();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getCargo();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getCorreo();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getFijo();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getMovil();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
      
   
  
	
	for(int i = 0; i < dir.size(); i++)//recorre todo el vector donde esta almacenado el archivo de la BaseDatos
	{ 
		linea = dir[i];
		stringstream flujo(linea);
		siguienteToken(flujo,token,',');
		if(token == persona.getId())//si encuentra el Id setea todos los atributos de la persona
		{
			existe = 1;
			persona.setId(token);
			siguienteToken(flujo,token,',');
			persona.setNombre(token);
			siguienteToken(flujo,token,',');
			persona.setCargo(token);
			siguienteToken(flujo,token,',');
			persona.setCorreo(token);
			siguienteToken(flujo,token,',');
			persona.setFijo(token);
			siguienteToken(flujo,token,',');
			persona.setMovil(token);		
		}
		else
		{
			noexiste = 1;
			
			
		}
		

	}
	code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;
	if(dir.size() == 0)//Si la Base De Datos no contiene ningun dato retorna una Excepcion
	{
		throw  excepcion;
			
	}	
	if(existe == 0 && noexiste == 1) //Si la persona no existe retorna una Excepcion
	{
		throw  excepcion;
	}
	
	
}
void Directorio::borrar() throw(Excepcion)
{
	Excepcion excepcion;
	int code;//vector <string> archivo;
	code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;
	string rutaArchivo, rutaArchivo2, token, linea, tempo;
	int existe, noexiste;
	existe = 0;
	rutaArchivo = "BaseDatos.txt";
	ifstream flujoDeArchivo(rutaArchivo.c_str());
	string palabra;

	while(flujoDeArchivo >> palabra)
	dir.push_back(palabra);
	rutaArchivo2 = "BaseDatos.txt";
	ifstream flujoDeArchivo2(rutaArchivo2.c_str());
  
	tempo = persona.getNombre();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getCargo();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getCorreo();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getFijo();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	tempo = persona.getMovil();
	if(tempo.size() > 0)
	{
	  code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;
	  throw  excepcion;
	}
	
	for(int i = 0; i < dir.size(); i++)//recorre todo el vector donde esta almacenado el archivo de la Base de Datos
	{ 
		
		linea = dir[i];
		stringstream flujo(linea);
		siguienteToken(flujo,token,',');
		if(token == persona.getId())//si encuentra el Id lo reemplaza por "xxx".
		{
			existe = 1;
			siguienteToken(flujo,token,' ');
			dir[i] = "xxx,"+token;
			
			
		}
		else
		{
			noexiste = 1;
			
			
		}
		

	}
	filebuf fb;
	fb.open ("BaseDatos.txt",ios::out);
	ostream os(&fb);
	code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;
	imprimir(os);//
	if(dir.size() == 0)//Si la Base de Datos no contiene ningun dato retorna una Excepcion
	{
		throw  excepcion;
			
	}	
	if(existe == 0 && noexiste == 1) //Si la persona no existe retorna una Excepcion
	{
		throw  excepcion;
	}
	
	
}

 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110524/73198f26/attachment.html>


Más información sobre la lista de distribución Cconclase