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