Cmq, a livello di cronaca, ecco la traccia per l'esame "Laboratorio di Programmazione" fatto da me ad aprile 2002 con votazione 26/30 (E MI SONO ROTTO IL KUL!!!):
P.S. Sono iscritto ad Ingegneria Informatica presso L'UNICAL - Universit? della Calabria - Cosenza!
Progetto 1 (linee guida)
Si scriva un programma C++, orientato agli oggetti e che utilizzi le librerie standard del linguaggio, per la realizzazione di un?applicazione interattiva di supporto ad un sistema di gestione di un?agenzia turistica. Si considerino i seguenti tipi di dati:
- Cliente, caratterizzato almeno dai seguenti attributi: nome, data nascita, residenza, professione;
- Viaggio, caratterizzato almeno dai seguenti attributi: data di partenza, durata in giorni, prezzo, sequenza delle localit? attraversate, numero massimo di viaggiatori;
- Prenotazione, che associa un cliente ad un viaggio ed ? caratterizzato almeno dai seguenti attributi: data, stato (accettata o in lista d?attesa), sconto (numero reale compreso fra 0 e 1).
Il costo effettivo di un viaggio per un cliente ? ottenuto moltiplicando il prezzo del viaggio per lo sconto riportato nella prenotazione corrspondente. Si noti che per calcolare l?incasso totale di un viaggio si devono considerare solo le prenotazioni accettate.
Le principali funzionalit? da progettare sono:
1. inserire un cliente;
2. inserire un viaggio;
3. inserire una prenotazione;
4. cancellare un viaggio (con conseguente rimozione delle prenotazioni relative);
5. cancellare una prenotazione (con gestione opportuna della coda d?attesa del viaggio relativo);
6. calcolare la collezione, ordinata per valori decrescenti del numero di viaggi prenotati, dei clienti residenti in una citt? data;
7. calcolare la collezione, ordinata per incasso decrescente, dei viaggi con durata inferiore ad un valore dato;
8. verificare che due viaggi dati siano stati prenotati dal medesimo insieme di clienti;
9. data una collezione X di citt?, calcolare, se esiste, una collezione di viaggi Y che soddisfi le condizioni a) e b) di seguito indicate, ordinata per data di partenza crescente:
a) per ogni citt? di X esista almeno un viaggio di Y che attraversi tale citt?;
b) la media dei prezzi dei viaggi di Y sia minima.
? possibile (ed ? consigliato) completare e personalizzare liberamente le specifiche dell?applicazione.
Si progetti e implementi l?applicazione in modo modulare, separando, tra l?altro, gli aspetti di gestione dell?archivio di informazioni dalle operazioni di interfacciamento con l?utente (immissione dei dati e visualizzazione dei risultati).
Per poter sostenere l?esame, si dovr? consegnare (almeno 4 giorni prima della data fissata per l?inizio delle prove orali), assieme al codice prodotto, una relazione contenente:
- la descrizione sintetica delle specifiche dell?applicazione realizzata;
- la descrizione delle scelte progettuali operate;
- l?analisi di complessit? delle principali funzioni implementate;
- il listato del codice.
E, se ci? non basta, ecco le tracce dei 3 (

) progetti per fare l'esame di "Ingegneria del Software" (ancora, me tapino, non ho fatto quest'esame):
1) CarLockControlSystem
Si vuole progettare una classe CarLockControlSystem il cui utilizzo su una automobile potrebbe scoraggiare i ladri ed impedire la guida ad un autista ubriaco.
Per scoraggiare i ladri, una volta chiusa la portiera dell?automobile ed averla bloccata (vedi sotto), per poterla riaprire occorre fornire una combinazione di cinque cifre. Al termine di una successione di 5 cifre se la combinazione ? errata si attiva una sirena allarme. Altrimenti si sblocca la portiera.
La strategia per impedire la guida agli automobilisti ubriachi consiste nel richiedere che l?input di una combinazione corretta debba avvenire ?velocemente?. Sia midd (maximum inter digit delay, es. 1 sec) il ritardo massimo ammesso tra una cifra e la successiva. Se la prossima cifra ? digitata prima che sia trascorso un intervallo di tempo pari a midd dalla cifra precedente, il relativo timer ? azzerato. Diversamente si genera un timeout che annulla l?eventuale parziale combinazione fornita e occorre ripartire con la prima cifra.
Il sistema ammette i seguenti dispositivi di I/O: un tastierino con 10 pulsanti corrispondenti alle cifre tra 0 e 9, un bottone LockButton per richiedere, alla chiusura della portiera, l?attivazione del sistema di controllo, la sirena di allarme e il lucchetto della portiera. La specificazione della combinazione di sblocco ? un?operazione che va effettuata all?atto della chiusura della portiera. Naturalmente, occorre evitare situazioni ?spiacevoli? tipo: il proprietario ? all?interno della vettura, e qualcuno da fuori (per scherzo od altro) inserisce una nuova combinazione. In questi casi, deve essere sempre possibile, per il proprietario, di ?uscire? dalla propria autovettura? Si suggerisce di modellare il sistema come statechart (semplificato) di UML.
2) Espressione aritmetica intera con contesto + iterator
<espressione>::=<termine>{<addop><termine>}
<termine>::=<fattore>{<mulop><fattore>}
<fattore>::=<costante>|<variabile>|(<espressione>)
<costante>::=<interosenzasegno>
<variabile>::=<identificatore>
<interosenzasegno>::=<cifra>{<cifra>}
<identificatore>::=<lettera>{<lettera>|<cifra>}
<cifra>::=0|?|9
<lettera>::=a|?|z|A|?|Z
<addop>::=+|-
<mulop>::=*|/
Contesto
? un ambiente, cio? una lista coppie <nome variabile,valore>. Un contesto pu? essere fornito mediante un file testo e/o interattivamente da GUI.
Scopo del programma ? leggere e costruire, con la mediazione di un builder, un?espressione aritmetica. Quindi scriverne il contenuto (infisso e postfisso) su output. Quindi valutarla con l?ausilio del contesto. Stampa e valutazione devono basarsi su visitors e su iterators.
3) Application Framework
Si deve predisporre un framework basato su Template Method che legga una serie di N nomi di file di tipo testo da riga di comando e provveda ad aprire in lettura i primi N-1 file, ed in scrittura l?ultimo file. Scopo del framework ? di applicare una politica non meglio conosciuta per generare il contenuto dell?ultimo file a partire dagli altri N-1.
Specializzare il framework in modo da creare due concrete applicazioni per:
a) convertire a maiuscolo tutte le lettere in ogni file
b) ricercare in tutti i file le parole che appaiono nel primo file.
Successivamente, re-implementare il framework utilizzando il pattern strategy per impostare la politica di elaborazione dei file.