Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/08/2011, 08:16
Avatar de baker1562
baker1562
 
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 9 meses
Puntos: 9
Respuesta: Borrar elemento en archivo binario

Hice este programa
Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     char socios[4][25];
  9.     int opcion;
  10.     int i=0;
  11.     char vacio=NULL;
  12.     int contador_socios;
  13.     int numero;
  14.     string respuesta;
  15.    
  16.     while(respuesta!="n" && respuesta!="N")
  17.     {
  18.        cout<<"Digite#1 para agregar socio"<<endl;
  19.        cout<<"Digite#2 para modificar socio"<<endl;
  20.        cout<<"Digite#3 para eliminar socio"<<endl;
  21.        cout<<"Digite#4 para mostrar socios"<<endl;
  22.        cout<<endl;
  23.        cout<<"Que opcion desea realizar?"<<endl;
  24.        cin>>opcion;
  25.        
  26.        switch(opcion)
  27.        {
  28.                      case 1:
  29.                           {
  30.                                ofstream SocioSaliente("socios.dat", ios::app|ios::binary);
  31.                                ofstream Archivo_I_Saliente("i.dat", ios::out);
  32.                                ifstream Archivo_I_Entrante("i.dat", ios::in);
  33.                                ofstream ContadorSociosSaliente("contador_socios.dat", ios::out);
  34.                                
  35.                                Archivo_I_Entrante>>i;
  36.                                
  37.                                
  38.                                
  39.                                if(i<4)
  40.                                {
  41.                                       cout<<"Digite el nombre del socio #"<<i<<endl;
  42.                                       cin>>socios[i];
  43.                                      
  44.                                       SocioSaliente.write((char*)&socios[i], sizeof(socios[i]));
  45.                                       i++;
  46.                                       contador_socios=i;
  47.                                       }
  48.                                       else
  49.                                       {
  50.                                           cout<<"Memoria Llena"<<endl;
  51.                                           cout<<endl;
  52.                                           }
  53.                                           Archivo_I_Saliente<<i;
  54.                                      
  55.                                           ContadorSociosSaliente<<contador_socios;
  56.                                           }
  57.                           break;
  58.                          
  59.                           case 2:
  60.                                {
  61.                                           fstream SociosEntrantes("socios.dat", ios::in|ios::out|ios::binary);
  62.                                           ifstream ContadorSociosEntrante("contador_socios.dat", ios::in);
  63.                                          
  64.                                           ContadorSociosEntrante>>contador_socios;
  65.                                          
  66.                                           for(int k=0;k<contador_socios;k++)
  67.                                           {
  68.                                                   SociosEntrantes.read((char*)&socios[k], sizeof(socios[k]));
  69.                                                   }
  70.                                          
  71.                                           cout<<"Digite un numero de socio(Valido de 0 a "<<contador_socios<<")"<<endl;
  72.                                           cin>>numero;
  73.                                          
  74.                                           SociosEntrantes.seekp(numero*sizeof(socios[1]), ios::beg);
  75.                                          
  76.                                           cout<<"El nombre del socio #"<<numero<<" es de nombre: "<<socios[numero]<<endl;
  77.                                           cout<<endl;
  78.                                           cout<<"Escriba la modificacion de nombre:"<<endl;
  79.                                           cin>>socios[numero];
  80.                                           cout<<endl;
  81.                                          
  82.                                           SociosEntrantes.write((char*)&socios[numero], sizeof(socios[1]));
  83.                                          
  84.                                           cout<<"Socio Modificado!!"<<endl;
  85.                                           cout<<endl;
  86.                                           }
  87.                         break;
  88.                        
  89.                         case 3:
  90.                              {
  91.                                           fstream SociosEntrantes("socios.dat", ios::in|ios::in|ios::binary);
  92.                                           ifstream ContadorSociosEntrante("contador_socios.dat", ios::in);
  93.                                           ofstream ContadorSociosSaliente("contador_socios.dat", ios::out);
  94.                                           ofstream Archivo_I_Saliente("i.dat", ios::out);
  95.                                          
  96.                                           ContadorSociosEntrante>>contador_socios;
  97.                                          
  98.                                           for(int j=0;j<contador_socios;j++)
  99.                                           {
  100.                                                   SociosEntrantes.read((char*)&socios[j], sizeof(socios[j]));
  101.                                                   }
  102.                                          
  103.                                           cout<<"Digite un numero de socio(Valido de 0 a "<<contador_socios<<")"<<endl;
  104.                                           cin>>numero;
  105.                                          
  106.                                           SociosEntrantes.seekp(numero*sizeof(socios[1]), ios::beg);
  107.                                          
  108.                                           cout<<"El nombre del socio #"<<numero<<" es de nombre: "<<socios[numero]<<endl;
  109.                                           cout<<endl;
  110.                                          
  111.                                           delete socios[numero];
  112.                                          
  113.                                           SociosEntrantes.write((char*)&socios[numero], sizeof(socios[1]));
  114.                                          
  115.                                           cout<<"Socio Eliminado!!"<<endl;
  116.                                           cout<<endl;
  117.                                          
  118.                                           contador_socios=contador_socios-1;
  119.                                           i=i-1;
  120.                                           ContadorSociosSaliente<<contador_socios;
  121.                                           Archivo_I_Saliente<<i;
  122.                                          
  123.                                           }        
  124.                         break;
  125.                        
  126.                         case 4:
  127.                              {
  128.                                           ifstream SociosEntrantes("socios.dat", ios::in|ios::binary);
  129.                                           ifstream ContadorSociosEntrantes("contador_socios.dat", ios::in);
  130.                                          
  131.                                           ContadorSociosEntrantes>>contador_socios;
  132.                                           for(int i=0;i<contador_socios;i++)
  133.                                           {
  134.                                                   SociosEntrantes.read((char*)&socios[i], sizeof(socios[i]));
  135.                                                   }
  136.                                          
  137.                                           for(int m=0;m<contador_socios;m++)
  138.                                           {
  139.                                                   cout<<"Nombre#"<<m<<" : "<<socios[m]<<endl;
  140.                                                   }
  141.                                                   }
  142.                                                  cout<<endl;
  143.                         break;
  144.                         }
  145.                        
  146.                         cout<<"Desea realizar otra accion s/n?"<<endl;
  147.                         cin>>respuesta;
  148.                         system("cls");
  149.                         }
  150.                        
  151.                         return 0;
  152.                         }

pero la unica parte que me falla es la opcion 3 del menu, la de borrar, porque trato de borrar el segundo elemento y el que se me borra es el ultimo, y ando fatal con esto de los archivo