Programa del timbre computarizado
(esta página ha sido hecha por Esteban Chauque)

Hasta antes de implementar el Timbre Computarizado el timbre de la escuela se accionaba con un pulsador en forma manual. Este programa ha reemplazado la función del pulsador ya que una computadora toca el timbre en forma automática.

Características del programa:

El programa del timbre debe cumplir con determinadas condiciones:

El programa hace sonar el parlante de la computadora a las horas determinadas por el usuario y durante el tiempo que se le indique.
Debe poder manejar un horario distinto para los viernes, ya que en esta escuela el horario del viernes a la tarde es distinto al del resto de la semana.
El programa después de un corte de luz debe arrancar solo y a la hora correspondiente.
El programa debe tocar el timbre los fin de semana.
El programa debe tener una pequeña ventana donde se van mostrando los datos de la duración, la hora a la que va a tocar, la fecha y hora actual, y una cuenta regresiva.
Dicha ventana se debe mover constantemente para evitar que se gaste en forma despareja el fósforo del monitor.
No se puede salir de la ejecución del programa a no ser que se ingrese una clave, para evitar que alguien pueda modificar el horario sin autorización.
El sistema reloj esta compuesto por distintos *.PRG los cuales tienen distintas funciones.
El programa se realizo en su totalidad en FOXPRO 2.5 para MS-DOS, no por ser el mejor lenguaje de programación sino porque es muy practico para distintas funciones.

 Listado de los archivos utilizados por el sistema (reloj ):

         

RELOJ.PRG
*:*********************************************************************
*:
*: Program: RELOJ.PRG
*:
*: System: RELOJ PARA EL COLEGIO
*: Author: CHAUQUE ESTEBAN ALEJANDRO
*: Copyright (c) 1997, ESCUELA AGROTECNICA SALESIANA
*: Last modified: 11/13/97 18:34
*:
*: Calls: PANTALLA.PRG
*: RELOJV.PRG
*: WIND.PRG
*:
*: Documented 11/13/97 at 18:41 FoxDoc version 2.10
*:*********************************************************************
SET CURSOR OFF
SET CLOCK OFF
SET ESCAPE OFF
*
* Se ejecuta el fondo de pantalla
*
DO pantalla
*
* Se ejecuta el programa que toca el timbre
*
DO relojv
*
* Todo se repite hasta que se salga del programa
*
DO WHILE .T.
SET TALK OFF
@ 22,39 TO 24,78 DOUBLE COLOR BG
@ 23,40 SAY " Hecho por: Chauque Esteban Alejandro " COLOR BG
*
* Se establecen las dimenciones y opciones del menu
*
DIMENSION choices(4)
STORE ' MODIFICAR EL HORARIO ' TO choices(1)
STORE ' EJECUTAR EL PROGRAMA ' TO choices(2)
STORE ' SALIR ' TO choices(4)
STORE '-------------------------'TO choices(3)
STORE 0 TO opcion
@ 8,26 MENU choices,4 TITLE ' OPCIONES ' SHADOW
READ MENU TO opcion
*
* Ejecuta el programa que modifica el horario
*
IF opcion = 1
DO WINDOW
ENDIF (OPCION = 1)
*
* Ejecuta el programa que toca el timbre
*
IF opcion = 2
CLEAR
DO relojv
ENDIF (OPCION = 2)
*
* Ejecuta la opcion para salir del programa
*
IF opcion = 4
CANCEL
ENDIF (OPCION = 4)
ENDDO (.T.)
*
* Fin del programa
*
*: EOF: RELOJ.PRG
 

RELOJV.PRG
 
*:*********************************************************************
*:
*: Program: RELOJV.PRG
*:
*: System: RELOJ PARA EL COLEGIO
*: Author: CHAUQUE ESTEBAN ALEJANDRO
*: Copyright (c) 1997, ESCUELA AGROTECNICA SALESIANA
*: Last modified: 11/13/97 18:25
*:
*: Called by: RELOJ.PRG
*:
*: Calls: SEMANA() (function in SEMANA.PRG)
*: : MESES() (function in MESES.PRG)
*: : MUSICA1.PRG
*: : RESTA() (function in RESTA.PRG)
*:
*: Uses: RELOJ4.DBF
*:
*: Documented 11/13/97 at 18:41 FoxDoc version 2.10
*:*********************************************************************
SET TALK OFF
*
* Se abre la base de datos
*
USE reloj4
SET ESCAPE OFF
*
* Se definen las dimenciones de la ventana
*
DEFINE WINDOW reloj FROM 0,0 TO 12,48 PANEL COLOR N++/N SHADOW
*
* Se definen las variables que se van a usar para mover la ventana
* cada 2 segundos
*
s2=0
X=0
x0=1
y=0
y0=1
*
* Todo se repite hasta que se apriete la tecla magica
*
DO WHILE .T.
IF INKEY()=248
EXIT
ENDIF (INKEY()=248)
* Se define cada cuantos segundos debe moverse la ventana
* Se establece la variable "S"
s = INT(VAL( SUBSTR(TIME(), 7, 2) )/2)
* Se comprueva si se debe mover la pantalla
IF s<>s2
s2=s
* Se estable los espacios que se debe mover la ventana
X=X+ x0
y=y+ y0
* Se verifica que la ventana no salga por la parte inferiror de la
* pantalla
IF y>11
y0= -1
ENDIF (Y>11)
IF y=0
y0= 1
ENDIF (Y=0)
IF X=0
x0= 1
ENDIF (X=0)
* Se verifica que la ventana no salga por los costados de la pantalla
IF X>30
x0= -1
ENDIF (X>30)
ENDIF (S<>S2)
MOVE WINDOW reloj TO y,X
ACTIVATE WINDOW reloj
@ 0,2 SAY PADC("Hoy es " + semana(DATE()) +STR(DAY(DATE()),3) + " de " + meses(DATE()) +" de " + STR(YEAR(DATE()),4),44) COLOR G+/N
@ 2,15 SAY "Son las" + " "+ TIME() COLOR G+/N
*
* Se verifica si comienza un día
*
IF TIME()= "00:00:00"
GO TOP
CLEAR
ENDIF (time()= "00:00:00")
*
* Se comprueba si es Sabado o Domingo
*
IF CDOW( DATE() ) = "Saturday" .OR. CDOW( DATE() ) = "Sunday"
@ 5,2 TO 7,44 DOUBLE COLOR R/N
@ 6,4 SAY "Los fin de semana no se toca el timbre" COLOR R/N
LOOP
ENDIF (CDOW( DATE() ) = "Saturday" .OR. CDOW( DATE() ) = "Sunday")
*
* Se verifica si se termina el día (fin de archivo)
*
IF EOF()
@ 5,2 TO 7,44 DOUBLE COLOR R/N
@ 6,3 SAY " Por hoy no hay m s timbres " COLOR R/N
@ 4,2 FILL TO 4,47 COLOR N/N
@ 8,13 FILL TO 8,47 COLOR N/N
LOOP
ENDIF (EOF())
*
* Las horas que tengan -- se descartan
*
IF viernes="--"
SKIP
LOOP
ENDIF (VIERNES="--")
*
* Se verifica si el día es viernes y esa hora no corresponde a un viernes
*
IF CDOW(DATE()) = "Friday" .AND. viernes = "NO"
SKIP
LOOP
ENDIF (CDOW(DATE()) = "Friday" .AND. viernes = "NO")
*
* Se verifica si el día no es viernes y esa hora si corresponde a un viernes
*
IF CDOW(DATE()) <> "Friday" .AND. viernes = "SI"
SKIP
LOOP
ENDIF (CDOW(DATE()) <> "Friday" .AND. viernes = "SI")
*
* Se comprueba si ya es la hora para tocar el timbre
*
IF TIME() = hora
DO musica1
SKIP
CLEAR
LOOP
ENDIF (TIME() = Hora)
*
* Se verifica si el TIME es mayor que la HORA y se debe avanzar un
* lugar en la base de datos
*
IF TIME() > hora
SKIP
LOOP
ENDIF (TIME() > HORA)
*
* Distribucion de los datos en la ventana
*
@ 4,0 SAY " EL PROXIMO TIMBRE DURA : " COLOR G+/N
@ 4,29 SAY " "+STR( duracion , 2,0) COLOR GR+/N
@ 4,33 SAY " SEGUNDOS" + " " COLOR G+/N
@ 6,2 SAY " EL PROXIMO TOCARA A LAS: " COLOR G+/N
@ 6,36 SAY " HORAS" COLOR G+/N
@ 6,30 SAY hora COLOR GR+/N
@ 8,13 SAY " FALTAN " COLOR G+/N
@ 8,24 SAY resta() +" " COLOR R+/N
ENDDO (.T.)
*
* Se cierra la ventana
*
RELEASE WINDOW reloj
*
* fin de este programa
*
RETURN
*: EOF: RELOJV.PRG
 

PANTALLA.PRG
 
*:*********************************************************************
*:
*: Program: PANTALLA.PRG
*:
*: System: RELOJ PARA EL COLEGIO
*: Author: CHAUQUE ESTEBAN ALEJANDRO
*: Copyright (c) 1997, ESCUELA AGROTECNICA SALESIANA
*: Last modified: 11/13/97 18:40
*:
*: Called by: RELOJ.PRG
*: : WIND.PRG
*:
*: Documented 11/13/97 at 18:41 FoxDoc version 2.10
*:*********************************************************************
* Se limpia la pantalla
CLEAR
*
* Se da las dimenciones del fondo de pantalla
*
FOR X=0 TO 24
@ X,0 SAY REPLICATE( CHR(177), 80) COLOR B/N
ENDFOR (x)
@ 22,39 TO 24,78 DOUBLE COLOR BG
@ 23,40 SAY " Hecho por: Chauque Esteban Alejandro " COLOR BG
*
* Fin del programa
*
RETURN
*: EOF: PANTALLA.PRG
 

WIND.PRG
 
*:*********************************************************************
*:
*: Program: WIND.PRG
*:
*: System: RELOJ PARA EL COLEGIO
*: Author: CHAUQUE ESTEBAN ALEJANDRO
*: Copyright (c) 1997, ESCUELA AGROTECNICA SALESIANA
*: Last modified: 11/13/97 18:39
*:
*: Called by: RELOJ.PRG
*:
*: Calls: PANTALLA.PRG
*:
*: Uses: MANUAL.DBF
*: : RELOJ4.DBF
*: : RELOJ2.DBF
*:
*: Documented 11/13/97 at 18:41 FoxDoc version 2.10
*:*********************************************************************
SET ESCAPE OFF
USE manual
@ 0,29 FILL TO 21,80 DOUBLE COLOR N/N
@ 1,29 SAY texto SIZE 21,50 COLOR G/N
@ 0,28 TO 21,80 DOUBLE COLOR G/N
*
* Abre la base de datos de manera exclusiva
*
USE reloj4 EXCLUSIVE
*
* Se define la ventana donde se encuentra la base de datos
*
DEFINE WINDOW reloj FROM 0,0 TO 24,25 IN SCREEN TITLE "Horario de los Timbres" PANEL SHADOW
BROWSE WINDOWS reloj NORMAL FIELD hora, duracion, viernes :p="@M ,SI,NO,--"
*****
*
* Se ordena y guarda los cambios hechos a la base de datos
*
PACK
SORT TO reloj2 ON hora ASCENDING
CLOSE DATABASES
DELETE FILE reloj4.dbf
RENAME reloj2 TO reloj4
*****
*
* Fin del programa
*
DO pantalla
*: EOF: WIND.PRG

MUSICA1.PRG
 
*:*********************************************************************
*:
*: Program: F:\ALUMNOS\CHAUQU_E\MUSICA1.PRG
*:
*: System: RELOJ PARA EL COLEGIO
*: Author: CHAUQUE ESTEBAN ALEJANDRO
*: Copyright (c) 1997, ESCUELA AGROTECNICA SALESIANA
*: Last modified: 11/13/97 18:36
*:
*: Called by: RELOJV.PRG
*:
*: Documented 11/13/97 at 18:41 FoxDoc version 2.10
*:*********************************************************************
*
* Imprime en la ventana los datos de la hora y la duracion del
* timbre que esta tocando
*
@ 4,2 SAY "ESTA TOCANDO EL TIMBRE DE LAS: " + hora + " HORAS" COLOR R/N
@ 8,13 SAY "DURANTE: " + STR( duracion , 2,0) + " SEGUNDOS" COLOR R/N
@ 6,2 FILL TO 6,47 COLOR N/N
*
* Se defien la frecuencia del sonido
*
SET BELL TO 10000,18
?? REPLI(CHR(7),duracion)
SET BELL TO 500,10
RETURN
*
* Fin del programa
*
*: EOF: MUSICA1.PRG
 

RELOJ4.DBF 
Estructura de la base de datos:
Campo
Nombre
Tipo
Ancho
1
Hora
Carácter
5
2
Duracion
Numérico
2
3
Viernes
Carácter
2
 

Volver a la página del Timbre Computarizado