[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