SoloCodigo
		Programación General => C/C++ => Mensaje iniciado por: nisuyaves en Viernes  7 de Junio de 2002, 14:39
		
			
			- 
				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
			
- 
				/*
 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