FoxPro/Visual FoxPro - Promedio de notas

   
Vista:
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer eliecerjsierrab@hotmail.com (8 intervenciones) el 18/06/2015 02:14:01
Hola a todos!, necesito que me colaboren en lo siguiente: tengo una tabla notas, la cual tiene los campos periodo, cod_materia, codigo_estudiante y el campo N de la calificación, Mi pregunta es ¿Cómo determino en promedio de cada estudiante en cualquier periodo y que se ordenen según este promedio encontre el comando average y lo uso en forma general asi: AVERAGE notas.cm FOR codigo = "002", pero para recorrer toda la tabla y seleccionar por el periodo y por el codigo de los estudiantes no se como agregar en un cilco repetitivo esta orden para que haga este calculo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Eduardo Ureña

Promedio de notas

Publicado por Eduardo Ureña ursolcr@gmail.com (78 intervenciones) el 18/06/2015 23:31:59
CREATE CURSOR Promedios (periodo c(4),codigo_estudiante c(8),promedio n(10,2),materias n(4))
SELECT PROMEDIOS

INDE ON PERIODO+CODIGO_ESTUDIANTE TAG Llave


SELECT NOTAS
SET ORDER TAG LLAVE &&ESta llave sería la combinación de período+codigo_estudiante
GO TOP
DO WHILE ! EOF()
MiLlave=PERIODO+CODIGO_ESTUDIANTE
DO WHILE PERIODO+CODIGO_ESTUDIANTE=MiLlave .AND. ! EOF()
SELECT PROMEDIOS
IF ! SEEK(MiLlave)
APPEND BLANK
REPLACE PERIODO WITH Notas.Periodo
REPLACE CODIGO_ESTUDIANTE WITH Notas.Codigo_Estudiante
endif
REPLACE PROMEDIO WITH PROMEDIO+Notas.Califica
REPLACE MATERIAS WITH MATERIAS+1
SELECT NOTAS
SKIP
ENDDO
SELECT Promedios
REPLACE ALL PROMEDIO WITH PROMEDIO/MATERIAS

*--------------------------
* En el cursor se guardaría el promedio de todos los estudiantes.
*



Espero le sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eliecer Sierra Buelvas

Promedio de notas

Muchas gracias mi amigo, lo voy a incluir en el código de la aplicación. ... le agradezco mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer (8 intervenciones) el 19/06/2015 11:03:27
Hola! compañero Eduardo Ureña ursolcr@gmail.com , le agradezco su aporte a mi inquietud, estuve tratando de agregar sus sugerencias a mi pequeña aplicación; pero, surgió un pequeño error a la hora de realizar la compilación de la misma, el error es este:

Error-de-compilacion

Compilando c:\colpro\progs\copia.prg
SET ORDER TAG Llave
Error en la línea 11: El comando contiene una frase o palabra clave no reconocida.
Error en la línea 28: Error de anidamiento.

estas son las lineas del código que usted me sugirió, hice unos cambios debido a que los campos de la tabla notas son:
codigo, es la identificación del estudiante.
codigo_mat, es el código de cada materia en total son diez materias.
periodo, es el periodo de cada ciclo de calificaciones en total son 4 más el periodo final(acumulado total de los 4 periodos).
cm, es donde se introduce la calificación respectiva del estudiante por cada materia.

En el codigo hay unos argumentos por ejemplo INDE, es asi o es INDEX, usted uso Mayúsculas para identificar los campos y las tablas esto es valido?, El cursor promedios guarda los promedios por cada estudiante?

CREATE CURSOR Promedios (periodo c(4),codigo c(8),promedio n(10,2),codigo_mat n(4))
SELECT PROMEDIOS

INDE ON periodo+codigo TAG Llave

SELECT notas
SET ORDER TAG Llave &&ESta llave sería la combinación de período+codigo_mat
GO TOP
DO WHILE ! EOF()
MiLlave=periodo+codigo
DO WHILE periodo+codigo=MiLlave .AND. ! EOF()
SELECT PROMEDIOS
IF ! SEEK(MiLlave)
APPEND BLANK
REPLACE periodo WITH notas.periodo
REPLACE codigo WITH notas.codigo
endif
REPLACE promedio WITH promedio+notas.Cm
REPLACE codigo_mat WITH codigo_mat+1
SELECT notas
SKIP
ENDDO
SELECT Promedios
REPLACE ALL promedio WITH promedio/codigo_mat

Bueno compañero Eduardo Ureña, si esta a su alcance poder revisar y sugerirme los respectivos cambios se lo agradezco mucho y disculpe por molestarlo con este inconveniente.

Utilizo Visual Foxpro versión 9.0 para diseñar mi pequeña aplicación

Muchas gracias,....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo Ureña

Promedio de notas

Publicado por Eduardo Ureña (78 intervenciones) el 19/06/2015 15:02:17
Hay un error de sintaxis: (Escribí el código en sin probarlo, haga las correcciones y revise)

SET ORDER TO TAG LLAVE

Además me faltó cerrar el ENDDO de la estructura "DO WHILE PERIODO+CODIGO_ESTUDIANTE=MiLlave .AND. ! EOF()" Note que hay otro ciclo antes y sólo uno cierra.

No olvide crear el índice llave para que no tenga problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer eliecerjsierrab@hotmail.com (8 intervenciones) el 19/06/2015 16:04:24
Al ejecutarlo ahora sale esto a que se debe?

Error-2

Muchas gracias,...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Antonio

Promedio de notas

Publicado por Mauricio Antonio (1368 intervenciones) el 19/06/2015 17:12:16
Donde estas abriendo la tabla NOTAS??
Hice unos pequeños cambios en la rutina
*
USE notas ORDER llave
CREATE CURSOR Promedios (periodo c(4),codigo c(8),promedio n(10,2),codigo_mat n(4))
SELECT PROMEDIOS
INDE ON periodo + codigo TAG Llave
SELECT notas
SET ORDER TO Llave &&ESta llave sería la combinación de período+codigo_mat
SCAN
MiLlave = periodo + codigo
SCAN periodo + codigo = MiLlave
SELECT PROMEDIOS
IF !SEEK(MiLlave)
APPEND BLANK
REPLACE periodo WITH notas.periodo
REPLACE codigo WITH notas.codigo
ENDIF
REPLACE promedio WITH promedio + notas.Cm
REPLACE codigo_mat WITH codigo_mat + 1
SELECT notas
ENDSCAN
SELECT Promedios
REPLACE ALL promedio WITH promedio/codigo_mat
ENDSCAN
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer eliecerjsierrab@hotmail.com (8 intervenciones) el 19/06/2015 17:23:33
Hola Mauricio Antonio, con esa sugerencia sale esto:


ERROR-3

Te agradesco mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Antonio

Promedio de notas

Publicado por Mauricio Antonio (1368 intervenciones) el 19/06/2015 17:27:47
Tienes razon, esta mal, aca la linea correcta
SCAN WHILE periodo + codigo = millave
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer (8 intervenciones) el 19/06/2015 17:34:28
Ahora sale esto al ejecutar la aplicación

error-4

Te agradezco

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Antonio

Promedio de notas

Publicado por Mauricio Antonio (1368 intervenciones) el 20/06/2015 13:13:42
Debes de tener el indice llave en notas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer (8 intervenciones) el 21/06/2015 03:26:45
Hola!, he hecho lo que usted me sugirió pero salen errores,

lo hice asi:

Indice

Pero salen estos errores uno después del otro repetidamente:


Error-5

y sigue esto:


Error-6

muchas gracias por su ayuda,....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Antonio

Promedio de notas

Publicado por Mauricio Antonio (1368 intervenciones) el 21/06/2015 04:03:07
Amigo, te toca revisar, ya esto no es de programacion, es de sintaxis:
periodo C(4) codigo C(8) && longitud de llavees de 12 caracteres
INDE ON periodo + codigo TAG llave
En el indice llave de tabla notas, defines:
LLAVE normal codigo + STR(periodo,1,0) && aca quieres hacer la llave mezclando caracteres + numeros, esto es .............................................................................&& imposible hacerlo
Tienes que ser congruente con los indices, Revisa bien....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Eliécer

Promedio de notas

Publicado por Eliécer eliecerjsierrab@hotmail.com (8 intervenciones) el 21/06/2015 05:31:28
Le agradezco mucho su colaboración, el error es la definición del tipo de campo y su amplitud. Envieme un email a mi correo para ver de que manera me puede ayudar pues la tabla la necesito y el promedio de mis estudiantes también. Mi email es: eliecerjsierrab@hotmail.com. muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar