Sei sulla pagina 1di 13

Gabriele D'Amico

4^D Informatica

RELAZIONE 5

16/11/2010

- 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

- TESTO

1
1

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 l’ordine si dovrà fornire un codice numerico che individua univocamente l’ordine stesso. Per ogni telefonata è possibile effettuare l’ordine 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 all’inizio 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 dell’ordine 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

Documentazione del progetto.

problema

applicando

la

- ANALISI GENERALE

2
2

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 all’inizio 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
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

ricerca

(struct ordine *p, int cod_ordine, int dim);

struct ordine *

aggiungi

(struct ordine *p, int *dim, int *cont);

struct ordine *

cancella

(struct ordine *p, int *dim);

void

modifica

(struct ordine *p, int dim);

void

visualizza

(struct ordine *p, int dim);

int

menu

(void);

- TABELLA DATI

Costanti

4
4

Nome

Tipo

Funzione

Valore

L

Intero

Lunghezza massima stringhe

20

Variabili globali

Nome

Tipo

Funzione

Vincoli

dim

Intero

Dimensione vettore dinamico

-

scel

Intero

Variabile di scelta

1≤ scel ≤6

cont

Intero

Codice d'ordine

-

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.

- DIAGRAMMA PROGRAMMA PRINCIPALE

5
5
- DIAGRAMMA PROGRAMMA PRINCIPALE 5
6
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

Tipo

Funzione

Vincoli

app

struct ordine *

Puntatore d'appoggio

-

7
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

Tipo

Funzione

Vincoli

scel

Intero

Variabile di scelta

1≤ scel ≤6

8
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

Tipo

Funzione

Vincoli

i

Intero

Indice ricerca

-

cod_ordine

Intero

Codice d'ordine desiderato

cod_ordine > 0

appoggio

struct ordine

Struttura di appoggio

-

app

struct ordine *

Puntatore di appoggio

-

9
9

- SVILUPPO SOTTOPROGRAMMA "modifica"

- ANALISI SOTTOPROGRAMMA "modifica"

In questo sottoprogramma verrà modificata la quantità di un ordine precisando in input il codice numerico dell’ordine 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

Tipo

Funzione

Vincoli

i

Intero

Indice ricerca

-

cod_ordine

Intero

Codice d'ordine desiderato

cod_ordine > 0

10
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

Tipo

Funzione

Vincoli

i

Intero

Indice per il ciclo for

-

prod

Intero

Codice prodotto desiderato

0< prod <51

acc

Intero

Quantità totale di pezzi ordinati

-

11
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

Tipo

Funzione

Vincoli

i

Intero

Indice ciclo for

-

cont[50]

Intero

Vettore utilizzato come contatore

-

12
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

Tipo

Funzione

Vincoli

i

Intero

Indice

-