Tesi Samo Ziberna
-
Upload
ziberna2500 -
Category
Documents
-
view
182 -
download
1
Transcript of 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
2
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
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
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
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
7
Illustrazione 2: Diagramma E-R dbReagentario
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
– 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 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
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
◦ 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
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
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»
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.
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
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
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
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
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
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
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
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
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
• 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
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
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
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
• 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
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
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