148 lines
4.9 KiB
C++
148 lines
4.9 KiB
C++
/**************************************************************************\
|
||
| |
|
||
| Clase para el tratamiento de Bases de Datos |
|
||
| |
|
||
| Jos‚ David Guill‚n 1996 (c) |
|
||
| |
|
||
| |
|
||
\**************************************************************************/
|
||
|
||
|
||
#if !defined(__BDatos_HH)
|
||
#define __BDatos_HH
|
||
|
||
#include <stdio.h>
|
||
|
||
#define OK 0
|
||
#define ERROR 1
|
||
#define NO_ENC -1
|
||
|
||
#define ARRIBA 1
|
||
#define ABAJO 0
|
||
|
||
#if !defined(__BDatos_CPP)
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
#endif
|
||
|
||
typedef struct
|
||
{
|
||
char ProgName[15]; // Estos datos se comprueban al abrir la base
|
||
char VerHi, VerLow; // para saber si es la adecuada para su progr.
|
||
|
||
char Other[200];
|
||
} YourHeader;
|
||
|
||
typedef struct
|
||
{
|
||
char NBD[13];
|
||
char Eof_Code;
|
||
char VerHi, VerLow;
|
||
YourHeader MyHeader;
|
||
long NRegistros;
|
||
long NRegTotal;
|
||
long SizeReg;
|
||
} Header;
|
||
|
||
class BDatos {
|
||
|
||
public:
|
||
|
||
char lError;
|
||
char cError[80];
|
||
YourHeader MyHeader;
|
||
|
||
void ObtenError(int code); // Obtiene el error "code"
|
||
long Registros(void); // N§ de registros
|
||
long NRegTotal(void); // N§ de registros
|
||
long RegActual(void); // Reg. Actual
|
||
|
||
BDatos(); // Constructor de Clase
|
||
~BDatos(); // Destructor de Clase
|
||
int AbrirReg( char *file, long sizereg ); // Abre el Fichero
|
||
void SalvaDatosUsuario( void * Datos ); // Salva los 256 bytes de usuario
|
||
// Carga los datos de usuario
|
||
void CargaDatosUsuario( void * Datos, unsigned char size );
|
||
void CerrarReg( void ); // Cierra el Fich.
|
||
int EscribeReg( void *dato, long pos ); // Escribe un Dato
|
||
int LeeReg( void *dato, long pos ); // Lee un Dato
|
||
int InsReg( void *dato, long pos, char ab ); // Inserta un Reg en pos.
|
||
int DelReg( long pos ); // Borra un Reg de pos.
|
||
|
||
int ShortReg(void); // Corta el fich. y lo hace mas peque¤o
|
||
|
||
// Ordena la Base
|
||
int SortReg( int (*fcmp)(const void *, const void *) );
|
||
// Busca un registro en una base ordenada
|
||
int BuscReg( long PosIni, int (*fcmp)(const void *, const void *) );
|
||
|
||
private:
|
||
// Funcion auxiliar de ordenaci¢n
|
||
int SortRegi( int (*fcmp)(const void *, const void *), long izquierda, long derecha );
|
||
FILE *handle_BDatos; // Handle a la Base
|
||
Header BDatosHeader;
|
||
long NRegActual;
|
||
char filename[80];
|
||
char rError;
|
||
void *A, *B;
|
||
};
|
||
|
||
|
||
#if !defined(__BDatos_CPP)
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
|
||
/*
|
||
1 2 3 4 5 6 7 8 9 0
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
|
||
INS (2_3)
|
||
(si existen archivos borrados: " (TotalRecords+1) mark * " coge su posicion )
|
||
|
||
1 2 3 4 5 6 7 8 9 0
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³*X1³*X2³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ ³
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³ X2³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³*X2³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
|
||
(si no existen archivos borrados: coge la posicion de Records + 1 )
|
||
|
||
1 2 3 4 5 6 7 8 9 0
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³ 6 ³ 7 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^ÀÄÄ^
|
||
ÀÄrecords = 7ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
ÄÂÄ
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³7+1³ 6 ³ 7 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
ÄÁÄ
|
||
DEL (3)
|
||
1 2 3 4 5 6 7 8 9 0
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³ X ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³ ³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
³^ÄÄÙ^ÄÄÙ^ÄÄÙ^ÄÄÙ /.\
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||
³ 2 ³ 3 ³ 6 ³ 9 ³ 1 ³ 4 ³ 5 ³*X ³ ³ ³ ³ ³ ³
|
||
ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||
Á Reg Mark *
|
||
*/
|
||
|
||
|