<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>