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