AA.VV. INFORMATICA 3 - MASSON In una piccola città di provincia, la cartolibreria posta nella piazza principale, decide di associarsi ad una catena di grossi distributori che forniscono libri con lo sconto del 70% sul prezzo di copertina, in modo da poterli poi rivendere con lo sconto del 50%. La sede centrale dell'associazione, a seconda della propria disponibilità di magazzino, spedisce al negoziante un pacco contenente una miscellanea di libri scontati per la vendita. Il negoziante a sua volta, dopo un certo periodo di giacenza può decidere di restituire alla sede i testi che prevede di non poter vendere nella sua zona. Per pubblicizzare l'iniziativa, il negoziante decide di affiggere in proprio in alcuni negozi della cittadina il catalogo aggiornato delle offerte, ordinato per autore. Inoltre vuole avere la possibilità di stampare direttamente una copia del catalogo, su richiesta di un singolo acquirente. Dopo aver compiuto l'analisi del problema definire la struttura dell'archivio e lo schema generale di un programma che consenta al negoziante di mantenere aggiornato l'elenco delle giacenze e di stampare il catalogo periodico, con i volumi disposti in ordine alfabetico di autore. ANALISI DELLA SITUAZIONE REALEIn accordo con l'impostazione data a tutto il corso di programmazione, immaginiamo di aver avuto un colloquio con l'utente e, in rapporto alle sue necessità, essere giunti alle seguenti conclusioni:
| La necessità primaria è quella di avere un archivio sempre aggiornato, dal quale sia ricavabile velocemente il catalogo generale. |
| Il catalogo deve contenere l'elenco completo dei titoli disponibili, ordinato per autore (non è previsto un ordinamento secondario rispetto al titolo). |
| Il programma deve gestire in tempo reale l'aggiornamento delle copie disponibile in negozio, sulla base delle vendite, dei nuovi arrivi e delle restituzioni alla sede centrale. |
| L'utente vuole poter conoscere, in ogni momento, la disponibilità.(in numero di copie), di un qualsiasi volume presente in magazzino. |
| L'utente non è interessato a ricerche multiple del tipo: tutti i volumi di un certo autore, tutti i volumi su un certo argomento, ... |
| L'utente a fronte di un prezzo più contenuto del programma, ha accertato di gestire in proprio le fasi di inserimento dati, controllando che tutti i dati alfabetici vengano inseriti in caratteri maiuscoli. Inoltre, eventuali errori di inserimento non ricuperabili dovranno essere eliminati attraverso una fase di cancellazione e di successivo reinserimento. |
| La capacità del magazzino della cartolibreria è stata valutata intorno ai 10.000 volumi. |
| La giacenza media del magazzino è di circa 5000 volumi, disposti in ordine alfabetico di autore. |
| Il cliente possiede già un Personal Computer MS/DOS compatibile dotato di hard/disk da 170 M/byte, che risulta più che sufficiente per le necessità di archiviazione dei volumi. In base a ciò non si ritiene necessario imporre dei limiti rigorosi alla dimensione massima dell'archivio. |
DEFINIZIONE DELLA STRUTTURA DELL'ARCHIVIODa una prima analisi del problema si può evincere che le operazioni di aggiornamento, aggiunta e cancellazione saranno piuttosto frequenti e numerose; è quindi evidente che la struttura sequenziale non risulta molto conveniente, per le onerose fasi di riordinamento e di ristrutturazione che richiederebbero. E' meglio allora propendere per una struttura a lista, che consente di compiere velocemente le operazioni di inserimento e di cancellazione, rispettando l'ordine alfabetico di autore. Ciò, oltre a facilitare le operazioni di ricerca e aggiornamento, consentirà di stampare un catalogo ordinato, suddiviso per autore, come richiesto dall'utente. Il recupero dei record eventualmente cancellati verrà gestito attraverso un'apposita lista di recupero, in cui si accederà in fase di inserimento di nuovi elementi, per riutilizzare gli spazi resi disponibili dalle cancellazioni. In questo modo la generazione di nuovi record in coda al file si renderà necessaria solo nel caso in cui la lista di recupero sia vuota. Dato che il numero di volumi presenti nel negozio non supera mai le 10.000 copie, possiamo utilizzare, per memorizzare l'intero archivio, un unico file in cui ogni record ha la seguente struttura: REGISTRAZIONE = record INFO informazioni PUNT puntatorefine.A sua volta il campo INFO può essere strutturato a record, in modo da evidenziare il significato dei singoli elementi di informazione: INFORMAZIONI = record AUTORE stringa TITOLO stringa COPIE interofine.Utilizzando la tecnica della lista libera per il recupero dei record cancellati, sarà poi necessario gestire uno spazio riservato per memorizzare i due puntatori di testa della lista reale (PLR) e della lista di recupero (PLL): useremo a questo scopo il record numero 0, ponendo nel campo PUNT il puntatore alla lista reale e in quello COPIE (di INFO) il puntatore alla lista di recupero. Con questo accorgimento possiamo usare lo stesso file per memorizzare tutte le informazioni di servizio relative alla gestione delle liste, riservando alla registrazione dei dati reali solo i record dal numero 1 in poi. SCHEMA DEL PROGRAMMAIl programma principale è organizzato a menu e si limita a lanciare, di volta in volta, la procedura richiesta. A questo punto dell'analisi, sulla base delle specifiche di progetto, possiamo formulare un primo elenco delle procedure da sviluppare:
| CREA LISTA: genera un nuovo archivio |
| CANCELLA: elimina un record dall'archivio, sulla base dei dati forniti dall'utente |
| NUOVI ARRIVI: registra i dati relativi ai nuovi libri |
| VENDITA: aggiorna l'archivio, eliminando le copie vendute |
| RICERCA: visualizza il numero di copie disponibili per un certo testo |
| STAMPA: stampa il catalogo aggiornato. |
|