*PROGRAMA: SICAL.PRG *AUTOR: VICTOR REYES *FECHA: 3/11/02 *DESCRIPCION: SISTEMA DE CALIFICACIONES /* BASES DE DATOS USADAS: MATERIAS.DBF : CLAMAT C 5, NOMAT C 40, SEMAT C 1 ALUMNOS.DBF : CLALU C 5, NOMALU C 40, DIRALU C 20 CALIFICA.DBF : CLALU C 5, CLAMAT C 5, PERIODO C 1, CALIF N 5.2 */ SET DATE TO FRENCH SET COLOR TO "10/4,15/0" CLEAR USE ALUMNOS INDEX ON CLALU TO ALUMNOS USE MATERIAS INDEX ON CLAMAT TO MATERIAS USE CALIFICA INDEX ON CLALU TO CALIFICA CLOSE ALL MARCO(0,0,24,79,2) MARCO(1,1,3,78,1) MARCO(7,20,13,60,1) MARCO(21,25,23,55,1) TIT="SISTEMA DE CALIFICACIONES" CENTRA(TIT,2) SET MESSAGE TO 22 CENTER SET WRAP ON SEL=1 DO WHILE SEL<6 @8,26 PROMPT PADC("A L U M N O S",28) MESSAGE "DATOS DE ALUMNOS" @9,26 PROMPT PADC("M A T E R I A S",28) MESSAGE "DATOS DE MATERIAS" @10,26 PROMPT PADC("C A L I F I C A C I O N E S",28) MESSAGE "CAPTURA DE CALIFICACIONES" @11,26 PROMPT PADC("V I S U A L I Z A R",28) MESSAGE "DETALLE DE CALIFICACIONES" @12,26 PROMPT PADC("I M P R E S I O N",28) MESSAGE "IMPRIMIR BOLETAS" MENU TO SEL PANTA=SAVESCREEN(0,0,24,79) DO CASE CASE SEL=1 EDICION(SEL) CASE SEL=2 EDICION(SEL) CASE SEL=3 CAPCALI() CASE SEL=4 VERCALI() CASE SEL=5 IMP() OTHERWISE //EN CASO DE QUE NO SEA UN NUMERO DEL 1 AL 5 IF READKEY()=12 .OR. READKEY()=268 //SI SE OPRIME LA TECLA ESCAPE SET COLOR TO //REGRESAR EL COLOR A BLANCO SOBRE NEGRO CLEAR CLOSE ALL QUIT //SALIDA DEL PROGRAMA ENDIF ENDCASE RESTSCREEN(0,0,24,79,PANTA) ENDDO RETURN //FIN DEL PROGRAMA PRINCIPAL PROCEDURE MARCO(RI,CI,RF,CF,L) IF L=1 @RI,CI TO RF,CF ELSE @RI,CI TO RF,CF DOUBLE ENDIF RETURN PROCEDURE CENTRA(MSJE,REN) @REN,(80-LEN(MSJE))/2 SAY MSJE COLOR "14/4" RETURN PROCEDURE EDICION(NUM) IF NUM=1 USE ALUMNOS INDEX ON CLALU TO ALUMNOS acColumnas := { "CLALU", "NOMALU", "DIRALU" } CAD="CAPTURA DE DATOS DE ALUMNOS" ENDIF IF NUM=2 USE MATERIAS INDEX ON CLAMAT TO MATERIAS acColumnas := { "CLAMAT", "NOMAT", "SEMAT" } CAD="CAPTURA DE DATOS DE MATERIAS" ENDIF CLEAR MARCO(0,0,24,79,2) CENTRA(CAD,2) CAR1={CHR(178),CHR(178),CHR(178)} CAR2={CHR(177),CHR(177),CHR(177)} CAR3={CHR(176),CHR(176),CHR(176)} @22,10 SAY " MODIFICAR" COLOR "11/4" @22,40 SAY " SALIR" COLOR "11/4" @23,10 SAY " AGREGAR" COLOR "11/4" @23,40 SAY " BORRAR" COLOR "11/4" DBEDIT( 5, 1, 21, 78, acColumnas, "FuncUsuario",,,CAR1,CAR2,CAR3) clear close all RETURN FUNCTION FuncUsuario( nModo, nCol ) LOCAL nTecla := LASTKEY() LOCAL nValRet := 1 // Valores de // retorno por defecto DO CASE CASE nModo = 0 //Inactivo nValRet = FuncInac() CASE nModo = 1 //Inicio BD TONE( 100, 3 ) CASE nModo = 2 //Fin BD TONE( 100, 3 ) CASE nModo = 3 //BD Vacia nValRet = FuncVacia() CASE nModo = 4 //Tecla Excepcion nValRet = FuncExcep( nTecla, nCol ) OTHERWISE TONE( 100, 3 ) ENDCASE RETURN nValRet FUNCTION FuncExcep( nTecla, nCol ) LOCAL nValRet := 1 // Valor de retorno por // defecto DO CASE CASE nTecla = 27 // Si ESCAPE nValRet = 0 // Salir CASE nTecla = 13 // Si ENTER nValRet = FuncEdic( nCol ) // Funcion para editar // campo CASE nTecla = 7 .AND. LASTREC() != 0 // Pulsada DELETE PACK nValRet=2 CASE nTecla=22 //INS nValRet = FuncAnex(nTecla) OTHERWISE TONE( 100, 1 ) ENDCASE RETURN nValRet FUNCTION FuncAnex( nTecla ) LOCAL nValRet APPEND BLANK // A¥adir registro en nValRet = 2 // Actualizar pantalla RETURN nValRet FUNCTION FuncEdic( nCol ) LOCAL nValRet // Valor de retorno LOCAL nCampo // Posición del // campo actual LOCAL cValCampo // Valor del campo actual nCampo = FIELDPOS( acColumnas[nCol] ) IF nCampo != 0 SET CURSOR ON cValCampo := FIELDGET( nCampo ) // Guardar el // contenido // del campo @ ROW(), COL() GET cValCampo // nuevo valor GET READ FIELDPUT( nCampo, cValCampo ) // Sustituir por SET CURSOR OFF // el nuevo valor ENDIF RETURN 2 FUNCTION FuncInac() // Rutina de inactividad RETURN 1 FUNCTION FuncVacia() // Rutina de registros vacios APPEND BLANK RETURN 1 PROCEDURE CAPCALI DECLARE ACLAMAT[10],ANOMAT[10],MCALI[10] CLEAR SELECT 1 USE ALUMNOS INDEX ALUMNOS SELECT 2 USE MATERIAS INDEX MATERIAS SELECT 3 USE CALIFICA INDEX ON CLALU+CLAMAT+PERIODO TO CLALMP @10,10 SAY "PERIODO (1,2,3,F): " MPER=SPACE(1) @10,30 GET MPER READ @12,10 SAY "SEMESTRE (1-6): " MSEM=SPACE(1) @12,28 GET MSEM READ CLEAR SELECT 2 C=0 DO WHILE .NOT. EOF() IF MSEM=SEMAT C++ ACLAMAT[C]=CLAMAT ANOMAT[C]=NOMAT ENDIF SKIP ENDDO SELECT 1 DO WHILE .NOT. EOF() @10,10 SAY "ALUMNO: " + NOMALU MALU=CLALU FOR D=1 TO 10 MCALI[D]=0.0 NEXT FOR K=1 TO C @11+K,10 SAY "MATERIA: " @11+K,20 SAY ANOMAT[K] SELECT 3 SEEK MALU+ACLAMAT[K]+MPER IF .NOT. FOUND() @11+K,55 GET MCALI[K] PICT "99.9" READ IF READKEY()=12 .OR. READKEY()=268 CLOSE ALL RETURN ENDIF APPEND BLANK REPLACE CLAMAT WITH ACLAMAT[K], CLALU WITH MALU, PERIODO WITH MPER,; CALIF WITH MCALI[K] ELSE CENTRA("YA EXISTE LA CALIFICACION",22) @11+K,55 SAY CALIF PICT "99.9" TONE(300) @22,10 CLEAR TO 22,70 ENDIF NEXT INKEY(0) SELECT 1 SKIP ENDDO CLOSE ALL RETURN PROCEDURE VERCALI DECLARE ACLAMAT[10],ANOMAT[10] CLEAR @10,10 SAY "PERIODO (1,2,3,F): " MPER=SPACE(1) @10,30 GET MPER READ @12,10 SAY "SEMESTRE (1-6): " MSEM=SPACE(1) @12,30 GET MSEM READ CLEAR SELECT 1 USE MATERIAS INDEX MATERIAS C=0 DO WHILE .NOT. EOF() IF MSEM=SEMAT C++ ACLAMAT[C]=CLAMAT ANOMAT[C]=NOMAT ENDIF SKIP ENDDO SELECT 2 USE CALIFICA INDEX ON CLALU TO CALIFICA SELECT 3 USE ALUMNOS INDEX ALUMNOS REN=2 DO WHILE .NOT. EOF() @REN,0 SAY NOMALU MCLA=CLALU SELECT 2 GO TOP COL=30 C=1 DO WHILE .NOT. EOF() IF MPER=PERIODO .AND. ACLAMAT[C]=CLAMAT .AND. MCLA=CLALU @REN,COL SAY CALIF COL=COL+5 C++ ENDIF SKIP ENDDO REN++ SELECT 3 SKIP ENDDO INKEY(0) CLOSE ALL RETURN PROCEDURE IMP CLEAR ESC=CHR(27) CENTRA("IMPRESION DE DATOS ALUMNOS",2) @10,10 SAY "ENCIENDE TU IMPRESORA " INKEY(0) IF ISPRINTER() @12,10 SAY "IMPRIMIENDO.........." SET PRINT ON SET DEVICE TO PRINTER USE ALUMNOS INDEX ALUMNOS @PROW(),0 SAY ESC+"E" @PROW(),0 SAY ESC+"*v10S" @PROW(),20 SAY ESC+" DATOS DE ALUMNOS" @PROW()+1,3 SAY ESC+" CLAVE" @PROW(),10 SAY ESC+" NOMBRE" @PROW(),55 SAY ESC+" DIRECCION" @PROW()+1,2 SAY ESC+REPLI("=",70) DO WHILE .NOT. EOF() @PROW()+1,3 SAY ESC+CLALU @PROW(),10 SAY ESC+NOMALU @PROW(),55 SAY ESC+DIRALU SKIP ENDDO EJECT @PROW(),0 SAY ESC+"E" SET DEVICE TO SCREEN SET PRINT OFF ENDIF RETURN