[Professor mode = on]
(per la risposta breve, vedi un chilometro più in basso)
beh... è un po' incasinato il progetto... scrivere direttamente sul file, per così dire, "senza filtro" è una cosa che non ti permette grande flessibilità quando si tratta di manipolare i dati.
Una soluzione migliore sarebbe questa:
Creare una linked list (o un'altra struttura dati altrettanto facile da gestire), i cui elementi siano classi (o struct) che contengano tutte le informazioni su un dato cliente.
Quando inserisci un nuovo cliente, basta creare la memoria per la nuova classe (o per la nuova struct), inserire tutti i dati e appendere il tutto in testa o in coda alla lista. Se vogliamo essere un tantino più ordinati possiamo inserire il nuovo elemento nella lista rispettando un qualche ordine (ad esempio l'ordine lessicografico del cognome, che prenderebbe il nome di "Chiave primaria di ricerca").
A questo punto per verificare se esista o meno un certo cliente di nome mario rossi, basterebbe scorrere la lista dall'inizio alla fine (oppure soltanto fino al primo cognome che in ordine alfabetico sia maggiore o uguale a Rossi), e dare True in output se venisse trovato, False altrimenti.
Così facendo potrai decidere se inserire un nuovo elemento o aggiornare quello vecchio, o fare qualunque altra cosa tu voglia.
Le operazioni di lettura e scrittura su file questa volta sarebbero comandati dall'utente, con la pressione di un apposito tasto Salva (o Salva con nome) e un tasto Apri. Se il programma è a riga di comando puoi integrare un paio di comandi da tastiera (ad esempio "o" e "s", come Open e Save). Al comando di lettura viene letto tutto il file e compilata tutta la lista. Al comando di salvataggio viene scorsa tutta la lista e scritto tutto il file in un solo passaggio.
In questo modo (se il database è ragionevolmente piccolo, tanto da entrare nella ram fisica) si migliorano anche le prestazioni (per il minor numero di accessi al disco) e si riduce la frammentazione del filesystem dovuta a ripetute operazioni di scrittura incrementale. Un'unica operazione di scrittura può portare all'allocazione di un gruppo abbastanza grande di blocchi contigui, mentre una serie di brevi scritture può portare il sistema operativo a scegliere via via una serie di blocchi isolati (a mo' di tappabuchi) sul disco, aumentando la frammentazione....
RISPOSTA BREVE:
Leggi in sequenza tutti i record del file, per ogni record controlli se il cognome coincide con quello cercato, se trovi il cognome esci con True, altrimenti se raggiungi la fine del file senza aver trovato nulla esci con False.
Ultima modifica effettuata da TheKaneB il 11/07/2009 alle 1:54 |