26 maggio 2008
Genealogy trees
Altro giro, altro regalo. In questo lunedì di Bank Holiday (e una volta tanto sono io a fare invidia agli italiani, che oggi da copione dovrebbero essere al lavoro, mentre io recupero dalle fatiche pokeristiche di ieri poltrendo tra libri, tv e Word aperto sul draft dell’abstract che sto preparando per Wivace 2008) cade la deadline per la pubblicazione delle specifiche per il secondo appello di Laboratorio II. Per la serie “Viva la banalità”, la traccia d’esame prevede di scrivere un programma per la gestione di un albero genealogico.

Specifiche del progetto da realizzare
Come tema d’esame, si richiede allo studente di scrivere un programma, in linguaggio C, in grado di gestire l’albero genealogico di una famiglia.
Ciascun nominativo presente all’interno dell’albero e’ caratterizzato dalle seguenti informazioni:
- identificativo numerico univoco (nel formato preferito dallo studente);
- nome;
- cognome;
- luogo di nascita (nel formato: “citta’, sigla provincia, nazione”);
- data di nascita (nel formato: “gg/mm/aaaa”);
- luogo di morte (nel formato: “citta’, sigla provincia, nazione”, se non disponibile: “ND”);
- data di morte (nel formato: “gg/mm/aaaa”, se non disponibile: “ND”).
Il programma dovra’ presentarsi all’utente con un menu di scelta rapida, visualizzato preferibilmente in forma semi-grafica (intesa semplicemente come utilizzo dei caratteri ‘-‘, ‘|’ e simili), permettendo la scelta di una tra le seguenti opzioni:
- Inserisci un nuovo nominativo all’interno dell’albero;
- Modifica i dettagli di un nominativo presente all’interno dell’albero;
- Rimuovi un nominativo presente all’interno dell’albero;
- Salva l’albero all’interno di un file di testo;
- Carica un albero memorizzato all’interno di un file di testo.
- Esci dal programma.
L’utente dovra’ scegliere l’operazione da eseguire digitando il numero corrispondente e premendo il tasto INVIO. Si tenga presente che l’utente non dovra’ avere sempre accesso a tutte le funzionalità del programma. Ad esempio, le operazioni 2, 3 e 4 non saranno disponibili fintanto che non verra’ inserito all’interno dell’albero almeno un nominativo.
Ulteriori note
- Il progetto dovra’ essere realizzato individualmente.
- Il programma dovrà essere scritto in codice ANSI C standard, al fine di garantirne il più ampio livello di portabilità possibile. Non e’ ammesso, a meno che tale possibilità non sia esplicitata nel testo d’esame o nelle FAQ pubblicate su Dolly, l’utilizzo di comandi propri del sistema operativo in uso. Il programma dovra’ essere in grado di “girare” allo stesso modo su qualsiasi piattaforma. Ai fini della valutazione, il software verra’ testato su una macchina Windows in ambiente Cygwin.
- Il programma dovra’ essere adeguatamente commentato. Non abbiate paura di essere eccessivamente prolissi nei vostri commenti.
Le informazioni dovranno essere memorizzate all’interno di un albero non-binario, implementato mediante il ricorso a liste multiple. - Per semplificare le operazioni, prevediamo che l’utente inserira’ come primo nominativo il “capostipite” e che i successivi inserimenti avranno sempre luogo “verso il basso”.
- La funzione 1 dovra’ chiedere innanzitutto all’utente dove si colloca il nuovo nominativo che si e’ in procinto di inserire (“figlia/o di”, “moglie/marito di”). Un figlio puo’ essere inserito anche se vi e’ un solo genitore.
- La funzione 2 dovra’ permettere di modificare soltanto le informazioni legate ad un nominativo (nome, cognome, ecc…) e non il rapporto di parentela che e’ stato selezionato in fase di inserimento.
- La funzione 3, nel caso in cui il nominativo che si e’ in procinto di rimuovere sia un genitore che figura all’interno dell’albero senza un/a marito/moglie, dovra’ provvedere ad eliminare (previa conferma da parte dell’utente) tutti i suoi discendenti.
- La funzione 4 dovra’ provvedere a salvare l’intero albero genealogico all’interno di un file di testo, in accordo al formato preferito dall’utente.
- La funzione 5 dovra’ essere in grado di leggere un file di testo creato attraverso la funzione 4 e copiarne il contenuto in memoria.


