elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Ampliar el espacio de direccionamiento de un archivo de acceso directo con datos en: 9 Noviembre 2012, 06:41 am
Hola a todos, tengo un programa que necesita una mejora, llegue hasta acá, y la verdad no estoy muy seguro que este muy bien... me falta, como dice en el asunto, Ampliar el espacio de direccionamiento de un archivo de acceso directo con datos.

Espero puedan ayudarme, muchas gracias de ante mano, les dejo el código que tengo...

 #include <iostream>
 #include <fstream>
 using namespace std;
 #define MAX_TAM 23

 struct reg_alumno {
        int cod;
        char nom[30];
        unsigned short edad;
        char cel[20];
        reg_alumno();
        void mostrar();
        void leecod();
        void leeresto();
        void leetodo();
        };

        fstream myfile; //// el fichero es una variable GLOBAL

 bool confirma (const char *c) {
 char resp[30];
 cout << c << endl;
 cout << "¿lo confirma (s/n)?: ";
 cin.getline(resp, 30);
 if ( toupper(resp[0])=='S')
    return true;
 else
     return false;
 }

 reg_alumno::reg_alumno() {
     cod=0;
 }

 void reg_alumno::mostrar() {
     cout.width(5);
     cout<<right<<cod<<" ";
     cout.width(31);
     cout<<left<<nom;
     cout.width(6);
     cout<<edad;
     cout.width(20);
     cout<<cel;
     cout.clear();
 }

 void reg_alumno::leecod() {
 char aux[30];
      cout<< "Codigo: ";
      cin.getline(aux,30);
      cod=atoi(aux);
 }

 void reg_alumno::leeresto() {
      char aux[30];
      cout<< "Nombre: ";
      cin.getline(nom, 30);
      cout<< "Edad: ";
      cin.getline(aux,30);
      edad=atoi(aux);
      cout<< "Celular: ";
      cin.getline(cel,20);
      }

 void reg_alumno::leetodo() {
      leecod();
      leeresto();
      }

 // función de direccionamiento (hashing)
 // se asume que el fichero está abierto

 int hashing(int cod) {
     return cod % MAX_TAM;
 }

 void ini_arch(){
      reg_alumno al;
      myfile.seekp(0,ios::beg); // mueve el puntero put (de escritura)
      al.cod=0; // el codigo cero señala un registro vacio
      for (int i=0; i<MAX_TAM; i++)
          myfile.write ((char *) &al, sizeof(al));
          }

 // crear el archivo

 void crear_arch() {
      if ( confirma("Se realizara la creacion del archivo vacio\n") ) {
         ini_arch();
         cout << "El archivo fue inicializado\n";
      }
      else
          cout << "El archivo no fue inicializado\n";
          }

 // Listar el contenido del archivo
 void listar_arch() {
      reg_alumno al; int n,dir;
      myfile.seekg(0);
      n=0; dir=0;
      myfile.read ((char *) &al, sizeof(al));
      while (!myfile.eof()) {
            if (al.cod) {
               cout.width(4);
               cout << right << dir << " ";
               al.mostrar();
               cout << endl;
               n++;
            }
      dir++;
      myfile.read ((char *) &al, sizeof(al));
      }
 cout << "Se tienen " << n << " registros en el fichero\n";
 myfile.clear();
 }

 void adicion_arch() { // Añadir contenido al archivo
      reg_alumno al, dato;
      int dir, intentos;
      bool grabado;
      cout << "Adicion de datos, introduzca la informacion\n\n";
      al.leetodo();
      dir=hashing(al.cod);
      intentos=0;
      grabado=false;
      while (intentos < MAX_TAM and !grabado) {
            intentos++;
            myfile.seekg(dir*sizeof(reg_alumno), ios::beg);
            myfile.read ((char *) &dato, sizeof(reg_alumno));
            if (dato.cod==0) {
               myfile.seekp (dir*sizeof(reg_alumno), ios::beg);
               myfile.write ((char *) &al, sizeof(reg_alumno));
               grabado=true;
               cout << "Datos almacenados en registro " << dir<<endl;
               }
            else {
                 if (dato.cod==al.cod) {
                    cout << "El codigo ya existe en el archivo. No puede duplicarse\n";
                    grabado=true; // fuerza la salida del proceso
                    }
                 else
                     dir = hashing(al.cod+intentos*11); // relocalización lineal a =11
                     }
            intentos++;
            }
            if (intentos==MAX_TAM)
               cout << "No se puede anadir el registro\n ";
               }

 // busca un registro en el archivo
 // si fracasa devuelve un negativo
 // se supone que el archivo está abierto
 int busca_reg(reg_alumno *dato) {
 reg_alumno al;
 int dir, intentos;
 bool encontrado;
 cout << "Busqueda de datos\n\n";
 al.leecod();
 dir=hashing(al.cod);
 intentos=0;
 encontrado=false;
 while (intentos < MAX_TAM and !encontrado) {
       intentos++;
       myfile.seekg(dir*sizeof(reg_alumno), ios ::beg);
       myfile.read ((char *) dato, sizeof( reg_alumno));
       if (dato->cod==al.cod) {
          encontrado=true;
          cout<< "Registro encontrado en direccion: "<<dir<<endl;
          dato->mostrar();
          }
       else
           dir = hashing(al.cod + intentos*11); // relocalización lineal a=11
           intentos++;
           }
       if (intentos==MAX_TAM && !encontrado) {
          cout << "No se puede localizar el registro\n";
          dir=-1;
          }
          return dir;
          }

 // Modificar contenido del archivo
 void modifica_arch() {
      reg_alumno al, dato;
      int dir;
      cout << "Modificacion de datos\n\n";
      dir=busca_reg(&dato);
      if (dir>=0) {
         cout<< "\nIntroduzca nuevos datos\n";
         al.cod=dato.cod;
         al.leeresto();
         if (confirma("Grabar los nuevos datos. ") ) {
            myfile.seekp (dir*sizeof(reg_alumno), ios::beg);
            myfile.write ((char *) &al, sizeof( reg_alumno));
            cout << "Datos modificados en registro " << dir<<endl;
            }
         else
         cout << "Los datos no fueron modificados\n";
         }
         }

 // Elimina lógicamente un registro del archivo
 void elimina_arch() {
      reg_alumno dato;
      int dir;
      cout << "Eliminacion de datos\n\n";
      dir=busca_reg(&dato);
      if (dir>=0) {
         if (confirma("Eliminar el registro. ")) { 
         dato.cod=0;
         myfile.seekp (dir*sizeof(reg_alumno), ios::beg);
         myfile.write ((char *) &dato, sizeof( reg_alumno));
         cout << "Datos eliminados en registro " << dir<<endl;
      }
      else
          cout << "Los datos no fueron borrados \n";
      }
 }

 // Busca un registro en el archivo
 void busca_arch() {
  reg_alumno dato;
  busca_reg (&dato);
  }

 int main(int argc, const char * argv[])
 {
 char resp[30];
 myfile.open("dato_alum.dat", ios::in | ios:: binary); // abre el archivo para lectura
 if (!myfile.is_open()) { // si el archivo no existe lo inicializa
    myfile.open("dato_alum.dat", ios::out|ios::binary); // abre para escritura
    ini_arch(); // inicializa
    }
    myfile.close(); // cierra para abrirlo en lectura y escritura;
    myfile.open("dato_alum.dat", ios::in |ios::out|ios::binary);
    if (myfile.is_open()) {
       do {
          cout << "\nC - Crear el archivo \n";
          cout << "A - Anadir datos \n";
          cout << "M - Modificar datos\n";
          cout << "E - Eliminar datos\n";
          cout << "B - Buscar datos\n";
          cout << "L - Listado de todos los datos\n";
          cout << "S - Salir del programa\n";
          cout << "\nOpcion:";
          cin.getline(resp, 30);
          switch (toupper(resp[0])) {
                 case 'C':
                      crear_arch();
                 break;
                 case 'A':
                      adicion_arch();
                 break;
                 case 'M':
                      modifica_arch();
                 break;
                 case 'E':
                      elimina_arch();
                 break;
                 case 'B':
                      busca_arch();
                 break;
                 case 'L':
                      listar_arch();
                 }
          } while ( toupper(resp[0])!='S');
          }
       else {
            cout << "El fichero no puede abrirse\n" ;
            }
            myfile.close();
            return 0;
            }
2  Programación / Programación C/C++ / Re: manipulación de un objeto multidimensional en: 3 Abril 2012, 05:24 am
Muchas gracias por esta colaboracion, me encanta, porque estoy empezando y resolviste algunas dudas sin que las proponga ;-) Estare chequeando mas a fondo este código, una vez mas gracias...
3  Programación / Programación C/C++ / Re: conio2!! en: 1 Abril 2012, 01:24 am
No estoy muy seguro, pero puede funcionar llamando solamente a conio.h (#include<conio.h>)

Podras encontrar mas información en: http://codigoc.org/198-como-usar-gotoxy-en-c

Espero haya servido, Saludos...
4  Programación / Programación C/C++ / Re: Mejorar programación en: 1 Abril 2012, 01:03 am
estuve toda la tarde en projecteuler.net.... muy buena pagina.... una vez mas mil gracias... y me encancantaría si alguien mas pudiese aportar.

 ;D
5  Seguridad Informática / Análisis y Diseño de Malware / ¿Cómo construir un keylogger? en: 1 Abril 2012, 00:53 am
Hola, aprovecho para mandar un saludo a todos...

Bueno ahi va, soy un fanático de la seguridad informatica, y me gustaria construir un keylogger para dar una demostración en mi curso sobre este tema. Logre encontrar algo para teclados con conexión PS/2(http://www.keelog.com/es/diy.html) pero tambien quisiera hacerlo teniendo un teclado con conexión usb.

gracias...
6  Programación / Programación C/C++ / Re: Mejorar programación en: 31 Marzo 2012, 22:07 pm
Mil gracias, tomare muy en cuenta todo esto... y ya estoy chequeando lo que me sugeriste.

;-)

7  Programación / Programación C/C++ / Mejorar programación en: 31 Marzo 2012, 20:44 pm
Hola...

Estoy con un nivel intermedio en programación en mi primer lenguaje(c++),
y me gustaría que me ayuden con problemas de programación para mejorar mis destrezas, con algunas soluciones si se puede.

gracias y saludos a todos...
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines