home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of the Best
/
_.img
/
02110
/
video
/
vident.sc
< prev
Wrap
Text File
|
1989-10-02
|
6KB
|
121 lines
PROC DoCheckOut()
; Immetteremo un film per cliente alla volta. Se un cliente sta già
; noleggiando un film, useremo record multipli per catturare le informazioni
; nuove, ed usando DUPLICA (DITTO) per riprodurre le informazioni ripetute.
CLEARALL
EMPTY "ordtemp" ; Prepara la tabella temporanea
EDIT "ordtemp" ; per la redazione
PICKFORM 1 ; tramite la scheda di noleggio.
WHILE (True) ; Continua ad immettere informazioni finché l'utente lo desidera
WAIT RECORD ; Consenti all'utente di immettere un record di informazioni
PROMPT "Immetti le informazioni sul noleggio del film",
"[F2] per salvare i dati, [F1] per consultazione, [Esc] per annullare"
UNTIL "F2","Esc"
IF retval = "Esc" ; L'utente vuole annullare il record?
THEN DEL ; Sì, eliminalo,
DO_IT! ; salva gli altri record,
QUITLOOP ; e lascia la sessione di immissione
ELSE PGDN ; No, vai al record seguente
ENDIF
; Se stavamo aggiornando le informazioni di magazzino nella tabella FILMS,
; lo faremo qui, perché l'utente deve aver premuto [F2] per essere giunto
; fino a questo punto
SHOWMENU "Ancora?":"Registra un'altro film per lo stesso cliente",
"Fatto!":"Hai finito di registrare film per questo cliente"
TO Choice
IF Choice = "Fatto!" ; L'utente ha finito di immettere informazioni per questo cliente?
THEN DO_IT! QUITLOOP ; Sì, salvale e lascia la sessione di immissione
ENDIF
;se si è giunti fin qui, l'utente desidera immettere un'altro film
;(a questo punto stamperemmo sulla ricevuta l'ultimo film immesso)
MOVETO [Cod. Cliente] ; Assicurati di essere nel primo campo
FOR i FROM 1 TO 4
DITTO RIGHT ; Copia le informazioni dal record precedente
ENDFOR
ENDWHILE
; Abbiamo messo tutti i film per questo cliente in ORDTEMP. Ora dobbiamo
; estrarre le informazioni da mettere nella tabella normalizzata, ORDINI.
CLEAR ; Cancella lo schermo PAL ed avverti l'utente
?? "Attendi. I file vengono aggiornati..."
; L'interrogazione seguente estrae le informazioni conservate nelle tabelle normalizzate
Query
Ordtemp | Cod. Cliente | Data | Data Restituzione |
| Check | Check | Check |
| | | |
| | | |
Ordtemp | Impiegato | Cod. Film | Data Scadenza | Tariffa | Giorni |
| Check | Check | Check | Check | Check |
| | | | | |
| | | | | |
Ordtemp | Riavvolto? | Ammontare Totale |
| Check | Check |
| | |
| | |
Endquery
DO_IT! ; Esegui l'interrogazione
ADD "Risposta" "Ordini" ; e salva i risultati normalizzati
ENDPROC ;DoCheckOut
PROC DoReturn()
; Invece di elaborare i risultati allo stesso modo dei noleggi, useremo
; un metodo diverso, che illustra le capacitò del comando SCAN di scandire
; tutti i record rilevanti.
CLEARALL ; Cancella lo spazio di lavoro
Total = 0 ; Fin qui, il cliente non ci deve nulla
@ 0,0 ?? "Immetti il codice del cliente che restituisce i film: "
ACCEPT "N" TO CustNum ; Ottieni il codice del cliente
EDIT "Ordini" ; Richiama la tabella degli ordini
PICKFORM 1 ; in una scheda
SCAN FOR [Cod. Cliente] = CustNum ; Individua il cliente nella tabella
MOVETO [Data Restituzione] ; Posizionati nel campo [Data Restituzione]
IF ISBLANK([]) THEN ; Il film è giè stato restituito?
WAIT RECORD ; No, controlla se lo è ora
PROMPT "Immetti le informazioni sulla restituzione del film",
"[F2] per salvare i dati e continuare con altre restituzioni"
UNTIL "F2"
IF NOT ISBLANK([Data Restituzione]) ; Sì, il film è stato restituito
THEN [Giorni] = [Data Restituzione] - [Giorni] ; quindi calcola l'ammontare dovuto
IF [Riavvolto?] <> "S"
THEN [Ammontare Totale] = [Tariffa] * [Giorni] + 1 ; Aggiungi la tariffa per il riavvolgimento
ELSE [Ammontare Totale] = [Tariffa] * [Giorni]
ENDIF
Total = Total + [Ammontare Totale] ; Aggiorna il totale dovuto dal cliente
; se stavamo stampando le ricevute, ora dovremmo stampare le informazioni su ogni film
; se stavamo gestendo il magazzino con la tabella FILMS, dovremmo fare lo stesso, ora
ENDIF
ENDIF
ENDSCAN ; Continua l'ispezione fino alla fine della tabella
; Se arriviamo fino a questo punto, allora abbiamo esaminato tutte le
; possibili restituzioni del cliente, e dunque possiamo aggirnare i file
; e raccogliere i danni...
DO_IT! ; Aggiorna la tabella ORDINI affinché rispecchi la restituzione dei film
CLEAR ; Ora mostra il totale dovuto dal cliente
@ 0,0 ?? "Totale dovuto da questo cliente: $",FORMAT("W6.2",Total)
?
? "Premi {Enter} quando sei pronto per l'azione successiva..."
x = GETCHAR()
ENDPROC ;DoReturn
WHILE (True)
CLEAR
SHOWMENU
"Noleggio":"Elabora la richiesta di noleggio di un film.",
"Restituzione":"Elabora la restituzione di un film.",
"Fine":"Ritorna al menu principale."
TO Choice
SWITCH
CASE Choice = "Noleggio":DoCheckOut()
CASE Choice = "Restituzione":DoReturn()
OTHERWISE : CLEARALL QUITLOOP
ENDSWITCH
ENDWHILE