31
Università degli Studi di Trieste Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Progetto e sviluppo di un'applicazione per la gestione di un reagentario Relatore: Laureando: Chiar.mo Prof. Maurizio Fermeglia Samo Ziberna Anno accademico 2009/2010 1

Tesi Samo Ziberna

Embed Size (px)

Citation preview

Page 1: Tesi Samo Ziberna

Università degli Studi di Trieste

Facoltà di Ingegneria

Corso di Laurea in Ingegneria Informatica

Progetto e sviluppo di un'applicazione per la gestione di un reagentario

Relatore: Laureando:Chiar.mo Prof. Maurizio Fermeglia Samo Ziberna

Anno accademico 2009/2010

1

Page 2: Tesi Samo Ziberna

2

Page 3: Tesi Samo Ziberna

Indice generale1) Introduzione.....................................................................................................................................4

Vincoli di progetto.......................................................................................................................42) Analisi..............................................................................................................................................6

Introduzione....................................................................................................................................6Situazione preesistente....................................................................................................................6

Database......................................................................................................................................7Requisiti..........................................................................................................................................9

3) Progettazione..................................................................................................................................11

Database: Integrazione e modifica................................................................................................11Applicazione.................................................................................................................................15

Consultazione frasi Rischio/Sicurezza:................................................................................15Prestito e Restituzione:.........................................................................................................15Gestione Frasi Rischio/Sicurezza:........................................................................................15Gestione Reagente:...............................................................................................................16Gestione Sostanza Chimica:.................................................................................................16

Interfaccia utente...........................................................................................................................174) Realizzazione.................................................................................................................................19

Introduzione..................................................................................................................................19Diagramma delle classi.................................................................................................................19

Classe DatabaseSql...................................................................................................................20Classe Reagetariodb..................................................................................................................20Classe ExportToExcel...............................................................................................................20Classe User................................................................................................................................21

Interfaccia utente...........................................................................................................................22Scheda Rischio/Sicurezza.....................................................................................................22Scheda Log In.......................................................................................................................23Scheda Reso.........................................................................................................................23Scheda Prelievo....................................................................................................................24Scheda Gestione Reagenti....................................................................................................25Scheda Gestione Sostanza Chimica.....................................................................................26Scheda Gestione Scarti.........................................................................................................28Scheda Log Out....................................................................................................................29Form GestioneFrasiRS.........................................................................................................29

5) Conclusioni....................................................................................................................................31

6) Bibliografia....................................................................................................................................32

3

Page 4: Tesi Samo Ziberna

1) Introduzione

L'oggetto della tesi è la progettazione e lo sviluppo di un'applicazione per la gestione del reagentario e per la gestione delle frasi di rischio e sicurezza delle sostanze chimiche. Tale applicazione deve integrare il lavoro svolto dagli ingegneri elettronici curr. gestionale Francesco Paglia e Andrea Sauli, i quali si sono concentrati sulla base dati, rispettivamente, per la gestione delle frasi di rischio e sicurezza di sostanze chimiche e la gestione del magazzino del dipartimento detto reagentario.

Il risultato di questa tesi è l'applicazione Gestione Reagentario, un'applicazione Windows form, basata sul database Reagentario creato ad hoc, con lo scopo di soddisfare i bisogni informativi del dipartimento di ingegneria chimica dell'Università degli Studi di Trieste.

Il dipartimento in questione necessita di un sistema di gestione delle sostanze chimiche presenti, registrando i prelievi eseguiti dagli utenti e di un sistema per adempire agli obblighi di legge relativi alla gestione del magazzino delle sostanze chimiche.

Il dipartimento è dotato di una rete di calcolatori connessi ad un server centrale, sul quale è installato il DBMS MS SQL 2005 contenente due database creati ad hoc, i quali coprono gli obbiettivi del dipartimento. Tali database sono attualmente gestiti da due applicazioni:

– Reagentario 1.0, sviluppato da Andrea Sauli nel 2006 per la tesi: Progettazione e sviluppo di un'applicazione per la gestione di un laboratorio chimico e delle schede di sicurezza

– Applicativo frasi di rischio, sviluppato da Francesco Paglia nel 2007 per la tesi: Progettazione e sviluppo di una base di dati per la gestione di informazioni sul rischio chimico di solventi

Il lavoro è stato svolto affrontando le seguenti fasi:– analisi della situazione esistente– integrazione e normalizzazione dei database– progettazione dell'interfaccia utente– sviluppo dell'interfaccia utente

Vincoli di progetto– Database:

– Microsoft SQL Server 2005 ( database management sistem esistente)– Interfaccia utente:

– Ambiente di sviluppo: Visual Studio 2008– Linguaggio di sviluppo: C#

(scelto per motivi di studio)

4

Page 5: Tesi Samo Ziberna

2) Analisi

IntroduzioneIn questo capitolo viene svolto il lavoro di analisi partendo dalla situazione esistente, analizzando la documentazione disponibile per finire con la stesura del documento dei requisiti.

Frasi di rischio e di sicurezza:Le frasi di rischio e sicurezza sono delle frasi standard, contraddistinte da un codice e una

frase in linguaggio naturale, che descrivono rispettivamente i rischi per la salute umana, animale o ambientale che una sostanza chimica può provocare e i consigli di prudenza nel manipolare tale sostanza chimica. Le frasi sono codificate dalla direttiva europea 88/379/CEE (e successive modifiche) e attualmente vige l'obbligo di specificarle sulle etichette delle sostanze chimiche.

Reagentario:Il reagentario è il magazzino delle sostanze chimiche del dipartimento di ingegneria chimica

dell'università degli Studi di Trieste. Le sostanza chimiche in possesso del dipartimento vengono conservate principalmente in una stanza centrale chiamata “magazzino reagentario”. Alcune sostanze che necessitano di particolari condizioni di stoccaggio, ad esempio temperatura costante, vengono stoccate in più frigoriferi localizzati all'interno dei laboratori.

Situazione preesistenteIl dipartimento ha sei laboratori (Alte pressioni, Cromatografia, Reologia, Trattamento

minerali, Impianti chimici e Acqua distillata) dotati ciascuno di computer connessi alla rete Lan. Il dipartimento ha inoltre a disposizione un server equipaggiato con il DBMS MS Sql 2005.

Negli anni precedenti sono stati progettati e sviluppati due applicativi basati su database realizzati ad hoc da due laureandi di ingegneria negli anni 2006 e 2007;

Reagentario 1.0:L'applicazione chiamata Reagentario 1.0 gestisce il sistema di prestiti di reagenti chimici del dipartimento. La sua funzione primaria è l'amministrazione di “... tutte le informazioni concernenti l'ingresso e l'uscita delle sostanze chimiche del magazzino centrale del dipartimento, per poter in secondo luogo risalire alle informazioni delle schede di sicurezza dei reagenti, che sono dei documenti in possesso dal dipartimento che descrivono la pericolosità chimica dei materiali” (tratto dalla tesi “Progettazione e sviluppo di un'applicazione per la gestione di un laboratorio chimico e delle schede di sicurezza” di Andrea Sauli).

Applicativo frasi di rischio:“... un software, strutturato su una base di dati, che permetta di risalire in modo facile e intuitivo a tutte le frasi di rischio e di sicurezza relative ad una determinata sostanza.” (tratto dalla tesi “Progettazione e sviluppo di una base di dati per la gestione di informazioni sul rischio chimico di solventi” di Francesco Paglia)

5

Page 6: Tesi Samo Ziberna

Il dipartimento dunque è già in possesso di tutto il hardware necessario per soddisfare gli obbiettivi preposti, mentre le due applicazioni, seppure coprendo le funzionalità richieste, non soddisfano gli obbiettivi di semplicità d'utilizzo espressi dagli utenti.

Si rende così necessaria la progettazione e lo sviluppo di una nuova applicazione, la quale dovrà raggruppare le funzionalità già esistenti in un unica interfaccia utente, avendo come obiettivo primario la semplicità d'utilizzo.

DatabaseEssendo le applicazioni sviluppate da due persone in due momenti distinti, ognuno ha

progettato e sviluppato il proprio database.

Il database dbReagentario è stato realizzato per la gestione dei reagenti (sostanze chimiche) presenti all'interno del dipartimento; l'obbiettivo primario era la tracciabilità dei prelievi/prestiti dei reagenti.

Il database FrasiDiRischio è stato costruito intorno all'entità Sostanza Chimica. Al suo interno vengono salvati i dati riguardanti le frasi di rischio e sicurezza che sono associate alle sostanze chimiche.

6

Illustrazione 1: Diagramma E-R Frasi di Rischio

Page 7: Tesi Samo Ziberna

7

Illustrazione 2: Diagramma E-R dbReagentario

Page 8: Tesi Samo Ziberna

RequisitiSegue l'elenco dei requisiti suddivisi per sezioni:

Sezione frasi Rischio/Sicurezza:– La sezione frasi R/S deve essere tradotta in inglese– Funzionalità accessibile a chiunque:

– Visualizzare le frasi di rischio e di sicurezza, facendo una ricerca della sostanza chimica in base al:– CAS number– nome o parte di esso– numero univoco della sostanza chimica

– Funzionalità accessibili all'utente di tipo Amministratore:aggiungere nuova frase di rischio (codice, descrizione IT, descrizione EN, fonte)

– aggiungere nuova frase di sicurezza (codice, descrizione IT, descrizione EN, fonte)– modificare frase di rischio– modificare frase di sicurezza– associare frase di rischio ad una sostanza chimica*– associare frase di sicurezza ad una sostanza chimica*

Sezione Reagentario:– Funzionalità accessibile ad un utente autorizzato (di tipo Operatore di laboratorio o

Amministratore):– Sezione prelievo:

– visualizzare l'elenco dei contenitori presenti nel dipartimento, facendo una ricerca della sostanza chimica in base al:– CAS number– nome o parte di esso– numero univoco della sostanza chimica

– fare un prelievo: selezionare il contenitore scelto, inserire la quantità di sostanza da prelevare, la nuova locazione del contenitore; inserire in automatico la data e l'utente

– Sezione restituzione:– visualizzare l'elenco dei contenitori in prestito dell'utente, facendo una ricerca della

sostanza chimica in base al:– CAS number– nome o parte di esso– numero univoco della sostanza chimica

– restituzione del reagente: selezionare il contenitore scelto, inserire la nuova locazione del contenitore; inserire in automatico la data e l'utente

– Funzionalità accessibili ad un utente di tipo Amministratore:– Sostanza chimica:

– inserire nuova sostanza chimica (nome, cas, formula ,massa molecolare, classe)– modificare sostanza chimica– eliminare sostanza chimica– aggiungere sinonimo del nome (sinonimo, fonte)– modificare sinonimo del nome– eliminare sinonimo del nome– associare/dissociare frase rischio– associare/dissociare frase sicurezza

– Classe:– aggiungere nuova classe (classe)

8

Page 9: Tesi Samo Ziberna

– modificare dati classe– eliminare classe

– Fonte:– aggiungere nuova fonte (nome fonte, url)– modificare dati fonte– eliminare fonte

– Scarto:– inserire nuovo scarto (data stoccaggio, quantità)– smaltisci scarto (data smaltimento)

– Fornitore:– Aggiungere nuovo fornitore (nome, indirizzo, email, telefono, fax)– modificare dati fornitore– eliminare fornitore

– Utente:– Aggiungere nuovo utente (nome, cognome, laboratorio di appartenenza, tipo

abilitazione, usename, password)– modificare dati utente– eliminare utente

– Reagente:– Aggiungere nuovo contenitore (sostanza chimica, capacità del contenitore, fornitore,

data acquisto, data scadenza (opzionale), utente che ha effettuato l'ordine del prodotto, locazione iniziale)

– Visualizzare i reagenti, facendo una ricerca della sostanza chimica in base al:– CAS number– nome o parte di esso– numero univoco della sostanza chimica

– modificare i dati del reagente– eliminare ( cambiare stato + scrivere data eliminazione)

* funzionalità realizzata nella sezione Reagentario → Sostanza Chimica

Tutte le sezioni:– esportare i dati tabellari in un file excel

9

Page 10: Tesi Samo Ziberna

3) Progettazione

Database: Integrazione e modificaConfrontando i due diagrammi E-R esistenti, si identifica come possibile punto d'incontro

dei due database l'entità Sostanza Chimica in FrasiDiRischio, mentre nell'altro diagramma E-R non compare come entità, bensì come attributo “Nome reagente” all'interno dell'entità “Reagente dati fissi”.Confrontando però lo schema fisico del database, si può notare che è già stata creata una tabella separata per il nome reagente chiamata appunto tblNomeReagente.

10

Illustrazione 4: FrasiDiRischio

Illustrazione 3: dbReagentario

Page 11: Tesi Samo Ziberna

Il schema del database finale è basato sugli schemi dei database esistenti.I cambiamenti strutturali apportati sono:

1. la sostituzione della tabella tblNomeReagente con la tabella tblSostanzaChimica (già tblChemical)

2. la separazione degli stati utente e reagente, creando la tabella tblStatoUtente3. l'eliminazione dell'attributo ChemicalNameITA dalla tabella tblChemical4. il raggruppamento delle fonti in un unica tabella tblFonte5. l'eliminazione delle chiavi primarie ID_risk e ID_safety rispettivamente nelle tabelle

tblRiskPhrases e tblSafetyPhrases, sostituendole con le chiavi primarie composte (IDSostanzaChimica,IDFraseRischio) e (IDSostanzaChimica,IDFraseSicurezza)

Elenco dei cambiamenti apportati allo schema fisico:• tblChemical → tblSostanzaChimica

◦ ID_chemical → IDSostanzaChimica◦ ChemicalName → NomeSostanza◦ ChemicalNameITA viene eliminato (i nomi in italiano vengono spostati fra i sinonimi)◦ MW → MassaMolecolare◦ IDClass → IDClasse

• tblRiskPhrasesMeaning → tblFraseRischio◦ ID_risk_meaning → IDFraseRischio◦ Risk_phrase → CodiceFraseRischio◦ risk_phrase_meaning → FraseRischio◦ risk_phrase_meaningITA → FraseRischioITA◦ ID_Risk_Source → IDFonte

• tblSafetyPhrasesMeaning → tblFraseSicurezza◦ ID_Safety_meaning → IDFraseSicurezza◦ Safety_phrases → CodiceFraseSicurezza◦ Safety_phrases_meaning → FraseSicurezza◦ Safety_phrases_meaningITA → FraseSicurezzaITA◦ IDFonte viene aggiunto

• tblRiskPhrases → tblRischio◦ ID_Risk viene eliminato◦ ID_chemical → IDSostanzaChimica◦ ID_risk_meaning → IDFraseRischio◦ ID_risk_source viene eliminato

• tblSafetyPhrases → tblSicurezza◦ ID_safety viene eliminato◦ ID_chemical → IDSostanzaChimica◦ ID_safety_meaning → IDFraseSicurezza

• tblSynonyms → tblSinonimo◦ ID_synonym → IDSinonimo◦ ID_chemical → IDSostanzaChimica◦ Synonym → Sinonimo◦ ID_synonym_references → IDSinonimoFonte

• eliminazione delle tebelle tblRiskPhrasesSource, tblSafetyPhrasesSource, tblSynonymsReference

• unificazione delle fonti in un unica tabella tblFonte• eliminazione della tabella tblNomeReagente• tblReagenteDF:

11

Page 12: Tesi Samo Ziberna

◦ IDNome → IDSostanzaChimica• aggiunto tabella tblStatoUtente

• modificato i stati di tblStato in: 'Attivo', 'Eliminato', 'In prestito'• aggiunto i stati in tblStatoUtente: 'Attivo', 'Sospeso'

Come esempio vengono riportate le sequenti Stored Procedures che verranno maggiormente utilizzate:

spPrestito:Procedura da chiamare per effettuare un prestito di un reagente.

La procedura inserisce una nuova riga nella tabella Prelievo, utilizzando i dati forniti come parametri (IDReagente, Quantità, Username, IDLocazione), mentre per la data del prelievo viene usata la data corrente fornita dal DBMS. Viene inoltre aggiornato lo stato del reagente, passando a 'In prestito' e la quantità residua viene diminuita della quantità specificata.

[spPrestito] @IDReagente as int, @Quantità as float, @Username as nvarchar(16), @IDLocazione as int

BEGIN TRANSACTIONINSERT INTO visPrelievo (IDReagente,DataPrelievo,QuantitàPrelevata,Username) values (@IDReagente,getDate(),@Quantità,@Username)IF @@ERROR <> 0BEGIN

ROLLBACK TRANSACTIONreturn 10

ENDUPDATE visReagenteDV SET QuantitàResidua = QuantitàResidua-@Quantità, IDStato = (SELECT IDStato FROM visStato WHERE Stato = 'In prestito'), IDLocazione = @IDLocazione WHERE IDReagente = @IDReagente;IF @@ERROR <> 0BEGIN

ROLLBACK TRANSACTIONreturn 10

ENDCOMMIT TRANSACTION

12

Illustrazione 5: Schema finale

Page 13: Tesi Samo Ziberna

spRestituzione: Procedura da chiamare per restituire un reagente.

La procedura aggiorna la riga della tabella Prelievo, inserendo la data corrente fornita dal DBMS come data di restituzione. Inoltre aggiorna la tabella del reagente, cambiandone lo stato in 'Attivo' e aggoirnandone la locazione.

[spRestituzione] @IDPrelievo as int, @IDLocazione as int

BEGIN TRANSACTIONUPDATE visPrelievo SET DataRestituzione = getDate() WHERE IDPrelievo = @IDPrelievoIF @@ERROR <> 0BEGIN

ROLLBACK TRANSACTIONreturn 10

ENDUPDATE visReagenteDV SET IDStato = (SELECT IDStato FROM visStato WHERE Stato = 'Attivo'), IDLocazione = @IDLocazione WHERE IDReagente = (SELECT IDReagente FROM visPrelievo WHERE IDPrelievo = @IDPrelievo);IF @@ERROR <> 0BEGIN

ROLLBACK TRANSACTIONreturn 10

ENDCOMMIT TRANSACTION

13

Page 14: Tesi Samo Ziberna

Applicazione

Ecco i casi d'uso principali:

Consultazione frasi Rischio/Sicurezza:Questa parte del sistema sostituirà il catalogo cartaceo delle frasi di rischio e sicurezza, il

quale deve, per obbligo di legge, essere accessibile a chiunque all'interno dei laboratori.

Il sistema deve quindi garantire l'accesso a queste informazioni a chiunque e nel modo più intuitivo e semplice possibile. L'utilizzatore del sistema, infatti, deve poter trovare le frasi di rischio e sicurezza della sostanza chimica desiderata nel minor tempo possibile, poiché si potrebbe trovare in una situazione di pericolosità, nella quale queste informazioni possono scongiurare un ulteriore danno.

Inoltre in questa sezione deve essere previsto un meccanismo di scelta della lingua (italiano o inglese) sia per le frasi di rischio e sicurezza sia per la parte di interfaccia.

Prestito e Restituzione:Questa parte del sistema deve essere accessibile solamente agli operatori di laboratorio

autorizzati. Ogni operatore può effettuare un prestito/prelievo di una o più sostanze chimiche, dette reagenti, scegliendo, in base alla sostanza chimica, il contenitore specifico e inserendo la quantità prelevata e il luogo nel quale il contenitore verrà riposto. Il sistema deve inoltre tenere traccia dell'utente che ha effettuato l'operazione e la data nella quale l'operazione è stata svolta.

Gestione Frasi Rischio/Sicurezza:La parte di Gestione Frasi R/S deve essere raggiungibile solamente da un tipo di utente

specifico, ovvero dall'amministratore. L'amministratore deve poter inserire le frasi di rischio/sicurezza, aggiornarle e eventualmente eliminarle.

14

Gestione Reagentario

AmministratoreOperatore di laboratorio

Gestione Frasi R/S

Gestione Reagente

ConsultazioneFrasi R/S

Gestione SostanzaChimica

chiunque

«uses»

Prestito

Restituzione

«uses»

«uses»

Page 15: Tesi Samo Ziberna

Gestione Reagente:Anche la parte di Gestione Reagente deve essere raggiungibile solamente

dall'amministratore. L'amministratore deve poter inserire un nuovo contenitore di reagente, specificando di quale sostanza chimica si tratta, la capacità del contenitore, la data d'acquisto, l'eventuale data di scadenza, il fornitore che l'ha fornita, il luogo in cui è o sarà riposta e l'operatore di laboratorio che l'ha richiesta.

In questa sezione l'amministratore deve poter modificare i dati del reagente ed eventualmente eliminare il contenitore, il ché comporta l'inserimento in automatico della data di eliminazione e il cambio di stato in “Eliminato”.

Inoltre deve poter visualizzare l'elenco dei reagenti, filtrati in base alla sostanza chimica.

Gestione Sostanza Chimica:In questa parte l'amministratore deve poter inserire una nuova sostanza chimica, il ché

comporta l'inserimento di un nome, del numero CAS, della sua formula chimica, della massa molecolare, della classe di appartenenza. Deve poter inserire eventuali sinonimi dei nomi, le frasi di rischio e sicurezza associate alla sostanza chimica in questione. Inoltre non deve mancare la possibilità di modificare i dati inseriti ed eventualmente eliminarli.

15

Page 16: Tesi Samo Ziberna

Interfaccia utente

Pur avendo a disposizione i codici sorgenti delle applicazioni attualmente a disposizione del dipartimento, le loro interfacce utente sono completamente differenti, quindi si rende così necessario lo sviluppo ex novo dell'interfaccia utente e della logica sottostante.

L'interfaccia utente è stata progettata con l'intento di renderla il più semplice possibile. Si è quindi deciso di creare una struttura a schede; ogni scheda implementa un caso d'uso tra quelli principali. Si è cercato inoltre di rendere le schede le più simili possibili, semplificando così l'apprendimento dell'interfaccia all'utente finale.

Ogni caso d'uso si sviluppa intorno ad una specifica sostanza chimica. Si rende così necessario lo sviluppo di un sistema per il ritrovamento della sostanza chimica desiderata in base al nome (o sinonimo), CAS o all'id. Per mantenere l'interfaccia semplice e snella, si è optato per una sola textBox, nella quale si inserisce la stringa di ricerca desiderata. Il sistema in seguito, analizzando la stringa, capisce il tipo di ricerca da effettuare in base alla composizione della stringa:

• solo lettere → Nome (o sinonimo)• numeri intervallati da “-” → CAS• solo numeri → id

Il risultato della ricerca viene poi rappresentato in una tabella, dalla quale l'utente può scegliere la sostanza chimica desiderata.

Questo sistema di ricerca si ripropone su tutte le schede, infatti ogni scheda ha la possibilità di filtrare la lista delle sostanze chimiche.

16

Illustrazione 6: Flow chart Cerca sostanza chimica

Ricerca sostanza chimica

Operatore di laboratorio Sistema

Visualizza elenco sostanze chimiche

GUI Database

Inserimento stringa di ricerca

Ricerca per Nome e Sinonimo

Trova tipo ricerca

Ricerca per CAS

Ricerca per IDCAS Nome ID

Page 17: Tesi Samo Ziberna

17

Illustrazione 7: Vista Sistema

Cerca sostanzachimica

chiunque

Consultazionefrasi R/S

«uses»Prelievo

Restituzione«uses»

«uses»

Modifica reagente

Gestione Frasi R/S

Inserimento frasiR/S

Cancellazionefrasi R/S

«uses»

«uses»

«uses»

Gestione Reagente

«uses»

«uses»

Inserimento nuovoreagente

«uses»

Cancellazionereagnte

«uses»

«uses»

Gestione SostanzaChimica

Modifica sostanzachimica

Inserimento nuovasostanza chimiva

Cancellazionesostazna chimica

«uses»

«uses»

«uses»

«uses»

«uses»

«uses»

«uses»

«uses»

Gestione Reagentario

Amministratore

Operatore di laboratorio

Page 18: Tesi Samo Ziberna

4) Realizzazione

IntroduzioneIl programma verrà sviluppato utilizzando il linguaggio di programmazione C#,

principalmente appoggiandosi sulla tecnologia .Net.

Sarà diviso in moduli, il modulo principale chiamato DatabaseSql per la gestione della comunicazione con il database MS Sql 2008, il quale verrà esteso dal modulo Reagentariodb. Quest'ultimo raggrupperà tutte le funzioni, specifiche del progetto, di trasmissione dati da e per il database.

Infine verrà sviluppata l'interfaccia grafica di tipo Windows Form.

Diagramma delle classi

18

Page 19: Tesi Samo Ziberna

Classe DatabaseSqlQuesta classe è l'interfaccia (o collegamento) tra l'interfaccia

utente e il database. La classe fornisce le funzionalità base di comunicazione con il database: la connessione e l'esecuzione di query pre-formattate.

La classe usa il provider di dati .Net di SQL Server.

Tratto dal supporto tecnico della Microsoft (http://msdn.microsoft.com/it-it/library/system.data.sqlclient(VS.80).aspx):

“Lo spazio dei nomi System.Data.SqlClient è il provider di dati .NET Framework di SQL Server. Il provider di dati .NET Framework di SQL Server descrive un insieme di classi utilizzate per accedere a un database SQL Server nello spazio gestito. Mediante l'oggetto SqlDataAdapter, è possibile inserire dati in un oggetto DataSet residente in memoria, utilizzabile per eseguire query e aggiornare il database.”

Funzioni principali:public DataTable getCashedData(String query)

funzione basata sul dataAdapter per query di tipo SELECT

public int executeStoredProcedure(String nome, String[] parametersNamesIN, Object[] parametersIN)

funzione per eseguire le stored procedures.public void setInDatabase(String query)public int setInDatabase(String query, Object[] parameters)

funzioni create per eseguire query, le quali non necessitano di dati di ritorno (insert/update)

public ArrayList getFromDatabase(String query, Object[] parameters)public ArrayList getFromDatabase(String query)

funzioni create per eseguire SELECT, restituisce un ArrayList

Classe ReagetariodbQuesta classe è una estensione della classe DatabaseSql. È realizzata specificamente come

contenitore di tutte le query specifiche del database Reagentario.

Classe ExportToExcelLa classe statica ExportToExcel è costituita da due metodi statici:

Export e ExportWithDialog.

La funzione Export crea una connessione usando la tecnologia OleDb connettendosi a excel, usando il provider “Microsoft.Jet.OLEDB.4.0”, inserendo come Data Source il path del file e specificando come proprietà aggiuntiva “Excel 8.0” e HDR=YES. La stringa di connessione si presenta così: Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\nomeCartella\nomeFile.xls;Extended Properties='Excel 8.0;HDR=Yes'

19

DatabaseSqlClass

Fields

columnsNamesdbCommanddbCommandBuilderdbConnectiondbDataAdapter

Properties

ColumnsNames

Methods

closeSqlConnectionDatabaseSqlexecuteStoredProcedurefloatToSqlStringgetCashedDatagetDatabaseMetaDatagetFromDatabase (+ 1 overload)isConnectionOpenopenSqlConnectionsetInDatabase (+ 1 overload)validaStringPerQuery

ExportToExcelStatic Class

Methods

ExportExportWithDialogGetColumnType

Page 20: Tesi Samo Ziberna

La funzione ExportWithDialog invece visualizza un SaveFileDialog, ne aspetta il risulatato → salva i dati usando il metodo Export con il path specificato dall'utente.

public static void Export(DataTable tbl, string filePath) {

... using (OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes'")) { con.Open();

OleDbCommand cmd; // Crea la tabella

string columns = ""; string values = ""; for (int i = 0; i < tbl.Columns.Count - 1; i++) { columns += tbl.Columns[i].ColumnName; columns += " " + GetColumnType(tbl.Columns[i]) + ", "; //there is more columns to add values += "@p" + i + ", "; } columns += tbl.Columns[tbl.Columns.Count - 1].ColumnName; columns += " " + GetColumnType(tbl.Columns[tbl.Columns.Count - 1]); //Close insert values += "@p" + (tbl.Columns.Count - 1);

string sql = String.Format("CREATE TABLE {0} ({1})", tableName, columns); cmd = new OleDbCommand(sql, con); cmd.ExecuteNonQuery();

string sqlInsert = String.Format("Insert into [{0}] VALUES ({1})", tableName, values); foreach (DataRow row in tbl.Rows) { cmd = new OleDbCommand(sqlInsert, con); for (int i = 0; i < tbl.Columns.Count; i++) { cmd.Parameters.AddWithValue("@p" + i, row[i]); } cmd.ExecuteNonQuery(); cmd.Dispose(); } con.Close(); con.Dispose(); } }

Classe UserQuesta classe è stata creata per la gestione dell'utente che sta

accedendo al sistema. Gestisce l'autenticazione e lo stoccaggio dei dati dell'utente corrente.

20

UserStatusEnum

UserAdministratorUnauthorizedInexistent

UserClass

Fields

abilitazionecognomelaboratorionomereagentariostatousername

Properties

AbilitazioneCognomeLaboratotioNomeStatoStatusUsername

Methods

deleteUsergetUserDatagetUserStatusisAdministratorisUserUser

status

Page 21: Tesi Samo Ziberna

Interfaccia utente

L'interfaccia utente (GUI) è di tipo Windows Form. La finestra principale, chiamata FormPrincipale, racchiude il menu e tutte le funzioni primarie dell'applicazione.

Per le funzionalità principali si è scelto di creare una interfaccia a “schede” utilizzando il controllo TabControl, mentre le funzioni di gestione che verranno meno utilizzate dagli utenti del sistema verranno realizzate in form separate, accessibili tramite specifici menu.

Ogni scheda dunque racchiude una funzionalità principale, contraddistinta da un maggiore utilizzo.

Il numero di schede cambia in relazione all'autorizzazione del singolo utente.

Ci sono tre tipi di utenti previsti: utente sconosciuto o “chiunque”, operatore di laboratorio e amministratore.

Ogni utente ha accesso all'archivio delle frasi di rischio e sicurezza.

All'apertura dell'applicazione l'utente ha a disposizione due schede, la scheda di consultazione delle frasi di rischio e sicurezza e la scheda di LogIn.

Scheda Rischio/SicurezzaDescrizione:

Già all'apertura del programma la finestra si presenta sulla sezione “Consultazione Frasi Rischio e Sicurezza”. Questa scheda è dunque accessibile a chiunque.

In questa scheda c'è l'elenco di tutte le sostanze chimiche inserite nel database.

Precondizione:

(nessuna)

Funzionalità accessibili:

• visualizzare le frasi di rischio e sicurezza delle sostanze chimiche1. (opzionale) filtrare la tabella delle sostanze chimiche in base ad una stringa (per nome,

CAS, ID)

2. selezionare la sostanza chimica desiderata dalla tabella delle sostanze chimiche → le frasi di rischio e sicurezza compaiono immediatamente nelle rispettive tabelle

21

Page 22: Tesi Samo Ziberna

Scheda Log InPer differenziare gli utenti, si rende necessario un meccanismo di identificazione.

Si opta per un meccanismo di identificazione molto semplice, ricreando lo stesso tipo di identificazione già esistente nell'applicazione “Reagentario 1.0”. Essa si basa su di una tabella del database, nella quale è specificata la coppia di username e password associati all'utente e il suo grado di permesso (operatore o amministratore).

Si rende così necessario la creazione di un modulo per la identificazione dell'utente → si crea una scheda con due textBox di input e un bottone di convalida.

Dopo l'inserimento da parte dell'utente della sua coppia username/password, il sistema provvede al confronto di tali dati con i dati inseriti precedentemente in database. Se i dati corrispondono, si controlla il grado di autorizzazione dell'utente e di conseguenza si attivano le corrispondenti schede.

Il sistema inoltre memorizza le credenziali dell'utente, che verranno poi utilizzate come dati nell'esecuzione delle funzioni che le richiedono (ad esempio per le funzioni Prelievo e Prestito).

Segue una lista delle finestre/schermate accessibili solamente ad utenti autorizzati previo inserimento di username e password:

Scheda ResoDescrizione:

La scheda contiene una tabella di tutti i reagenti attualmente in prestito dall'utente. In questa scheda l'utente può restituire un reagente (contenitore).

Precondizione:

• utente autorizzato (operatore o amministratore)

Funzionalità accessibili:

• visualizzazione di tutti i reagenti in prestito dell'utente, divisi per sostanza chimica

• restituzione reagente:1. (opzionale) filtrare la tabella delle sostanze chimiche in base ad una stringa (per

22

Page 23: Tesi Samo Ziberna

nome, CAS, ID)

2. selezionare la sostanza chimica desiderata dalla tabella delle sostanze chimiche

3. selezionare il reagente (contenitore) desiderato dalla tabella dei reagenti attualmente in prestito dall'utente

4. click-destro del mouse → Restituisci => si apre una finestra modale, nella quale l'utente deve specificare dove riporrà o ha già riposto il contenitore scelto

Scheda PrelievoDescrizione:

La scheda contiene l'elenco di tutti i reagenti attualmente disponibili al prelievo.

Precondizione:

• utente autorizzato (operatore o amministratore)

Funzionalità accessibili:

• visualizzazione di tutti i reagenti disponibili al prestito, divisi per sostanza chimica

• prelievo di un reagente:1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. selezionare il reagente (contenitore) desiderato dalla lista degli reagenti attualmente disponibili (stato del reagente = 'Attivo')

4. click-destro del mouse -> Preleva => si apre una finestra modale, nella quale l'utente deve specificare la quantità che desidera prelevare e dove riporrà il contenitore scelto

23

Page 24: Tesi Samo Ziberna

Scheda Gestione ReagentiDescrizione:

La scheda contiene l'elenco di tutti i reagenti registrati (presenti ed eliminati) del dipartimento.

Precondizione:

• utente autorizzato, di grado amministratore

Funzionalità accessibili:

• visualizzazione di tutti i reagenti registrati, divisi per sostanza chimicaIn questa scheda c'è inoltre la possibilità di filtrare i risultati delle liste (sostanze chimiche e reagenti) in base allo stato del reagente selezionando la checkBox "filtra per stato" e le checkBox degli stati che si vuole visualizzare.Ad esempio: se si seleziona i chechBox "filtra per stato", "Attivo" e "In prestito", si riduce la tabella delle sostanze chimiche, e di conseguenza la tabella dei reagenti, a tutte e sole le sostanze chimiche attualmente presenti in dipartimento.

• aggiungere un nuovo reagente:

1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa o in base ad uno o più stati (“Attivo”, “In prestito”, “Eliminato”)

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. click-destro del mouse sulla tabella dei reagenti (anche se vuota) → Aggiungi => si apre una finestra modale, nella quale l'utente deve inserire i dati del nuovo reagente

• modificare un reagente:1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa o in base ad

uno o più stati (“Attivo”, “In prestito”, “Eliminato”)

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. selezionare il reagente desiderato

4. click-destro del mouse → Modifica => si apre una finestra modale, nella quale l'utente può modificare i valori del reagente

24

Page 25: Tesi Samo Ziberna

• eliminare un reagente (cambiare lo stato del reagente in "Eliminato", non cancellare fisicamente il reagente):

1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa o in base ad uno o più stati

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. selezionare il reagente desiderato

4. click-destro del mouse → Elimina=> si apre una finestra di richiesta di conferma dell'operazione

Scheda Gestione Sostanza ChimicaDescrizione:

Questa scheda è stata sviluppata per la funzione di gestione delle sostanze chimiche, ovvero l'inserimento di nuove sostanze, la modifica e l'eliminazione.

Questa scheda è composta da quattro tabelle: sostanza chimica, sinonimo, frase rischio, frase sicurezza.

Precondizione:

• utente autorizzato, di grado amministratore

Funzionalità accessibili:

• aggiungere nuova sostanza chimica:1. click-destro del mouse sulla tabella delle sostanze chimiche (anche se vuota) → Nuova

=> si apre una finestra modale, nella quale l'utente deve inserire i dati della nuova sostanza chimica

• modificare sostanza chimica1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

25

Page 26: Tesi Samo Ziberna

3. premere il bottone Modifica → i textBox della sezione Sostanza Chimica Selezionata diventano modificabili

4. premere il bottone Salva → le modifiche vengono salvate e i textBox della sezione Sostanza Chimica Selezionata diventano non-modificabili

• eliminare sostanza chimica1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. click-destro del mouse → Elimina=> si apre una finestra di richiesta di conferma dell'operazione

• aggiungere sinonimo1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. click-destro del mouse sulla tabella sinonimi (anche se vuota) → Aggiungi => si apre una finestra modale, nella quale l'utente può inserire il sinonimo

• modificare sinonimo1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. selezionare il sinonimo desiderato dalla tabella sinonimi

4. click-destro del mouse sulla tabella sinonimi → Modifica => si apre una finestra modale, nella quale l'utente può modificare il sinonimo

• eliminare sinonimo1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. selezionare il sinonimo desiderato dalla tabella sinonimi

4. click-destro del mouse sulla tabella sinonimi → Elimina => si apre una finestra di richiesta di conferma dell'operazione

• aggiungere frase di rischio1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. click-destro del mouse sulla tabella frasi di rischio (anche se vuota) → Aggiungi => si apre una finestra modale contente la tabella delle frasi di rischio conosciute, nella quale l'utente può scegliere una o più righe da inserire

• aggiungere frase di sicurezza(come sopra, sostituendo “rischio” con “sicurezza”)

• eliminare frase di rischio1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa

2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

3. selezionare la frase di rischio desiderata

4. click-destro del mouse sulla tabella frasi di rischio → Elimina=> si apre una finestra di

26

Page 27: Tesi Samo Ziberna

richiesta di conferma dell'operazione

• eliminare frase di sicurezza (come sopra, sostituendo “rischio” con “sicurezza”)

Scheda Gestione ScartiDescrizione:

Questa scheda copre l'esigenza degli amministratori del magazzino di gestire gli scarti delle sostanze chimiche. Questa scheda è composta da due tabelle: la tabella degli scarti da smaltire e quella degli scarti già smaltiti.

Precondizione:

• utente autorizzato, di grado amministratore

Funzionalità accessibili:

• inserire nuovo scarto:1. click-destro del mouse sulla tabella “scarti da smaltire” → Nuovo => si apre una

finestra modale, nella quale l'utente deve inserire la quantità e selezionando l'unità di misura dello scarto.

• smaltire uno scarto:1. selezionare una riga della tabella “scarti da smaltire”

2. click-destro del mouse sulla tabella → Smaltisci => si apre una finestra di conferma dell'operazione

In entrambi i casi il sistema provvede automaticamente all'inserimento delle date, rispettivamente di stoccaggio e smaltimento.

27

Page 28: Tesi Samo Ziberna

Scheda Log OutLa scheda di Log Out è costituita da un bottone per il log-out dal sistema. Una volta premuto

il bottone, il sistema provvede a chiudere tutte le schede aperte (tranne quella delle Frasi di rischio e sicurezza).

Seguono le form raggiungibili tramite il menu, visibile solamente ad un utente abilitato di grado amministratore. Tutti i seguenti form di gestione sono simili. Si basano su una tabella ed un menu con i bottoni Nuovo, Modifica, Elimina. Per questo motivo si è scelto di descriverne in dettaglio solamente uno.

Form GestioneFrasiRSDescrizione:

Finestra per la gestione delle frasi di rischio e sicurezza.

Precondizione:

• utente autorizzato, di grado amministratore

Funzionalità accessibili:

• inserimento di una nuova frase di rischio1. premere dal menu la voce Nuova → si apre una finestra modale per l'inserimento della

nuova frase

• inserimento di una nuova frase di sicurezza(come sopra)

• modifica di una frase di rischio1. selezionare la riga desiderata della tabella delle frasi di rischio

2. premere dal menu la voce Modifica → si apre una finestra modale per l'inserimento delle modifica sui dati della frase

28

Page 29: Tesi Samo Ziberna

• modifica di una frase di sicurezza(come sopra)

• eliminazione di una frase di rischio1. selezionare la riga desiderata della tabella delle frasi di rischio

2. premere dal menu la voce Elimina → si apre una finestra di conferma dell'operazione

• eliminazione di una frase di sicurezza(come sopra)

29

Page 30: Tesi Samo Ziberna

5) Conclusioni

Gli obbiettivi principali, cioè l'unificazione dei due database e lo sviluppo dell'interfaccia grafica per la gestione dei dati sono stati soddisfatti.

Sono state realizzate tutte le funzionalità richieste affinché, dopo una fase di test, ci sia la possibilità di un immediato utilizzo del sistema.

L'obbiettivo secondario, ovvero mantenere funzionanti gli applicativi esistenti dopo l'unificazione dei database, non è stato possibile, perché i due applicativi fanno riferimento alle strutture fisiche dei database.

Quantificazione del lavoroIl lavoro si è svolto dal 22/02/2010 al 25/06/2010 per una durata stimata di 300 ore (~ 3 ore

al giorno per 5 giorni alla settimana).In questo tempo è stato progettato e sviluppato:

Il database “Reagentario”, composto da:• 20 tabelle• 23 viste• 5 stored procedures

L'applicazione WindowsForm “Gestione Reagentario”, composto da:• 16 form

• 1 form pricipale contente 8 “schede”• 10 maschere inserimento dati• 5 form di gestione

• ~ 8000 linee di codice

Sviluppi futuri1. Installazione dell'applicazione e della base di dati e collaudo2. Importazione dati reali del magazzino3. Sviluppo di un sistema di autentificazione a livello database

30

Page 31: Tesi Samo Ziberna

6) Bibliografia

• Tesi di laurea “Progettazione e sviluppo di un'applicazione per la gestione di un laboratorio chimico e delle schede di sicurezza” di Andrea Sauli

• Tesi di laurea “Progettazione e sviluppo di una base di dati per la gestione di informazioni sul rischio chimico di solventi” di Francesco Paglia

• http://it.wikipedia.org/wiki/Frasi_S

• http://it.wikipedia.org/wiki/Frasi_R

• http://www.codemaker.co.uk/it/tips/ado_conn.htm

• http://msdn.microsoft.com/it-it/library/default.aspx

• http://en.csharp-online.net/TabControl

31