ALUM/ALUM_GST.CPP
2021-09-12 20:15:34 +02:00

1557 lines
57 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <io.h>
#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include "c:\program\src_dos\libs\make_bot\make_bot.h"
#include "c:\program\src_dos\libs\bdatos\bdatos.hh"
#include "alum_def.h"
#define NLINEAS_Alum 9
BDatos BAlum;
AntiguosAlumnos SAlum; // Estructura de Nombrees
/*************************************\
| |
| Parte Principal del M¢dulo |
| |
\*************************************/
void DuplicaBaseNombrees(void);
void MuestraDatosVAlum( int linea);
void MuestraDatosAlum( long RowStart );
void MuestraAyudaAlum( char columna );
//int CompruebaPulsosEstrellas( void );
void EditItemAlum( char columna, int linea );
void AlumNuevoRegistro( AntiguosAlumnos *MSAlum );
void MuestraAlum( char columna, int linea, char como );
void ObtenCoordenadasAlum( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 );
/*************************************\
| |
| Parte Secundaria del M¢dulo |
| |
| Secci¢n de Busqueda de Nombrees |
| |
\*************************************/
void ObtenCoordenadasMatchAlum( char Row, int *X0, int *Y0, int *X1, int *Y1 );
void MatchDrawAlum( char Row, AntiguosAlumnos MAlum, char como );
void BuscaAlum( char TipoBusqueda, char *CurrRow, long *CurrAlum );
int Match_Alum( AntiguosAlumnos *A, AntiguosAlumnos *B );
void EditMatchAlum( char Row, AntiguosAlumnos * MAlum );
int ObtenMatchAlum( AntiguosAlumnos *MAlum );
/*************************************\
| |
| Parte Tercera del M¢dulo |
| |
| Secci¢n para la impresi¢n |
| |
\*************************************/
void ImprimeFichaAAlum(void);
void ImprimeNombrees( char como );
void ImprimeCabeceraAlum( char como, FILE *file_out );
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte principal del m¢dulo Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* InfoAlumnos *|
|* *|
|* Descripci¢n: *|
|* Controla la introduccion de datos y muestreo asi como todo *|
|* el interfaz de usuario... *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void GstAlumnos(void)
{
char buffer[100], ok = 0, i;
int BPush, key;
char oldCol = -1;
char CurrRow; // Linea sobre la que estamos
char CurrCol; // Columna sobre la que estamos
long CurrAlum; // Producto sobre el que estamos posicionados a golpes
// Rellenamos la pantalla con un fondo atractivo...
setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 );
Imprime_Estaticos( 30, "systm\\alum.img"); // Imprime botones estaticos 'Seccion 30'
sprintf( buffer, "datos\\alum.dbf" );
if ( BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) == ERROR )
Error(0x01, BAlum.cError);
// Si no hay registros, creamos uno almenos.
if ( BAlum.Registros() == 0 )
{
AlumNuevoRegistro( &SAlum );
if ( BAlum.InsReg( (void *)&SAlum, BAlum.Registros(), ARRIBA ) == ERROR )
Error(0x01, BAlum.cError);
}
CurrAlum = 0; CurrRow = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrRow + CurrAlum );
if ( BAlum.LeeReg( (void *)&SAlum, 0 ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
CurrCol = 0;
do {
if ( CurrCol != oldCol )
{
oldCol = CurrCol; MuestraAyudaAlum( CurrCol );
}
// Si estamos en la parte de arriba, dejamos ver sobre que linea nos encontramos
for ( i = 0; i < 4; i++ )
MuestraAlum( i, CurrRow, (CurrCol >= 4) ? INTENSO : NORMAL );
MuestraAlum( CurrCol, CurrRow, INTENSO );
BPush = Comprueba_Secuencia( 1, NULL );
MuestraAlum( CurrCol, CurrRow, NORMAL );
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
/*
if ( ( BPush = CompruebaPulsosEstrellas() ) != 0 )
{
MuestraAlum( BPush, CurrRow, INTENSO );
if ( BAlum.EscribeReg( (void *)&SAlum, (CurrRow + CurrAlum) ) == ERROR )
Error(0x01, BAlum.cError);
}
*/
break;
case -2: // Hay una tecla normal en BUFFER
if ( ( key = getch() ) != 27 )
{
if ( key != 13 )
ungetch( key );
EditItemAlum( CurrCol, CurrRow );
if ( BAlum.EscribeReg( (void *)&SAlum, (CurrRow + CurrAlum) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraAlum( CurrCol, CurrRow, NORMAL );
CurrCol++; if ( CurrCol > 17 ) CurrCol = 17;
}
break;
case -1: // Hay una tecla especial en BUFFER
switch( getch() )
{
// Flecha Izquierda
case 75:
case 15:
CurrCol--; if ( CurrCol < 0 ) CurrCol = 17;
break;
// Flecha Derecha
case 77:
case 9:
CurrCol++; if ( CurrCol > 17 ) CurrCol = 0;
break;
// Flecha Arriba
case 72:
if ( CurrCol < 4 )
{
if ( (CurrRow + CurrAlum) > 0 )
{
if ( ( CurrRow ) <= 0 )
{
CurrRow = NLINEAS_Alum - 1; CurrAlum -= NLINEAS_Alum;
if ( CurrAlum < 0 ) CurrAlum = 0;
while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrAlum > 0 ) CurrAlum++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
} else {
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
}
}
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
} else {
CurrCol--; if ( CurrCol < 0 ) CurrCol = 17;
}
break;
// Flecha Abajo
case 80:
if ( CurrCol < 4 )
{
if ( ( CurrRow + CurrAlum ) < BAlum.Registros() - 1 )
{
if ( ( CurrRow ) >= NLINEAS_Alum - 1 )
{
CurrRow = 0; CurrAlum += NLINEAS_Alum;
while ( (CurrAlum + CurrRow) >= BAlum.Registros() ) CurrAlum--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
} else
CurrRow++;
}
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
} else {
CurrCol++; if ( CurrCol > 17 ) CurrCol = 0;
}
break;
// Inicio
case 71:
CurrRow = 0;
if ( CurrAlum != 0 )
{
CurrAlum = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
}
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
break;
// Fin
case 79:
CurrRow = 0;
if ( CurrAlum != BAlum.Registros() - NLINEAS_Alum )
{
CurrAlum = BAlum.Registros() - NLINEAS_Alum;
if ( CurrAlum < 0 )
{
CurrAlum = 0;
CurrRow = BAlum.Registros()-1;
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
}
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
break;
}
break;
// Imprimir Alumerencias
case 1:
ImprimeFichaAAlum();
break;
// Menu Principal
case 2:
ok = 1;
break;
// Eliminar
case 3:
if ( Optar( 1, "ATENCION", "Esta seguro que desea", "eliminar al Alumno actual.", NULL ) )
{
if ( BAlum.DelReg( CurrAlum + CurrRow ) == ERROR )
Error(0x01, BAlum.cError);
if ( BAlum.Registros() == 0 )
{
AlumNuevoRegistro( &SAlum );
if ( BAlum.InsReg( (void *)&SAlum, BAlum.Registros(), ARRIBA ) == ERROR )
Error(0x01, BAlum.cError);
CurrRow = 0;
} else
// Si he borrado el £ltimo registro subo una linea
if ( (CurrAlum+CurrRow) >= ( BAlum.Registros() - 2 ) )
{
if ( (CurrRow + CurrAlum) > 0 )
{
if ( ( CurrRow ) <= 0 )
{
CurrRow = NLINEAS_Alum - 1; CurrAlum -= NLINEAS_Alum;
if ( CurrAlum < 0 ) CurrAlum = 0;
while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrAlum > 0 ) CurrAlum++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
} else {
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
}
}
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
}
break;
// Insertar
case 4:
AlumNuevoRegistro( &SAlum );
if ( BAlum.InsReg( (void *)&SAlum, (CurrAlum + CurrRow), ARRIBA ) == ERROR )
Error(0x01, BAlum.cError);
CurrCol = 5;
if ( ( CurrRow + CurrAlum ) < BAlum.Registros() - 1 )
{
if ( ( CurrRow ) >= NLINEAS_Alum - 1 )
{
CurrRow = 0; CurrAlum += NLINEAS_Alum;
while ( (CurrAlum + CurrRow) >= BAlum.Registros() ) CurrAlum--;
} else
CurrRow++;
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
break;
// Retroceso R pido
case 5:
CurrRow = NLINEAS_Alum - 1; CurrAlum -= NLINEAS_Alum;
if ( CurrAlum < 0 ) CurrAlum = 0;
while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrAlum > 0 ) CurrAlum++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
break;
// Busqueda Atras
case 6:
BuscaAlum( ATRAS, &CurrRow, &CurrAlum );
break;
// Buscar
case 7:
BuscaAlum( NUEVA_BUSQUEDA, &CurrRow, &CurrAlum );
break;
// Busqueda Adelante
case 8:
BuscaAlum( ADELANTE, &CurrRow, &CurrAlum );
break;
// AvanceR pido
case 9:
CurrRow = 0; CurrAlum += NLINEAS_Alum;
while ( (CurrAlum + CurrRow) >= BAlum.Registros() ) CurrAlum--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( CurrAlum );
if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( CurrRow );
break;
default:
break;
}
} while( !ok );
BAlum.CerrarReg();
}
/**************************************************************************\
|* *|
|* MuestraDatosAlum *|
|* *|
|* Descripci¢n: *|
|* Dado un registro, se muestran sucesivamente este y todos *|
|* los que hay por debajo de l, hasta que se agote la base *|
|* o no quepan mas en la pantalla. *|
|* *|
|* Entradas: Registro por el que comenzar *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraDatosAlum( long RowStart )
{
int linea, campo;
char dev;
int X0, Y0, X1, Y1;
// Imprimo la NLINEAS_Alum que caben en la pantalla
dev = OK;
for ( linea=0; linea < NLINEAS_Alum && (RowStart + linea) < BAlum.Registros()/*dev == OK*/; linea++ )
{
dev = BAlum.LeeReg( (void *)&SAlum, RowStart + linea );
if ( dev == OK )
// Por cada linea hay 4 campos, ehhh!!!
for ( campo=0; campo < 4; campo++ )
MuestraAlum( campo, linea, NORMAL );
}
// Ahora limpio los restantes huecos si los hay
if ( linea < NLINEAS_Alum ) //dev != OK )
{
//linea--;
setfillstyle( SOLID_FILL, Config.TxtBgN );
for ( ; linea < NLINEAS_Alum; linea++ )
for ( campo=0; campo < 4; campo++ )
{
ObtenCoordenadasAlum( campo, linea, &X0, &Y0, &X1, &Y1 );
bar( X0, Y0, X1, Y1 );
}
}
}
void MuestraDatosVAlum( int linea )
{
int campo;
// Mostramos los campos que faltan, ( 1¦ Linea )
// mas 5 que pertenecen a las estrellas
for ( campo=4; campo < 18; campo++ )
MuestraAlum( campo, linea, NORMAL );
}
/**************************************************************************\
|* *|
|* MuestraAlum *|
|* *|
|* Descripci¢n: *|
|* Reescribe el campo dado, seg£n la fila, y la intensidad *|
|* *|
|* Entradas: *|
|* columna campo ha mostar *|
|* linea linea en la que nos encontramos *|
|* como intensidad del texto (NORMAL/INTENSO) *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraAlum( char columna, int linea, char como )
{
char buffer[80], draw;
char buffer1[80], i;
int X0, Y0, X1, Y1;
ObtenCoordenadasAlum( columna, linea, &X0, &Y0, &X1, &Y1 );
draw = 1;
switch( columna )
{
// Nombre del Alumno
case 0:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%15s", SAlum.Nombre );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Apellidos
case 1:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%30s", SAlum.Apellidos );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Direccion
case 2:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%30s", SAlum.Direccion );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Telefono1
case 3:
sprintf ( buffer, "%15s", SAlum.Telefono1 );
break;
// Codigo
case 4:
sprintf ( buffer, " %08ld", BAlum.RegActual() );
break;
// Nombre del Alumno
case 5:
sprintf ( buffer, "%29s", SAlum.Nombre );
break;
// Apellidos
case 6:
sprintf ( buffer, "%29s", SAlum.Apellidos );
break;
// Direcci¢n
case 7:
sprintf ( buffer, "%29s", SAlum.Direccion );
break;
// Localidad
case 8:
sprintf ( buffer, "%15s", SAlum.Localidad );
break;
// Provincia
case 9:
sprintf ( buffer, "%15s", SAlum.Provincia );
break;
// Codigo Postal
case 10:
sprintf ( buffer, "%09lu", SAlum.CodPostal );
break;
// Telefono1
case 11:
sprintf ( buffer, "%15s", SAlum.Telefono1 );
break;
// Fax
case 12:
sprintf ( buffer, "%15s", SAlum.Fax );
break;
// CuentaBancaria 1 / 4
case 13:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, " %04d", SAlum.CC.Oficina );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// CuentaBancaria 2 / 4
case 14:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, " %04d", SAlum.CC.Sucursal );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// CuentaBancaria 3 / 4
case 15:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, " %02d", (int)SAlum.CC.DigControl );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// CuentaBancaria 4 / 4
case 16:
draw = 0;
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, " %010.0f", SAlum.CC.NumCuenta );
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Comentario
case 17:
draw = 0;
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
for ( i = 0; i < 4; i++ )
outtextxy( X0, Y0 + 14*i, SAlum.Notas[i] );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
/*
// Estrellas
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
if ( ( SAlum.Estrellas & ( 0x01 << (columna - 15) ) ) >> (columna - 15 ) )
ponicono( X0+5, Y0+5, led_on, 1 );
else
ponicono( X0+5, Y0+5, led_off, 1 );
// En las estrellas no hay que imprimir nada
draw = 0;
break;
*/
}
if ( draw )
{
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
}
}
/**************************************************************************\
|* *|
|* MuestraAyudaAlum *|
|* *|
|* Descripci¢n: *|
|* Muestra una peque¤a descripcion del contenido para el campo *|
|* *|
|* Entradas: *|
|* columna campo ha mostar su ayuda *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraAyudaAlum( char columna )
{
char buffer1[80];
switch( columna )
{
// Nombre del Alumno
case 0:
sprintf ( buffer1, "Nombre del Antiguo alumno" );
break;
// Apellidos
case 1:
sprintf ( buffer1, "1er y 2do Apellido del antiguo alumno" );
break;
// Telefono 1
case 2:
sprintf ( buffer1, "N£mero de telfono del antiguo Alumno" );
break;
// Fax
case 3:
sprintf ( buffer1, "Fax o segundo telfono del antiguo Alumno" );
break;
// Codigo
case 4:
sprintf ( buffer1, "Codigo secuencial. ( DATO PARA EL BANCO )" );
break;
// Nombre del Alumno
case 5:
sprintf ( buffer1, "Nombre del Antiguo alumno" );
break;
// Apellidos
case 6:
sprintf ( buffer1, "1er y 2do Apellido del antiguo alumno" );
break;
// Direccion
case 7:
sprintf ( buffer1, "Direcci¢n, calle, n§..." );
break;
// Localidad
case 8:
sprintf ( buffer1, "Localidad" );
break;
// Provincia
case 9:
sprintf ( buffer1, "Provincia" );
break;
// C¢digo postal
case 10:
sprintf ( buffer1, "C¢digo Postal" );
break;
// Telefono 1
case 11:
sprintf ( buffer1, "N£mero de telfono del antiguo Alumno" );
break;
// Fax
case 12:
sprintf ( buffer1, "Fax o segundo telfono del antiguo Alumno" );
break;
// Codigo Cuenta Cliente
// Oficina
case 13:
sprintf ( buffer1, "Oficina 4 dig." );
break;
// Sucursal
case 14:
sprintf ( buffer1, "Sucursal 4 dig." );
break;
// Digito Control.
case 15:
sprintf ( buffer1, "D¡gito control 2 dig." );
break;
// N§ Cuenta
case 16:
sprintf ( buffer1, "N£mero de cuenta 10 dig." );
break;
case 17:
sprintf ( buffer1, "Breves notas sobre el antiguo alumno" );
break;
}
// Ayuda reducida
setfillstyle( SOLID_FILL, EGA_BLACK ); bar( 7, 457, 498, 473 );
// Imprime la ayudita
setcolor( EGA_WHITE ); outtextxy( 7, 457, buffer1 );
}
/**************************************************************************\
|* *|
|* EditItemAlum *|
|* *|
|* Descripci¢n: *|
|* Se encarga de editar y validar el campo. *|
|* *|
|* Entradas: *|
|* columna campo ha editar *|
|* linea linea en la que nos encontramos *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EditItemAlum( char columna, int linea )
{
char buffer[80];
int X0, Y0, X1, Y1;
ObtenCoordenadasAlum( columna, linea, &X0, &Y0, &X1, &Y1 );
switch( columna )
{
// Codigo Real
case 4:
/*
sprintf ( buffer, "%lu", SAlum.CodigoR );
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SAlum.CodigoR = atol( buffer );
MuestraAlum( 0, linea, NORMAL );
MuestraAlum( 4, linea, NORMAL );
*/
break;
// Nombre del Alumno
case 5:
strcpy ( buffer, SAlum.Nombre );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Nombre, buffer );
MuestraAlum( 0, linea, NORMAL );
// MuestraAlum( 5, linea, NORMAL );
break;
// 1er y 2do Apellidos
case 6:
strcpy ( buffer, SAlum.Apellidos );
if ( !( InputCadenaG( buffer, 0, 28, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Apellidos, buffer );
MuestraAlum( 1, linea, NORMAL );
// MuestraAlum( 6, linea, NORMAL );
break;
// Direccion
case 7:
sprintf ( buffer, "%s", SAlum.Direccion );
if ( !( InputCadenaG( buffer, 0, 28, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Direccion, buffer );
MuestraAlum( 2, linea, NORMAL );
break;
// Poblaci¢n
case 8:
sprintf ( buffer, "%s", SAlum.Localidad );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Localidad, buffer );
break;
// Provincia
case 9:
sprintf ( buffer, "%s", SAlum.Provincia );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Provincia, buffer );
break;
// C¢digo Postal
case 10:
sprintf ( buffer, "%lu", SAlum.CodPostal );
if ( !( InputCadenaG( buffer, 0, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SAlum.CodPostal = atol ( buffer );
break;
// Telefono
case 11:
sprintf ( buffer, "%s", SAlum.Telefono1 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Telefono1, buffer );
MuestraAlum( 3, linea, NORMAL );
break;
// Fax
case 12:
sprintf ( buffer, "%s", SAlum.Fax );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SAlum.Fax, buffer );
// MuestraAlum( 3, linea, NORMAL );
break;
// Codgio Cuenta
// Oficina
case 13:
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%d", SAlum.CC.Oficina );
if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SAlum.CC.Oficina = atoi ( buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Sucursal
case 14:
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%d", SAlum.CC.Sucursal );
if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SAlum.CC.Sucursal = atoi ( buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Dig.Control
case 15:
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%d", (int)SAlum.CC.DigControl );
if ( !( InputCadenaG( buffer, 0, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SAlum.CC.DigControl = (char)atoi ( buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// C¢digo Cuenta Cliente
case 16:
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
sprintf ( buffer, "%Ld", SAlum.CC.NumCuenta );
if ( !( InputCadenaG( buffer, 0, 10, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SAlum.CC.NumCuenta = atof ( buffer );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
// Comentario
case 17:
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
EditComentario( (char *)(&SAlum.Notas[0][0]), 3, 37, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1, 14 );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
break;
}
}
/**************************************************************************\
|* *|
|* ObtenCoordenadasAlum *|
|* *|
|* Descripci¢n: *|
|* Obtiene las coordenadas de acotacion para el campo pedido *|
|* *|
|* Entradas: *|
|* columna campo del que obtener las coordenadas *|
|* linea linea en la que nos encontramos *|
|* X0 Y0 X1 Y1 Punteros para devolver las coordenadas *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ObtenCoordenadasAlum( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 )
{
// Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 )
*Y0 = 264 + 19*linea;
*Y1 = *Y0 + 17;
switch( columna )
{
case 0:
*X0 = 7; *X1 = 108;
break;
case 1:
*X0 = 107; *X1 = 298;
break;
case 2:
*X0 = 307; *X1 = 495;
break;
case 3:
*X0 = 505; *X1 = 633;
break;
case 4:
*X0 = 67; *Y0 = 7;
*X1 = 148; *Y1 = 28;
break;
case 5:
*X0 = 152; *Y0 = 42;
*X1 = 390; *Y1 = 63;
break;
case 6:
*X0 = 152; *Y0 = 67;
*X1 = 390; *Y1 = 88;
break;
case 7:
*X0 = 152; *Y0 = 112;
*X1 = 390; *Y1 = 133;
/*
*X0 = 92; *Y0 = 112;
*X1 = 388; *Y1 = 133;
*/
break;
case 8:
*X0 = 92; *Y0 = 137;
*X1 = 223; *Y1 = 158;
break;
case 9:
*X0 = 312; *Y0 = 137;
*X1 = 438; *Y1 = 158;
break;
case 10:
*X0 = 522; *Y0 = 137;
*X1 = 598; *Y1 = 158;
break;
case 11:
*X0 = 92; *Y0 = 162;
*X1 = 245; *Y1 = 183;
break;
case 12:
*X0 = 255; *Y0 = 162;
*X1 = 388; *Y1 = 183;
break;
case 13:
*X0 = 10; *Y0 = 209;
*X1 = 60; *Y1 = 220;
break;
case 14:
*X0 = 65; *Y0 = 209;
*X1 =115; *Y1 = 220;
break;
case 15:
*X0 =120; *Y0 = 209;
*X1 =145; *Y1 = 220;
break;
case 16:
*X0 =150; *Y0 = 209;
*X1 =250; *Y1 = 220;
break;
case 17:
*X0 = 402; *Y0 = 165;
*X1 = 633; *Y1 = 221;
break;
}
*X0 += 2;
*X1 -= 2;
}
/**************************************************************************\
|* *|
|* AlumNuevoRegistro *|
|* *|
|* Descripci¢n: *|
|* Limpia el buffer, para un nuevo registro. *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void AlumNuevoRegistro( AntiguosAlumnos *NSAlum )
{
int i, j;
NSAlum -> CodigoR = 0; // Codigos asignados a los Alumnos
strcpy( NSAlum -> Nombre , "" ); // Nombre del Nombre
// Nombre del Nombre
strcpy( NSAlum -> Apellidos, "" );
strcpy( NSAlum -> Telefono1, "" ); // Telfono y fax del Nombre
strcpy( NSAlum -> Fax, "" ); //
strcpy( NSAlum -> Direccion, "" ); // Direccion
strcpy( NSAlum -> Localidad, "" ); // Localidad
strcpy( NSAlum -> Provincia, "" ); // Alumincia
NSAlum -> CodPostal = 0; // C¢digo Postal
NSAlum -> CC.Oficina = 0; // Oficina
NSAlum -> CC.Sucursal = 0; // Sucursal
NSAlum -> CC.DigControl = 0; // DC
NSAlum -> CC.NumCuenta = 0; // NumCuenta
// NSAlum -> Estrellas = 0; // Estrellas ( lo que imagina el cliente )
for ( i = 0; i < 1024; i++ )
NSAlum -> FuturaAmpliacion[i] = '\0';
for ( i = 0; i < 4; i++ )
for ( j = 0; j < 37; j++ )
SAlum.Notas[i][j] = '\0';
}
/*
int CompruebaPulsosEstrellas(void)
{
char enc, i;
enc = 0;
for ( i=0; i < 8; i++ )
{
if ( y_raton > 190 && y_raton < 215 &&
x_raton > ( 90 + 30 * i ) && x_raton < ( 90 + 30 * i + 25 ) )
{
if ( SAlum.Estrellas & ( 0x01 << i ) )
SAlum.Estrellas -= ( 0x01 << i );
else
SAlum.Estrellas += ( 0x01 << i );
enc = 15 + i;
break;
}
}
Anclar_Raton();
return enc;
}
*/
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte secundaria del m¢dulo Û
// Û Û
// Û Secci¢n de Busqueda de refecencias Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* BuscaAlum *|
|* *|
|* Descripci¢n: *|
|* Busca una referencia por su n§ o descripcion *|
|* *|
|* Entradas: *|
|* ATRAS Busca otra coincidencia hacia atras *|
|* NUEVA_BUSQUEDA Inicia una nueva busqueda *|
|* ADELANTE Busca otra coincidencia hacia delante *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void BuscaAlum( char TipoBusqueda, char *CurrRow, long *CurrAlum )
{
static AntiguosAlumnos MAlum;
char enc; long i;
switch ( TipoBusqueda )
{
case NUEVA_BUSQUEDA:
if ( ObtenMatchAlum( &MAlum ) != OK )
return;
i = 0;
break;
case ATRAS:
case ADELANTE:
i = ( *CurrRow + *CurrAlum ) + TipoBusqueda;
break;
}
Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL );
enc = 0;
while ( i < BAlum.Registros() && !enc )
{
if ( BAlum.LeeReg( (void *)&SAlum, i ) == ERROR )
Error( 0x01, BAlum.cError);
if ( Match_Alum( &SAlum, &MAlum ) )
enc = 1;
else
i++;
}
Optar( ENCUADRE, NULL );
if ( enc )
{
*CurrRow = 0; *CurrAlum = i;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosAlum( *CurrRow + *CurrAlum );
if ( BAlum.LeeReg( (void *)&SAlum, *CurrAlum ) == ERROR )
Error(0x01, BAlum.cError);
MuestraDatosVAlum( *CurrRow );
} else
switch( TipoBusqueda )
{
case NUEVA_BUSQUEDA:
Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL );
break;
case ATRAS:
case ADELANTE:
Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL );
break;
}
if ( BAlum.LeeReg( (void *)&SAlum, (*CurrRow + *CurrAlum) ) == ERROR )
Error( 0x01, BAlum.cError);
}
/**************************************************************************\
|* *|
|* Match_Alum *|
|* *|
|* Descripci¢n: *|
|* Compara dos registros y devuelve la posible coincidencia *|
|* *|
|* Entradas: *|
|* Registros a comparar *|
|* *|
|* Salidas: *|
|* Resultado de la comparaci¢n *|
|* *|
\**************************************************************************/
int Match_Alum( AntiguosAlumnos *A, AntiguosAlumnos *B )
{
if ( B -> Nombre[0] != '\0' )
return ( strncmpi( A -> Nombre, B -> Nombre, strlen( B -> Nombre ) ) == 0 );
if ( B -> Apellidos[0] != '\0' )
return ( strncmpi( A -> Apellidos, B -> Apellidos, strlen( B -> Apellidos ) ) == 0 );
if ( B -> Direccion[0] != '\0' )
return ( strncmpi( A -> Direccion, B -> Direccion, strlen( B -> Direccion ) ) == 0 );
if ( B -> Telefono1[0] != '\0' )
return ( strncmpi( A -> Telefono1, B -> Telefono1, strlen( B -> Telefono1 ) ) == 0 );
return 0;
}
/**************************************************************************\
|* *|
|* ObtenMatchAlum *|
|* *|
|* Descripci¢n: *|
|* Obtine los patrones de busqueda necesarios *|
|* *|
|* Entradas: *|
|* Estructura donde guardar el patron de busqueda *|
|* *|
|* Salidas: *|
|* OK La entrada es correcta *|
|* ERROR El usuario interrumpio la busqueda *|
|* *|
\**************************************************************************/
int ObtenMatchAlum( AntiguosAlumnos *MAlum )
{
char Row, ok, i;
int BPush, key, DEV;
struct textsettingstype texttypeinfo;
gettextsettings( &texttypeinfo );
Optar( ENCUADRE, "Comando: Buscar", NULL );
Imprime_Estaticos( 31, "systm\\alum.img" );
ok = 0; Row = 0;
AlumNuevoRegistro( MAlum );
do
{
MatchDrawAlum(Row, *MAlum, INTENSO);
BPush = Comprueba_Secuencia( SEC_OPTAR, NULL );
MatchDrawAlum(Row, *MAlum, NORMAL);
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
case -2:
if ( ( key = getch() ) != 13 && key != 27 )
ungetch( key );
EditMatchAlum( Row, MAlum );
for ( i=0; i < 4; i++ )
MatchDrawAlum(i, *MAlum, NORMAL);
break;
case -1:
switch ( getch() )
{
// Flecha Izquierda
case 75:
case 15:
// Flecha Arriba
case 72:
Row--; if ( Row < 0 ) Row = 3;
break;
// Flecha Derecha
case 77:
case 9:
// Flecha Abajo
case 80:
Row++; if ( Row > 3 ) Row = 0;
break;
}
break;
case 1:
DEV = OK; ok = 1;
break;
case 2:
DEV = ERROR; ok = 1;
break;
}
} while ( !ok );
Optar( ENCUADRE, NULL );
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
return DEV;
}
/**************************************************************************\
|* *|
|* EditMatchAlum *|
|* *|
|* Descripci¢n: *|
|* Edita el patron de busqueda *|
|* *|
|* Entradas: *|
|* Campo a editar, y lugar donde almacenarlo *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EditMatchAlum( char Row, AntiguosAlumnos * MAlum )
{
int X0, Y0, X1, Y1;
char buffer[80];
ObtenCoordenadasMatchAlum( Row, &X0, &Y0, &X1, &Y1 );
switch( Row )
{
case 0:
sprintf( buffer, "%s", MAlum -> Nombre );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
AlumNuevoRegistro( MAlum );
strcpy( MAlum -> Nombre, buffer );
}
break;
case 1:
sprintf( buffer, "%s", MAlum -> Apellidos );
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
AlumNuevoRegistro( MAlum );
strcpy ( MAlum -> Apellidos, buffer );
}
break;
case 2:
sprintf( buffer, "%s", MAlum -> Direccion );
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
AlumNuevoRegistro( MAlum );
strcpy ( MAlum -> Direccion, buffer );
}
break;
case 3:
sprintf( buffer, "%s", MAlum -> Telefono1 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
AlumNuevoRegistro( MAlum );
strcpy ( MAlum -> Telefono1, buffer );
}
break;
}
}
/**************************************************************************\
|* *|
|* MatchDrawAlum *|
|* *|
|* Descripci¢n: *|
|* Escribe los distintos campos seg£n se le indique *|
|* *|
|* Entradas: *|
|* Campo a mostrar, lugar donde se encuentra, y como mostrarlo *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MatchDrawAlum( char Row, AntiguosAlumnos MAlum, char como )
{
int X0, Y0, X1, Y1;
char buffer[80];
ObtenCoordenadasMatchAlum( Row, &X0, &Y0, &X1, &Y1 );
switch( Row )
{
case 0:
sprintf( buffer, "%15s", MAlum.Nombre );
break;
case 1:
strncpy( buffer, MAlum.Apellidos, 25 );
buffer[26] = '\0';
break;
case 2:
strncpy( buffer, MAlum.Direccion, 25 );
buffer[26] = '\0';
break;
case 3:
strncpy( buffer, MAlum.Telefono1, 15 );
buffer[15] = '\0';
break;
}
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
}
/**************************************************************************\
|* *|
|* MatchDrawAlum *|
|* *|
|* Descripci¢n: *|
|* Obtiene las coordenadas relativas al campo dado. *|
|* *|
|* Entradas: *|
|* Campo a obtener las coordenadas, y coordenadas de salida *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ObtenCoordenadasMatchAlum( char Row, int *X0, int *Y0, int *X1, int *Y1 )
{
switch( Row )
{
case 0:
*X0 = 265; *X1 = 465;
*Y0 = 200; *Y1 = 220;
break;
case 1:
*X0 = 265; *X1 = 465;
*Y0 = 225; *Y1 = 245;
break;
case 2:
*X0 = 265; *X1 = 465;
*Y0 = 250; *Y1 = 275;
break;
case 3:
*X0 = 265; *X1 = 465;
*Y0 = 280; *Y1 = 305;
break;
case 4:
*X0 = 385; *X1 = 465;
*Y0 = 250; *Y1 = 275;
break;
case 5:
*X0 = 330; *X1 = 365;
*Y0 = 275; *Y1 = 300;
break;
}
(*X0) ++; (*Y0) ++;
(*X1) --; (*Y1) --;
}
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte secundaria del m¢dulo Û
// Û Û
// Û Secci¢n de Busqueda de refecencias Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* ImprimeNombrees *|
|* *|
|* Descripci¢n: *|
|* Imprime todas las referencias seg£n se le indique *|
|* *|
|* Entradas: *|
|* Como imprimir las referencias *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ImprimeNombrees( char como )
{
long i, old_reg;
char buffer[80];
char Pag=0;
FILE *file_out;
old_reg = BAlum.RegActual();
if ( !Config.Impresora.Printer )
{
if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL )
return;
} else {
file_out = stdprn;
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) )
return;
}
}
ImprimeCabeceraAlum(como, file_out);
for ( i=0; i<BAlum.Registros(); i++ )
{
Pag++; if ( Pag > Config.Impresora.Lineas ) { Pag = 1; fputc( 12, file_out ); }
BAlum.LeeReg( (void *)&SAlum, i );
switch( como )
{
// Listado General
case 1:
sprintf( buffer, "%s %s", SAlum.Nombre, SAlum.Apellidos );
buffer[31] = '\0';
fprintf( file_out, "%-30s %-28s %-15s\n\r", buffer, SAlum.Direccion, SAlum.Telefono1 );
break;
// Listado Etiquetas
case 2:
sprintf( buffer, "%s, %s", SAlum.Nombre, SAlum.Apellidos );
buffer[31] = '\0';
fprintf( file_out, "%30s\n", buffer );
fprintf( file_out, "%30s\n", SAlum.Direccion );
fprintf( file_out, "%15s (%15s)\n", SAlum.Localidad, SAlum.Provincia );
fprintf( file_out, "C¢d. Postal: %lu\n", SAlum.CodPostal );
fprintf( file_out, "\n" );
break;
// Facturas Bancarias ( IMPRESO )
case 3:
fprintf( file_out, " %04d %04d %02d %010.0f", SAlum.CC.Sucursal, SAlum.CC.Oficina, SAlum.CC.DigControl, SAlum.CC.NumCuenta );
fprintf( file_out, " %-15s, %s\n", SAlum.Nombre, SAlum.Apellidos );
break;
}
}
if ( !Config.Impresora.Printer )
fclose( file_out );
BAlum.LeeReg( (void *)&SAlum, old_reg );
}
void ImprimeCabeceraAlum( char como, FILE *file_out )
{
switch( como )
{
// Listado R pido
case 1:
fprintf( file_out, "Nombre y Apellidos Direcci¢n Telfono\n\r" );
fprintf( file_out, "------------------------------------------------------------------------\n\r" );
// 123456789-123456789-123456789 123456789-123456789-123456789- 123456789-12345
// 123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-
break;
// Listado Completo
case 2:
// C¢digos de banco
case 3:
fprintf( file_out, "Sucursal Ofic. DC. Num Cuenta Nombre, Apellidos\n\r" );
fprintf( file_out, "------------------------------------------------------------------------\n\r" );
break;
}
}
void ImprimeFichaAAlum(void)
{
int i;
FILE *file_out;
if ( !Config.Impresora.Printer )
{
if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL )
return;
} else
file_out = stdprn;
if ( Config.Impresora.Printer && !Optar( 1, "­ Prepare la impresora !", "Prepare y encienda la", "impresora, y pulse ACEPTAR", "cuando este lista...", NULL ) )
return;
fprintf( file_out, "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n" );
fprintf( file_out, "³ Ficha: %05ld ³\n", BAlum.RegActual() );
fprintf( file_out, "³----------------ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n" );
fprintf( file_out, "³ ³\n" );
fprintf( file_out, "³ Nombre: %-30s, %-15s ³\n", SAlum.Apellidos, SAlum.Nombre );
fprintf( file_out, "³ ³\n" );
fprintf( file_out, "³ Direcci¢n: %-30s ³\n", SAlum.Direccion );
fprintf( file_out, "³ Localidad: %-15s Provincia: %-15s Cod.Post: %05lu ³\n", SAlum.Localidad, SAlum.Provincia, SAlum.CodPostal );
fprintf( file_out, "³ ³\n" );
fprintf( file_out, "³ Telefono: %-15s %-15s ³\n", SAlum.Telefono1, SAlum.Fax );
fprintf( file_out, "³ ³\n" );
fprintf( file_out, "³ CC: Sucursal Oficina D.C. Num Cuenta ³\n" );
fprintf( file_out, "³ %04d %04d %02d %010.0f ³\n", SAlum.CC.Sucursal, SAlum.CC.Oficina, SAlum.CC.DigControl, SAlum.CC.NumCuenta );
fprintf( file_out, "³ ³\n" );
fprintf( file_out, "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n" );
fprintf( file_out, "\n" );
fprintf( file_out, " Notas:\n" );
for ( i=0; i < 4; i++ )
fprintf( file_out, " %s\n", SAlum.Notas[i] );
if ( !Config.Impresora.Printer )
fclose ( file_out );
}