BASE DE DATOS I SISTEMA PARA CONTROL DE

Anuncio
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.
Descargar