Sei sulla pagina 1di 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
2
Indice generale
1) Introduzione.....................................................................................................................................4
Vincoli di progetto.......................................................................................................................4
2) Analisi..............................................................................................................................................6
Introduzione....................................................................................................................................6
Situazione preesistente....................................................................................................................6
Database......................................................................................................................................7
Requisiti..........................................................................................................................................9
3) Progettazione..................................................................................................................................11
Database: Integrazione e modifica................................................................................................11
Applicazione.................................................................................................................................15
Consultazione frasi Rischio/Sicurezza:................................................................................15
Prestito e Restituzione:.........................................................................................................15
Gestione Frasi Rischio/Sicurezza:........................................................................................15
Gestione Reagente:...............................................................................................................16
Gestione Sostanza Chimica:.................................................................................................16
Interfaccia utente...........................................................................................................................17
4) Realizzazione.................................................................................................................................19
Introduzione..................................................................................................................................19
Diagramma delle classi.................................................................................................................19
Classe DatabaseSql...................................................................................................................20
Classe Reagetariodb..................................................................................................................20
Classe ExportToExcel...............................................................................................................20
Classe User................................................................................................................................21
Interfaccia utente...........................................................................................................................22
Scheda Rischio/Sicurezza.....................................................................................................22
Scheda Log In.......................................................................................................................23
Scheda Reso.........................................................................................................................23
Scheda Prelievo....................................................................................................................24
Scheda Gestione Reagenti....................................................................................................25
Scheda Gestione Sostanza Chimica.....................................................................................26
Scheda Gestione Scarti.........................................................................................................28
Scheda Log Out....................................................................................................................29
Form GestioneFrasiRS.........................................................................................................29
5) Conclusioni....................................................................................................................................31

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

3
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
2) Analisi

Introduzione
In 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 preesistente
Il 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
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.

Database
Essendo 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.

Illustrazione 1: Diagramma E-R Frasi di Rischio

6
Illustrazione 2: Diagramma E-R dbReagentario

7
Requisiti
Segue 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
– 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
3) Progettazione

Database: Integrazione e modifica


Confrontando 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.

Illustrazione 3: dbReagentario

Illustrazione 4: FrasiDiRischio

10
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 tblStatoUtente
3. l'eliminazione dell'attributo ChemicalNameITA dalla tabella tblChemical
4. il raggruppamento delle fonti in un unica tabella tblFonte
5. 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
◦ IDNome → IDSostanzaChimica
• aggiunto tabella tblStatoUtente

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


• aggiunto i stati in tblStatoUtente: 'Attivo', 'Sospeso'

Illustrazione 5: Schema finale

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 TRANSACTION
INSERT INTO visPrelievo (IDReagente,DataPrelievo,QuantitàPrelevata,Username) values
(@IDReagente,getDate(),@Quantità,@Username)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
return 10
END
UPDATE visReagenteDV SET QuantitàResidua = QuantitàResidua-@Quantità, IDStato = (SELECT IDStato
FROM visStato WHERE Stato = 'In prestito'), IDLocazione = @IDLocazione WHERE IDReagente =
@IDReagente;
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
return 10
END
COMMIT TRANSACTION

12
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 TRANSACTION
UPDATE visPrelievo SET DataRestituzione = getDate() WHERE IDPrelievo = @IDPrelievo
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
return 10
END
UPDATE visReagenteDV SET IDStato = (SELECT IDStato FROM visStato WHERE Stato = 'Attivo'),
IDLocazione = @IDLocazione WHERE IDReagente = (SELECT IDReagente FROM visPrelievo WHERE
IDPrelievo = @IDPrelievo);
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
return 10
END
COMMIT TRANSACTION

13
Applicazione

Ecco i casi d'uso principali:

Gestione Reagentario

«uses»
Consultazione Gestione Frasi R/S
Frasi R/S

chiunque «uses»
Prestito

Gestione Reagente
«uses»

Restituzione

Gestione Sostanza Amministratore


Operatore di laboratorio Chimica

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 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
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.

Operatore di laboratorio GUI Sistema Database

Ricerca sostanza chimica

Inserimento stringa di ricerca Trova tipo ricerca

CAS Nome ID Ricerca per ID

Ricerca per Nome e Sinonimo

Visualizza elenco sostanze chimiche Ricerca per CAS

Illustrazione 6: Flow chart Cerca sostanza chimica

16
Gestione Reagentario

Inserimento frasi «uses»


R/S

«uses»
Cancellazione Gestione Frasi R/S
frasi R/S
«uses»

Consultazione
frasi R/S
chiunque

Prelievo
«uses»

«uses»
«uses»
Operatore di laboratorio Restituzione
«uses»
«uses»

«uses»
«uses» Gestione Reagente
Cerca sostanza Inserimento nuovo
chimica reagente
«uses» «uses»

«uses» «uses»
Modifica reagente Amministratore

«uses»
Cancellazione
«uses» reagnte

Modifica sostanza
chimica «uses»

«uses»
Cancellazione Gestione Sostanza
sostazna chimica Chimica
«uses»

Inserimento nuova
sostanza chimiva

Illustrazione 7: Vista Sistema

17
4) Realizzazione

Introduzione
Il 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
Classe DatabaseSql DatabaseSql
Class
Questa classe è l'interfaccia (o collegamento) tra l'interfaccia
Fields
utente e il database. La classe fornisce le funzionalità base di
columnsNames
comunicazione con il database: la connessione e l'esecuzione di query dbCommand
pre-formattate. dbCommandBuilder
dbConnection
La classe usa il provider di dati .Net di SQL Server. dbDataAdapter
Properties
Tratto dal supporto tecnico della Microsoft (http://msdn.microsoft.com/it- ColumnsNames
it/library/system.data.sqlclient(VS.80).aspx):
Methods

“Lo spazio dei nomi System.Data.SqlClient è il provider di dati .NET closeSqlConnection


DatabaseSql
Framework di SQL Server. executeStoredProcedure
floatToSqlString
Il provider di dati .NET Framework di SQL Server descrive un getCashedData
insieme di classi utilizzate per accedere a un database SQL Server getDatabaseMetaData
nello spazio gestito. Mediante l'oggetto SqlDataAdapter, è possibile getFromDatabase (+ 1 overload)
isConnectionOpen
inserire dati in un oggetto DataSet residente in memoria, utilizzabile openSqlConnection
per eseguire query e aggiornare il database.” setInDatabase (+ 1 overload)
validaStringPerQuery

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 Reagetariodb
Questa classe è una estensione della classe DatabaseSql. È realizzata specificamente come
contenitore di tutte le query specifiche del database Reagentario.

Classe ExportToExcel ExportToExcel


Static Class

La classe statica ExportToExcel è costituita da due metodi statici: Methods


Export e ExportWithDialog. Export
ExportWithDialog
La funzione Export crea una connessione usando la tecnologia OleDb GetColumnType
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
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();
}
}

User
Class

Classe User Fields UserStatus


Enum
abilitazione

Questa classe è stata creata per la gestione dell'utente che sta cognome
laboratorio
status
User
Administrator

accedendo al sistema. Gestisce l'autenticazione e lo stoccaggio dei dati nome


reagentario
Unauthorized
Inexistent
stato
dell'utente corrente. username
Properties
Abilitazione
Cognome
Laboratotio
Nome
Stato
Status
Username
Methods
deleteUser
getUserData
getUserStatus
isAdministrator
isUser
User

20
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/Sicurezza
Descrizione:
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 chimiche
1. (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
Scheda Log In
Per 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 Reso
Descrizione:
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
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 Prelievo
Descrizione:
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
Scheda Gestione Reagenti
Descrizione:
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 chimica
In 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
• 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 Chimica


Descrizione:
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 chimica
1. (opzionale) filtrare la lista delle sostanze chimiche in base ad una stringa
2. selezionare la sostanza chimica desiderata dalla lista delle sostanze chimiche

25
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 chimica
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. click-destro del mouse → Elimina=> si apre una finestra di richiesta di conferma
dell'operazione
• aggiungere sinonimo
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. 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 sinonimo
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 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 sinonimo
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 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 rischio
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. 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 rischio
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 la frase di rischio desiderata
4. click-destro del mouse sulla tabella frasi di rischio → Elimina=> si apre una finestra di
26
richiesta di conferma dell'operazione
• eliminare frase di sicurezza
(come sopra, sostituendo “rischio” con “sicurezza”)

Scheda Gestione Scarti


Descrizione:
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
Scheda Log Out
La 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 GestioneFrasiRS
Descrizione:
Finestra per la gestione delle frasi di rischio e sicurezza.
Precondizione:
• utente autorizzato, di grado amministratore
Funzionalità accessibili:
• inserimento di una nuova frase di rischio
1. 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 rischio
1. 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
• modifica di una frase di sicurezza
(come sopra)
• eliminazione di una frase di rischio
1. 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
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 lavoro


Il 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 futuri
1. Installazione dell'applicazione e della base di dati e collaudo
2. Importazione dati reali del magazzino
3. Sviluppo di un sistema di autentificazione a livello database

30
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