TERZA FASE DELLO SVIPLUPPO DEL PROGRAMMA

Modulo MAIN
Completamente sviluppato
Modulo STATO
Interfaccia completamente sviluppata
Modulo SCHEDA
Interfaccia completamente sviluppata
Modulo ATTVITÀ BASE
Completamente sviluppato
Modulo COMANDI
Interfaccia parzialmente sviluppata e corpo parzialmente sviluppato
Modulo RISPOSTE


MODULO MAIN

var  COM: COMMANDO;
     C: CHAR;

begin
  writeln('Vuoi recuperare lo stato iniziale ? (S/N)?');
  readln(C);
  if C= 'S' then RECUPERA_STATO
  else STATO_VUOTO;
  repeat
    LEGGI_COMMANDO(COM);
    ESEGUI(COM);
  until  E_FINIRE(COM);
  SALVA_STAT0;
end.

MODULO ATTIVITÀ BASE

procedure ESEGUI(COM:COMMANDO);
{ Usa la variabile globale ARCHI }

procedure INSER;
  var NOME, COGNOME: PAROLA;
      M: MATRICOLA;
      G: GRUPPO;
      S: SCHEDA;
  begin
    LEGGI_PAROLA(NOME);
    LEGGI_PAROLA(COGNOME);
    LEGGI_MAT(M);
    LEGGI_GRUPPO(G);
    SCHEDA_INIZIALE(NOME,COGNOME,M,G,S);
    AGGIUNGI_SCHEDA(S);    
  end; {INSER}

procedure CANC;
  var M: MATRICOLA;
  begin
    LEGGI_MAT(M);
    CANCELLA_SCHEDA(M);    
  end; {CANC}

procedure CAMBIA_G;
  var M: MATRICOLA;
      G: GRUPPO;
  begin
    LEGGI_MAT(M);
    LEGGI_GRUPPO(G);
    MODIFICA_GRUPPO(M,G);    
  end; {CAMBIA_G}

procedure VOTO_O;
  var M: MATRICOLA;
      V: VOTO;
  begin
    LEGGI_MAT(M);
    LEGGI_VOTO(V);
    MODIFICA_O(M,V);    
  end; {CAMBIA_O}

procedure VOTO_S;
  var M: MATRICOLA;
      V: VOTO;
  begin
    LEGGI_MAT(M);
    LEGGI_VOTO(V);
    MODIFICA_S(M,V);    
  end; {CAMBIA_S}

procedure VOTO_P;
  var M: MATRICOLA;
      V: VOTO;
  begin
    LEGGI_MAT(M);
    LEGGI_VOTO(V);
    MODIFICA_P(M,V);    
  end; {CAMBIA_P}

procedure PASS;
  var M: MATRICOLA;
  begin
    LEGGI_MAT(M);
    write('Lo studente di matricola '); 
    SCRIVI_MATRICOLA(M);
    write(' ');
    if E_PASSATO(M) then writeln(' e'' passato.')
    else writeln(' non e'' passato.')
  end; {PASS}

procedure STAMPA_G;
      
  function ORDINE_G(S1,S2: SCHEDA): boolean;
  var N1,C1,N2,C2: PAROLA;
      G1,G2: GRUPPO;
  begin
    NOME(S1,N1);
    COGNOME(S1,C1);
    NOME(S2,N2);
    COGNOME(S2,C2);    
    G1 := GRUPPO(S1);
    G2 := GRUPPO(S2);
    if G1 = G2 then
      if UGUALI_P(C1,C2) then
         ORDINE_G:= MINORE_P(N1,N2)
      else  ORDINE_G:= MINORE_P(C1,C2)
    else  ORDINE_G:= G1 < G2;
  end;
  
  procedure VISTA_G(S: SCHEDA);
  var N,C: PAROLA;
  begin
    SCRIVI_GRUPPO(GRUPPO(S));
    write(' ');
    COGNOME(S,C);
    SCRIVI_PAROLA(C);
    write(' ');
    NOME(S,N);
    SCRIVI_PAROLA(N);    
    writeln;
  end;
  
  begin
    ORDINA_ARCHIVIO(ORDINE_G);
    STAMPA_ARCHIVIO(VISTA_G);
  end; {STAMPA_G}
  
  procedure STAMPA_M;
      
  function ORDINE_M(S1,S2: SCHEDA): boolean;
  begin
    ORDINE_M := MATRIC(S1) < MATRIC(S2);
  end;
  
  procedure VISTA_M(S: SCHEDA);
  var N,C: PAROLA;
  begin
    SCRIVI_MATRICOLA(MATRIC(S));
    write(' ');
    COGNOME(S,C);
    SCRIVI_PAROLA(C);
    write(' ');
    NOME(S,N);
    SCRIVI_PAROLA(N);    
    writeln;
  end;
  
  begin
    ORDINA_ARCHIVIO(ORDINE_M);
    STAMPA_ARCHIVIO(VISTA_M);
  end; {STAMPA_M}

procedure STAMPA_C;
      
  function ORDINE_C(S1,S2: SCHEDA): boolean;
  var N1,C1,N2,C2: PAROLA;
  begin
    NOME(S1,N1);
    COGNOME(S1,C1);
    NOME(S2,N2);
    COGNOME(S2,C2);    
    if UGUALI_P(C1,C2) then
      ORDINE_G:= MINORE_P(N1,N2)
    else  
      ORDINE_G:= MINORE_P(C1,C2)
  end;
  
  procedure VISTA_C(S: SCHEDA);
  var N,C: PAROLA;
  begin
    COGNOME(S,C);
    SCRIVI_PAROLA(C);
    write(' ');
    NOME(S,N);
    SCRIVI_PAROLA(N);    
    writeln;
  end;
  
  begin
    ORDINA_ARCHIVIO(ORDINE_C);
    STAMPA_ARCHIVIO(VISTA_C);
  end; {STAMPA_C}

  procedure STAMPA_PAS;
      
  function ORDINE_PAS(S1,S2: SCHEDA): boolean;
  var N1,C1,N2,C2: PAROLA;
      V1, V2: VOTO;
  begin
    NOME(S1,N1);
    COGNOME(S1,C1);
    NOME(S2,N2);
    COGNOME(S2,C2); 
    V1:= VOTO_FINALE(S1);   
    V2:= VOTO_FINALE(S2);   
    if V1 = V2 then
      if UGUALI_P(C1,C2) then
         ORDINE_PAS:= MINORE_P(N1,N2)
      else  ORDINE_PAS:= MINORE_P(C1,C2)
    else  ORDINE_PAS:= V1 < V2;
  end;
  
  procedure VISTA_PAS(S: SCHEDA);
  var N,C: PAROLA;
      V: VOTO;
  begin
    V := VOTO_FINALE(S);
    if V >= 18 then
    begin
      COGNOME(S,C);
      SCRIVI_PAROLA(C);
      write(' ');
      NOME(S,N);
      SCRIVI_PAROLA(N);    
      write(' voto finale = ');
      SCRIVI_VOTO(V); 
      writeln;
    end
  end;
  
  begin
    ORDINA_ARCHIVIO(ORDINE_PAS);
    STAMPA_ARCHIVIO(VISTA_PAS);
  end; {STAMPA_PAS}
  
  procedure STA;
  var NS: integer;
  begin
  NS:= NUM_STUD;
  Writeln('Totale studenti = ',NS);
  Writeln('Percentuale superato esame = ',((NUM_PAS * 100)/ NS):2);
  Writeln('Percentuale superato scritto = ',((NUM_SCRI * 100)/ NS):2);
  Writeln('Percentuale superato orale = ',((NUM_OR * 100)/ NS):2);
  Writeln('Percentuale superato progetto = ',((NUM_PROG * 100)/ NS):2);
  end; {STA}

begin {ESEGUI}
case COM of
  INSERISCI: INSER;
  CANCELLA: CANC;
  CAMBIA_GRUPPO: CAMBIA_G;
  VOTO_ORALE: VOTO_O;
  VOTO_SCRITTO: VOTO_S;
  VOTO_PROGETTO: VOTO_P;
  PASSATO: PASS;
  STAMPA_GRUPPI: STAMPA_G;
  STAMPA_MATRICOLA: STAMPA:M;
  STAMPA_COGNOME: STAMPA_C;
  STAMPA_PASSATI: STAMPA_PAS;
  STATISTICHE: STA;
  FINE:
end; 
end; {ESEGUI}

MODULO COMANDI

type  COMANDO =
(INSERISCI, CANCELLA, CAMBIA_GRUPPO, VOTO_ORALE, VOTO_SCRITTO, VOTO_PROGETTO,
 PASSATO, STAMPA_GRUPPI, STAMPA_MATRICOLA, STAMPA_COGNOME,
 STAMPA_PASSATI, STATISTICHE, FINE); 

procedure LEGGI_COMMANDO(var COM: COMANDO);
.....
end;

function E_FINE(COM: COMANDO): bool;
....
end;
sviluppo successivo del modulo

MODULO STATO

type STATO = .....

var  ARCHI: STATO;

procedure RECUPERA_STATO;
{ recupero lo stato corrente dalla memoria di massa e lo mette in ARCHI }
.....
end;

procedure SALVA_STATO;
{salva lo stato corrente, contenuto nella variabile ARCHI, sulla memoria di massa}
.....
end;

procedure STATO_VUOTO;
{assegna alla variabile ARCHI l'archivio vuoto}
.....
end;

procedure AGGIUNGI_SCHEDA(S: SCHEDA);
{aggiunge la scheda S all'archivio contenuto nella variabile ARCHI }
.....
end;

procedure CANCELLA_SCHEDA(M: MATRICOLA);
{cancella la scheda relativa allo studente di matricola M dall'archivio contenuto nella variabile ARCHI }
.....
end;

procedure MODIFICA_G(M: MATRICOLA; NUOVO_G: GRUPPO);
{ modifica il gruppo nella scheda relativa allo studente}
{ di matricola M nell'archivio contenuto nella variabile ARCHI }
.....
end;

procedure MODIFICA_O(M: MATRICOLA; NUOVO_V: VOTO);
{ modifica il voto orale nella scheda relativa allo studente}
{ di matricola M nell'archivio contenuto nella variabile ARCHI }
.....
end;

procedure MODIFICA_S(M: MATRICOLA; NUOVO_V: VOTO);
{ modifica il voto scritto nella scheda relativa allo studente}
{ di matricola M nell'archivio contenuto nella variabile ARCHI }
.....
end;

procedure MODIFICA_P(M: MATRICOLA; NUOVO_V: VOTO);
{ modifica il voto progetto nella scheda relativa allo studente}
{ di matricola M nell'archivio contenuto nella variabile ARCHI }
.....
end;

function E_PASSATO(M: MATRICOLA);
{ controlla se lo studente di matricola M ha passato l'esame secondo i dati }
{ presenti nell'archivio contenuto nella variabile ARCHI }
.....
end;

procedure ORDINA_ARCHIVIO(function ORD: boolean);
{ ordina l'archivio contenuto nella variabile ARCHI secondo ORD }
.....
end;

procedure STAMPA_ARCHIVIO(procedure STAMPA_SCHEDA);
{ stampa le schede appartenenti all'archivio contenuto nella variabile ARCHI }
{ come richiesto dalla procedura STAMPA_SCHEDA }
.....
end;

function NUM_STUD: integer;
{ ritorna il numero di schede presenti nell'archivio }
.....
end;

function NUM_OR: integer;
{ ritorna il numero di schede con voto orale presenti nell'archivio }
.....
end;

function NUM_SCR: integer;
{ ritorna il numero di schede con voto scritto presenti nell'archivio }
.....
end;

function NUM_PRO: integer;
{ ritorna il numero di schede con voto progetto presenti nell'archivio }
.....
end;

function NUM_PAS: integer;
{ ritorna il numero di schede con esame passato presenti nell'archivio }
.....
end;

sviluppo successivo del modulo



MODULO SCHEDA

type PAROLA =  ....
     MATRICOLA = .....
     GRUPPO= ..... 
     VOTO = ....
     SCHEDA = ....

function GRUPPO(S: SCHEDA): GRUPPO;
......
end;

procedure NOME(S: SCHEDA; var N: PAROLA);
......
end;

procedure COGNOME(S: SCHEDA; var C: PAROLA);
......
end;

function MATRIC(S: SCHEDA): MATRICOLA;
......
end;

function VOTO_O(S: SCHEDA): VOTO;
......
end;

function VOTO_S(S: SCHEDA): VOTO;
......
end;

function VOTO_P(S: SCHEDA): VOTO;
......
end;

function UGUALE_P(S1,S2: SCHEDA): boolean;
......
end;

function MINORE_P(S1,S2: SCHEDA): boolean;
......
end;

procedure LEGGI_PAROLA(var P: PAROLA);
......
end;

procedure LEGGI_MAT(var M: MATRICOLA);
......
end;

procedure LEGGI_GRUPPO(var G: GRUPPO);
......
end;


procedure LEGGI_VOTO(var V: VOTO);
......
end;

procedure SCHEDA_INIZIALE(N, M: PAROLA; MAT: MATRICOLA; G: GRUPPO;
                          var S: SCHEDA);
......
end;
sviluppo successivo del modulo

MODULO RISPOSTE

....
sviluppo successivo del modulo