• Sábado 18 de Mayo de 2024, 20:36

Autor Tema:  Re: base de datos en C  (Leído 1330 veces)

nisuyaves

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: base de datos en C
« en: Viernes 7 de Junio de 2002, 14:39 »
0
alguien sabe como se hace una base de datos en C, pero sin usar programas de bases de datos, es decir, almacenar la informacion en ficheros de texto con estructuras y registros, podeis contestarme al emilio (nisuyaves@yahoo.es) y sino aki, muxas gracias de antemano, taluego

LamKros

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
    • http://www.lamkros.com
base de datos en C
« Respuesta #1 en: Lunes 1 de Julio de 2002, 12:09 »
0
/*
Aqui tienes un ejemplo de como haria una base de datos
si cierto es que no es la forma optima, es una alternativa
relativamente sencilla y nunca va estar llena a no ser que
te quedes sin memoria
*/

#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>

//Estructura de Datos

/*Esta es una base de datos con lista enlazada*/

const int MAXCAD = 20;

typedef char TCadena [MAXCAD+1];


typedef struct TDato
        {
       int codigo;
       TCadena nombre;
       TCadena apellidos;
       };

typedef struct TNodo *TBD;

struct TNodo //
       {
       TDato dato;
       TBD sig;
       };

TBD CrearBDVacia();
void DestruirBD(TBD &l);

void InsertarDato(TBD &l,TDato dato);
void BorrarDato(TBD &l,int codigo);
void LeerDato (TBD &l,int codigo,TDato &dato,bool &ok);
void GuardarFichero (TCadena nombreFichero,TBD &l);
void CargarFichero (TCadena nombreFichero,TBD &l);

int main()
    {
    TBD l;
    l=CrearBDVacia();
    //Aqui iria el programa

    /*No se debe olvidar liberar los datos que hemos creado de forma dinamica
    y que solo nosotros estamos autorizados a eliminar de la memoria
    y que en caso de no eliminarlos se quedaran en la RAM como basura
    hasta que se libere esta.
    */
    DestruirBD(l);
    system("PAUSE");
    return 0;
    }


void GuardarFichero (TCadena nombreFichero,TBD &l)
     {
     TBD ptr;
     ptr=l;
     fstream f;
     f.open(nombreFichero,ios::out|ios::binary);
     while (ptr!=NULL)
           {
           f.write(ptr,sizeof(TNodo));
           ptr=ptr->sig;
           }
     f.close();
     }

void CargarFichero (TCadena nombreFichero,TBD &l)
     {
     TBD ptr;
     fstream f;
     ptr=l;
     f.open (nombreFichero,ios::in | ios::binary);
     if (!(f.bad()))
     {
     while (!(f.eof()))
     {
     f.read (&ptr,sizeof(TNodo));
     ptr=ptr->sig;
     }
     }
     f.close();
     }


TBD CrearBDVacia()
    {return NULL;}

void DestruirBD(TBD &l)
     {
     TBD ptr;
     ptr=l;
     while (ptr!=NULL)
     {
     l=l->sig;
     delete (ptr);
     ptr=l;
     }
     }

void InsertarDato(TBD &l,TDato dato)
     {
     /*Esto depende de como quieras ordenar los datos
     Si quieres ordenarlo de  A-Z se me ocurre que puedes
     ir metiendo el dato despues del ultimo dato que empiece por la misma vocal
     o algo asi  

     */
     TBD ptr,nuevonodo;
     nuevonodo=NULL;
     ptr=l;
     while ((ptr->dato.nombre[0]<dato.nombre[0])&&(ptr!=NULL))
     {
     ptr=ptr->sig;
     }
     nuevonodo=new(TNodo);
     nuevonodo->dato=dato;
     if (ptr!=NULL)
     {nuevonodo->sig=ptr->sig;}
     else
     {nuevonodo->sig = NULL;}
     ptr->sig = nuevonodo;
     }

void BorrarDato(TBD &l,int codigo)
{}


void LeerDato (TBD &l,int codigo,TDato &dato,bool &ok)
     {
     TBD ptr;
     ptr=l;
     while ((ptr!=NULL)&&(ptr->dato.codigo!=codigo))
     {
     ptr=ptr->sig;
     }
     if(ptr!=NULL)
     {
     dato=ptr->dato;
     ok=true;
     }
     else
     {ok=false;}
     }

     /*
     Esto es todo, si he cometido algun error,
     por favor, decirlo por aqui,
     espero que te sea util,

     lamkros@mixmail.com
   ;)
 */texto Green