You are on page 1of 13

Gabriele D'Amico

4^D Informatica

16/11/2010

RELAZIONE 5 - INDICE
TESTO...........................................................................PAG 1 ANALISI GENERALE.........................................................PAG 2, 3 TABELLA DATI.................................................................PAG 4 DIAGRAMMA PROGRAMMA PRINCIPALE..............................PAG 5 SVILUPPO SOTTOPROGRAMMA "aggiungi"...........................PAG 6 SVILUPPO SOTTOPROGRAMMA "menu"............................. PAG 7 SVILUPPO SOTTOPROGRAMMA "cancella"..........................PAG 8 SVILUPPO SOTTOPROGRAMMA "modifica".........................PAG 9 SVILUPPO SOTTOPROGRAMMA "visualizza"........................PAG 10 SVILUPPO SOTTOPROGRAMMA "tabella"............................PAG 11 SVILUPPO SOTTOPROGRAMMA "ricerca"............................PAG 12

1 - TESTO
Gli operatori di un call center ricevono per telefono gli ordini di alcuni prodotti di un catalogo che viene inviato per corrispondenza. Ogni prodotto caratterizzato da un codice numerico che lo individua univocamente nel catalogo (in totale ci sono 50 prodotti). Ogni volta che un operatore riceve un ordine di un prodotto deve registrare lo stesso, indicando il codice del prodotto, la quantit richiesta e i dati anagrafici del cliente (cognome e nome, telefono e provincia di residenza). Dopo aver registrato lordine si dovr fornire un codice numerico che individua univocamente lordine stesso. Per ogni telefonata possibile effettuare lordine di una sola tipologia di prodotto. Si desidera scrivere un programma che aiuti gli operatori del call center. In particolare tale programma, che verr mandato in esecuzione da ogni operatore allinizio del proprio turno di lavoro, deve consentire di: 1. Registrare un ordine. 2. Cancellare un ordine il cui codice numerico precisato in input. 3. Visualizzare la quantit totale di pezzi ordinati di un determinato prodotto il cui codice precisato in input. 4. Modificare la quantit di un ordine precisando in input il codice numerico dellordine stesso. 5. Visualizzare una tabella riassuntiva dove per ogni prodotto indicata la quantit di pezzi ordinati.

Si richiede: Stesura dell'algoritmo metodologia Top-Down. che risolve il problema applicando la

Documentazione del progetto. Codifica in linguaggio C.

2 - ANALISI GENERALE
Il testo richiede la stesura di un programma che permetta la gestione degli ordini di alcuni prodotti di una rivista. Poich non possibile stimare a priori il numero di ordini si richiede che essi vengano registrati in una sola struttura dinamica (tutti gli ordini saranno inseriti in un solo vettore dinamico). Il programma verr mandato in esecuzione da ogni operatore allinizio del proprio turno di lavoro, dunque dovranno essere iniziallizzati a 0 il puntatore dalla quale memorizzato il vettore dinamico, la dimensione del vettore dinamico e il contatore utilizzato per calcolare i codici d'ordine. L'utente avr a disposizione 5 opzioni che potr selezionare tramite un apposito men di scelta (Switch Case). Inoltre ci sar una sesta opzione, ovvero l'uscita dal programma. Dunque l'utente dovr inserire un valore compreso tra 1 e 6 per poter selezionare una delle opzione, altrimenti comparir un messaggio che segnaler l'errore, in modo tale da poter reinserire un nuovo valore valido. L'utente dovr fornire all'operatore delle informazioni: il proprio nome e cognome, il proprio numero telefonico, la provincia di nascita e il prodotto da ordinare con la quantit desiderata. L'operatore dovr fornirgli un codice d'ordine che identifica univocamente l'ordine stesso. Dunque verr utilizzata una struttura costituita dai campi contenenti le informazioni soprastanti. Per la risoluzione di alcuni sottoprogrammi, verr utilizzato l'algoritmo di ricerca sequenziale. Inoltre per gestire la memoria dinamica verranno utilizzate le funzioni "malloc" per allocare spazio quando non ancora caricato alcun ordine, e "realloc" per reallocare spazio, aggiungendo o eliminando una componente. Per la risoluzione del problema verr utilizzata la modalit Top-Down. Dunque il programma verr scomposto in sottoprogrammi che verranno richiamati opportunamente dal programma principale. Il linguaggio di programmazione per la codifica dell'algoritmo il linguaggio C. Dunque bene precisare i meccanismi di trasmissione dei parametri dall'ambiente globale ai singoli sottoprogrammi. Dato che si utilizza il linguaggio C, tutte le variabili sono trasmesse ai sottoprogrammi per valore, ad eccezione dei vettori, delle matrici e delle stringhe, trasmesse ai sottoprogrammi per riferimento o indirizzo.

3
Dato che occorre modificare delle variabili all'interno di alcuni sottoprogrammi, le variabili interessate saranno trasmesse al sottoprogramma per riferimento. In questo modo le modifiche effettuate all'interno dell'ambiente locale avranno effetto su tutto il programma. In tutti i sottoprogrammi (fatta eccezione per i sottoprogrammi "ricerca", "menu" e "aggiungi") verr effettuato un controllo sulla dimensione del vettore dinamico: se la dimensione uguale a 0, vorr dire che non ci sono elementi caricati sul vettore, dunque non verr effettuata alcuna operazione e il sottoprogramma terminer. Altrimenti (se la dimensione diversa da 0) verrano svolte le necessarie operazioni affinche il sottoprogrammi funzioni.

In fase di codifica verranno utilizzate le seguenti librerie: stdio.h string.h stdlib.h I sottoprogrammi avranno i seguenti nomi (sono indicati i prototipi con i relativi parametri formali):
int struct ordine * struct ordine * void void int
ricerca aggiungi cancella modifica visualizza menu (struct ordine *p, int cod_ordine, int dim); (struct ordine *p, int *dim, int *cont); (struct ordine *p, int *dim); (struct ordine *p, int dim); (struct ordine *p, int dim); (void);

4
- TABELLA DATI

Costanti

Nome L

Tipo Intero

Funzione Lunghezza massima stringhe

Valore 20

Variabili globali

Nome dim scel cont

Tipo Intero Intero Intero

Funzione Dimensione vettore dinamico Variabile di scelta Codice d'ordine

Vincoli 1 scel 6 -

Struttura utilizzata

struct ordine { char nome[L]; char cognome[L]; char telefono[L]; char provincia[L]; int prodotto; int quantita; int codice; };

Le stringhe dovranno avere lunghezza massima di 20 caratteri. La variabile prodotto dovr essere un valore compreso tra 1 e 50 (estremi inclusi) La variabile quantit dovr essere un valore maggiore di 0. La variabile codice sar fornita in output, tramite il contatore inizializzato nel programma principale.

5
- DIAGRAMMA PROGRAMMA PRINCIPALE

6 - SVILUPPO SOTTOPROGRAMMA "aggiungi"


- ANALISI SOTTOPROGRAMMA "aggiungi"

In questo sottoprogramma verranno registrati gli ordini degli utenti. Se la dimensione del vettore uguale a 0 verr utilizzata la funzione "malloc", altrimenti verr utilizzata la funzione "realloc", che reallocher memoria per una componente di tipo "struct ordine". Se c' spazio in memoria, verranno caricate tutte le informazioni dell'utente (nome, cognome, numero di telefono, provincia, prodotto desiderato, quantit desiderata). Successivamente la variabile cont (passata al sottoprogramma per riferimento) verr incrementato e dopo assegnato al campo "codice" della struttura. La dimensione del vettore (passata al sottoprogramma per riferimento) verr incrementata. Infine, tramite un'assegnazione, il puntatore di appoggio e il puntatore originale punteranno alla stessa locazione di memoria. Il sottoprogramma restituisce il puntatore a partire dalla quale memorizzato il vettore, dato che il puntatore potrebbe essere modificato. E' un sottoprogramma funzionale. Ha 3 parametri di input/output: il puntatore, la dimensione del vettore e il codice d'ordine (cont).

- TABELLA DATI SOTTOPROGRAMMA "aggiungi"

Variabili locali

Nome app

Tipo struct ordine *

Funzione Puntatore d'appoggio

Vincoli -

7 - SVILUPPO SOTTOPROGRAMMA "menu"


- ANALISI SOTTOPROGRAMMA "menu"

In questo sottoprogramma verr letta in input la variabile di scelta ("scel") che permetter di selezione l'opzione desiderata. Il valore della variabile "scel" dovr essere un numero compreso tra 1 e 6, estremi inclusi, altrimenti comparir un messaggio che segnaler l'errore, in modo tale da poter reinserire un nuovo valore valido. Il seguente sottoprogramma di tipo funzionale. Non ha parametri. La funzione restituisce il valore di "scel".

- TABELLA DATI SOTTOPROGRAMMA "menu"


Variabili locali

Nome scel

Tipo Intero

Funzione Variabile di scelta

Vincoli 1 scel 6

8 - SVILUPPO SOTTOPROGRAMMA "cancella"


- ANALISI SOTTOPROGRAMMA "cancella"

In questo sottoprogramma verr cancellato un un ordine il cui codice numerico precisato in input. Verranno utilizzati un puntatore di appoggio, una struttura di appoggio, una variabile come indice per la ricerca e una chiave di ricerca. Verr letto in input il codice d'ordine da eliminare, verr richiamata la funzione di ricerca sequenziale. Se il codice d'ordine trovato verranno copiate le informazioni dell'ultima componente nella struttura di appoggio (per evitare che i dati vengano persi nel caso in cui la funzione "realloc" dia esito negativo), verr reallocato lo spazio in memoria e decrementata la dimensione del vettore dinamico, e infine il puntatore di appoggio e il puntatore originale punteranno alla stessa locazione di memoria. Il sottoprogramma ritorna il puntatore a partire dalla quale memorizzato il vettore, dato che il puntatore potrebbe essere modificato. E' un sottoprogramma funzionale. Ha 2 parametri di input/output: il puntatore e la dimensione del vettore.

- TABELLA DATI SOTTOPROGRAMMA "cancella"

Variabili locali

Nome i cod_ordine appoggio app

Tipo Intero Intero struct ordine

Funzione Indice ricerca Codice d'ordine desiderato Struttura di appoggio

Vincoli cod_ordine > 0

struct ordine * Puntatore di appoggio

9 - SVILUPPO SOTTOPROGRAMMA "modifica"


- ANALISI SOTTOPROGRAMMA "modifica"

In questo sottoprogramma verr modificata la quantit di un ordine precisando in input il codice numerico dellordine stesso. Verranno utilizzate una variabile di indice per la ricerca, e una variabile inserita in input che indicher il codice d'ordine del quale si vuole modificare la quantit dell'ordine stesso. Dopo aver letto quest'ultima variabile, verr ricercato il codice tra gli elementi (utilizzando la funzione di ricerca sequenziale). Se il codice trovato sar possibile inserire in input la nuova quantit desiderata. E' un sottoprogramma procedurale. Ha due parametri di input: il puntatore e la dimensione.

- TABELLA DATI SOTTOPROGRAMMA "modifica"


Variabili locali

Nome i cod_ordine

Tipo Intero Intero

Funzione Indice ricerca Codice d'ordine desiderato

Vincoli cod_ordine > 0

10 - SVILUPPO SOTTOPROGRAMMA "visualizza"


- ANALISI SOTTOPROGRAMMA "visualizza"

In questo sottoprogramma verr visualizzata la quantit totale di pezzi ordinati di un determinato prodotto il cui codice precisato in input. Verranno utilizzate tre variabili: un indice per il ciclo for, un accumulatore, e una variabile utilizzata per leggere in input il codice del prodotto desiderato. Verr azzerato l'accumulatore, verr letto in input il codice prodotto desiderato e infine partir un ciclo for per scandire il vettore dinamico: se il codice del prodotto inserito in input uguale con quello della componente del vettore, allora la quantit verr sommata all'accumulatore. Al termine del ciclo for, verr visualizzato in input il valore dell'accumulatore, ovvero la quantit totale di pezzi ordinati di quel determinato prodotto desiderato. E' un sottoprogramma procedurale. Ha due parametri di input: il puntatore e la dimensione del vettore dinamico.

- TABELLA DATI SOTTOPROGRAMMA "visualizza"


Variabili locali

Nome i prod acc

Tipo Intero Intero Intero

Funzione Indice per il ciclo for Codice prodotto desiderato Quantit totale di pezzi ordinati

Vincoli 0< prod <51

11 - SVILUPPO SOTTOPROGRAMMA "tabella"


- ANALISI SOTTOPROGRAMMA "tabella"

In questo sottoprogramma verr visualizzata una tabella riassuntiva dove per ogni prodotto indicata la quantit di pezzi ordinati. Dunque verr utilizzato un vettore di appoggio di 50 elementi come contatore. Verranno utilizzati 3 cicli for. Nel primo ciclo for saranno inizializzate a 0 tutte le componenti del vettore. Nel secondo ciclo for verr conteggiata la quantit di pezzi ordinati di tutti i prodotti disponibili, ovvero di tutti i 50 prodotti. Il ciclo for terminer dopo aver scandito tutto il vettore DINAMICO. Infine l'ultimo ciclo for verr utilizzato per visualizzare in output la tabella riassuntiva.

E' un sottoprogramma procedurale. Ha due parametri di input: il puntatore e la dimensione del vettore dinamico.

- TABELLA DATI SOTTOPROGRAMMA "tabella"


Variabili locali

Nome i cont[50]

Tipo Intero Intero

Funzione Indice ciclo for Vettore utilizzato come contatore

Vincoli -

12 - SVILUPPO SOTTOPROGRAMMA "ricerca"


- ANALISI SOTTOPROGRAMMA "ricerca"

In questo sottoprogramma verr effettuata la ricerca dei codici d'ordine. Dopo aver inizializzato a 0 l'indice, verr eseguita una condizione composta (operatore logico AND) con un while do, ed ogni qualvolta una delle due operazioni verificata verr incrementato l'indice di un'unit. Se la condizione non verificata si effettuer un altra condizione: se la chiave di ricerca uguale al codice d'ordine del campo della struttura, allora la funzione ritorner il valore di "i", altrimenti ritorner -1. E' un sottoprogramma funzionale. Ha tre parametri di input: la chiave di ricerca, il puntatore e la dimensione del vettore dinamico.

- TABELLA DATI SOTTOPROGRAMMA "ricerca"


Variabili locali

Nome i

Tipo Intero Indice

Funzione

Vincoli -

You might also like