Newsgroup: it.comp.lang.pascal
Titolo: AIUTO FILE DI TESTO!!!

Ciao Newsgruppisti,
vi chiedo aiuto per trovare gli errori di questo programma sui file di
testo!!
In generale dovrebbe apparire un menù da cui accedere ad un archivio
studenti.
Ecco il programma......
PROGRAM STUDENTE;
USES WINCRT;
CONST
MSGERRORE = 'Il numero inserito è errato! Digitare un nuovo numero (da 1 a
4)!!';
MSGPR = 'Premere un tasto per continuare!!';
MSGVUOTO = 'Archivio vuoto! Inserire prima almeno i dati di uno studente!'
;
MSGERRMATR = 'ATTENZIONE! La matricola inserita è inesistente' ;
VAR
NOME : STRING[20];
COGNOME : STRING[20];
MATRICOLA : INTEGER ;
MATRICOLA_RICERCA : INTEGER ;
TURNO : STRING[7];
SC : CHAR ;
SCELTA :char;
STUDENTI :TEXT ;
ARCHIVIO : STRING ;
PROCEDURE INSERIMENTO;
BEGIN
APPEND (STUDENTI);
REPEAT
  BEGIN
    WRITE ('Inserire nome studente (seguito da *): ');
    READLN (NOME);
    WRITE ('Inserire cognome studente (seguito da *): ');
    READLN (COGNOME);
    WRITE ('Inserire matricola studente (seguito da *): ');
    READLN (MATRICOLA);
    WRITE ('Inserire turno studente: ');
    READLN (TURNO);
    WRITE (STUDENTI,NOME,COGNOME,MATRICOLA,TURNO);
    WRITELN (' ');
    WRITELN ('Dati salvati nell archivio!');
    WRITELN (' ');
    WRITELN ('Vuoi inserire i dati di un altro studente? (S/N) ') ;
    READ (SC) ;
  END;
UNTIL (SC = 'N') OR (SC = 'n') ;
CLOSE (STUDENTI);
WRITELN (MSGPR);
readkey;
end;
PROCEDURE VISUALIZZAZIONE;
BEGIN
  RESET (STUDENTI);
  IF EOF(STUDENTI)
     THEN WRITELN (MSGVUOTO)
     ELSE
       REPEAT
         BEGIN
          READ (STUDENTI,NOME,COGNOME,MATRICOLA,TURNO);
          WRITELN (NOME,' ',COGNOME,' ',MATRICOLA,' ',TURNO);
         END;
       UNTIL EOF(STUDENTI);
  close (STUDENTI);
  WRITELN (MSGPR);
  READKEY;
END;
PROCEDURE RICERCA;
BEGIN
  RESET (STUDENTI);
  IF NOT EOF(STUDENTI)
     THEN
      BEGIN
       WRITELN ('Inserisci matricola dello studente da cercare:');
       READLN (MATRICOLA_RICERCA);
      END;
  REPEAT
   READLN (STUDENTI,NOME,COGNOME,MATRICOLA,TURNO)
  UNTIL EOF(STUDENTI) OR (MATRICOLA_RICERCA = MATRICOLA);
  IF EOF(STUDENTI) THEN WRITELN(MSGERRMATR) ELSE WRITELN
(NOME,COGNOME,MATRICOLA,TURNO);
  CLOSE (STUDENTI);
  WRITELN (MSGPR);
  READKEY;
END;
BEGIN
 ARCHIVIO := 'ARCHIVIO.txt' ;
 ASSIGN (STUDENTI, ARCHIVIO);
 WRITELN ('+++ Programma di Gestione dei dati degli studenti. +++');
 WRITELN (' ');
 WRITELN ('1. INSERIMENTO dati nell archivio studenti');
 WRITELN ('2. RICERCA di un dato nell archivio');
 WRITELN ('3. VISUALIZZAZIONE dati esistenti nell archivio');
 WRITELN ('4. FINE.');
 WRITELN (' ');
 WRITELN ('Quale operazione si vuole effettuare? (nr da 1 a 4)');
 READ (SCELTA);
REPEAT
 CASE SCELTA OF
  '1' : INSERIMENTO  ;
  '2' : RICERCA      ;
  '3' : VISUALIZZAZIONE ;
  end;
UNTIL SCELTA = '4' ;
END.
Rispondetemi a questo indirizzo:
maryp...@libero.it
 !!
Grazie in anticipo a chi vorrà aiutarmi!!
Mary

     READLN (NOME);
[...]
mio dio, ma perchè tutto maiuscolo? non è mica BASIC, è Pascal... ovvìa, 
lo dice anche il nome...

 lo dice anche il nome...
io in basic scrivevo minuscolo :-)
( in basic, basicA e GWbasic...
sullo spectrum i token minuscoli non esistevano :-) )
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)

 END.
il read andrebbe *dentro* il ciclo :-)
oppure meglio ancora puoi usare
repeat
 scelta := readkey;
 etc etc
end;
poi magari c'e' dell'altro ma cosi' alla veloce non lo vedo...


Eh eh, magari ci fossero solo quei due erroretti!!! :)))
Senza alcuna offesa, ma a che stavi pensando quando hai scritto questo prog.
,Mary? ;)
Lo ho corretto quasi tutto c'è solo un errorino nella proc. ricerca. Domani
ti posto quello senza nessun errore.
Ciao
Alex
PROGRAM STUDENTE;
USES CRT;
CONST
MSGERRORE = 'Il numero inserito è errato! Digitare un nuovo numero (da
1a4)!!';
MSGPR = 'Premere un tasto per continuare!!';
MSGVUOTO = 'Archivio vuoto! Inserire prima almeno i dati di uno studente!'
;
MSGERRMATR = 'ATTENZIONE! La matricola inserita è inesistente' ;
VAR
NOME : STRING[20];
COGNOME : STRING[20];
MATRICOLA : INTEGER ;
MATRICOLA_RICERCA : INTEGER ;
TURNO : STRING[7];
SC : CHAR ;
SCELTA :char;
STUDENTI :TEXT ;
ARCHIVIO : STRING ;
procedure inizio;
begin
 WRITELN ('+++ Programma di Gestione dei dati degli studenti. +++');
 WRITELN (' ');
 WRITELN ('1. INSERIMENTO dati nell archivio studenti');
 WRITELN ('2. RICERCA di un dato nell archivio');
 WRITELN ('3. VISUALIZZAZIONE dati esistenti nell archivio');
 WRITELN ('4. FINE.');
 WRITELN (' ');
 WRITELN ('Quale operazione si vuole effettuare? (nr da 1 a 4)');
end;
PROCEDURE INSERIMENTO;
BEGIN
APPEND (STUDENTI);
REPEAT
    WRITEln ('Inserire nome studente (seguito da *): ');
    READLN (NOME);
    writeln(studenti,nome);
    WRITEln ('Inserire cognome studente (seguito da *): ');
    READLN (COGNOME);
    writeln(studenti,cognome);
    WRITEln ('Inserire matricola studente (seguito da *): ');
    READLN (MATRICOLA);
    writeln(studenti,matricola);
    WRITEln ('Inserire turno studente: ');
    READLN (TURNO);
    writeln(studenti,turno);
    WRITELN;
    WRITELN ('Dati salvati nell archivio!');
    WRITELN (' ');
    WRITELN ('Vuoi inserire i dati di un altro studente? (S/N) ') ;
    READln (SC) ;
UNTIL (SC = 'N') OR (SC = 'n') ;
CLOSE (STUDENTI);
WRITELN (MSGPR);
repeat until keypressed;
inizio;
end;
PROCEDURE VISUALIZZAZIONE;
BEGIN
 reset(studenti);
 if eof(studenti) then writeln(msgvuoto)
 else
   begin
     while not eof(studenti) do
      begin
       REAdln(studenti,nome);
       writeln(nome);
      end;
   end;
  close (STUDENTI);
  WRITELN (MSGPR);
  REpeat until keypressed;
  writeln;
  inizio;
END;
PROCEDURE RICERCA;
BEGIN
  RESET (STUDENTI);
  IF NOT EOF(STUDENTI)
     THEN
      BEGIN
       WRITELN ('Inserisci matricola dello studente da cercare:');
       READLN (MATRICOLA_RICERCA);
      END;
  while not eof do
   begin
    readln(studenti,nome);
    readln(studenti,cognome);
    readln(studenti,matricola);
    readln(studenti,turno);
    if matricola=matricola_ricerca then
     exit;
   end;
   writeln;
   writeln(Nome,cognome,matricola,turno);
  CLOSE (STUDENTI);
  WRITELN (MSGPR);
  REpeat until keypressed;
  inizio;
END;
BEGIN
archivio:='d:\studenti.txt';
{$I-}
 ASSIGN (STUDENTI,archivio);
 reset(studenti);
 if ioresult <> 0 then rewrite(studenti);
 writeln;
 inizio;
REPEAT
 readln(scelta);
 CASE SCELTA OF
  '1' : INSERIMENTO  ;
  '2' : RICERCA      ;
  '3' : VISUALIZZAZIONE;
  '4' :exit;
  else  writeln(msgerrore)
  end;
UNTIL SCELTA = '4' ;
END.
--
-------------------------------------
e-mail:  
el_co...@TOGLIQUESTO.libero.it