298 lines
6.9 KiB
C++
298 lines
6.9 KiB
C++
/*************************************************************************\
|
||
| |
|
||
| Programa para probar el buen funcionamiento de la libreria BDatos .(JD) |
|
||
| |
|
||
| 12.03.96 |
|
||
\*************************************************************************/
|
||
#include <conio.h>
|
||
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <stdlib.h>
|
||
|
||
#include "BDatos.hh"
|
||
|
||
void Altas(void);
|
||
void Bajas(void);
|
||
void Listar(void);
|
||
void Modificar(void);
|
||
void MuestraMenu(void);
|
||
int Busca( char *nombre );
|
||
void Insertar_Especial(void);
|
||
|
||
void RellenaBase(void);
|
||
int fcmp( const void *A, const void *B );
|
||
|
||
|
||
typedef struct
|
||
{
|
||
char nombre[15];
|
||
char apellidos[50];
|
||
long DNI;
|
||
int Grupo;
|
||
} DummyStruct;
|
||
|
||
DummyStruct dummy;
|
||
|
||
BDatos DummyBase;
|
||
|
||
int main(void)
|
||
{
|
||
int ok = 0;
|
||
|
||
strcpy( DummyBase.MyHeader.ProgName, "Dummy Prog..." );
|
||
DummyBase.MyHeader.VerHi = 1;
|
||
DummyBase.MyHeader.VerLow = 0;
|
||
if ( DummyBase.AbrirReg( "dummy.fil", sizeof( DummyStruct ) ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
return 1;
|
||
}
|
||
|
||
do
|
||
{
|
||
MuestraMenu();
|
||
switch( getch() )
|
||
{
|
||
// Altas
|
||
case '1':
|
||
Altas();
|
||
break;
|
||
// Bajas
|
||
case '2':
|
||
Bajas();
|
||
break;
|
||
// Modificaciones
|
||
case '3':
|
||
Modificar();
|
||
break;
|
||
// Listar
|
||
case '4':
|
||
Listar();
|
||
break;
|
||
// CortarRegistros
|
||
case '5':
|
||
DummyBase.ShortReg();
|
||
break;
|
||
// Altas
|
||
case '6':
|
||
Insertar_Especial();
|
||
break;
|
||
// Ordena la base segun nombre
|
||
case '7':
|
||
DummyBase.SortReg( fcmp );
|
||
break;
|
||
case '8':
|
||
RellenaBase();
|
||
break;
|
||
|
||
// Fin
|
||
case '0':
|
||
ok = 1;
|
||
break;
|
||
|
||
};
|
||
}while( !ok );
|
||
|
||
DummyBase.CerrarReg();
|
||
|
||
return 0;
|
||
}
|
||
|
||
void MuestraMenu(void)
|
||
{
|
||
clrscr();
|
||
cprintf(" M E N <20> P R I N C I P A L \r\n");
|
||
cprintf("-------------------------------\r\n");
|
||
|
||
cprintf(" 1 Altas <20> nReg: %ld \r\n", DummyBase.Registros() );
|
||
cprintf(" 2 Bajas <20> nRegT: %ld \r\n", DummyBase.NRegTotal() );
|
||
cprintf(" 3 Modificaciones <20> CReg: %ld \r\n", DummyBase.RegActual() );
|
||
cprintf(" 4 Listar <20> --- \r\n");
|
||
cprintf(" 5 Cortar Fichero <20> _-<2D> J.D <20>-_\r\n");
|
||
cprintf(" <20> <20>-_ F.V _-<2D>\r\n");
|
||
cprintf(" 0 Salir al DOS <20> --- \r\n");
|
||
cprintf(" <20> F R i \r\n");
|
||
cprintf(" 6 Ins. Especial <20> u e S \r\n");
|
||
cprintf(" 7 Ordenar Campo <20> T N i \r\n");
|
||
cprintf(" <20> u O V \r\n");
|
||
}
|
||
|
||
void RellenaBase(void)
|
||
{
|
||
int ficha;
|
||
|
||
cprintf("\r\nRellenando base con 800 fichas. Por favor, espere...");
|
||
|
||
for( ficha=0; ficha<800; ficha++ )
|
||
{
|
||
sprintf( dummy.nombre, "P%03d", (800-ficha) );
|
||
sprintf( dummy.apellidos, "P%03d", ficha );
|
||
dummy.DNI = ficha;
|
||
dummy.Grupo = ficha;
|
||
|
||
// Inserta un Reg por arriba de pos.
|
||
if ( DummyBase.InsReg( (void *)&dummy, ficha, ARRIBA ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
}
|
||
}
|
||
|
||
void Altas(void)
|
||
{
|
||
cprintf("\r\nIntroduzca: ( nombre, apellidos, DNI, Grupo ) \r\n");
|
||
scanf( "%14s %49s %ld %d", dummy.nombre, dummy.apellidos, &dummy.DNI, &dummy.Grupo );
|
||
|
||
// Inserta un Reg por arriba de pos.
|
||
if ( DummyBase.InsReg( (void *)&dummy, DummyBase.Registros(), ARRIBA ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
}
|
||
|
||
void Insertar_Especial(void)
|
||
{
|
||
int PorDonde, Adonde;
|
||
|
||
cprintf("\r\nIntroduzca: ( nombre, apellidos, DNI, Grupo ) \r\n");
|
||
scanf( "%14s %49s %ld %d", dummy.nombre, dummy.apellidos, &dummy.DNI, &dummy.Grupo );
|
||
fflush(stdin);
|
||
|
||
cprintf("\r\nIntroduzca donde y por donde insertar (1==ARRIBA)(0==ABAJO): ");
|
||
scanf( "%d %d", &Adonde, &PorDonde );
|
||
fflush(stdin);
|
||
|
||
PorDonde = ( PorDonde == 1 ) ? ARRIBA : ABAJO ;
|
||
|
||
// Inserta un Reg por arriba de pos.
|
||
if ( DummyBase.InsReg( (void *)&dummy, Adonde, PorDonde ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
|
||
cprintf("\r\nRegistros aun abiertos, condici<63>n metaestable");
|
||
}
|
||
}
|
||
|
||
void Bajas(void)
|
||
{
|
||
char nombTMP[80];
|
||
cprintf("\r\nIntroduzca nombre a eliminar: ");
|
||
scanf( "%14s", nombTMP );
|
||
|
||
if ( Busca( nombTMP ) != OK )
|
||
{
|
||
cprintf( "\r\nFichero no se encuentra en la base" );
|
||
getch();
|
||
return;
|
||
}
|
||
|
||
if ( DummyBase.LeeReg( (void *)&dummy, DummyBase.RegActual() ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
|
||
cprintf( "%14s %40s %5ld %5d\n\r", dummy.nombre, dummy.apellidos, dummy.DNI, dummy.Grupo );
|
||
|
||
if ( getch() == 32 ) return;
|
||
|
||
// Borra el registro de la posicion actual
|
||
if ( DummyBase.DelReg( DummyBase.RegActual() ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
}
|
||
|
||
void Modificar(void)
|
||
{
|
||
char nombTMP[80];
|
||
|
||
cprintf("\r\nIntroduzca nombre a modificar: ");
|
||
scanf( "%14s", nombTMP );
|
||
|
||
if ( Busca( nombTMP ) != OK )
|
||
{
|
||
cprintf( "\r\nFichero no se encuentra en la base" );
|
||
getch();
|
||
return;
|
||
}
|
||
|
||
|
||
cprintf("\r\nIntroduzca: ( nombre, apellidos, DNI, Grupo ) \r\n");
|
||
scanf( "%14s %49s %ld %d", dummy.nombre, dummy.apellidos, &dummy.DNI, &dummy.Grupo );
|
||
|
||
// Escribe el Reg en la base
|
||
if ( DummyBase.EscribeReg( (void *)&dummy, DummyBase.RegActual() ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
|
||
}
|
||
|
||
void Listar( void )
|
||
{
|
||
int i;
|
||
cprintf( " Nombre Apelidos D.N.I Grupo \n\r" );
|
||
cprintf( "------------------------------------------------------------------------------\n\r" );
|
||
|
||
|
||
for( i=0; i<DummyBase.Registros(); i++ )
|
||
{
|
||
if ( DummyBase.LeeReg( (void *)&dummy, i ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
|
||
cprintf( "%14s %40s %5ld %5d\n\r", dummy.nombre, dummy.apellidos, dummy.DNI, dummy.Grupo );
|
||
|
||
}
|
||
getch();
|
||
|
||
}
|
||
|
||
int Busca( char *nombre )
|
||
{
|
||
int i, enc = ERROR;
|
||
|
||
for( i=0; i<DummyBase.Registros() && enc != OK; i++ )
|
||
{
|
||
if ( DummyBase.LeeReg( (void *)&dummy, i ) != OK )
|
||
{
|
||
cprintf("\r\nSe producio un error: %d", DummyBase.lError );
|
||
cprintf("\r\n%s\r\n", DummyBase.cError );
|
||
DummyBase.CerrarReg();
|
||
exit(1);
|
||
}
|
||
if ( strcmp( dummy.nombre, nombre ) == 0 )
|
||
enc = OK;
|
||
}
|
||
|
||
return enc;
|
||
}
|
||
|
||
int fcmp( const void *A, const void *B )
|
||
{
|
||
return strcmp( ((DummyStruct *)A) -> nombre, ((DummyStruct *)B) -> nombre );
|
||
}
|
||
|