identification division.
program-id. indebitati.
author. Matteo Tomasulo.
security. Per un miglior visualizzazione di lettere.txt usare console/editor 80x25.
environment division.
input-output section.
file-control.
select clienti assign to "clienti.dat".
select debitori assign to "debitori.dat".
select lettera assign to "lettere.txt".
data division.
file section.
fd clienti
label record is standard.
01 cliente.
02 codice pic x(5).
02 nome pic x(30).
02 indirizzo pic x(30).
fd debitori
label record is standard.
01 debitore.
02 codice-deb pic x(5).
02 importo pic Z(10),99.
fd lettera
label record is omitted.
01 riga.
02 filler pic x(80).
working-storage section.
77 finiti-clienti pic aa.
77 finiti-debitori pic aa.
77 leggi-c pic aa.
77 leggi-d pic aa.
01 riga-vuota.
02 filler pic x(80) value spaces.
01 intestazione.
02 filler pic x(7) value "Signor ".
02 name pic x(30).
01 dati-personali.
02 via pic x(30).
01 messaggio.
02 testo pic x(30).
02 debito pic Z(10),99.
02 valuta pic x(5) value " euro".
procedure division.
inizio.
perform verifica.
open input clienti.
open input debitori.
open output lettera.
read clienti
at end
move "si" to finiti-clienti
not at end
move "no" to finiti-clienti
end-read.
read debitori
at end
move "si" to finiti-debitori
not at end
move "no" to finiti-debitori
end-read.
perform trova-debitori until (finiti-clienti = "si") or (finiti-debitori = "si").
if (finiti-clienti = "si") and (finiti-debitori = "no") then
display "Errore: Avanzano debitori che non sono nella lista clienti".
close clienti debitori lettera.
stop run.
trova-debitori.
if codice = codice-deb then
display "Il cliente " codice " è moroso e gli preparo la lettera"
perform stampa
move "si" to leggi-c
move "si" to leggi-d
else if codice > codice-deb then
display "Errore il debitore " codice-deb " non e' stato trovato fra i clienti"
move "no" to leggi-c
move "si" to leggi-d
else
display "Il cliente " codice " e' puntuale"
move "si" to leggi-c
move "no" to leggi-d
end-if
end-if.
if leggi-c = "si" then
read clienti at end move "si" to finiti-clienti.
if leggi-d = "si" then
read debitori at end move "si" to finiti-debitori.
stampa.
move nome to name.
move indirizzo to via.
move importo to debito.
move "Le ricordiamo che deve pagare " to testo.
write riga from intestazione.
write riga from dati-personali.
write riga from riga-vuota.
write riga from messaggio.
write riga from riga-vuota.
write riga from riga-vuota.
verifica.
open output clienti.
open output debitori.
move "3" to codice.
move "Pinco Pallino" to nome.
move "via xy 5, Roma" to indirizzo.
move "2" to codice-deb.
move "350,00" to importo.
write cliente.
write debitore.
move "7" to codice.
move "Tizio Caio" to nome.
move "via z 2/5, Bologna" to indirizzo.
move "5" to codice-deb.
move "10000,50" to importo.
write cliente.
write debitore.
move "8" to codice.
move "Tizio Calabro" to nome.
move "via kn 2, Venezia" to indirizzo.
move "7" to codice-deb.
move "499,00" to importo.
write cliente.
write debitore.
move "8" to codice-deb.
move "1234567891,99" to importo.
write debitore.
move "10" to codice-deb.
move "1200,00" to importo.
write debitore.
close clienti.
close debitori.