/*************************************************************************\ | | | Programa para probar el buen funcionamiento de la libreria BDatos .(JD) | | | | 12.03.96 | \*************************************************************************/ #include #include #include #include #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 é P R I N C I P A L \r\n"); cprintf("-------------------------------\r\n"); cprintf(" 1 Altas ³ nReg: %ld \r\n", DummyBase.Registros() ); cprintf(" 2 Bajas ³ nRegT: %ld \r\n", DummyBase.NRegTotal() ); cprintf(" 3 Modificaciones ³ CReg: %ld \r\n", DummyBase.RegActual() ); cprintf(" 4 Listar ³ --- \r\n"); cprintf(" 5 Cortar Fichero ³ _-ù J.D ù-_\r\n"); cprintf(" ³ ù-_ F.V _-ù\r\n"); cprintf(" 0 Salir al DOS ³ --- \r\n"); cprintf(" ³ F R i \r\n"); cprintf(" 6 Ins. Especial ³ u e S \r\n"); cprintf(" 7 Ordenar Campo ³ T N i \r\n"); cprintf(" ³ 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¢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 nombre, ((DummyStruct *)B) -> nombre ); }