program Albergo;
const
LungCodice = 5;
LungNome = 10;
type
TipoCamera = (singola,doppia);
TipoCodice = packed array [1..LungCodice] of char;
TipoNome = packed array [1..LungNome] of char;
TipoData = record
giorno : 1..31;
mese : 1..12;
anno : 0..MAXINT
end;
TipoPrenotazione = record
codice : TipoCodice;
cognome, nome : TipoNome;
camera : TipoCamera;
tariffa : 0..MAXINT;
data_arrivo,
data_partenza : TipoData
end;
TipoFilePrenotazioni = file of TipoPrenotazione;
TipoListaPresenze = ^TipoRecordPresenza;
TipoRecordPresenza = record
prenotazione : TipoPrenotazione;
next : TipoListaPresenze
end;
TipoSoggiorno = record
cognome, nome : TipoNome;
numero_soggiorni : 0..MAXINT
end;
TipoListaSoggiorni = ^TipoRecordSoggiorno;
TipoRecordSoggiorno = record
soggiorno : TipoSoggiorno;
next : TipoListaSoggiorni
end;
TipoNomeFile = string;
procedure LeggiPresenze (nome_file: TipoNomeFile;
var presenze: TipoListaPresenze);
var
f : text;
paux : TipoListaPresenze;
i : integer;
ch : char;
begin
assign(f, nome_file);
reset(f);
presenze := NIL;
while not eof(f) do
begin
new(paux);
with paux^.prenotazione do
begin
for i := 1 to LungCodice do read(f,codice[i]); readln(f);
for i := 1 to LungNome do read(f,cognome[i]); readln(f);
for i := 1 to LungNome do read(f,nome[i]); readln(f);
readln(f,ch);
if ch = 'S' then
camera := singola
else
camera := doppia;
readln(f,tariffa);
with data_arrivo do
readln(f,giorno, mese, anno);
with data_partenza do
readln(f,giorno, mese, anno);
readln(f)
end;
paux^.next := presenze;
presenze := paux
end;
close(f)
end;
procedure ScriviPresenze (nome_file: TipoNomeFile;
presenze: TipoListaPresenze);
var
f : TipoFilePrenotazioni;
begin
assign(f, nome_file);
rewrite(f);
while presenze <> NIL do
begin
write(f,presenze^.prenotazione);
presenze := presenze^.next
end;
close(f)
end;
procedure CancellaLista (var l: TipoListaPresenze);
var
paux : TipoListaPresenze;
begin
while l <> NIL do
begin
paux := l;
l := l^.next;
dispose(paux)
end
end;
procedure StampaSoggiorni (soggiorni: TipoListaSoggiorni);
begin
writeln('Cognome ', 'Nome ', 'Soggiorni');
while soggiorni <> NIL do
begin
with soggiorni^.soggiorno do
writeln(cognome, nome, numero_soggiorni);
soggiorni := soggiorni^.next
end
end;
var
nome_file_presenze : TipoNomeFile;
file_prenotazioni : TipoFilePrenotazioni;
file_archivio : TipoFilePrenotazioni;
data_odierna : TipoData;
lista_presenze : TipoListaPresenze;
lista_soggiorni : TipoListaSoggiorni;
begin
LeggiPresenze('PRENOT.TXT', lista_presenze);
ScriviPresenze('PRENOT.DAT', lista_presenze);
CancellaLista(lista_presenze);
LeggiPresenze('ARCHIVIO.TXT', lista_presenze);
ScriviPresenze('ARCHIVIO.DAT', lista_presenze);
CancellaLista(lista_presenze);
writeln('Immettere il nome del file di testo contenente le presenze! ');
readln(nome_file_presenze);
LeggiPresenze(nome_file_presenze, lista_presenze);
writeln('Immettere la data odierna (gg mm aaaa)!');
with data_odierna do
readln(giorno, mese, anno);
writeln;
StampaSoggiorni(lista_soggiorni)
end.