+ All Categories
Home > Documents > Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Date post: 18-Dec-2014
Category:
Upload: stefano-pacchiega
View: 127 times
Download: 0 times
Share this document with a friend
Description:
 
51
UNIVERSITÀ DEGLI STUDI DI TRIESTE DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA CORSO DI LAUREA TRIENNALE IN INGEGNERIA DELL'INFORMAZIONE CURRICULUM INFORMATICA REALIZZAZIONE DI UNA BASE DI DATI E UN APPLICATIVO WEB PER LA GESTIONE DI TRADUZIONI Laureando: Relatore:
Transcript
Page 1: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

UNIVERSITÀ DEGLI STUDI DI TRIESTE

DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA

CORSO DI LAUREA TRIENNALE IN INGEGNERIA DELL'INFORMAZIONE

CURRICULUM INFORMATICA

REALIZZAZIONE DI UNA BASE DI DATI E UN APPLICATIVO WEB PER LA GESTIONE DI TRADUZIONI

Laureando: Relatore:

STEFANO PACCHIEGA CHIAR.MO PROF. MAURIZIO FERMEGLIA

Page 2: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

ANNO ACCADEMICO 2012/2013

INDICE DEI CONTENUTI

CAPITOLO 1 INTRODUZIONE 4

CAPITOLO 2 ANALISI2.1 Intervista al cliente2.2 Analisi del sistema2.3 Analisi dettagliata dei casi d’uso 2.3.1 L’utente 2.3.2 Il traduttore 2.3.3 L’admin

66710101010

CAPITOLO 3 LA BASE DI DATI3.1 Progettazione3.2 Realizzazione

111115

CAPITOLO 4 LA WEB APPLICATION4.1 Progettazione4.2 Il Data Binding4.3 Il Login4.4 Pagine utente 4.4.1 Home utente 4.4.2 Richiesta traduzione di un testo 4.4.3 Richiesta traduzione di un file 4.4.4 Visualizzazione traduzione4.5 Pagine traduttore 4.5.1 Home traduttore 4.5.2 Caricamento di una traduzione4.6 Pagine admin4.7 Sistema di notifiche per utenti

1616171719192224253030313336

2

Page 3: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 5 CONCLUSIONE5.1 Possibililità di implementazione5.2 Integrazione futura

373839

CAPITOLO 6 BIBLIOGRAFIA E SITOGRAFIA 40

3

Page 4: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 1

Introduzione

Lo scopo di questa tesi è la creazione di una base dati e la creazione di un applicativo web per la gestione di traduzioni.

In particolare si vogliono fornire servizi diversi per 3 “entità”:

- Gli utenti potranno richiedere un testo o file da tradurre;

- I traduttori potranno decidere se operare sui lavori e in caso affermativo fare l’upload della traduzione;

- L’admin gestirà le traduzioni, si occuperà dell’associazione testo/traduttore e darà una valutazione degli elaborati finali.

Nei capitoli successivi si mostrerà in dettaglio come è stato implementato il sistema:

Nella sezione dedicata all’analisi verranno trattati gli argomenti relativi alla verifica dei requisiti e della situazione iniziale. Verranno quindi definite le basi di un sistema informativo.

Nella parte di progettazione si esamineranno gli schemi relativi alla creazione del database con la documentazione associata e la struttura dell’applicazione web

Nel capitolo conclusivo si tratterà i risultati dell’elaborato e i possibili miglioramenti ed implementazioni.

I vincoli progettuali sono rappresentati dall’utilizzo delle tecnologie .NET, del linguaggio di programmazione C# e del linguaggio di markup HTML5.

Gli obiettivi della realizzazione consistono in:

Analizzare i requisiti da parte del committente (intervista); Analizzare la struttura del sistema informativo; Analizzare e progettare la base dati; Analizzare e progettare la web application tramite le tecnologie .NET, ASP.NET, C# e

HTML5;

4

Page 5: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Studiare le iterazioni fra base dati ed applicazione.

Tutti i moduli software di questo documento sono stati creati dall’autore e sono stati sviluppati mediante i software:

- SQL Server Management Studio 2012- Visual Studio 2012- Visio 2013

5

Page 6: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 2

Analisi

2.1 Intervista al cliente

A seguito di una prima intervista al committente, il primo dato ottenuto consiste nella mancanza di un sistema preesistente da implementare. Perciò si ha la necessità di realizzare un nuovo sistema.

Le richieste del committente sono:

La creazione di una base dati per la gestione delle traduzioni; La creazione di un applicativo web universale che permetta agli utenti (registrati) di

richiedere una traduzione tramite file o TextBox; La creazione di un applicativo web universale che consenta ai traduttori di vedere le

richieste di traduzione (assegnate dall’amministratore) e di caricare le traduzioni completate;

La creazione di un applicativo web universale che permetta all’amministratore di gestire le traduzioni in modo tale da poter assegnare traduttori e traduzioni e di poter valutare gli elaborati finali.

La creazione di un sistema di Login per accedere alle 3 applicazioni precedenti l’unione attraverso una singola finestra.

6

Page 7: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

2.2 Analisi del sistema

Gli attori fondamentali sono 3:

- L’utente (il richiedente la traduzione)- Il traduttore- L’amministratore

L’utente dovrà unicamente inserire il testo da tradurre (potrà anche valutare lo storico delle sue richieste cosi da trovare eventuali traduzioni).

7

Page 8: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Il traduttore potrà accettare le traduzioni offerte dall’amministratore e potrà caricarle tramite la web application una volta completate.

L’amministratore potrà assegnare le traduzioni a traduttori e potrà visualizzare tutti i dati.

Il DIAGRAMMA DELLE ATTIVITA’ può essere diviso in più fasi:

1) L’utente carica il testo da tradurre2) L’admin valuta i dati e assegna ad un traduttore un testo di tipo “pending”3) Il traduttore decide se tradurre il testo o rifiutare l’incarico. Eventualmente, in caso di

consenso, carica la traduzione.

8

Page 9: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

9

Page 10: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

2.3 Analisi dettagliata dei casi d’uso

2.3.1 Analisi dettagliata del caso d’uso dell’utente

Il principale caso d’uso dell’utente è quello che lo porta all’inserimento di una nuova richiesta di traduzione.

1) Effettua il login;2) Inserisce una nuova richiesta di traduzione che può essere un testo semplice o un file;3) Compila il form della richiesta;4) Attende risposta da parte del sistema dell’update dello stato in cui si trova la sua

traduzione;5) Valuta le tradizioni completate (tradotte e revisionate).

2.3.2 Analisi dettagliata del caso del traduttore

Il principale caso d’uso del traduttore è quello che lo porta al accettare una traduzione e all’inserimento della stessa.

1) Effettua il login;2) Valuta nella pagina di “storico” i lavori in attesa di risposta (Pending, in attesa del

traduttore);3) Il traduttore accetta o rifiuta il lavoro;4) Se il traduttore accetta il lavoro, può caricarne la traduzione.

2.3.3 Analisi dettagliata del caso d’uso dell’admin

Di seguito i passaggi effettuati dall’admin:

1) Effettua il login;2) Valuta nella pagina dello storico i lavori.3) Se un lavoro è nello stato “in attesa di assegnazione” l’admin può associare un possibile

traduttore;4) Se un lavoro è nello stato “tradotto, in attesa di revisione” l’admin può revisionare il

lavoro e giudicarne l’idoneità;5) Se il lavoro è nello stato “tradotto e revisionato” può valutarne la traduzione.

10

Page 11: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 3

La base di dati

3.1) Progettazione della base di dati

Una volta raccolte le informazioni ottenute dall’intervista al committente è stato redatto un primo glossario dei termini.

Termine Descrizione Sinonimi Collegamenti

UtenteColui che richiede una

traduzioneUser Testo

TestoInsieme di parole che il

cliente desidera tradurreFile, Brano,

LavoroUtente, Traduzione

Traduttore Colui che traduce il testo Traduzione, Lingue

TraduzioneTraduzione del Testo fatta

da parte del traduttoreTesto, Traduttore

LingueLe lingue conosciute dal

traduttore e richieste nella traduzione.

Traduttore,Testo

Grazie a questi dati possiamo creare uno schema concettuale E-R.

In realtà “File” e “Brano” in un secondo momento non verranno considerati sinonimi del termine “Testo”, ma avranno una diversa concezione. Con “File” infatti verrà preso in considerazione un file vero e proprio con estensione, ad esempio .txt o .pdf, mentre con “Brano” verrà considerata una parte di testo da tradurre.

11

Page 12: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Si mette ora in evidenza l’analisi delle principali entità.

Utente

ID UtenteÈ il codice univoco che viene assegnato all’utente.

È candidato ad essere chiave primaria dell’entità “utente”

Nome È il nome dell’utente

Cognome È il cognome dell’utente

E-mail L’e-mail del cliente

CREDENZIALI User e password per il login (ATTRIBUTO COMPOSTO)

Traduttore

ID TraduttoreÈ il codice univoco che viene assegnato al traduttore.

È candidato ad essere chiave primaria dell’entità “traduttore”

Nome È il nome del traduttore

Cognome È il cognome del traduttore

E-mail L’e-mail del traduttore

CREDENZIALI User e password per il login (ATTRIBUTO COMPOSTO)

Testo

12

Page 13: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

ID LavoroÈ il codice univoco che viene assegnato al brano.

È candidato ad essere chiave primaria dell’entità “Testo”

File E’ il nome del file

Testo È il brano

Data di aggiunta La data di aggiunta del lavoro

Scadenza La data di scadenza del lavoro

13

Page 14: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Lingue

ID LingueÈ il codice univoco che viene assegnato alla lingua.

È candidato ad essere chiave primaria dell’entità “Lingue”

Lingua È la lingua

14

Page 15: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Stato

ID statoÈ il codice univoco che viene assegnato allo stato del lavoro.

È candidato ad essere chiave primaria dell’entità “Stato”

Tipo Stato È lo stato in cui si trova il lavoro

15

Page 16: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

16

Page 17: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

17

Page 18: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

3.2) Progettazione della base dati

Il database è stato realizzato con SQL Server Management Studio 2012 ed è formato da 12 tabelle e 4 viste.

Il suo diagram è:

TblConoscenzaTraduttore

Lingua

TblLinguaIDLingua

Lingua

TblUtenteIDUtente

NomeUtente

CognomeUtente

EMailUtente

TblRichiestaUtente

Testo

TblStatoTotaleIDStato

TipoStato

TblStatoProgettoStato

Testo

TblStatoTIDStato

TipoStato

TblTraduzTraduttore

Testo

Stato

TestoTradotto

FileTradotto

TblCredenzialiTraduttoriID

Utente

Password

TblCredenzialiUtenteID

Utente

Password

TblTraduttoreIDTraduttore

NomeTraduttore

CognomeTraduttore

EMailTraduttore

TblTestoIDLavoro

NomeFile

Testo

DataDiAggiunta

Scadenza

LinguaSorgente

LinguaDestinazione

18

Page 19: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 4

La Web Application

4.1) La progettazione

L’applicazione web è stata progettata con una interfaccia molto semplice e userfriendly.

La sua semplicità permette un miglioramento continuo nel futuro.

L’applicazione è formata da più pagine aspx create tramite il Software Visual Studio 2012.

Il seguente grafico mostra la struttura della web app.

19

Page 20: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

4.2) Il Data Binding

Lo scambio di dati fra l’applicazione e il database avviene tramite una connessione data dalla stringa restituita dal metodo GetConnectionString():

static private string GetConnectionString()

{

return "Data Source=(LocalDB)\\v11.0; Initial Catalog=DataTrad;" + "Integrated Security=true;";

}

Quando il sistema verrà installato nell’ambiente in cui dovrà operare sarà necessario modificare questa stringa con i parametri adeguati.

4.3) Il Login

La web application contiene una unica pagina di login formata da due TextBox e un Button.

In caso di errato inserimento delle credenziali viene mostrato un messaggio di errore.

L’inserimento di credenziali corrette porterà ad un Redirect verso le rispettive pagine dei tre gruppi di lavoro:

- La pagina dell’admin- La pagina del traduttore- La pagina dell’utente

20

Page 21: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Premendo il tasto Login viene eseguito il codice seguente:

protected void Button1_Click(object sender, EventArgs e)

{ SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = GetConnectionString();

SqlCommand CheckTesUser = new SqlCommand("select ID from TblCredenzialiUtente where Utente=@user AND Password=@Pass", connection1);

CheckTesUser.Parameters.AddWithValue("user", TextBox1.Text); CheckTesUser.Parameters.AddWithValue("pass", TextBox2.Text);

connection1.Open();

SqlDataReader rd = CheckTesUser.ExecuteReader();

if (rd.HasRows) { rd.Read(); rd.Close(); int IdUser = (int)CheckTesUser.ExecuteScalar(); Response.Redirect("UserForm.aspx?ID="+IdUser); }

rd.Close(); connection1.Close();

SqlConnection connection2 = new SqlConnection(); connection2.ConnectionString = GetConnectionString(); SqlCommand CheckTesTrad = new SqlCommand("select ID from TblCredenzialiTraduttori where Utente=@user AND Password=@Pass", connection2); CheckTesTrad.Parameters.AddWithValue("user", TextBox1.Text); CheckTesTrad.Parameters.AddWithValue("pass", TextBox2.Text); connection2.Open(); SqlDataReader rdtrad = CheckTesTrad.ExecuteReader();

if (rdtrad.HasRows) { rdtrad.Read(); rdtrad.Close(); String IdTrad = CheckTesTrad.ExecuteScalar().ToString(); Response.Redirect("TradForm.aspx?ID="+IdTrad); }

rdtrad.Close(); connection2.Close();

//credenziali dell’admin, password in chiaro if (TextBox1.Text == "admin" && TextBox2.Text == "admin") { Response.Redirect("AdminForm.aspx"); }

21

Page 22: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

else

{ Label1.Text = "Username e/o Password errate"; }

connection2.Close();

}

Il passaggio dell’id utente o dell’id tesista viene mediante l’espressione url?variabile = valore.

4.4) Pagina utente

4.4.1) Home utente

Dopo il login un normale utente viene indirizzato verso la propria “pagina di lavoro”.

Questa pagina contiene un messaggio di benvenuto, con il nome e cognome dell’utente, la data, la possibilità tramite una RadioButtonList e un Button di iniziare il caricamento di una nuova richiesta di traduzione e lo storico delle richieste fatte dall’utente.

22

Page 23: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Al momento del caricamento della pagina vengono riempiti i label con i dati dell’utente grazie al codice:

protected void Page_Load(object sender, EventArgs e) { SqlConnection connection2 = new SqlConnection(); connection2.ConnectionString = GetConnectionString(); // viene salvato il valore ricevuto dalla pagina di login (l’id dell’user) String ID = Request.QueryString["ID"]; int id = Convert.ToInt32(ID);

SqlCommand npersona = new SqlCommand("SELECT NomeUtente FROM [TblUtente] WHERE IDUtente="+id, connection2); npersona.Parameters.AddWithValue("nome",id); connection2.Open(); SqlDataReader dr = npersona.ExecuteReader(); dr.Close(); String Name = (String)npersona.ExecuteScalar();

SqlCommand cpersona = new SqlCommand("SELECT CognomeUtente FROM [TblUtente] WHERE IDUtente=" + id, connection2); cpersona.Parameters.AddWithValue("cognome", id); SqlDataReader cn = cpersona.ExecuteReader(); cn.Close(); String cname = (String)cpersona.ExecuteScalar();

// vengono riempiti i label all’inizio della pagina Label1.Text = Name; Label3.Text = cname; Label2.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); Label4.Text = id.ToString(); Label4.Visible = false;

}

Il codice del Button della RadioButtonList è:

protected void Button1_Click(object sender, EventArgs e) { String ID = Request.QueryString["ID"]; int id = Convert.ToInt32(ID);

if (RadioButtonList1.SelectedItem.Value == "Testo") { Response.Redirect("CaricaTesto.aspx?ID="+id); }

if (RadioButtonList1.SelectedItem.Value == "File") { Response.Redirect("CaricaFile.aspx?ID=" + id); }

23

Page 24: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

}

Quando quindi un utente vorrà caricare un nuovo brano o file verrà rediretto verso due nuove pagine, CaricaTesto.aspx o CaricaFile.aspx.

Infine la pagina è composta dalla GridView per poter visualizzare lo storico delle richieste da parte dell’utente e, in caso di traduzione revisionata, poter vedere la traduzione.

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { String stato = GridView1.SelectedRow.Cells[6].Text; if (stato != "Tradotto e Revisionato") { DialogResult dialogResult = MessageBox.Show("Lavoro non ancora terminato", "ALERT", MessageBoxButtons.OK); } if (stato == "Tradotto e Revisionato") { String idProgetto = GridView1.SelectedRow.Cells[1].Text; String NomeFile = GridView1.SelectedRow.Cells[2].Text; String Testo = GridView1.SelectedRow.Cells[3].Text; String Data = GridView1.SelectedRow.Cells[4].Text; String Scadenza = GridView1.SelectedRow.Cells[5].Text;

bool isTesto; String TextFile = NomeFile; if (TextFile == " ") { isTesto = true; } else { isTesto = false; }

SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = GetConnectionString(); connection1.Open(); Response.Redirect("TestoETradUser.aspx?IDProg=" + idProgetto);

} }

24

Page 25: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

4.4.2) Richiesta traduzione di un testo

La pagina di caricamento testo è formata da due DropList per inserire le lingue, un Calendar selezionabile per indicare la scadenza, una TextBox per inserire il brano da tradurre e tre bottoni, Submit per inviare la richiesta, Home per tornare alla pagina dell’utente e Logout per tornare alla pagina di login.

Le DropList hanno la medesima struttura e il codice della prima è:

protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e) { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = GetConnectionString(); SqlCommand cmdLingua = new SqlCommand("SELECT Lingua FROM [TblLingua]", connection1); connection1.Open(); SqlDataReader dr; dr = cmdLingua.ExecuteReader(); DropDownList3.DataSource = dr; DropDownList3.DataValueField = "Lingua"; DropDownList3.DataTextField = "IdLingua"; DropDownList3.DataBind(); DropDownList3.Items.Insert(0, new ListItem("seleziona lingua", "-1")); connection1.Close(); cmdLingua.Dispose(); }

25

Page 26: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Alla pressione del tasto Submit viene eseguito il seguente codice che permette ai dati, se idonei, di essere inseriti all’interno del database.

protected void Button1_Click(object sender, EventArgs e) { if (TextBox1.Text.Length != 0) //se è presente del testo nella textbox {

SqlConnection connection3 = new SqlConnection(); connection3.ConnectionString = GetConnectionString();

String ID = Request.QueryString["ID"]; int idutente = Convert.ToInt32(ID);

if (Label2.Text == "Scadenza non selezionata") { Label2.Text = DateTime.Now.ToString("yyyy/MM/dd"); }

SqlConnection connection4 = new SqlConnection(); connection4.ConnectionString = GetConnectionString(); connection4.Open(); SqlCommand progetto = new SqlCommand("SELECT MAX(IDLavoro) AS IDLavoro FROM TblTesto", connection4); int idprog = Convert.ToInt32(progetto.ExecuteScalar()); idprog++;

SqlCommand NewProgetto = new SqlCommand("Insert into TblTesto (IDLavoro, Testo, DataDiAggiunta, Scadenza, LinguaSorgente,LinguaDestinazione) VALUES (@idprog, @testo ,@DataDiAggiunta, @DataScadenza, @linguaSorgente, @linguaDestinazione)", connection3); SqlCommand NewProgettoStato = new SqlCommand("Insert into TblStatoProgetto (Stato, Testo) VALUES (@stato, @idprog)", connection3); SqlCommand NewProgettoUtente = new SqlCommand("Insert into TblRichiesta (Utente, Testo) VALUES (@idutente, @idprog)", connection3);

//lingua sorgente SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = GetConnectionString(); connection1.Open(); SqlCommand linguasorgente = new SqlCommand("SELECT IDLingua FROM TblLingua WHERE Lingua = '" + DropDownList3.SelectedValue + "'", connection1); int ls = Convert.ToInt32(linguasorgente.ExecuteScalar());

//lingua destinazione SqlConnection connection2 = new SqlConnection(); connection2.ConnectionString = GetConnectionString(); connection2.Open(); SqlCommand linguadestinazione = new SqlCommand("SELECT IDLingua FROM TblLingua WHERE Lingua = '" + DropDownList4.SelectedValue + "'", connection2); int ld = Convert.ToInt32(linguadestinazione.ExecuteScalar());

NewProgetto.Parameters.AddWithValue("idprog", idprog); NewProgetto.Parameters.AddWithValue("testo", TextBox1.Text);

26

Page 27: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

NewProgetto.Parameters.AddWithValue("DataDiAggiunta", DateTime.Now.ToString("yyyy/MM/dd")); NewProgetto.Parameters.AddWithValue("DataScadenza", Label2.Text); NewProgetto.Parameters.AddWithValue("LinguaSorgente", ls); NewProgetto.Parameters.AddWithValue("LinguaDestinazione", ld);

NewProgettoStato.Parameters.AddWithValue("stato", 1); //stato 1 = pending NewProgettoStato.Parameters.AddWithValue("idprog", idprog);

NewProgettoUtente.Parameters.AddWithValue("idutente", idutente); NewProgettoUtente.Parameters.AddWithValue("idprog", idprog); connection3.Open(); NewProgetto.ExecuteNonQuery(); NewProgettoStato.ExecuteNonQuery(); NewProgettoUtente.ExecuteNonQuery(); connection3.Close(); int IdUser = idutente; Response.Redirect("UserForm.aspx?ID=" + IdUser);

} else { DialogResult dialogResult = MessageBox.Show("Non hai inserito il testo", "ALERT", MessageBoxButtons.OK); } }

4.4.3) Richiesta traduzione di un file

La struttura della pagina è analoga alla precedente con la sola diffirenza che al posto della Textbox è presente un Button per poter caricare il file.

27

Page 28: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Il codice varia unicamente per quanto concerne la struttura dell’upload file.

#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // CODEGEN: This call is required by the ASP.NET Web Form Designer. InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Submit1_ServerClick(object sender, System.EventArgs e) { if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0)) { string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); fn = Label2.Text + "_" + fn; string SaveLocation = Server.MapPath("TESTI") + "\\" + fn; try { File1.PostedFile.SaveAs(SaveLocation); Label3.Text = "File Caricato"; Label5.Text = fn; } catch (Exception ex) { Label3.Text = "Error: " + ex.Message; } } }

I file vengono salvati in una apposita cartella chiamata TESTI. Il path dovrà essere modificato quando il sistema verrà installato nell’ambiente in cui dovrà operare.

4.4.4) Visualizzazione traduzione

Quando un brano o un file nello storico dell’utente è “Tradotto e Revisionato” può essere selezionato per poter vedere la traduzione.

28

Page 29: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Cliccandoci sopra vi è una redirection ad una nuova pagina che mostrerà i dati del testo e la sua traduzione.

Ciò accade sia che il brano sia un normale testo, sia che sia un file. Infatti, se la richiesta è la traduzione di un file, comparirà una pagina con le informazioni sul file, il file sorgente e il file traduzione.

Se invece l’utente avesse richiesto un brano comparirà il testo e poco dopo la sua traduzione.

La pagina consiste in un insieme di Labels e Buttons; i labels vengono tutti riempiti durante il loading della pagina.

29

Page 30: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

protected void Page_Load(object sender, EventArgs e) { String idprog = Request.QueryString["IDProg"]; int idprogetto = Convert.ToInt32(idprog);

Label1.Text = idprog;

SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = GetConnectionString(); connection1.Open(); SqlCommand idUtent = new SqlCommand("SELECT Utente FROM TblRichiesta WHERE Testo = '" + idprogetto + "'", connection1); int idUtente = Convert.ToInt32(idUtent.ExecuteScalar()); connection1.Close();

// Nome e Cognome utente SqlConnection connection2 = new SqlConnection(); connection2.ConnectionString = GetConnectionString(); connection2.Open(); SqlCommand NUtent = new SqlCommand("SELECT NomeUtente FROM TblUtente WHERE IdUtente = '" + idUtente + "'", connection2); String NUtente = Convert.ToString(NUtent.ExecuteScalar()); SqlCommand CUtent = new SqlCommand("SELECT CognomeUtente FROM TblUtente WHERE IdUtente = '" + idUtente + "'", connection2); String CUtente = Convert.ToString(CUtent.ExecuteScalar()); connection2.Close(); Label2.Text = NUtente; Label3.Text = CUtente;

// Nome e Cognome traduttore SqlConnection connection = new SqlConnection(); connection.ConnectionString = GetConnectionString(); connection.Open(); SqlCommand idTrad = new SqlCommand("SELECT Traduttore FROM TblTraduz WHERE Testo = '" + idprog + "'", connection); String IdTraduttore = Convert.ToString(idTrad.ExecuteScalar()); SqlCommand Ntrad = new SqlCommand("SELECT NomeTraduttore FROM TblTraduttore WHERE IdTraduttore = '" + IdTraduttore + "'", connection); String Ntraduttore = Convert.ToString(Ntrad.ExecuteScalar()); SqlCommand Ctrad = new SqlCommand("SELECT CognomeTraduttore FROM TblTraduttore WHERE IdTraduttore = '" + IdTraduttore + "'", connection); String Ctraduttore = Convert.ToString(Ctrad.ExecuteScalar()); connection2.Close(); Label7.Text = Ntraduttore; Label8.Text = Ctraduttore;

// è un testo? bool isTesto; SqlConnection connection3 = new SqlConnection(); connection3.ConnectionString = GetConnectionString(); connection3.Open(); SqlCommand TestoOFile = new SqlCommand("SELECT NomeFile FROM TblTesto WHERE IDLavoro = '" + idprogetto + "'", connection3); String TextFile = Convert.ToString(TestoOFile.ExecuteScalar());

30

Page 31: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

if (TextFile.Equals("")) { isTesto = true; Label5.Text = "Testo"; Label11.Text = "Testo"; } else { isTesto = false; Label5.Text = "File"; Label11.Text = "File"; } connection2.Close();

//LINGUE SqlConnection connection4 = new SqlConnection(); connection4.ConnectionString = GetConnectionString(); connection4.Open();

SqlCommand idLSorg = new SqlCommand("SELECT LinguaSorgente FROM TblTesto WHERE IDLavoro = '" + idprogetto + "'", connection4); int idls = Convert.ToInt32(idLSorg.ExecuteScalar()); SqlCommand idLDest = new SqlCommand("SELECT LinguaDestinazione FROM TblTesto WHERE IDLavoro = '" + idprogetto + "'", connection4); int idld = Convert.ToInt32(idLDest.ExecuteScalar()); SqlCommand LSorg = new SqlCommand("SELECT Lingua FROM TblLingua WHERE IDLingua = '" + idls + "'", connection4); String ls = Convert.ToString(LSorg.ExecuteScalar()); SqlCommand LDest = new SqlCommand("SELECT Lingua FROM TblLingua WHERE IDLingua = '" + idld + "'", connection4); String ld = Convert.ToString(LDest.ExecuteScalar());

Label4.Text = ls; Label6.Text = ld;

if (isTesto) { SqlCommand test = new SqlCommand("SELECT Testo FROM TblTesto WHERE IDLavoro = '" + idprog + "'", connection4); String testo = Convert.ToString(test.ExecuteScalar()); Label9.Text = "Il testo in lingua originale è"; Label10.Text = testo; Button1.Visible = false; Button2.Visible = false; SqlCommand trad = new SqlCommand("SELECT TestoTradotto FROM TblTraduz WHERE Testo = '" + idprogetto + "'", connection4); String traduzione = Convert.ToString(trad.ExecuteScalar()); Label12.Text = traduzione; } if (!isTesto) { SqlCommand test = new SqlCommand("SELECT Testo FROM TblTesto WHERE IDLavoro = '" + idprogetto + "'", connection4); String testo = Convert.ToString(test.ExecuteScalar()); Label9.Visible = false; Label10.Text = "Il file in lingua originale è";

31

Page 32: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Label12.Visible = false; }

connection4.Close(); }

E’ stata così creata una unica pagina aspx che viene modificata a seconda che il contenuto della richiesta sia un file o un brano. Se infatti si tratta di un brano, verranno semplicemente riempite due Labels con il testo e la traduzione; altrimenti verranno visualizzati due Buttons con cui si potrà scaricare i files.

Per usare una singola pagina è stata utilizzata la proprietà Visible degli oggetti che, tramite opportuni costrutti if, maschera i bottoni e i labels nei due casi.

32

Page 33: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

4.5) Pagina traduttore

4.5.1) Home traduttore

Dopo aver effettuato login, il traduttore viene indirizzato verso la propria home.

Analogamente alla pagina dell’utente, anche questa ha dei Labels dove sono contenute le informazioni riguardo il nome, cognome del traduttore e data. Poi è presente una GridView selezionabile dove sono contenuti tutti i lavori assegnategli dall’admin.

Le linee di codice sono simili, senza molte differenze degne di nota.

Il traduttore in un primo momento si troverà soltanto lavori di tipo “in attesa di conferma”. Cliccando sul lavoro accederà ad una nuova pagina dove saranno contenute tutte le informazioni su quest’ultimo.

In questa pagina il traduttore potrà decidere se accettare o rifiutare il lavoro il lavoro.

Lo status della richiesta verrà quindi modificato in “accettato” o “rifiutato” (come si può vedere nella foto della home del traduttore). Se rifiutato, lo status del lavoro verrà nuovamente modificato in “Pending” e l’admin dovrà assegnare nuovamente il lavoro ad un’altro traduttore o giudicarlo “Non traducibile”.

33

Page 34: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

4.5.2) Caricamento di una traduzione

Una volta che il traduttore ha accettato il lavoro, quest’ultimo può iniziare la traduzione.

Cliccando nuovamente sul brano si aprirà una nuova pagina dove sarà possibile caricare la traduzione.

34

Page 35: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Verranno così mostrate due pagine diverse a seconda che il testo sia un file o un brano.

35

Page 36: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

4.6) Pagine admin

Dopo il login l’admin viene indirizzato verso la propria home.

La pagina è formata da una GridView con tutti i lavori richiesti, ordinati per scadenza rispetto allo stato.

Selezionando un lavoro in “attesa di assegnazione” l’admin verrà rediretto verso una nuova pagina che conterrà le informazioni del lavoro e i traduttori possibili.

36

Page 37: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Cliccando su un traduttore apparirà un popup per la conferma dell’associazione traduttore-testo.

DialogResult dialogResult = MessageBox.Show("Sei sicuro di associare il traduttore al testo?", "Domanda", MessageBoxButtons.YesNo);

Tra le mansioni dell’amministratore c’è anche la valutazione della traduzione. Quando un lavoro passa da uno stato “in traduzione” a “in attesa della valutazione dell’admin”, l’amministratore, cliccando sul brano, può valutarne il testo e dire se il lavoro è corretto o no; in caso negativo verrà riposto lo status di pending.

37

Page 38: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

Cliccando su “valuta la traduzione” apparirà un pop up che chiederà se la traduzione è corretta o no.

DialogResult dialogResult = MessageBox.Show("La traduzione è corretta?", "Domanda", MessageBoxButtons.YesNoCancel);

Infine il traduttore potrà rivedere le traduzioni completate, esattamente come gli utenti.

38

Page 39: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

4.7) Sistema di notifica per utenti

L’applicazione web sfrutta l’indirizzo e-mail degli utenti per poter notificare in tempo reale la modifica dello status di un proprio lavoro richiesto. L’user può così sapere quando il lavoro è concluso.

String MailTo = Request.QueryString["MailTo"]; String Stato = Request.QueryString["Stato"]; String IDLavoro = Request.QueryString["ID"];

String body = "la traduzione " + IDLavoro + " che hai richiesto ha modificato lo stato in " + Stato + ".";

MailAddress fromAddress = new MailAddress("[email protected]"); MailAddress toAddress = new MailAddress(MailTo);

MailMessage mail = new MailMessage(fromAddress.Address, toAddress.Address); mail.Subject = "Update stato traduzione"; mail.Body = body;

SmtpClient client = new SmtpClient(); client.Host = "smtp.mail.yahoo.it"; client.Port = 587; client.EnableSsl = true; client.Timeout = 5000; client.UseDefaultCredentials = false; client.Credentials = new NetworkCredential("[email protected]", "*********"); try { client.Send(mail); MessageBox.Show("Mail Sent!", "Success", MessageBoxButtons.OK); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK); }

Per l’invio di mail è stato usato il mail server di Yahoo.

L’admin, per inviare le mail, deve autenticarsi quindi con il mail server di Yahoo "smtp.mail.yahoo.it".

Molti mail server, tra cui Gmail, impediscono l’invio di mail, per fermare il fenomeno dello spam, ponendo ulteriori dati per l’invio quali ad esempio una domanda di sicurezza o un codice da cellulare, che impediscono il corretto funzionamento del programma.

Quando il sistema verrà installato nell’ambiente in cui dovrà operare, sarà necessario modificare gli indirizzi con i parametri adeguati.

39

Page 40: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 5

Conclusione

Gli obiettivi prefissati all’inizio del progetto sono stati raggiunti tramite la creazione degli elementi:

- La base dati- Tre distinte web app accomunate da una stessa pagina iniziale

Infatti, l’applicazione web può essere considerata (e trattata in un possibilile futuro) come tre diverse applicazioni che possono coesistere non dipendendo l’una dall’altra.

I sistemi di gesione dell’utente, dell’admin e dei traduttori possono essere inseriti in diversi contesti e luoghi. Basterà modificare adeguatamente le stringhe di connessione (il dataBinding).

Sono state acquisite nuove conoscenze ed approfondite altre, riguardante in particolare:

Il linguaggio SQL; Il linguaggio C#; Il linguaggio HTML; Sviluppo di applicazioni ASP.NET;

e l’uso di software come:

SQL Server 2012 SQL Server Management Studio Visual Studio 2012

40

Page 41: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

5.1 Possibilità di implementazione

Il sistema creato offre moltissime possibilità di implementazione.

Il sistema necessita di un miglioramento del front end e dell’implementazione grafica.

Inoltre il sistema è scalabile e può essere arricchito con molte nuove feature.

Una delle prime è l’uso di un dizionario integrato per aiutare il lavoro dei traduttori.

Tra le opportunità di sviluppo troviamo anche la creazione di un finder, un’operatore per ordinare e cercare le traduzioni, così anche limitando possibili copie di traduzioni nella base dati. Le traduzioni potrebbero in questo modo essere a disposizione di tutti tramite una semplice ricerca, magari attraverso opportuni tag.

Successivamente può essere creata una sezione di monitorizzazione del carico del lavoro per non associare troppi lavori ad uno stesso traduttore ma mantenere un carico di lavoro equo e simili per tutti i traduttori.

Può essere notevolmente migliorata la valutazione dello storico per tutti gli utenti del sistema. Infatti possono essere create statistiche aggiornate e grafici in-time con i lavori richiesti, tradotti, finiti e rifiutati. Questa miglioria può dare vita ad una sorta di punteggio per i traduttori. Un esempio può essere quanto riportato: i traduttori partono con un punteggio di 60 su 100 al momento del loro inserimento sul database. Quel punteggio indica la percentuale di volte in cui appaiono all’admin nel momento della selezione traduttore-testo. Se eseguono una traduzione correttamente il punteggio verrà incrementato, altrimenti decrementato. Quindi verrebbe dato anche un indice di affidabilità ai traduttori (e al sistema stesso).

Nel sistema può essere integrata anche la gestione backup della base dati e dei file. Questo da adito a problemi di tipo di sincronizzazione. Difatti non è detto che i dati del database e i file vengano copiati nello stesso istante. Questo problema può essere risolto con un backup immediato dei file appena caricati/modificati e un backup normale del database oppure con una futura integrazione del database dei file stessi.

41

Page 42: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

5.2 Integrazione futura

Il sistema dovrà essere in un futuro integrato con il Directory Service per gestire il database e i file. Così il sistema potrà accedere ai file con le credenziali degli utenti universitari, ponendo ad esempio come normale utente qualsiasi utente di Esse3 e come traduttori una piccola cerchia di persone. Per integrare il sistema si dovrà utilizzare ADSI, Active Directory Service Interface, che servirà per unire in un unico sottoinseme di interfaccie più risorse di diverse reti. Nel momendo dell’integrazione dovranno essere modificati tutti i datapath e i valori inseriti nel sistema di notifiche via mail.

42

Page 43: Realizzazione di una base di dati e un applicativo web per la gestione di traduzioni

CAPITOLO 6

Bibliografia

- Atzeni,P., Ceri S., Paraboschi S, Torlone R, Basi di dati: modelli e linguaggi di interrogazione, Mc Graw Hill, III edizione 2009

Sitografia

- http://www.support.microsoft.com- http://www.asp.net- http://www.html.it- http://www.c-sharpcorner.com

43


Recommended