Sei sulla pagina 1di 8

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni

Avvertenze

Consegnare solo fogli formato A4. Scrivere su un solo lato (no fronte-retro) In ordine di preferenza usare inchiostro nero, matita, inchiostro blu. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo di pagina rispetto al totale; esempio per il secondo foglio di 3 consegnati: Giuseppe Russo 2/3 Mantenere sul banco il libretto o altro documento di riconoscimento fino a controllo avvenuto Nientaltro deve trovarsi sul banco: non consentito consultare libri, dispense, appunti, ecc. La correzione di riferimento per lautovalutazione verr fornita sul sito internet del Corso La consegna delle fotocopie dei compiti avverr al termine della correzione Chi si presenta allorale deve portare la propria soluzione, eventualmente corretta a penna rossa.

Prova Scritta del 9/12/08


Scrivere un programma per costruire e gestire il registro (lista) degli ordini di un magazzino di pezzi di ricambio. Il programma pu: 1. Inserire un nuovo ordine nel registro in maniera ordinata (crescente) rispetto all'IDcode e nel caso in cui si abbiano IDcode uguali in base alla data di caricamento dell'ordine. 2. Stampare tutto il contenuto del registro degli ordini. 3. Stampare tutti gli ordini di un cliente mostrando i totali di ogni singolo ordine. 4. Stampare tutti gli ordini successivi ad una data inserita da tastiera. 5. Elimina un ordine dal registro individuandolo attraverso l'IDcode e la sua data di creazione. Nel registro ci possono esse pi ordini dello stesso cliente, quindi IDcode si pu ripetere.
#include <iostream> #include <iomanip> using namespace std; struct calendario { int anno; short int mese; short int giorno; }; struct ordine { int IDcode; char prodotto[12]; int quantita; double prezzo; calendario data; ordine* succ; }; typedef ordine* registro; // Questa procedura riempie dall'input i campi dell'ordine // passatole per riferimento

60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni


void inserisci_dati(ordine& a) { cout << "Immetti ID (numero di 4 cifre) della ditta: "; cin >> a.IDcode; cout << "Immetti il nome del prodotto: "; cin >> a.prodotto; cout << "Immetti il numero dei pezzi ordinati: "; cin >> a.quantita; cout << "Immetti il prezzo del singolo pezzo: "; cin >> a.prezzo; cout << "Immetti la data dell'ordine (gg mm aaaa): "; cin >> a.data.giorno >> a.data.mese >> a.data.anno; cout << endl; } // Questa funzione restituisce true solo se l'ordine passato al secondo // membro programmato dopo quello puntato al primo membro bool successivo(registro a, ordine b) { if(a->data.anno > b.data.anno) return false; else if(b.data.anno > a->data.anno) return true; else if(a->data.mese > b.data.mese) return false; else if(b.data.mese > a->data.mese) return true; else if(a->data.giorno > b.data.giorno) return false; else if(b.data.giorno >= a->data.giorno) return true; } // Questa procedura inserisce nel registro l'ordine passato al secondo membro // in maniera ordinata rispetto all'ID del cliente ed alla data void inserisci_ordinatamente(registro& inizio, ordine e) { registro p = 0, q,r; for(q=inizio; q != 0 && q->IDcode <= e.IDcode; q = q->succ) { if (q->IDcode == e.IDcode) { if (successivo(q, e)) p = q; else break; } else p = q; } r = new ordine; *r = e; r -> succ = q; if(q == inizio) inizio = r; else p -> succ = r; } // Questa procedura stampa in output tutti gli ordini void stampa(registro inizio) { registro p = inizio; if( inizio == 0) 60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni


{ cout << "Il registro e' vuoto\n"; return; } cout << endl << setw(4) << "ID" << setw(13) << "Data ordine" << setw(15) << "Nome prodotto" << setw(11) << "Quantita'" << setw(10) << "Prezzo" << "\n\n"; while(p != 0) { cout << setw(4) << p->IDcode << setw(5) << p->data.giorno << "-" << setw(2) << p->data.mese << "-" << setw(4) << p->data.anno; cout << setw(15) << p->prodotto << setw(11) << p->quantita << setw(10) << p->prezzo << endl; p = p->succ; } } // Questa procedura stampa in output tutti gli ordini di un cliente void stampa_ordini_cliente(registro inizio, ordine e) { registro p = inizio; bool flag = true; if( inizio == 0) { cout << "Il registro e' vuoto\n"; return; } while(p != 0) { if(p->IDcode == e.IDcode) { if(flag) { cout << endl << setw(4) << "ID" << setw(13) << "Data ordine" << setw(15) << "Nome prodotto" << setw(11) << "Quantita'" << setw(10) << "Prezzo" << setw(14) << "Costo totale" << "\n\n"; flag = false; } cout << setw(4) << p->IDcode << setw(5) << p->data.giorno << "-" << setw(2) << p->data.mese << "-" << setw(4) << p->data.anno; cout << setw(15) << p->prodotto << setw(11) << p->quantita << setw(10) << p->prezzo << setw(14) << p->quantita*p->prezzo << endl; } p = p->succ; } } // Questa procedura stampa in output tutti gli ordini successivi ad una data void stampa_ordini_data(registro inizio, ordine e) { registro p = inizio; bool flag = true; if( inizio == 0) { cout << "Il registro e' vuoto\n"; return; }

60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni


while(p != 0) { if(!successivo(p,e)) { if(flag) { cout << endl << setw(4) << "ID" << setw(13) << "Data ordine" << setw(15) << "Nome prodotto" << setw(11) << "Quantita'" << setw(10) << "Prezzo" << "\n\n"; flag = false; } cout << setw(4) << p->IDcode << setw(5) << p->data.giorno << "-" << setw(2) << p->data.mese << "-" << setw(4) << p->data.anno; cout << setw(15) << p->prodotto << setw(11) << p->quantita << setw(10) << p->prezzo << endl; } p = p->succ; } }

// Questa procedura elimina dal registro gli ordini associati ad un cliente ed alla data // dell'ordine passati al secondo membro void elimina_ordine(registro& inizio, ordine e) { registro p = 0, q; for(q = inizio; q != 0 && ((q->IDcode != e.IDcode) || (q->data.anno != e.data.anno || q->data.mese != e.data.mese || q->data.giorno != e.data.giorno)); q = q->succ) p = q; if(q == 0) cout << "\nNon c'e' nessun ordine del cliente " << e.IDcode << " per la data: " << e.data.giorno << "-" << e.data.mese << "-" << e.data.anno << endl; if(q == inizio) inizio = q->succ; else p->succ = q->succ; delete q; } // Questo programma principale deve dichiarare variabili e chiamare // le funzioni per produrre un'interazione con l'utente del tipo // descritta in seguito int main() { char r; registro elenco = 0; ordine el; bool flag = true; do { cout << endl << "Ecco quello che puoi fare:"; cout << endl << "i: Inserisce un nuovo ordine in base all'ID"; cout << endl << "s: Stampa tutto il registro degli ordini"; cout << endl << "q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine"; cout << endl << "t: Stampa tutti gli ordini successivi ad una data inserita da tastiera"; cout << endl << "e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione"; 60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni


cout << endl << "a: Esci dal programma\n"; cin >> r; switch(r) { case 'i': case 'I': inserisci_dati(el); inserisci_ordinatamente(elenco, el); break; case 's': case 'S': stampa(elenco); break; case 'q': case 'Q': cout << "\nScrivi l'ID del cliente da visualizzare: "; cin >> el.IDcode; stampa_ordini_cliente(elenco, el); break; case 't': case 'T': cout << "\nScrivi la data da cui iniziare a stampare gli ordini (gg mm aaaa): "; cin >> el.data.giorno >> el.data.mese >> el.data.anno; stampa_ordini_data(elenco, el); break; case 'e': case 'E': cout << "Scrivi l'ID e la data (gg mm aaaa) dell'ordine da cancellare."; cout << "\nID: "; cin >> el.IDcode; cout << "Data: "; cin >> el.data.giorno >> el.data.mese >> el.data.anno; elimina_ordine(elenco, el); break; case 'a': case 'A': flag = false; break; default: cout << "Hai digitato una lettera sbagliata, usa solo le lettere consentite nel menu'\n\n"; } }while(flag); return 0; }

Una possibile esecuzione potrebbe essere:


Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma i Immetti ID (numero di 4 cifre) della ditta: 1111 Immetti il nome del prodotto: tuboU Immetti il numero di pezzi ordinati: 1 Immetti il prezzo del singolo pezzo: 34.6 Immetti la data dell'ordine (gg mm aaaa): 5 11 2008

60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni


Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma i Immetti ID (numero di 4 cifre) della ditta: 1110 Immetti il nome del prodotto: giuntoY Immetti il numero di pezzi ordinati: 5 Immetti il prezzo del singolo pezzo: 32.54 Immetti la data dell'ordine (gg mm aaaa): 3 11 2008 Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma i Immetti ID (numero di 4 cifre) della ditta: 1111 Immetti il nome del prodotto: snodo Immetti il numero di pezzi ordinati: 25 Immetti il prezzo del singolo pezzo: 2.65 Immetti la data dell'ordine (gg mm aaaa): 12 11 2008 Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma s ID Data ordine Nome prodotto Quantita' Prezzo 1110 1111 1111 3-11-2008 5-11-2008 12-11-2008 giuntoY tuboU snodo 5 1 25 32.54 34.6 2.65

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma q Scrivi 'ID del cliente di cui visualizzare gli ordini: 1110 ID 1110 Data ordine 3-11-2008 Nome prodotto giuntoY Quantita' 5 Prezzo 32.54 Costo totale 162.7

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma q Scrivi 'ID del cliente di cui visualizzare gli ordini: 1111 ID 1111 Data ordine 5-11-2008 Nome prodotto tuboU Quantita' 1 Prezzo 34.6 Costo totale 34.6

60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni


1111 12-11-2008 snodo 25 2.65 66.25

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma t Scrivi la data da cui iniziare a stampare gli ordini (gg mm aaaa): 10 11 2008 ID 1111 Data ordine 12-11-2008 Nome prodotto snodo Quantita' 25 Prezzo 2.65

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma t Scrivi la data da cui iniziare a stampare gli ordini (gg mm aaaa): 4 11 2008 ID 1111 1111 Data ordine 5-11-2008 12-11-2008 Nome prodotto tuboU snodo Quantita' 1 25 Prezzo 34.6 2.65

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma e Scrivi l'ID e la data (gg mm aaaa) dell'ordine da cancellare. ID: 1111 Data: 12 11 2008 Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma s ID 1110 1111 Data ordine 3-11-2008 5-11-2008 Nome prodotto giuntoY tuboU Quantita' 5 1 Prezzo 32.54 34.6

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma i Immetti ID (numero di 4 cifre) della ditta: 1110 Immetti il nome del prodotto: corda Immetti il numero di pezzi ordinati: 5 Immetti il prezzo del singolo pezzo: 10 Immetti la data dell'ordine (gg mm aaaa): 29 11 2008

60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it

Corso di Fondamenti di Informatica (M-Z) Prof Aldo Franco Dragoni

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma s ID 1110 1110 1111 Data ordine 3-11-2008 29-11-2008 5-11-2008 Nome prodotto giuntoY corda tuboU Quantita' 5 5 1 Prezzo 32.54 10 34.6

Ecco quello che puoi fare: i: Inserisce un nuovo ordine in base all'ID s: Stampa tutto il registro degli ordini q: Stampa tutti gli ordini di un cliente mostrando i totali di ogni ordine t: Stampa tutti gli ordini successivi ad una data inserita da tastiera e: Elimina un ordine individuato attraverso l'ID e la sua data di creazione a: Esci dal programma a

60131 ANCONA - ITALY - Via Brecce Bianche - Segreteria phone +39(71)2204242 fax +39(71)2204835 - e-mail: segreteria.deit@univpm.it