Newsgroup: it.comp.lang.pascal
Titolo: (Grazie Negus) Archivio, quasi completo, ma...

Salve,
grazie a Negus per la sua gentilissima offerta di aiuto.
Ho scritto buona parte dell'archivio, le uniche cose che 
mancano sono:
-La possibilita' di scegliere se voglio aggiungere un altro record, in
quel caso premo Y (per Yes) e il programma prosegue, altrimenti se
premo N il programma dovrebbe terminare.
Credo che ci voglia un ciclo WHILE ... DO.
La seconda cosa funzione che voglio aggiungere e' quella di poter
scegliere se registrare i dati che ho inserito sul disco o se voglio
solo visualizzarli a schermo senza salvarli su disco.
Invio il listato, cosi' se qualcuno ne avesse bisogno...
(scusate l'Inglese, ma frequento una scuola negli USA e devo per forza
scrivere tutto in inglese.)
******************************************************
PROGRAM archivio(input,output,dataout);
 {This program is an archive for music collections}
 USES CRT;
 TYPE
 string15 = string[15];
 mediatype = (CD, Tape, LP);
 recording = RECORD
 title,
 artist: string15;
 media: String[5];
 cost: real;
 quantity: Integer
 End;
 Var
 song : recording;
 dataout:text;
 new:Char;
 medium:integer;
 Begin
 Assign(dataout,'a:\music.txt');
 rewrite(dataout);
 clrscr;
 writeln('This is a music archive');
 writeln;
 writeln('Now you can enter a record.');
 writeln('Enter the title of the song:');
 readln(song.title);
 writeln(dataout,'Title: ',song.title);
 writeln('Enter the name of the artist:');
 readln(song.artist);
 writeln(dataout,'Artist: ',song.artist);
 writeln('Enter the medium of the song:');
 writeln('Type 1 for CD');
 writeln('Type 2 for Tape');
 writeln('Type 3 for LP');
 readln(medium);
 IF medium=1 then song.media:='CD';
 IF medium=2 then song.media:='Tape';
 IF medium=3 then song.media:='LP';
 writeln(dataout,'Media: ',song.media);
 writeln('Enter the cost of the album:');
 readln(song.cost);
 writeln(dataout,'Cost:$ ',song.cost:5:2);
 writeln('Enter the quantity of the albums:');
 readln(song.quantity);
 writeln(dataout,'Quantity: ',song.quantity);
 writeln('Have a nice day!');
 Close(dataout);
END.
 *******************************************
Se qualcuno puo' aiutarmi con le funzioni che ho descritto prima del
programma mi farebbe davvero una grande cortesia.
Ciao,
MArk

mancano sono:
Ti ho sistemato il programma, inserendo: 
- Possibilità di visualizzare o salvare su disco
- Possibilità di inserire altro record
E ho sistemato la selezione del MediaType, visto che si poteva comunque premere qualsiasi tasto,
invece ora si è obbligati a digitare o 1 o 2 o 3, altrimenti non si esce.
Infine, ti volevo far osservare che ogni volta che fai partire il programma, questo non aggiunge
niente al file di partenza, ma lo cancella ogni volta.
Quindi ogni volta che fai partire il programma, se te ne sei accorto, il file viene nuovamente
SOVRASCRITTO.
Ultima cosa, io userei un formato di registrazione (invece dell'ASCII) molto più comodo, soprattutto
per la lettura dei dati.
Cmq questo è il programma aggiornato ... fammi sapere ...
********************************************
PROGRAM archivio(input,output,dataout);
 {This program is an archive for music collections}
 USES CRT;
 TYPE
 string15 = string[15];
 mediatype = (CD, Tape, LP);
 recording = RECORD
 title,
 artist: string15;
 media: String[5];
 cost: real;
 quantity: Integer
 End;
 Var
 song : recording;
 dataout:text;
 new:Char;
 MediaTypeChoose: char;    { Variabile per la scelta del tipo di supporto }
 Ins_Again: Char;          { Per inserire ancora dati }
 OutPut_: Char;            { Per visualizzare o salvare su disco }
 Begin
 Repeat;
 Assign(dataout,'music.txt');
 rewrite(dataout);
 clrscr;
 writeln('This is a music archive');
 writeln;
 writeln('Now you can enter a record.');
 writeln('Enter the title of the song:');
 readln(song.title);
 writeln('Enter the name of the artist:');
 readln(song.artist);
 writeln('Enter the medium of the song:');
 writeln('Type 1 for CD');
 writeln('Type 2 for Tape');
 writeln('Type 3 for LP');
 Repeat;                { Si ripete fino a che non viene premuto 1 o 2 o 3 }
 MediaTypeChoose:=Readkey;   { Aspetta che un tasto venga prumuto }
 Until (MediaTypeChoose='1') or (MediaTypeChoose='2') or (MediaTypeChoose='3');
 IF MediaTypeChoose='1' then song.media:='CD';
 IF MediaTypeChoose='2' then song.media:='Tape';
 IF MediaTypeChoose='3' then song.media:='LP';
 writeln('Enter the cost of the album:');
 readln(song.cost);
 writeln('Enter the quantity of the albums:');
 readln(song.quantity);
 Writeln;
 Write('Si vuole visualizzare o salvare su disco? [V/S]');
 Repeat;
 OutPut_:=Readkey;
 OutPut_:=UpCase(OutPut_);    { Lettera in maiuscolo }
 Until (OutPut_='V') or (OutPut_='S');
 If OutPut_='V' then
  Begin
   Clrscr;
    writeln('Title: ',song.title);
    writeln('Artist: ',song.artist);
    writeln('Media: ',song.media);
    writeln('Cost:$ ',song.cost:5:2);
    writeln('Quantity: ',song.quantity);
    Writeln;
    Writeln('Premere Invio per continuare ...');
    Readln;
    Clrscr;
  End;
 If OutPut_='S' then
  Begin
   writeln(dataout,'Title: ',song.title);
   writeln(dataout,'Artist: ',song.artist);
   writeln(dataout,'Media: ',song.media);
   writeln(dataout,'Cost:$ ',song.cost:5:2);
   writeln(dataout,'Quantity: ',song.quantity);
   Writeln;
   Writeln('Dati salvati. Premere Invio per continuare...');
   Readln;
   Clrscr;
  End;
 Write('Si vuole inserire ancora un record ? [Y/N]');
 Repeat;
 Ins_Again:=Readkey;
 Ins_Again:=UpCase(Ins_Again);    { Lettera in maiuscolo }
 Until (Ins_Again='Y') or (Ins_Again='N');
 Until Ins_Again='N';             { Esce se Ins_Again='N' }
 Close(dataout);
END.
****************************************
-=> NeGuS <=-
www.infinito.it/utenti/negus80