BASE DE DATOS I SISTEMA PARA CONTROL DE CALIFICACIONES Guía para el desarrollo del proyecto final de la materia 1.- Diseñe en Visual FoxPro las siguientes tablas(vea figuras 1 y 2): Figura No. 1. Estructura de la tabla ALUMNOS.DBF, la cual es creada para almacenar los datos personales de los alumnos registrados en el sistema. Figura No. 2. Estructura de la tabla CALIF.DBF, la cual es creada para almacenar las calificaciones de los alumnos registrados en el sistema. 2.- Cree un archivo de comandos llamado CONTROL.PRG. Este archivo tiene por objeto implementar el programa principal del sistema de control de calificaicones. SET PROCEDURE TO procs SET TALK OFF SET SAFETY OFF SET DATE BRITISH SELECT 1 USE alumno INDEX ON nocta TAG cuentas INDEX ON nombre TAG nombres SELECT 2 USE calif INDEX ON nocta TAG cuentas INDEX ON materia TAG materias Op=0 DO WHILE Op#10 CLEAR @ 05,15 SAY "Menú de opciones para el Sistema de control escolar" @ 07,15 SAY "[1] Añadir alumnos" @ 08,15 SAY "[2] Añadir calificaciones" @ 09,15 SAY "[3] Modificar/borrar datos personales de alumnos" @ 10,15 SAY "[4] Modificar/borrar calificaciones de alumnos" @ 11,15 SAY "[5] Listado de alumnos con promedio aprobatorio" @ 12,15 SAY "[6] Listado de alumnos con promedio reaprobatorio" @ 13,15 SAY "[7] Promedio de calificaciones por grupos de edad" @ 14,15 SAY "[8] Promedio de calificaciones por semestre" @ 15,15 SAY "[9] Boleta de calificaciones de alumno" @ 16,15 SAY "[10] Salida del sistema" @ 18,15 SAY "Opción -->" GET Op READ DO CASE CASE Op=1 DO altaal CASE Op=2 DO altacal CASE Op=3 DO modalu CASE Op=4 DO modcal CASE Op=5 DO proapr CASE Op=6 DO prorep CASE Op=7 DO proged CASE Op=8 DO prosem CASE Op=9 DO boleta ENDCASE ENDDO WAIT WINDOW "Termina la ejecución del sistema..." 3.- Cree un archivo de comandos llamado PROCS.PRG. Este archivo tiene por objeto almacenar todos los procedimientos necesarios para implementar el sistema de control de calificaciones. ** Este procedimiento añade los datos personales de un alumno a la tabla ** ALUMNO.DBF PROCEDURE altaal SELECT 1 SET ORDER TO cuentas STORE 0 TO nc,cod STORE SPACE(20) TO no,ap STORE SPACE(25) TO do STORE SPACE(10) TO te STORE DATE() TO fn STORE 'S' TO con,gra DO WHILE UPPER(con)='S' CLEAR @ 08,15 SAY "REGISTRO DE NUEVOS ALUMNOS" @ 09,15 SAY "Teclee los datos personales del alumno a registrar" @ 11,15 SAY "No. de cuenta ...." GET nc READ SEEK(nc) IF FOUND() THEN WAIT WINDOW "Este número de cuenta ya fue registrado previamente..." ELSE @ 12,15 SAY "Nombre ...." GET no @ 13,15 SAY "Apellido ...." GET ap @ 14,15 SAY "Domicilio ...." GET do @ 15,15 SAY "Código postal ...." GET cod @ 16,15 SAY "Teléfono ...." GET te @ 17,15 SAY "Fecha de nacimiento ...." GET fn READ alre='S' @ 19,15 SAY "Desea dar de alta este registro (S/N)? " GET alre READ IF UPPER(alre)='S' THEN APPEND BLANK REPLACE nocta WITH nc, nombre WITH no, apellido WITH ap,domicilio WITH do REPLACE cp WITH cod, tel WITH te,fechan WITH fn STORE 0 TO cod STORE SPACE(20) TO no,ap STORE SPACE(25) TO do STORE SPACE(10) TO te STORE DATE() TO fn WAIT WINDOW "El registro ha sido dado de alta..." ELSE WAIT WINDOW "El registro no fue dado de alta..." ENDIF ENDIF @ 21,15 SAY "Desea agregar más registros(S/N)?" GET con READ ENDDO RETURN ** Este procedimiento añade los datos de calificaiones a la tabla ** CALIF.DBF, siempre y cuando ya exista registrado en la tabla ALUMNO.DBF ** el número de cuenta del que se darán de alta las calificaciones PROCEDURE altacal STORE 0 TO nc,ca,se STORE SPACE(20) TO ma STORE 'S' TO con,gra DO WHILE UPPER(con)='S' CLEAR SELECT 1 SET ORDER TO cuentas @ 08,15 SAY "REGISTRO DE CALIFICACIONES DE ALUMNOS" @ 09,15 SAY "Teclee los datos del alumno al que se le capturarán sus calificaciones" @ 11,15 SAY "No. de cuenta ...." GET nc READ SEEK(nc) IF !FOUND() THEN WAIT WINDOW "Este número de cuenta no ha sido registrado previamente..." ELSE @ 12,15 SAY "Nombre .... "+ALLTRIM(nombre)+" "+ALLTRIM(apellido) @ 13,15 SAY "Materia ...." GET ma @ 14,15 SAY "Calificación ...." GET ca @ 15,15 SAY "Semestre ...." GET se READ SELECT 2 LOCATE FOR nocta=nc AND TRIM(materia)=TRIM(ma) IF FOUND() THEN WAIT WINDOW "Esta materia ya fue registrada para ese número de cuenta" ELSE alre='S' @ 19,15 SAY "Desea dar de alta esta calificación (S/N)? " GET alre READ IF UPPER(alre)='S' THEN APPEND BLANK REPLACE nocta WITH nc, materia WITH ma, calif WITH ca,semestre WITH se STORE 0 TO ca,se STORE SPACE(20) TO ma WAIT WINDOW "La calificación ha sido dado de alta..." ELSE WAIT WINDOW "Los datos de esta materia no fueron dado de alta..." ENDIF ENDIF ENDIF @ 21,15 SAY "Desea agregar más calificaciones(S/N)?" GET con READ ENDDO RETURN ** Este procedimiento modifica y/o borra los datos personales de un alumno ** en la tabla ALUMNO.DBF PROCEDURE modalu STORE 0 TO nc STORE 'S' TO con,gra DO WHILE UPPER(con)='S' CLEAR SELECT 1 SET ORDER TO cuentas @ 08,15 SAY "MODIFICACIÓN/BORRADO DE DATOS DE ALUMNOS" @ 09,15 SAY "Teclee los datos personales del alumno" @ 11,15 SAY "No. de cuenta ...." GET nc READ SEEK(nc) IF !FOUND() THEN WAIT WINDOW "Este número de cuenta no ha sido registrado previamente..." ELSE alre='N' @ 12,15 SAY "Nombre ...." GET nombre @ 13,15 SAY "Apellido ...." GET apellido @ 14,15 SAY "Domicilio ...." GET domicilio @ 15,15 SAY "Código postal ...." GET cp @ 16,15 SAY "Teléfono ...." GET tel @ 17,15 SAY "Fecha de nacimiento ...." GET fechan @ 19,15 SAY "Desea borrar este registro (S/N)? " GET alre READ IF UPPER(alre)='S' THEN DELETE PACK SELECT 2 SET FILTER TO nocta=nc DELETE ALL PACK SET FILTER TO WAIT WINDOW "Los datos personales del alumno y sus respectivas calificaciones han sido borradas del sistema..." ELSE WAIT WINDOW "Se han guardado los cambios hechos al registro..." ENDIF ENDIF @ 21,15 SAY "Desea modificar/borrar más registros(S/N)?" GET con READ ENDDO RETURN ** Este procedimiento modifica y/o borra las calificaciones de un alumno ** registradas en la tabla CALIF.DBF PROCEDURE modcal STORE 0 TO nc STORE SPACE(20) TO ma STORE 'S' TO con,gra DO WHILE UPPER(con)='S' CLEAR SELECT 1 SET ORDER TO cuentas @ 08,15 SAY "MODIFICACIÓN/BORRADO DE CALIFICACIONES DE ALUMNOS" @ 09,15 SAY "Teclee los datos del alumno al que se le modificarán sus calificaciones" @ 11,15 SAY "No. de cuenta ...." GET nc @ 13,15 SAY "Materia ...." GET ma READ SEEK(nc) IF !FOUND() THEN WAIT WINDOW "Este número de cuenta no ha sido registrado previamente..." ELSE @ 12,15 SAY "Nombre .... "+ALLTRIM(nombre)+" "+ALLTRIM(apellido) SELECT 2 LOCATE FOR nocta=nc AND TRIM(materia)=TRIM(ma) IF !FOUND() THEN WAIT WINDOW "Esta materia no ha sido registrada para el número de cuenta indicado..." ELSE alre='N' @ 14,15 SAY "Calificación ...." GET calif @ 15,15 SAY "Semestre ...." GET semestre @ 19,15 SAY "Desea borrar esta calificación (S/N)? " GET alre READ IF UPPER(alre)='S' THEN DELETE PACK WAIT WINDOW "La calificación ha sido borrada..." ELSE WAIT WINDOW "Los datos de esta materia han sido modificados..." ENDIF ENDIF ENDIF @ 21,15 SAY "Desea modificar o borrar más calificaciones(S/N)?" GET con READ ENDDO RETURN PROCEDURE proapr ** Este procedimiento despliega los alumnos con promedio de calificación ** aprobatorio SELECT 1 GO TOP CLEAR @ 5,15 SAY "LISTADO DE ALUMNOS CON PROMEDIO APROBATORIO" @ 7,15 SAY "=======================================================" @ 8,15 SAY "No. cuenta" @ 8,28 SAY "Nombre" @ 8,75 SAY "Promedio" @ 9,15 SAY "=======================================================" renglon=9 DO WHILE !EOF() nc=nocta no=nombre ap=apellido SELECT 2 SUM calif FOR nc=nocta TO scalif COUNT FOR nc=nocta TO nreg pro=scalif/nreg IF pro>=6 THEN renglon=renglon+1 @ renglon,15 SAY nc @ renglon,29 SAY TRIM(no)+" "+TRIM(ap) @ renglon,77 SAY pro PICTURE "##.##" ENDIF IF renglon=36 CLEAR @ 5,15 SAY "LISTADO DE ALUMNOS CON PROMEDIO APROBATORIO" @ 7,15 SAY "=======================================================" @ 8,15 SAY "No. cuenta" @ 8,28 SAY "Nombre" @ 8,75 SAY "Promedio" @ 9,15 SAY "=======================================================" renglon=9 ENDIF SELECT 1 SKIP ENDDO WAIT WINDOW "El reporte ha terminado..." RETURN PROCEDURE prorep ** Este procedimiento despliega los alumnos con promedio de calificación ** reprobatorio SELECT 1 GO TOP CLEAR @ 5,15 SAY "LISTADO DE ALUMNOS CON PROMEDIO REPROBATORIO" @ 7,15 SAY "=======================================================" @ 8,15 SAY "No. cuenta" @ 8,28 SAY "Nombre" @ 8,75 SAY "Promedio" @ 9,15 SAY "=======================================================" renglon=9 DO WHILE !EOF() nc=nocta no=nombre ap=apellido SELECT 2 SUM calif FOR nc=nocta TO scalif COUNT FOR nc=nocta TO nreg pro=scalif/nreg IF pro<6 THEN renglon=renglon+1 @ renglon,15 SAY nc @ renglon,29 SAY TRIM(no)+" "+TRIM(ap) @ renglon,77 SAY pro PICTURE "##.##" ENDIF IF renglon=36 CLEAR @ 5,15 SAY "LISTADO DE ALUMNOS CON PROMEDIO REPROBATORIO" @ 7,15 SAY "=======================================================" @ 8,15 SAY "No. cuenta" @ 8,28 SAY "Nombre" @ 8,75 SAY "Promedio" @ 9,15 SAY "=======================================================" renglon=9 ENDIF SELECT 1 SKIP ENDDO WAIT WINDOW "El reporte ha terminado..." RETURN PROCEDURE proged ** Este procedimiento despliega el promedio de los alumnos por grupo de edad SELECT 1 GO TOP CLEAR STORE DATE() TO ge1,ge2 @ 08,15 SAY "PROMEDIO DE CALIFICACIONES POR GRUPOS DE EDAD" @ 09,15 SAY "Teclee los datos del reporte" @ 12,15 SAY "Edad desde" GET ge1 @ 13,15 SAY "Edad hasta" GET ge2 READ CLEAR @ 4,15 SAY "PROMEDIO DE CALIFICACIONES POR GRUPOS DE EDAD" @ 5,15 SAY "DESDE: HASTA:" @ 5,25 SAY ge1 @ 5,48 SAY ge2 @ 7,15 SAY "=======================================================" @ 8,15 SAY "No. cuenta" @ 8,28 SAY "Nombre" @ 8,75 SAY "Promedio" @ 9,15 SAY "=======================================================" renglon=9 SET FILTER TO fechan>=ge1 AND fechan<=ge2 GO TOP DO WHILE !EOF() nc=nocta no=nombre ap=apellido SELECT 2 SUM calif FOR nc=nocta TO scalif COUNT FOR nc=nocta TO nregs pro=scalif/nregs renglon=renglon+1 @ renglon,15 SAY nc @ renglon,29 SAY TRIM(no)+" "+TRIM(ap) @ renglon,77 SAY pro PICTURE "##.##" IF renglon=36 CLEAR @ 4,15 SAY "PROMEDIO DE CALIFICACIONES POR GRUPOS DE EDAD" @ 5,15 SAY "DESDE: HASTA:" @ 5,25 SAY ge1 @ 5,48 SAY ge2 @ 7,15 SAY "=======================================================" @ 8,15 SAY "No. cuenta" @ 8,28 SAY "Nombre" @ 8,75 SAY "Promedio" @ 9,15 SAY "=======================================================" renglon=9 ENDIF SELECT 1 SKIP ENDDO SET FILTER TO WAIT WINDOW "El reporte ha terminado..." RETURN PROCEDURE prosem ** Este procedimiento despliega el promedio de los alumnos por semestre SELECT 2 GO TOP CLEAR STORE 0 TO se @ 08,15 SAY "PROMEDIO DE CALIFICACIONES POR SEMESTRE" @ 09,15 SAY "Teclee los datos del reporte" @ 11,15 SAY "Semestre del que se desea saber el promedio:" GET se READ COUNT FOR semestre=se TO nreg IF nreg=0 THEN WAIT WINDOW "No hay calificaciones registradas para este semestre" ELSE SUM calif FOR semestre=se TO scalif pro=scalif/nreg WAIT WINDOW "El promedio para el semestre "+ALLTRIM(STR(se))+" es "+ALLTRIM(STR(pro)) ENDIF RETURN PROCEDURE boleta ** Este procedimiento despliega el la boleta de calificación para el ** alumno y semestre indicados SELECT 1 SET ORDER TO cuentas GO TOP CLEAR STORE 0 TO nc,se @ 08,15 SAY "BOLETA DE CALIFICACIONES POR ALUMNO Y SEMESTRE" @ 09,15 SAY "Teclee los datos del reporte" @ 11,15 SAY "Número de cuenta del alumno:" GET nc @ 12,15 SAY "Semestre deseado:" GET se READ SEEK(nc) IF !FOUND() THEN WAIT WINDOW "No se ha registrado este número de cuenta" ELSE CLEAR @ 04,15 SAY "BOLETA DE CALIFICACIONES" @ 06,15 SAY "Alumno: " @ 06,37 SAY ALLTRIM(nombre)+" "+ALLTRIM(apellido) @ 07,15 SAY "Número de cuenta :" @ 07,37 SAY nocta PICTURE "########" @ 08,15 SAY "Semestre:" @ 08,37 SAY se PICTURE "########" @ 09,15 SAY "Teléfono: " @ 09,37 SAY tel @ 10,15 SAY "=======================================================" @ 11,18 SAY "Materia" @ 11,40 SAY "Calificación" @ 12,15 SAY "=======================================================" SELECT 2 SET FILTER TO nocta=nc AND semestre=se GO TOP renglon=12 STORE 0 TO ncalif,suma DO WHILE !EOF() renglon=renglon+1 suma=suma+calif ncalif=ncalif+1 @ renglon,15 SAY materia @ renglon,45 SAY calif PICTURE "##.#" SKIP ENDDO SET FILTER TO pro=suma/ncalif IF ncalif=0 THEN renglon=renglon+1 @ renglon,15 SAY "El alumno no tiene registradas calificaciones para este semestre" ENDIF @ renglon+1,15 SAY "=======================================================" @ renglon+2,15 SAY "Promedio general --> "+STR(pro) WAIT WINDOW "El despliegue de la boleta ha terminado..." ENDIF RETURN 4.- Para ver en funcionamiento al sistema debe ejecutar el archivo de comandos con el programa principal, es decir, CONTROL.PRG.