BDATOS/PRUEBA.CPP
2021-09-03 17:42:38 +02:00

298 lines
6.9 KiB
C++
Raw Permalink Blame History

/*************************************************************************\
| |
| 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 );
}