Sunteți pe pagina 1din 14

Universitatea POLITEHNIC Bucureti, Facultatea de Electronic, Telecomunicaii i

Tehnologia Informaiei

PROIECT 3
TEHNOLOGIA .NET

Cuprins:

1.
2.
3.
4.

Cerine
Tehnologia .NET
MySQL
Descriere aplicaie

1. Cerine
"Creati o aplicatie care sa contina o baza de date creata in mysql si o interfata pentru aceasta. La
crearea interfetei se va folosi tehnologia .NET. Baza de date va fi compusa din urmatoarele tabele :
Autori (AutorID,NumeAutor,PrenumeAutor,TaraOrigine)
Carti (CarteID,Denumire, AnAparitie,Editura)
Biblioteca(BibliotecaID,Denumire,Adresa)
Relatiile intre tabele sunt urmatoarele :
intre tabela Autori si tabela Carti - relatie de multiplicitate M:N
intre tabela Carti si tabela Biblioteca - relatie de multiplicitate M:N
Interfata va trebui sa permita utilizatorului sa faca urmatoarele operatii pe toate tabelele : vizualizare,
adaugare, modificare, stergere. Vizualizarea tabelelor de legatura va presupune vizualizarea datelor
referite din celelalte tabele."

2.Tehnologia .NET
Tehnologia .NET, dezvoltata de gigantul Microsoft, se bazeaza pe asa numitul .NET
Framework, care este o platforma de calcul care simplifica dezvoltarea aplicatiilor in
mediul puternic distribuit al Internetului. Acest .NET Framework este conceput astfel incat
sa satisfaca urmatoarele obiective:

Sa ofere un mediu consistent de programare, obiect-orientat, indiferent daca codul


obiectului este stocat si executat local, executat local dar distribuit pe Internet, sau
executat la distanta.
Sa ofere un mediu de executie a codului care sa minimizeze desfasurarea software-ului si
conflictele de versiune.

Sa ofere un mediu de executie a codului care sa garanteze executia sigura a codului,


incluzand codul creat de dezvoltatori (third-party) necunoscuti sau necertificati.

Sa ofere un mediu de executie a codului care sa elimine problemele de performanta ale


mediilor scripted sau interpreted.

Sa faca experienta dezvoltatorului consistenta in cazul variatelor tipuri de aplicatii, cum


ar fi aplicatiile de tip Windows-based si aplicatiile de tip Web-based.

Sa construiasca toate comunicatiile pe standarde industriale care sa asigure faptul ca codul bazat
pe .NET Framework poate fi integrat in orice alt cod.
Platforma .Net este mult mai mult decat un nou limbaj , software development kit (SDK), sau
chiar un sistem de operare. Ofera servicii noi foarte puternice, un nou format binar independent
de procesor, noi limbaje, extensii pentru limbaje vechi si lista continua. Folosirea eficienta a
acestor noi unelte si aplicatii, nu este posibila cunoastere buna a platforma ce va da viata
aplicatiilor.
Premiza din spatele platformei .NET este ca lumea calculatoarelor se schimba de la un calculator
conectat la servere prin retele de genul Internetului, la un calculator unde toate felurile de deviceuri inteligente, calculatoare si servicii, lucreaza impreuna pentru a oferi o experienta mai bogata
utilizatorului. Platforma .NET este raspunsul acestor provocari pe care schimbarea le va aduce
programatorilor.
Platforma .NET este formata din mai multe componente, care pot fi grupate in trei categorii de
baza:

.NET Framework o aplicatie complet noua pentru dezvoltarea platformelor.


Produse .NET diverse aplicatii Microsoft bazate pe .NET Framework, incluzand noi
versiuni de Exchange si SQL Server, XML toate integrate in platforma .NET.

Servicii .NET mai multe servicii .NET, asigurate de Microsoft pentru folosire in
dezvoltarea aplicatiilor ce merg pe .NET Framework. Foarte importante si de amintit sunt
serviciile Web (Web Services).

Insusi .NET Framework poate fi divizat in trei parti:

CLR (Common Language Runtime) este un mediu de executie care se ocupa de alocarea
memoriei, captarea erorilor si interactiunea cu serviciile sistemului de operare.
Base Class Library este o colectie extinsa de componente pentru programare si aplicatii
pentru interfete de programare (API).
Doua tinte de dezvoltare de nivel inalt. Una dintre ele este pentru aplicatiile Web
(ASP.NET) si alta pentru aplicatii normale Windows (Windows Forms).

Avantajele oferite de catre .NET Framework includ cicluri mai rapide de dezvoltare (refolosirea
codurilor, mai putine surprize de programare, suport pentru mai multe limbaje de programare),
mai putine bug-uri legate de tipul datelor datorita securitatii integrale, scurgere de memorie
redusa datorita Garbage Collector-ului si, in general, aplicatii sigure.
CLR-ul (common language runtime), este fundatia .NET Framework. Va puteti gandi la runtime
ca la un agent care administreaza codul in momentul executiei, oferind servicii de baza precum
managementul memoriei, managementul thread-urilor, si servicii de lucru la distanta, in timp ce
promulga siguranta tipurilor si alte forme de acuratete a codului, care asigura securitate si
robustete. De fapt, conceptual de management al codului este un principiu fundamental al
runtime-ului. Codul care vizeaza runtime-ul este cunoscut ca managed code iar codul care nu

vizeaza runtime-ul este cunoscut ca unmanaged code. Biblioteca de clase, cealalta componenta
principala a Framework-ului .NET, este o colectie cuprinzatoare, obiect-orientata, de tipuri
reutilizabile care poate fi folosita pentru dezvoltarea variatelor aplicatii, pornind de la aplicatiile
traditionale in linie de comanda sau cu interfata grafica (GUI Graphical User Interface), pana
la aplicatii bazate pe ultimele inovatii oferite de ASP.NET, inovatii precum Web Forms sau XML
Web services.

3.MySQL

MySQL este un sistem de gestiune a bazelor de date relaional, produs de compania suedeza
MySQL AB i distribuit sub Licena Public General GNU. Este cel mai popular SGBD opensource la ora actual, fiind o component cheie a stivei LAMP (Linux, Apache, MySQL, PHP).
Dei este folosit foarte des mpreun cu limbajul de programare PHP, cu MySQL se pot construi
aplicaii n orice limbaj major. Exist multe scheme API disponibile pentru MySQL ce permit
scrierea aplicaiilor n numeroase limbaje de programare pentru accesarea bazelor de date
MySQL, cum are fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea
folosind un tip spefic API. O interfa de tip ODBC denumit MyODBC permite altor limbaje de
programare ce folosesc aceast interfa, s interacioneze cu bazele de date MySQL cum ar fi
ASP sau Visual Basic. n sprijinul acestor limbaje de programare, unele companii produc
componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul crora respetivele
limbaje s poat folosi acest SGBD mult mai uor dect prin intermediul sistemului ODBC.
Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.
Licena GNU GPL nu permite ncorporarea MySQL n softuri comerciale; cei care doresc s fac
acest lucru pot achiziiona, contra cost, o licen comercial de la compania productoare,
MySQL AB.
MySQL este component integrat a platformelor LAMP sau WAMP (Linux/Windows-ApacheMySQL-PHP/Perl/Python). Popularitatea sa ca aplicaie web este strns legat de cea a PHP-ului
care este adesea combinat cu MySQL i denumit Duo-ul Dinamic. n multe cri de specialitate
este precizat faptul ca MySQL este mult mai uor de invat i folosit dect multe din aplicaiile
de gestiune a bazelor de date, ca exemplu comanda de ieire fiind una simpl i evident: exit
sau quit.
Pentru a administra bazele de date MySQL se poate folosi modul linie de comand sau, prin
descrcare de pe internet, o interfa grafic: MySQL Administrator i MySQL Query Browser.

Un alt instrument de management al acestor baze de date este aplicaia gratuit, scris n PHP,
phpMyAdmin.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD,
GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.

4.Descriere aplicaie

Primul pas a constat n crearea bazei de date Proiect_3 n MySQL.


Iniial au fost create cele cele trei tabele principale:
-

Autori (AutorID, NumeAutor, PrenumeAutor, TaraOrigine);


Cri(CarteID, Denumire, AnAparitie, Editura);
Bibliotec(BibliotecaID, Denumire, Adresa);

Urmtorul pas a fost crearea tabelelor de legtur:


-

Autori_Carti(AutorID, CarteID);
Carti_Biblioteca(CarteID, BibliotecaID);

Tabelele de legtur au fost create pentru definirea relaiilor de multiplicitate M:N


ntre tabelele Autori -Carti i Carti Biblioteca.
La crearea acestora am definit cheile strine:
-

AutorID_FK prin care coloana AutorID din tabela de legtur


refereniaz coloana AutorID din tabela principala Autori n cazul
tabelei de legtur Autori_Carti;
CarteID_FK prin care coloana CarteID din tabela de legtur
refereniaz coloana CarteID din tabela principala Carti n cazul tabelei
de legtur Autori_Carti;
CarteID_FK prin care coloana CarteID din tabela de legtur
refereniaz coloana CarteID din tabela principala Carti n cazul tabelei
de legtur Carti_Biblioteca;
BibliotecaID_FK prin care coloana BibliotecaID din tabela de legtur
refereniaz coloana BibliotecaID din tabela principala Biblioteca n
cazul tabelei de legtur Carti_Biblioteca;

Aplicaia a fost realizat n limbajul de programare C# (.NET) n Visual C#.

Aceasta cuprinde 5 taburi pentru fiecare tabel care are asociat un obiect de
tip DataGridView ce va fi utilizat pentru vizualizare i operaii asupra datelor din
tabele.
Pentru conectarea la baza de date a fost definit o variabil la nivelul ntregii
aplicaii astfel:
- n proprietile aplicaiei (Properties/Settings) s-a definit
Name:ConnectionString, Value:
SERVER=localhost;DATABASE=proiect_3;UID=root;PASSWORD=1234;
Aplicaia conine un formular printe MainForm i dou formulare pentru
tabelele de legtur AutoriCarti i CartiBiblioteca care au urmtorul cod:

using
using
using
using
using
using
using
using
using

MainForm

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
MySql.Data.MySqlClient;

namespace Proiect_3
{
public partial class mainForm : Form
{
public mainForm()
{
InitializeComponent();
}
private MySqlConnection connection;
private
private
private
private
private

MySqlDataAdapter
MySqlDataAdapter
MySqlDataAdapter
MySqlDataAdapter
MySqlDataAdapter

private
private
private
private
private

DataTable
DataTable
DataTable
DataTable
DataTable

private
private
private
private
private

BindingSource
BindingSource
BindingSource
BindingSource
BindingSource

autoriDA;
cartiDA;
biblioteciDA;
autori_cartiDA;
carti_bibliotecaDA;

autoriTbl = new DataTable();


cartiTbl = new DataTable();
biblioteciTbl = new DataTable();
autori_cartiTbl = new DataTable();
carti_bibliotecaTbl = new DataTable();
autoriBS = new BindingSource();
cartiBS = new BindingSource();
biblioteciBS = new BindingSource();
autori_cartiBS = new BindingSource();
carti_bibliotecaBS = new BindingSource();

private AutoriCarti AutoriCartiForm = new AutoriCarti();


private CartiBiblioteca CartiBibliotecaForm = new CartiBiblioteca();
private void mainForm_Load(object sender, EventArgs e)
{
connection = new MySqlConnection(Properties.Settings.Default.ConnectionString);
connection.Open();
autoriDA = new MySqlDataAdapter("SELECT * FROM autori", connection);
cartiDA = new MySqlDataAdapter("SELECT * FROM carti", connection);
biblioteciDA = new MySqlDataAdapter("SELECT * FROM biblioteca", connection);
autori_cartiDA = new MySqlDataAdapter("SELECT autori.NumeAutor,
autori.PrenumeAutor, autori.TaraOrigine, carti.Denumire, carti.AnAparitie, carti.Editura FROM
autori_carti INNER JOIN autori ON autori_carti.AutorID = autori.AutorID INNER JOIN carti ON
autori_carti.CarteID = carti.CarteID", connection);
carti_bibliotecaDA = new MySqlDataAdapter("SELECT carti.Denumire AS Carte,
carti.AnAparitie, carti.Editura, biblioteca.Denumire AS Biblioteca, biblioteca.Adresa FROM
carti_biblioteca INNER JOIN carti ON carti_biblioteca.CarteID = carti.CarteID INNER JOIN
biblioteca ON carti_biblioteca.BibliotecaID = biblioteca.BibliotecaID", connection);
MySqlCommandBuilder autoriCB = new MySqlCommandBuilder(autoriDA);
MySqlCommandBuilder cartiCB = new MySqlCommandBuilder(cartiDA);
MySqlCommandBuilder biblioteciCB = new MySqlCommandBuilder(biblioteciDA);
autoriDA.Fill(autoriTbl);
cartiDA.Fill(cartiTbl);
biblioteciDA.Fill(biblioteciTbl);
autori_cartiDA.Fill(autori_cartiTbl);
carti_bibliotecaDA.Fill(carti_bibliotecaTbl);
autoriBS.DataSource = autoriTbl;
cartiBS.DataSource = cartiTbl;
biblioteciBS.DataSource = biblioteciTbl;
autori_cartiBS.DataSource = autori_cartiTbl;
carti_bibliotecaBS.DataSource = carti_bibliotecaTbl;
dgAutori.DataSource = autoriBS;
dgCarti.DataSource = cartiBS;
dgBiblioteca.DataSource = biblioteciBS;
dgAutoriCarti.DataSource = autori_cartiBS;
dgCartiBiblioteca.DataSource = carti_bibliotecaBS;
dgAutori.Columns[0].ReadOnly = true;
dgCarti.Columns[0].ReadOnly = true;
dgBiblioteca.Columns[0].ReadOnly = true;
dgAutoriCarti.ReadOnly = true;
dgCartiBiblioteca.ReadOnly = true;
}

btnAdauga.Visible = false;

private void mainForm_FormClosing(object sender, FormClosingEventArgs e)

connection.Close();

}
private void btnSalveaza_Click(object sender, EventArgs e)
{
autoriDA.Update(autoriTbl);
cartiDA.Update(cartiTbl);
biblioteciDA.Update(biblioteciTbl);
refreshGrid();
}
private void btnAdauga_Click(object sender, EventArgs e)
{
if (tabControl1.SelectedTab.Name == "tabAutoriCarti")
{
if (AutoriCartiForm.IsDisposed == false)
{
AutoriCartiForm.Owner = this;
AutoriCartiForm.Show(this);
}
else
{
AutoriCartiForm = new AutoriCarti();
AutoriCartiForm.Owner = this;
AutoriCartiForm.Show(this);
}
}
else if (tabControl1.SelectedTab.Name == "tabCartiBiblioteca")
{
if (CartiBibliotecaForm.IsDisposed == false)
{
CartiBibliotecaForm.Owner = this;
CartiBibliotecaForm.Show(this);
}
else
{
CartiBibliotecaForm = new CartiBiblioteca();
CartiBibliotecaForm.Owner = this;
CartiBibliotecaForm.Show(this);
}
}
}
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
if (tabControl1.SelectedTab.Name == "tabAutoriCarti" ||
tabControl1.SelectedTab.Name == "tabCartiBiblioteca")
{
btnAdauga.Visible = true;
}
else
{
btnAdauga.Visible = false;
}
}

refreshGrid();

public void refreshGrid()


{
autoriTbl.Clear();
autoriDA.Fill(autoriTbl);
dgAutori.Refresh();
cartiTbl.Clear();
cartiDA.Fill(cartiTbl);
dgCarti.Refresh();
biblioteciTbl.Clear();
biblioteciDA.Fill(biblioteciTbl);
dgBiblioteca.Refresh();
autori_cartiTbl.Clear();
autori_cartiDA.Fill(autori_cartiTbl);
dgAutoriCarti.Refresh();
carti_bibliotecaTbl.Clear();
carti_bibliotecaDA.Fill(carti_bibliotecaTbl);
dgCartiBiblioteca.Refresh();
}

-AutoriCarti

using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;

using
using
using
using

System.Linq;
System.Text;
System.Windows.Forms;
MySql.Data.MySqlClient;

namespace Proiect_3
{
public partial class AutoriCarti : Form
{
private MySqlConnection connection;
private MySqlDataAdapter autoriDA;
private MySqlDataAdapter cartiDA;
private DataTable autoriTbl = new DataTable();
private DataTable cartiTbl = new DataTable();
private BindingSource autoriBS = new BindingSource();
private BindingSource cartiBS = new BindingSource();
public AutoriCarti()
{
InitializeComponent();
}
private void btnRenuntaAC_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnAdaugaAC_Click(object sender, EventArgs e)
{
MySqlCommand insertCommand = new MySqlCommand("INSERT INTO autori_carti
(AutorID, CarteID) VALUES ('" + cbAutor.SelectedValue.ToString() + "','" +
cbCarte.SelectedValue.ToString() + "')", connection);
insertCommand.ExecuteNonQuery();
this.Close();
}
private void AutoriCarti_Load(object sender, EventArgs e)
{
connection = new MySqlConnection(Properties.Settings.Default.ConnectionString);
connection.Open();
autoriDA = new MySqlDataAdapter("SELECT AutorID, CONCAT(NumeAutor,'
',PrenumeAutor) AS nume_autor FROM autori", connection);
cartiDA = new MySqlDataAdapter("SELECT CarteID, Denumire FROM carti", connection);
MySqlCommandBuilder autoriCB = new MySqlCommandBuilder(autoriDA);
MySqlCommandBuilder cartiCB = new MySqlCommandBuilder(cartiDA);
autoriDA.Fill(autoriTbl);
cartiDA.Fill(cartiTbl);
autoriBS.DataSource = autoriTbl;
cartiBS.DataSource = cartiTbl;

cbAutor.DataSource = autoriBS;
cbAutor.DisplayMember = "nume_autor";
cbAutor.ValueMember = "AutorID";

cbCarte.DataSource = cartiBS;
cbCarte.DisplayMember = "Denumire";
cbCarte.ValueMember = "CarteID";

private void AutoriCarti_FormClosing(object sender, FormClosingEventArgs e)


{
connection.Close();
mainForm mainFrm = (mainForm)this.Owner;
mainFrm.refreshGrid();
}

using
using
using
using
using
using
using
using
using

CartiBiblioteca

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
MySql.Data.MySqlClient;

namespace Proiect_3
{
public partial class CartiBiblioteca : Form
{
private MySqlConnection connection;
private MySqlDataAdapter bibliotecaDA;
private MySqlDataAdapter cartiDA;
private DataTable bibliotecaTbl = new DataTable();
private DataTable cartiTbl = new DataTable();

private BindingSource bibliotecaBS = new BindingSource();


private BindingSource cartiBS = new BindingSource();
public CartiBiblioteca()
{
InitializeComponent();
}
private void btnRenuntaCB_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnAdaugaCB_Click(object sender, EventArgs e)
{
MySqlCommand insertCommand = new MySqlCommand("INSERT INTO carti_biblioteca
(CarteID, BibliotecaID) VALUES ('" + cbCarte.SelectedValue.ToString() + "','" +
cbBiblioteca.SelectedValue.ToString() + "')", connection);
insertCommand.ExecuteNonQuery();
this.Close();
}
private void CartiBiblioteca_Load(object sender, EventArgs e)
{
connection = new MySqlConnection(Properties.Settings.Default.ConnectionString);
connection.Open();
bibliotecaDA = new MySqlDataAdapter("SELECT BibliotecaID, Denumire FROM
biblioteca", connection);
cartiDA = new MySqlDataAdapter("SELECT CarteID, Denumire FROM carti",
connection);
MySqlCommandBuilder bibliotecaCB = new MySqlCommandBuilder(bibliotecaDA);
MySqlCommandBuilder cartiCB = new MySqlCommandBuilder(cartiDA);
bibliotecaDA.Fill(bibliotecaTbl);
cartiDA.Fill(cartiTbl);
bibliotecaBS.DataSource = bibliotecaTbl;
cartiBS.DataSource = cartiTbl;
cbBiblioteca.DataSource = bibliotecaBS;
cbBiblioteca.DisplayMember = "Denumire";
cbBiblioteca.ValueMember = "BibliotecaID";
cbCarte.DataSource = cartiBS;
cbCarte.DisplayMember = "Denumire";
cbCarte.ValueMember = "CarteID";
}
private void CartiBiblioteca_FormClosing(object sender, FormClosingEventArgs e)
{
connection.Close();
mainForm mainFrm = (mainForm)this.Owner;
mainFrm.refreshGrid();
}
}

La execuia aplicaiei avem datele selectate din cele trei tabele principale:
Autori, Carti, Biblioteca.
Cu ajutorul taburilor putem vizualiza aceste tabele.
Operatiile de inserare, modificare, tergere pentru tabelele principale se fac
direct din fereastra pricipal intermediul DataGridView.
Pentru inserarea datelor n tabelele de legtur au fost adugate cele dou
forme care au cte un ComboBox cu ajutorul crora se aleg legturile dorite.

S-ar putea să vă placă și