”GESTIONE TEATRO ©” Marco Meletti Classe 5 Aia 2001/02 © INDICE RELAZIONE 1. Descrizione Progetto 2. Realizzazione Progetto 2.1. Delphi 2.2. Microsoft Access 2.2.1. Impostazione Odbc 2.3. Inserimento dati 2.4. Ricerca dati 2.5. Stampa dati 2.5.1. Report 2.5.2. Microsoft Word 3. Guida al Programma 3.1. Schermata Principale 3.2. Menù 3.2.1. Gestione Dati 3.2.1.1. Indirizzi 3.2.1.2. Clienti 3.2.1.3. Contratti 3.2.1.4. Fatture 3.2.1.5. Scadenziario 3.2.2. Archivi 3.2.2.1. Spettacoli 3.2.2.2. Fornitori 3.2.2.3. Generi 3.2.2.4. Mod. Pagamento 3.2.2.5. Iva 3.2.2.6. Fornitori 3.2.2.7. Codice Selezione Indirizzi 3.2.3. Stampa 3.2.3.1. Indirizzi 3.2.3.2. Clienti 3.2.3.3. Contratti 3.2.3.4. Fatture 3.2.4. Opzioni 3.2.4.1. Credits 3.2.4.2. Guida 3.2.4.3. Editor Contratti – Fatture 3.2.4.4. Visualizza Report Salvati 3.2.4.5. Esci GUIDA TECNICA DESCRIZIONE DEL PROGETTO Il progetto è nato grazie all’opportunità di lavoro che mi è stata offerta dalla compagnia teatrale “Teatro del Drago”. Il lavoro che mi era stato affidato era quello di creare un programma per la gestione dei dati. Il programma oltre che alla gestione dei dati doveva rispecchiare alcune caratteristiche fondamentali che mi erano state espressamente richieste dai ragazzi della compagnia. La compagnia teatrale utilizzava già un programma per la gestione anche se era molto vecchio e con la presenza di molti bug. Uno dei problemi principali del vecchio programma era la compatibilità con i programmi della SUITE OFFICE. I dati non erano memorizzati in un unico database, ma in tabelle singole realizzate con il programma Fox Pro della Microsoft. Queste tabelle non potevano essere aperte o modificate con il programma Microsoft Access o utilizzate da qualsiasi altro programma. Il programma oltre alla gestione dei dati doveva anche occuparsi della stampa di essi. Per esempio si ha la necessità di stampare le etichette con i nominativi e i rispettivi indirizzi da attaccare nelle buste senza bisogno di scriverli a mano. Oltre alla stampa degli indirizzi o dei dati relativi al cliente il programma si occupa anche della stampa dei contratti e delle fatture in modo da poter automatizzare tutto il processo e rendere meno faticoso il lavoro delle persone. Sempre nell’ottica della semplificazione e della velocità si sono introdotti degli archivi per gestire meglio l’inserimento dei dati. Per esempio, sono stati creati degli archivi per gli spettacoli, per le modalità di pagamento, per i vari tipi di iva da applicare sui costi di uno spettacolo o anche per gestire i dati relativi ai fornitori. Per quanto riguarda, invece, la gestione dei dati ci si doveva occupare dei contatti della compagnia, dei dati relativi ai clienti e della creazione dei contratti e delle fatture. Oltre a questo ci si è anche occupati della gestione dello scadenziario, in modo da poter gestire meglio le fatture. REALIZZAZIONE DEL PROGETTO Per realizzare il mio programma ho utilizzato un ambiente di sviluppo visuale. Di programmi in commercio ce ne sono parecchi, tra i più conosciuti Microsoft Visual C ++, Delphi, C++ Builder e Visual Basic. Nel mio caso ho deciso di utilizzare Delphi visto che è un’ evoluzione del linguaggio Pascal studiato negli anni passati. Delphi è stato utilizzato per creare l’interfaccia utente. Per la gestione del database ho pensato di utilizzare Microsoft Access, visto che è un programma abbastanza diffuso e anche molto semplice da usare. Oltre a queste due considerazioni la scelta di Access è stata anche obbligata visto che quelli che mi hanno commissionato il lavoro mi hanno chiesto di creargli un programma compatibile al massimo con i programmi della Suite Office. • DELPHI Delphi è uno dei prodotti più venduti della Borland. E’ un linguaggio di tipo RAD (Rapid Application Development), cioè un ambiente per il rapido sviluppo delle applicazioni. Delphi permette di creare applicazioni sotto Windows grazie a una comoda interfaccia grafica per l’utente (GUI Graphical User Interface) utilizzando al massimo la potenza dell’object pascal. Offre la possibilità di creare applicazioni di tutti i tipi, da applicazioni gestionali, a giochi, a programmi per la gestione delle e-mail e anche alla realizzazione di web browser. • MICROSOFT ACCESS Access è stato introdotto nel mercato dei database nell’ottobre del 1992 e subito milioni di utenti hanno adottato questo prodotto in quanto è molto semplice da utilizzare e permette una buona gestione dei database. Oltre ad essere un programma di gestione dei database per utenti non molto esperti, permette di soddisfare a pieno le esigenze dei programmatori visto che è in grado di integrare Visual Basic for Applications. Inoltre, da’ la possibilità di integrare il database all’interno degli altri programmi della Suite Office. Un esempio è la possibilità d’importare nel programma Outlook un database generato in Access contenente i nomi dei clienti con i relativi indirizzi e dati. Uno dei fattori che mi ha portato ad utilizzare Access è stata proprio una di queste possibilità. L’utilizzo di Access nel mio programma è molto limitato in quanto è stato utilizzato solamente per la creazione del database e delle sue relative tabelle, infatti tutto quello che riguarda la gestione dei dati è stata realizzata tramite Delphi. Access, infatti, dà la possibilità di effettuare molte operazioni tra cui la creazione di maschere per l’inserimento dei dati, l’esecuzione di varie interrogazioni sui dati tramite una comoda interfaccia o inserendo il codice Sql. Access gestisce anche tutto quello che riguarda la stampa dei dati, infatti si ha la possibilità di stampare i dati in maniera tradizionale oppure creando dei Report. FASI DEL PROGRAMMA La prima operazione che ho dovuto compiere per la realizzazione del database è stata quella di convertire i vecchi dati contenuti in un database realizzato in Fox Pro. Questa operazione è stata inizialmente molto complicata, in quanto Access nonostante supportasse i database realizzati in Fox Pro, non riusciva a convertire i vari tipi di dati di ogni singolo campo del database, altrimenti non riusciva a importare i valori contenuti nei campi. Per raggiungere il mio obiettivo ho dovuto importare ogni tabella del vecchio database nel programma della Borland “Database Desktop” e convertirli come tabelle Paradox 7; una volta fatta questa operazione per ogni singola tabella ho dovuto rieffettuare questa operazione all’interno di Access importando stavolta le tabelle realizzate in Paradox. Il vecchio database era stato realizzato in maniera impropria e scorretta, in quanto non era stata applicato nessun collegamento tra le varie tabelle e per questo non ho potuto realizzare collegamenti tra tabelle in quanto si sarebbe persa una moltitudine di dati. Il risultato di tutto questo lavoro è stata la realizzazione del database teatro.mdb Dopo aver creato il mio database ho incominciato a lavorare in ambiente Delphi. Come prima operazione ho dovuto interfacciare il mio database con il mio programma. Per far ciò ho dovuto utilizzare il componente ODBC (Open Database Connectivity). Senza questa operazione non avrei potuto portare avanti il progetto. • Come avviene l’interfacciamento 1. Fare clic su Start, scegliere Impostazioni e, quindi, fare clic su Pannello di controllo. Fare doppio clic su Strumenti di amministrazione e quindi su Origini dati (ODBC). Comparirà la seguente finestra. 2. Ciccare su Aggiungi e selezionare i driver per il database di Access (vedi figura) 3. Infine assegneremo al nostro database un nome che in questo caso è gestione teatro e selezioneremo la directory o il computer su cui è situato il database Nome Directory Database 4. Ora il nostro database è interfacciato con il Bde (Borland Database Engine). Non resta che completare l’interfacciamento con il programma realizzato in delphi. Il database va interfacciato come segue Database ODBC DELPHI TABLE DATASET QUERY COMPONENTI DATAWARE Dbgrid,Dbedit,DbNavigator,DbImage,DbText Esempio d’interfacciamento del database con un componente query Immagine Posiziono un componente Query e un componente Datasource sulla Form Imposto la proprietà Dataset del componente Datasource con il nome del mio dataset che in questo caso è il componente Query Ora imposto nel componente Query la proprietà Database Name con il nome del mio database creato con l’ODBC Sempre nel componente Query, inserisco del codice SQL nella proprietà Sql per visualizzare una tabella presente nel database. Es: Tabella clienti Select * from clienti In questa maniera seleziono tutti i dati presenti nella tabella clienti Ora attivo il mio componente. Impostando a True il campo Active del componente Query. Per vedere il risultato basta inserire un componente Dbgrid Interfacciato con il datasource Gestione dei dati (Inserimento,Ricerca,Aggiornamento,Cancellazione) L’inserimento,l’aggiornamento e la cancellazione dei dati è un operazione molto semplice; infatti, basta utilizzare il componente DBNAVIGATOR, il quale automaticamente esegue l’operazione in base al pulsante utilizzato. Questo componente va interfacciato con il datasource presente nella form.Queste operazioni vengono svolte solamente se si utilizza il componete Table e non il componente Query. Nel mio programma ho aggiunto una funzione che permette di eseguire le operazioni sui dati solamente dopo aver premuto il tasto “F2”. Questa funzione consente una maggior sicurezza in quanto si potrebbe inavvertitamente cancellare o modificare dei dati. La ricerca sui dati, invece, è stata più complicata; infatti bisogna utilizzare un componente Query, quindi ho dovuto ogni volta cambiare la proprietà dataset del datasource con il componente Query e se volevo inserire i dati dovevo effettuare di nuovo questa operazione impostando il dataset con il componente Table. Per la Ricerca Datasource.Dataset = Table Datasource.Dataset = Query Codice datasource1.Enabled :=false; datasource1.dataset:=query; datasource1.Enabled :=true; Per Inserire,Modificare ed Eliminare Datasource.Dataset = Query Datasource.Dataset = Table Codice datasource1.Enabled :=false; datasource1.dataset:=table; datasource1.Enabled :=true; RICERCHE SUI DATI Campi di tipo Numerico editbox Campo per inserire il contenuto Codice query.sql.clear; query.SQL.add ('select * from indirizzi where id ='+editbox.text); // Cerca tutti gli indirizzi aventi come id il numero inserito nell’editbox query.open; Campi di tipo AlfaNumerico editbox Campo per inserire il contenuto Codice app:=''''+editbox.Text +''''; //Utilizzo una variabile d’appoggio per ricercare il dato. Non faccio altro che aggiungere un apice all’inizio e uno alla fine del mio valore da cercare. query.sql.clear; query.sql.add ('select * from indirizzi where citta = '+app ); //Ricerco tutti i dati nella tabella indirizzi aventi come città il valore della variabile d’appoggio APP query.open; Come si è visto per la ricerca di dati di tipo alfanumerico ho dovuto utilizzare una variabile d’appoggio, infatti il programma mi dava sempre un errore se non utilizzavo questa. L’errore era dovuto al fatto che il codice Sql pretende che un parametro di tipo alfanumerico sia preceduto dalle virgolette (“). Invece, per fare delle ricerche su campi di tipo data ho dovuto utilizzare delle query parametriche, perchè utilizzando il solito codice, la ricerca su questi campi non era possibile. Per ovviare a questi problemi ho utilizzato il seguente codice. query1.close; query1.SQL.Text :='select * from fatture where dfdadoc=:data'; // imposto il codice sql per eseguire la ricerca sui dati. Il nostro parametro è “DATA” query1.ParamByName('data').asdatetime:=strtodate(edit5.text); // con questa riga di codice assegno al mio parametro il valore contenuto nel componente edit5 query1.open; Stampa dei dati. Per eseguire la stampa dei dati ho optato per due soluzioni: 1. Utilizzo dei Report 2. Utilizzo di Word Report Ho pensato di utilizzare i report solamente per la stampa di alcuni dati. I dati che sono stati stampati nel seguente metodo sono stati i dati relativi agli indirizzi, in quanto si aveva il bisogno di stampare gli indirizzi in modo da poterli applicare alle lettere da inviare. La soluzione dei report è stata presa in considerazione anche per la stampa di tutti gli archivi e dei prospetti contenenti le informazioni per ogni cliente. La funzione dei report è quella di stampare i dati contenuti all’interno dei database organizzandoli in una certa maniera. Infatti grazie al componente Quick Report di Delphi si ha la possibilità di organizzare i dati come si vuole. OPERAZIONI BASE PER LA CREAZIONE DI UN NUOVO REPORT Si inserisce un nuovo componente Quick Report dal menù NEW Come seconda operazione dobbiamo impostare la proprietà dataset del nostro report con un componente query o table il quale conterrà i dati da stampare. Questi due componenti possono essere posizionati direttamente sul report, oppure dovremmo includere la unit dove sono presenti questi componenti. Ora dobbiamo posizionare sul nostro componente report dei componenti QrBand. Questi componenti servono per impostare una determinata pagina del report a svolgere una specifica funzione.Le operazioni più comuni che si assegnano a questi componenti sono la RbTitle (permette di impostare il titolo del nostro report), rbcolumheader (serve per inserire tramite label il nome dei campi del database o del semplice testo),infine si ha la proprietà rbdetail la quale inserendo all’interno di questa banda dei componenti Qrdbtext farà visualizzare il contenuto del nostro database Come ultima operazione si può impostare il formato della carta su cui stampare, per esempio A4, oppure formato lettera e anche il numero di colonne. Per far tutto ciò basta definire le impostazioni da una finestra speciale. Oltre che utilizzare i report per la stampa ho usato anche un’ apposita stampa interfacciando Microsoft Word con Delphi. Ho dovuto utilizzare Word per la stampa, perché i contratti e le fatture non potevano essere stampate tramite report. Per eseguire questo interfacciamento si utilizza uno dei tanti componenti della Palette Servers, nel mio caso, il componente Word Document. Il compito di questo componente è di inviare all’applicazione Word i dati contenuti all’interno di una qualsiasi tabella. Inoltre questo componente permette anche di impostare l’impaginazione del nostro documento. Di seguito un piccolo esempio di utilizzo di questo componente. Inserisco nella form un Pulsante e il componente Server Word Document Nella proprietà Click del nostro pulsante inseriamo il seguente codice. (N.B: In questo caso i dati esportati da Delphi a Word sono tutti contenuti in due database. In tutti i modi si ha la possibilità di esportare qualsiasi tipo di dato.) VAR APP:INTEGER; begin WORD.Activate ; WORD.range.font.size:=14; WORD.range.Bold :=2; WORD.Range.Text :=IMPOSTA_CONTRATTO.TABLE1.FIELDBYNAME ('Tit').ASSTRING; word.Range.InsertParagraphAfter; word.Range.InsertParagraphafter ; WORD.range.font.size:=12; WORD.range.Bold :=0; WORD.paragraphs.last.range.text :=IMPOSTA_CONTRATTO.TABLE1.FIELDBYNAME ('indirizzo').ASSTRING; word.Range.InsertParagraphAfter; word.Range.InsertParagraphafter ; WORD.paragraphs.last.range.text :=IMPOSTA_CONTRATTO.TABLE1.FIELDBYNAME ('t1').ASSTRING; word.Range.InsertParagraphAfter; word.Range.InsertParagraphafter ; WORD.paragraphs.last.range.text :=IMPOSTA_CONTRATTO.TABLE1.FIELDBYNAME ('A').ASSTRING; word.Range.InsertParagraphAfter; WORD.paragraphs.last.range.text :=IMPOSTA_CONTRATTO.TABLE1.FIELDBYNAME ('m3').ASSTRING; APP:=QUERY1.FieldValues ['id']; WORD.Paragraphs.Space15; end; Ecco il risultato finale. (Microsoft Word deve essere già in fase di esecuzione in modo da poter utilizzare questo componente ) Gestione dell’editor per la stampa dei contratti e delle fatture Come abbiamo detto in precedenza le fatture e i contratti vengono stampati tramite word. Entrambi hanno un formato standard, cioè contengono un testo predefinito che raramente viene modificato. Questo testo è contenuto all’interno di un database che può essere modificato tramite un apposito editor di testo creato da me. Infatti sia i contratti e le fatture sono state parametrizzate ricavando così delle parti di testo fisse. L’editor è stato realizzato utilizzando un componente Table e vari dbedit. Le parti in rosso sono le variabili che vengono automaticamente inserite dal computer in fase di stampa del contratto. Per esempio la variabile città cambierà valore in base al contratto che si starà stampando. Un equivalente editor è stato realizzato per la gestione delle fatture. Gestione Scadenziario Una funzione che è stata realizzata per il programma è la gestione dello scadenziario. Esso serve per gestire le scadenze delle fatture. Infatti l’utente potrà ordinare le fatture in base alla data di scadenza oppure visualizzare quelle che sono già state evase oppure quelle ancora da fare. Oltre a questa funzione, ho implementato un’ ulteriore funzione, la quale ogni volta che si accede al programma controlla se ci sono fatture in scadenza. In questo caso il programma mostrerà all’utente un apposito messaggio e darà la possibilità di visualizzare quella determinata fattura oppure di proseguire nell’esecuzione del programma. Messaggio visualizzato Per realizzare questa funzione non ho fatto altro che eseguire una select e controllare se il campo data_scadenza sia uguale alla data odierna. Ho inserito un dbedit non visibile dall’utente e dopo aver fatto l’interrogazione vado a controllare se il suo contenuto è vuoto o no. Se dovesse risultare non vuoto faccio apparire il messaggio di avviso, altrimenti no. Codice per eseguire l’operazione appena descritta gestione_fatture.data_fatture.Enabled :=false; gestione_fatture.data_fatture.dataset:=gestione_fatture.ric; gestione_fatture.data_fatture.Enabled :=true; gestione_fatture.ric.close; gestione_fatture.ric.SQL.Text :='select * from fatture where dfdascad=:data'; gestione_fatture.ric.ParamByName('data').asdatetime:=date; //date = data del giorno gestione_fatture.ric.open; // eseguo la ricerca controllando il campo data if edit_data.Text <> '' then if MessageDlg('Oggi scade una fattura , vuoi controllarla ?',mtInformation, [mbYes, mbNo], 0) = mrYes then gestione_fatture.showmodal; //ho controlla se il mio dbedit contiene un valore, se sì faccio visualizzare il messaggio. //se l’utente ciccherà sul pulsante Yes il programma farà visualizzare la fattura che sta per //scadere Guida La guida del programma è stata realizzata utilizzando il programma free Help Express scaricato da internet. Questo editor permette di creare in modo semplice e veloce file di guida. Questo editor è simile a un editor per pagine web. In tutti i casi il programma ha bisogno del compilatore della Microsoft per le guide. Questo editor è contenuto all’interno di una directory di Delphi. Installazione Per realizzare l’installazione del programma ho utilizzato il programma fornito con delphi Install Shield Express For Delphi. Questo programma tramite un apposito wizard permette di creare in brevissimo tempo installazioni di tipo professionali. Infatti tramite wizard ho impostato le varie caratteristiche come le varie maschere che verranno visualizzate durante l’installazione, le varie directory contenenti i diversi file e i relativi database. Il programma ha realizzato i seguenti file i quali possono essere copiati su un Cdrom Se si clicca sul file Setup.exe il risultato è il seguente Una volta che è stata completato l’installazione bisogna interfacciare i vari database con il programma. Per compiere questa operazione bisogna configurare l’ODBC come ho scritto sopra. Marco Meletti Classe 5 Aia 2001/02 GUIDA UTENTE SCHERMATA PRINCIPALE DEL PROGRAMMA Dalla schermata principale del programma si può raggiungere qualsiasi sezione. Il programma è stato suddiviso in quattro menù. Nella parte inferiore della schermata sono stati inseriti un calendario e un orologio per utilità immediata. ELENCO DEI MENU’ GESTIONE DATI ARCHIVI STAMPA OPZIONI Si occupa di gestire i dati relativi agli argomenti presenti. Si potranno inserire, modificare,eliminare,ricercare e aggiornare. In questa sezione del programma vengono gestiti tutti gli archivi. Da ogni schermata è possibile anche effettuare la stampa di essi effettuando le stesse operazioni precedentemente elencate Viene eseguita la stampa di tutti i dati che possono essere precedentemente selezionati tramite un’apposita sezione. In questa sezione si può visualizzare la guida del programma,l’editor per i contratti e le fatture,gli eventuali report salvati sul computer e uscire dal programma. Gestione dati Per poter lavorare sui dati, come prima operazione bisogna premere il tasto “F2”;una volta premuto si potrà lavorare sui dati utilizzando l’apposita barra. Utilizzando i tasti presenti si potranno eseguire le seguenti operazioni. Inoltre si potrà effettuare delle ricerche selezionando il campo da ricercare e inserire il testo tramite l’apposito spazio. Una volta effettuata la ricerca i risultati potranno essere visualizzati e modificati a proprio piacimento. ARCHIVI In questa sezione si possono inserire,modificare ed eliminare tutti i dati relativi agli archivi. Per effettuare queste operazione andrà sempre utilizzata la barra come descritto nella pagina precedente. Inoltre dalle schermate relative agli archivi è possibile effettuare la stampa di essi tramite report! Dati presenti nell’archivio Barra per la gestione dati Ritorno al menù principale Stampa dati E’ stato adottato un modello unico per ogni archivio in modo da rendere più semplice l’utilizzo da parte dell’utente. STAMPA DATI In queste schermate sarà possibile stampare tutti i dati relativi ai clienti, agli indirizzi, alle fatture e ai contratti. Prima di stampare i dati sarà possibile selezionare i dati tramite un’apposita schermata che permetterà di effettuare varie ricerche sui dati stessi. Una volta selezionati i dati si potrà procedere con la stampa di essi. Schermata per selezionare i dati Barra per scorrere i dati Selezione Dati Stampa dati Ritorno al menù principale Ringraziamenti Vorrei ringraziare tutte quelle persone che mi hanno aiutato per la realizzazione del progetto. Senza di loro avrei fatto più fatica a risolvere certi problemi, ma con il loro aiuto e i loro consigli sono riuscito a portare a termine il lavoro. Un ringraziamento speciale a tutti i ragazzi del newsgroup del sito di Marco Cantù che mi hanno aiutato sempre e anche in modo veloce. Inoltre un ringraziamento speciale a Marco Cantù il quale,in persona,con mia grande sorpresa, mi ha risposto risolvendo un problema riguardante i database in Access. Per chi non conoscesse Marco Cantù, qui di seguito allegherò una breve storia che si può trovare sul suo sito Marco Cantù Marco Cantù è autore del best-seller Mastering Delphi 4 (pubblicato da SYBEX negli USA e tradotto in altre dieci lingue), autore di numerosi articoli per riviste italiane (Computer Programming, PDJ) e internazionali e relatore alle principali conferenze su Delphi a livello mondiale. In italiano ha pubblicato i volumi "Delphi 2" e "Delphi 3" con McGraw-Hill Italia. Prima di concentrarsi su Delphi era un esperto di C++ e programmazione Windows con MFC, OWL e API. Per informazioni più dettagliate leggere la sua biografia, riportata qui sotto... Biografia Marco è nato a Piacenza nel 1965. Dopo aver frequentato il Liceo Scientifico locale ha frequentato il Politecnico di Milano, dove si e' laureato a pieni voti in Ingegneria Elettronica, indirizzo Informatica. Dopo il servizio civile ha scritto il suo primo libro, un testo su Borland C++ pubblicato da Apogeo, e ha trovato lavoro come insegnante in Mondadori Informatica Education (allora sede di Microsoft University in Italia). In Mondadori, Marco ha tenuto per tre anni corsi di Linguaggio C++, Programmazione Windows con l'API, Visual C++ e MFC. Nello stesso periodo ha pubblicato il suo libro di C++ negli Stati Uniti (cone le case editrici Bantam prima e Random House poi) e ha scritto numerosi articoli per PCProfessionale. L'uscita di Delphi ha segnato per Marco una svolta: ha abbandonato Mondadori e ha fondato una societa', Wintech Italia Srl, con cui organizzare corsi Delphi. Ha scritto un libro di grandissimo successo su Delphi, Mastering Delphi, pubblicato da Sybex e tradotto in 10 lingue. Sull'onda del successo di Delphi e dei suoi libri, Marco ha scritto articoli su molte riviste italiane e straniere, ha aggiornato il libro su Delphi scrivendone anche uno piu' avanzato, ha organizzato corsi, seminari, e molte altre iniziative legate a Delphi in Italia, ha partecipato a conferenze e insegnato corsi su Delphi in diverse parti del mondo: Londra, Amsterdam, Francoforte, Parigi, Singapore, New York, San Francisco, Denver, Anaheim, Stoccolma, Washington... Immagine dell’E-Mail speditami da Marco Cantù RINGRAZIAMENTI Ringrazio il professore Mauro Sandrini per avermi dato l’opportunità di effettuare questa esperienza e per avermi guidato con i suoi consigli. Un ringraziamento particolare va ai professori F. Cerini, P. Zoli per l’aiuto fornitomi nella realizzazione del progetto. La mia riconoscenza a tutti i professori del corso d’ Informatica per il loro insegnamento. Infine un doveroso grazie alla Compagnia Teatrale ”Teatro del Drago” che ha avuto fiducia in me. Marco Meletti