<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Saludos..<BR><br><BR>Por favor si alguien tiene conocimiento de que realiza este código le estaré agradecido.<BR>Es un directorio, que almacena personas con su id, Nombre, cargo, correo, tel fijo y tel movil.<BR>Utiliza las librerias de QT.<BR><br><BR>Aquí va el Código:<BR><br><BR>Directorio::Directorio()<br>{ <br>}<br><br>Directorio::~Directorio()<br>{<br>}<br><br>void Directorio::setPersona(Persona persona)<br>{<br> this->persona=persona; <br>}<br><br>Persona Directorio::getPersona()<br>{<br> return this->persona;<br>}<br><br><br>bool Directorio::siguienteToken(istream &flujo, string &token, char delimitador)<br>{<br> stringbuf buffer;<br> <br> // verificar si se puede extraer algo del buffer con good()<br> // y si el primer caracter no es el de fin de linea<br> if ( flujo.good() )<br> { <br> // saltar los delimitadores al comienzo, si los hay<br> while ( flujo.peek() == delimitador )<br> flujo.get();<br><br> // extraer los caracteres hasta encontrar el <br> // siguiente delimitador e insertarlos en buffer<br> flujo.get(buffer, delimitador);<br><br> // saltar los delimitadores al final, si los hay<br> while ( flujo.peek() == delimitador )<br> flujo.get();<br> <br> // obtener el string extraido<br> token = buffer.str();<br> <br> }<br><br>}<br> <br><br>void Directorio::insertar() throw(Excepcion)<br>{<br> Excepcion excepcion;<br> int code;//vector <string> archivo;<br> <br> string rutaArchivo, rutaArchivo2, token, linea, tempo;<br> int existe, noexiste;<br> existe = 0;<br> rutaArchivo = "BaseDatos.txt";<br> <br> <br> ifstream flujoDeArchivo(rutaArchivo.c_str());<br> string palabra;<br> // El extractor >> solo lee hasta que encuentra un espacio en blanco.<br> // Ademas, retorna false cuando ya ha leido todo el flujo:<br> while(flujoDeArchivo >> palabra)<br> dir.push_back(palabra); <br> rutaArchivo2 = "BaseDatos.txt";<br> ifstream flujoDeArchivo2(rutaArchivo2.c_str());<br> tempo = persona.getNombre();<br> if(tempo.size() == 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getCargo();<br> if(tempo.size() == 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getCorreo();<br> if(tempo.size() == 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getFijo();<br> if(tempo.size() == 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getMovil();<br> if(tempo.size() == 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> <br> <br> for(int i = 0; i < dir.size(); i++)<br> { <br> //conten "flujo" , cout;<br> linea = dir[i];<br> stringstream flujo(linea);<br> siguienteToken(flujo,token,',');<br> if(token == persona.getId())<br> {<br> //cout <<"Persona ya existe"<<endl;<br> existe = 1;<br> code = excepcion.codigo = Excepcion::REGISTRO_YA_EXISTE;<br> throw excepcion;<br> }<br> else<br> {<br> noexiste = 1;<br> <br> //os <<persona.imprimirPersona() << endl;<br> }<br> <br><br> }<br> <br> <br> filebuf fb;<br> fb.open ("BaseDatos.txt",ios::out);<br> ostream os(&fb);<br> <br> <br> if (os.fail())<br> { <br> <br> code = excepcion.codigo = Excepcion::ERROR_EN_EL_SERVIDOR;<br> throw excepcion;<br> } <br> <br> imprimir(os);//Imprime el Flujo que capturo de la Base de Datos<br> if(dir.size() == 0)<br> {<br> os <<persona.imprimirPersona() << endl;//imprime la persona nueva si la Base de Datos se encuentra vacia.<br> existe = 1; <br> } <br> if(existe == 0 && noexiste == 1) <br> {<br> os <<persona.imprimirPersona() << endl; //impreme la persona nueva al final del archivo<br> }<br> //os <<persona.imprimirPersona() << endl;<br> <br> <br> <br> <br> <br> <br> //persona.imprimirPersona();<br>}<br>void Directorio::imprimir(ostream &flujo)<br>{<br> // Imprime las palabras<br> for(int i = 0; i < dir.size(); i++)<br> flujo << dir[i] << endl; <br>} <br><br>void Directorio::consultar() throw(Excepcion)<br>{<br> Excepcion excepcion;<br> int code;//vector <string> archivo;<br> code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;<br> string rutaArchivo, rutaArchivo2, token, linea, tempo;<br> int existe, noexiste;<br> existe = 0;<br> rutaArchivo = "BaseDatos.txt";<br> ifstream flujoDeArchivo(rutaArchivo.c_str());<br> string palabra;<br><br> while(flujoDeArchivo >> palabra)<br> dir.push_back(palabra); // Busca la palabra al final del archivo.<br> rutaArchivo2 = "BaseDatos.txt";<br> ifstream flujoDeArchivo2(rutaArchivo2.c_str());<br> <br> tempo = persona.getNombre();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getCargo();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getCorreo();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getFijo();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getMovil();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> <br> <br> <br> <br> for(int i = 0; i < dir.size(); i++)//recorre todo el vector donde esta almacenado el archivo de la BaseDatos<br> { <br> linea = dir[i];<br> stringstream flujo(linea);<br> siguienteToken(flujo,token,',');<br> if(token == persona.getId())//si encuentra el Id setea todos los atributos de la persona<br> {<br> existe = 1;<br> persona.setId(token);<br> siguienteToken(flujo,token,',');<br> persona.setNombre(token);<br> siguienteToken(flujo,token,',');<br> persona.setCargo(token);<br> siguienteToken(flujo,token,',');<br> persona.setCorreo(token);<br> siguienteToken(flujo,token,',');<br> persona.setFijo(token);<br> siguienteToken(flujo,token,',');<br> persona.setMovil(token); <br> }<br> else<br> {<br> noexiste = 1;<br> <br> <br> }<br> <br><br> }<br> code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;<br> if(dir.size() == 0)//Si la Base De Datos no contiene ningun dato retorna una Excepcion<br> {<br> throw excepcion;<br> <br> } <br> if(existe == 0 && noexiste == 1) //Si la persona no existe retorna una Excepcion<br> {<br> throw excepcion;<br> }<br> <br> <br>}<br>void Directorio::borrar() throw(Excepcion)<br>{<br> Excepcion excepcion;<br> int code;//vector <string> archivo;<br> code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;<br> string rutaArchivo, rutaArchivo2, token, linea, tempo;<br> int existe, noexiste;<br> existe = 0;<br> rutaArchivo = "BaseDatos.txt";<br> ifstream flujoDeArchivo(rutaArchivo.c_str());<br> string palabra;<br><br> while(flujoDeArchivo >> palabra)<br> dir.push_back(palabra);<br> rutaArchivo2 = "BaseDatos.txt";<br> ifstream flujoDeArchivo2(rutaArchivo2.c_str());<br> <br> tempo = persona.getNombre();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getCargo();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getCorreo();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getFijo();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> tempo = persona.getMovil();<br> if(tempo.size() > 0)<br> {<br> code = excepcion.codigo = Excepcion::REPETIDO_ATRIBUTO;<br> throw excepcion;<br> }<br> <br> for(int i = 0; i < dir.size(); i++)//recorre todo el vector donde esta almacenado el archivo de la Base de Datos<br> { <br> <br> linea = dir[i];<br> stringstream flujo(linea);<br> siguienteToken(flujo,token,',');<br> if(token == persona.getId())//si encuentra el Id lo reemplaza por "xxx".<br> {<br> existe = 1;<br> siguienteToken(flujo,token,' ');<br> dir[i] = "xxx,"+token;<br> <br> <br> }<br> else<br> {<br> noexiste = 1;<br> <br> <br> }<br> <br><br> }<br> filebuf fb;<br> fb.open ("BaseDatos.txt",ios::out);<br> ostream os(&fb);<br> code = excepcion.codigo = Excepcion::REGISTRO_NO_EXISTE;<br> imprimir(os);//<br> if(dir.size() == 0)//Si la Base de Datos no contiene ningun dato retorna una Excepcion<br> {<br> throw excepcion;<br> <br> } <br> if(existe == 0 && noexiste == 1) //Si la persona no existe retorna una Excepcion<br> {<br> throw excepcion;<br> }<br> <br> <br>}<br><BR> </body>
</html>