19 dicembre 2013
Fondamenti di Informatica Modulo A - Compito A
Prof. Marco Gavanelli
19 dicembre 2013
Un'azienda vuole mandare una lettera con gli auguri per le festività natalizie a tutti i suoi clienti. Ha quindi creato un modello di lettera, riportato nel file di testo lettera.txt, che andrà personalizzato per ciascun cliente. Infatti, nella lettera presente nel file lettera.txt, non sono riportati i dati del cliente, ma ci sono delle stringhe speciali, che iniziano e terminano con il simbolo '%'. In dettaglio, la lettera contiene
- la stringa "%NOME%", che andrà sostituita col nome del cliente
- la stringa "%COGNOME%", che andrà sostituita col cognome del cliente.
Nel file lettera.txt, le stringhe speciali non sono immediatamente collegate ad altre stringhe, ma c'è sempre uno spazio (o un carattere '\n') prima e dopo, per cui il file può essere letto parola per parola con fscanf con stringa formato "%s".
I dati sui clienti sono riportati in un secondo file, binario, clienti.bin. Questo file contiene, per ciascun cliente, i seguenti dati:
- nome e cognome: stringhe che contengono al massimo 20 caratteri, compreso il terminatore
- sesso: stringa che contiene al massimo 8 caratteri, compreso il terminatore
I clienti sono al massimo 100.
L'azienda vuole creare un file di testo per ciascun cliente. Il file dovrà essere chiamato con il cognome del cliente (facoltativo: e con estensione .txt). Il file creato deve contenere la lettera personalizzata per quel cliente (non è necessario mantenere gli `a capo': basta stampare tutte le parole separate da spazi).
Ad esempio, se la lettera contiene:
Al signor %NOME% %COGNOME% Caro %NOME% ti auguriamo buone feste
ed il file clienti.bin contiene
Mario | Rossi | MASCHIO |
Maria | Bianchi | FEMMINA |
allora il programma dovrà creare due file di testo. Uno deve avere nome Rossi (oppure, meglio, Rossi.txt) e contenere
Al signor Mario Rossi Caro Mario ti auguriamo buone feste
ed il secondo dovrà chiamarsi Bianchi (o, meglio, Bianchi.txt) e contenere
Al signor Maria Bianchi Caro Maria ti auguriamo buone feste
Si usi il seguente algoritmo.
- Nel
main
, si invochi una procedura o funzione di lettura del file clienti.bin (punto 2), poi una di elaborazione (punto 3) - Si scriva una procedura o funzione che legge il file clienti.bin e ne porta il contenuto in un opportuno array di strutture. Si visualizzi l'array
- Si scriva una procedura o funzione di elaborazione che prende come parametro l'array creato al punto 2 (più eventualmente altri parametri) e, per ogni elemento dell'array, invoca una procedura o funzione di creazione di una lettera (punto 4)
- Si scriva una procedura o funzione che prende in ingresso i dati di un cliente (più eventualmente altri parametri) e crea la lettera personalizzata per quel cliente (accedendo ovviamente al file lettera.txt ).
Facoltativo (punti 4)
Le lettere che vengono create nell'esercizio base non tengono in considerazione il sesso del cliente, per cui nell'esempio precedente la signora Maria Rossi veniva chiamata "signor" e salutata con "Caro".
Un terzo file binario coniuga.bin contiene un elenco di parole declinate al maschile ed al femminile; le parole sono al massimo 100 e sono riportate come due stringhe di, al massimo, 20 caratteri, compreso il terminatore. Nel caso in cui nella lettera compaia una parola fra quelle contenute nel file coniuga.bin il programma dovrà mettere la parola al maschile o al femminile a seconda del sesso del cliente. Se una parola non compare nel file coniuga.bin , viene riportata così com'è.
Il file coniuga.bin andrà caricato tutto in RAM in un opportuno array di strutture e dovrà essere letto una volta sola. Si noti che il file coniuga.bin è ordinato in ordine alfabetico: si sfrutti questa informazione per accedere efficientemente ai dati.
Si consegnino i file:
- un file
COGNOME.c
(dove COGNOME va sostituito col cognome dello studente) che contiene ilmain
e le funzioni usate solo nell'esercizio base - un file
facoltativo.c
che contiene ilmain
e le funzioni usate solo nell'esercizio facoltativo - un file
funzioni.c
che contiene le funzioni comuni
più tutti i file header ritenuti necessari.