Conf . Dr. Ionel MUSCALAGIU [603679]

UNIVERSITATEA POLITEHNICA TIMIȘOARA
FACULTATEA DE INGINERIE HUNEDOARA
DEPARTAMENTUL DE INGINERIE ELECTRICĂ ȘI
INFORMATICĂ INDUSTRIALĂ
SPECIALIZAREA TEHNICI INFORMATICE ÎN INGINERIA
ELECTRICĂ

LUCRARE DE DISERTAȚIE

Coordonator științ ific:
Conf . Dr. Ionel MUSCALAGIU

Absolvent: [anonimizat]
2019

UNIVERSITATEA POLITEHNICA TIMIȘOARA
FACULTATEA DE INGINERIE HUNEDOARA
DEPARTAMENTUL DE INGINERIE ELECTRICĂ ȘI
INFORMATICĂ INDUSTRIALĂ
SPECIALIZAREA TEHNICI INFORMATICE ÎN INGINERIA
ELECTRICĂ

TEHNICI PENTRU DEZVOL TAREA
DE APLICAȚII CU BAZE DE DATE .

APLICAȚIE PENTRU GESTIUNEA
UNUI MAGAZIN DE PIESE
ELECTRICE

Coordonator științ ific:
Conf . Dr. Ionel MUSCALAGIU
Absolvent: [anonimizat]
2019

LUCRARE DE DISERTAȚIE

CUPRINS

CAPITOLUL I. Introducere………………………………………………………………………Pag. 1

CAPITOLUL II. Baze de date……………………………………………………………………3
2.1. Introducere in baze de date…………………………………………………………………….. .3
2.2. Arhitectura unei baze de date…………………………………………………………………… 3
2.2.1. Modele conceptuale pentru baze de date…………………………………………………4

CAPITOLUL III. Baze de date SQL Server ………………………………………………..6
3.1. Arhitectura client -server……………………………………………….. …………………………6
3.2 Microsoft SQL Server………………………………………………………………………………. 7
3.2.1 Elemente T- SQL 12……………………………………………………………………………… .9

CAPITOLUL IV. Tehnologii informatice pe platforma .NET Framework…….. 10
4.1 .Net Framework ……………………………………………………………………………………… 10
4.1.1. Prezentare generala…………………………………………………………………………….10
4.1.2. Arhitectura platformei Microsoft .NET…………………………. ………………………….10
4.1.3. De ce Microsoft .NET Framework?…………………………………………………………10
4.2. Limbajul C#…………………………………………………………………………………………… 11
4.2.1. Introducere………………………………………………………………………………………. …11
4.2.2. Principiile programarii orientate obiect…………………………………………………….11
4.2.3. Structura unui program C#……………………………………………………………………. 12
4.2.4. Sintaxa limbajului…………………………………………………………………………………. 12
4.2.5. De ce Visual C#?………………………………………………………………………………. …13
4.3 ADO. NET…………………………………………………………………………………………. ……13
4.3.1. Furnizori de date……………………………………………………………………………. …….14

LUCRARE DE DISERTAȚIE

4.3.2 Componentele unui furnizor de date………………………………………………………… 14
4.3.3. DataSet…………………………………………………………………………………………… …..15
4.4. Visual Studio……………….. …………………………………………………………………………. 15
4.4.1. Notiuni introductive ………………………………………………………………………… ……..15
4.4.2. Arhitectura Microsoft Visual Studio 20 19…………………………………………………..15
4.4.3. Obiecte Visual Studio pentru construirea interfetelor client …………………………..16
4.4.4. De ce Visual Studio?……………………………………………………… ……………………… 21

CAPITOLUL V. Proiectarea si implementarea aplicației pent ru gestiunea unui
magazin de piese electrice……………………. …………………………………………………….. 22
5.1. Analiza problemei…………………………………………………………………………………. …22
5.2. Proiectarea bazei de date………………………………………………………………………….23
5.2.1. Proiectarea tabelelor bazei de date…………………………………………………………. 23
5.3. Realizarea interfeței aplicației…………………………………………………………………… .26
5.3.1. Forma ’’Logare ’’…………… ……………………………………………………………………. …26
5.3.2. Forma ’’Panou utilizator’’…………… ………………………………………………………….. 28
5.3.3. Formele ’’Cumpărare/Vânzări ’……….. ………… …………………………………………….30
5.3.4. Forma ’’Inventar’’…………………………………………………………………………………..37 5.3.5 Forma ’’Furnizor și client’’ ………………………………………………………………………..38
5.3.6 Concluzii……………………………………………………………………. …………………………42

Bibliografie………………………………………………………………………………………………. ….43

LUCRARE DE DISERTAȚIE

1
Capitolul I

Introducere

În trecut, managementul diferitelor domenii de activitate se facea într -un mod mult
mai puțin eficient decât î n prezent . În ziua de astăzi, a cest lucru a devenit mult mai eficient
și mai accesibil datorită puterii de memorare si de prelucrare a datelor a calculatoarelor si a
dispozitivelor mobile. Această activitate este indeplinită de arhitecturi hardware/software
numite sisteme de gestiune a bazelor de date, sisteme ce operează cu baze de date. În IT,
acest domeniu este foarte important.

Lucrarea de față prezintă o „Aplicație pentru gestiunea unui magazin de piese
electrice”, aplicație care poate funcționa în cadrul sistemului informatic implementat în
realitate. Lucrarea propune o soluție de integrare a bazelor de date SQL Server 2017 cu
interfețe Visual Studio 2019, folosind o soluție cu baze de date relaționale.
Lucrarea folosește baze de date SQL Server pentru stocarea datelor, iar pentru
construirea interfeței client , interfețe Visual Studio 2019, utilizând limbajul de programare
C#. Soluția aleasă este simpla dar și modernă, permite stocarea datelor și accesarea lor
prin intermediul interfețelor client.

Proiectul prezentat , este structurat în cinci capitole astfel încât să fie prezentate atât
elemente descriptive necesare proiectării unui astfel de minisistem informatic, dar și
elemente specifice bazelor de date, în particular prezentarea sistemului de tip SQL Server
și a elementelor Microsoft Visual Studio, necesare părții de interfață astfel încât să fie prezentate toate elementele folosite la proiectarea sistemului informațional prezentat în această lucrare. În mod detaliat în lucrare este prezentată proiectarea pas cu pas a
minisistemului, care conține elemente variate de programare cu baze de date de tip SQL
Server și interfețe client necesitând Microsoft Visual Studio 2019.
Capitolul II . Prezintă noțiuni generale despre bazele de date, arhitectura unei astfel
de baze de date, precum și proiectarea sa. Mai sunt enumerate și modelele conceptuale
ale unei baze de date.

Capitolul III. În acest capitol este prezentată funcționarea unui server SQL precum
și câteva informații despre arhitectura client/server. Este făcută o prezentare generală a
serverului SQL, utilizarea acestuia, urmată de caracteristicile serverului SQL .

Capitolul IV. În aces t capitol este prezentat mediul în care a fost realizată interfața
aplicației și anume Microsoft Visual Studio 2019. Sunt prezentate noțiunile introductive și
arhitectura Microsoft Visual Studio urmate de crearea formularelor și funcțiile folos ite de
acestea.

LUCRARE DE DISERTAȚIE

2
Capitolul V. Acest capitol conține explicația aplicației pentru gestiunea unui
magazin de piese electrice, realizată cu interfața Visual Studio și cu baza de date SQL
server. Sunt prezentate analiza problemei împreună c u proiectarea baz ei de date ce
conține tabelele și interfața aplicației explicată amănunțit.

LUCRARE DE DISERTAȚIE

3

CAPITOLUL II
BAZE DE DATE

2.1 Introducere in baze de date

O bază de date este o colecție de date păstrate în memoria externă , date păstrate și
accesate prin intermediul computerelor și a sistemelor de gestiune a bazelor de date.
Bazele de date sunt păstrate de diverse organizații sau întreprinderi în scopul regăsirii cât mai rapide a datelor, pentru monitorizare, supervizare sau planificare .
Operațiile asupra bazelor de date se fac prin intermediul unui pachet de programe
numit sistem de gestiune al bazei de date ( SGBD) . Acest SGBD se ocupă de
modelarea datelor ( alegerea modelelor de memorie folosite) , permire accesarea datelor , regăsirea acestora .

Din punct de vedere al sistemului de operare baza de date este formată din fișiere
diverse (datele propriu -zise , fișiere auxiliare ).

2.2 Arhitectura unei baze de date
Datele din baza de date sunt păstrate conform unui model de organizare, utilizatorului
fiindu -I accesibile și vizibile acele date conform unui model . Pentru a putea fi gestionate,
datele unei b.d sunt descrise cu ajutorul unui limbaj specializat ce folosește structuri de
date . Astfel se obțin mai multe structuri ale bazei de date
Un sistem de baze de date poate fi văzut (structurat )din patru puncte de vedere
numite nivele: conceptual, extern, logic și fizic.

a. Nivelul conceptual
Aceste structuri de organizare implică și nivelele de interacțiune dintre b.d. și utilizatori :

Fig 2.1

LUCRARE DE DISERTAȚIE

4
2.2.1 Modele conceptuale pentru baze de date
După cum am văzut , baza de date este descrisă conceptual de administratorul b.d.
Pentru aceasta, el apelează la un model de date cu ajutorul căruia poate structura
informația din lumea reală pe care dorește să o păstreze. Modelul de date este de fapt un
fel de ghid pentru reprezentarea datelor. Acesta se referă doar la structura virtuală și cea
logică, nicidecum la structura fizică ( care structură fizică depinde de sistemul de operare și
de S.G.B.D.- ul folosit).

Există mai multe modele conceptuale principale folosite pentru modelarea conceptuală
a datelor, dintre acestea cele mai cunoscute fiind :
– modelul relațional
– modelul rețea
– modelul ierarhic
– modelul obiect pe obiect.
Fiecare model captează într -un anumit fel proprietățile lumii înconjurătoare pe care
dorim să o modelăm.
1. MODELUL RELATIONAL : introdus de Codd în 1970 .
Este un model simplu ce oferă independența datelor, model folosit astăzi în multe din
SGBD- urile existente pe piață .
Modelul relațional se bazează pe noțiunea matematică de relație , așa cum este
definită în teoria mulțimilor, și anume ca o submulțime a produsului cartezian a unei liste
finite de mulțimi numite domenii :
Modelul relațional al bazei de date constă dintr -o colecție de relații ce variază în timp
(relațiile se pot schimba prin operații de adăugare, ștergere și actualizare ) . De obicei relațiile sunt reprezentate sub forma unor tabele în care fiecare rând reprezintă un tuplu
(liniile se vor numi înregistrări ) și fiecare coloană reprezintă valorile tuplurilor dintr -un
domeniu dat al produsului cartezian ( sunt numite câmpuri, atribute ) . Din acest motiv , în modelele relaționale , bazele de date sunt de fapt tabele cu date , sau altfel zis sunt fișiere fizice ce au datele organizate logic sub formă de tabele.
Mulțimea tuturor schemelor relaționale correspunzătoare unei aplicații se numește schema
bazei de date relaționale, iar conținutul curent al relațiilor la un moment dat se numește de fapt bază de date relațională . De fapt, când vorbim de o bază de date concretă , va
trebui să definim structura bazei de date (adică capul de tabel) și să depunem date în baza de date ( adică liniile din tabel să le completăm).
O alt ă problemă importantă este cea a asocierilor între tabelele cu date . Aceste
asocieri între entități (după cum s -a văzut sunt trei tipuri 1- 1, 1-n, m-n) sunt de fapt relații (
toate perechile de realizări de entități cu valori din cele două entități aparțin de fapt produsului cartezian) . Mai mult toate asocierile dintre două entități pot fi stocate în formă tabelară .

În concluzie , modelul relațional este carateri zat prin unitatea și simplitatea
reprezentărilor , totul se reduce la tabele. De asemenea, modelul păstrează rigoarea
fundamentării sale matematice, fapt ce a permis definirea unor limbaje de nivel foarte înalt
( cum ar fi SQL) care utilizează elemente de algebră relațională.

LUCRARE DE DISERTAȚIE

5
2. Modelul ierarhic sau arborescent
A fost primul model utilizat în exploatarea bazelor de date și el presupune gruparea și
ierarizarea entităților într -o structu ră de arbore. Acest lucru presupune că fiecare nod care
nu este rădăcină are un singur nod superior și unul sau mai mulți descendenți.
Datele sunt organizate asemănător unui arbore . Utilizatorii văd datele ca și arbori
alcătuiți din tipuri de înregistrări interconectate .

Cu toate că oferă posibilitatea unei căutări rapide , există câteva dezavantaje :
– anumite structuri nu sunt supuse ierahizării;
– actualizarea este dificilă, de exemplu ștergerea unui nod implică ștergerea tuturor descendenților săi, iar adăugarea unui nod implică reorganizarea întregii baze de date.
Cel mai cunoscut sistem de gestiune a bazelor de date, de tip ierahic, este IMS
(Information Mangement System ), realizat de IBM pentru prelucrarea datelor din industria spațială . Acest SGBD are și variantă mai recentă, îmbunătățită,numită IMS/VS
(Information Mangement System/ Virtual Storage) .

Modelul rețea .
Este un model general de organizare a datelor , în care nu există restricția de la arbori
în care un nod trebuia să aibă un singur părinte (ca în cazul modelului arborescent)
Modelul rețea este cel mai apropiat de forma de reprezentare a bazelor de date sub
forma diagramelor entitate – relație. Baza de date poate fi reprezentată grafic printr -un graf
orientat numit de fapt rețea. Într -o rețea(adică într -un astfel de graf ) nodurile corespund
entităților și relațiile sunt de fapt arcele grafului,arce sim ple de la tată la fiu sau arce
duble,dacă relația este de forma 1- n .
În acest model se folosesc noțiunile de înregistrare logică și legătură . Înregistrarea se
aseamănă cu noțiunea de entitate de la cele relaționale și este de fapt un fișier logic care are drept câmpuri atributele entității. În plus , apar câmpurile de legătură , o deosebire
foarte mare față de modelul relațional. Mulțimea tuturor înregistrărilor de același tip au la bază un tip numit articol . Legătura este o asociere între două articole, deci o legătură
este de fapt o relație binară .
4. Modelul obiect pe obiect . Acesta este cel mai nou tip de modelare, încercând să
integreze principiile programării orientate pe obiect (Actor, Smalltalk, C++)și ale bazelor de date.
Ca o concluzie generală legată de cele trei modele de baze de date , modelul
relațional se impune prin simplitate, ceea ce permite folosirea lui și de către nespecialiști cu un randament bun. Trebuie să evidențiem avantajele modelului relațional față de celelalte modele : – structuri de date simple, operatori simpli, independența fizică și logică a datelor ,
ușurința dezvoltării aplicațiilor, definirea dinamică a datelor , posibilitatea dezvoltării bazelor de date distribuite.

În acest capitol s -au folosit informații din [1],[2],[3].

LUCRARE DE DISERTAȚIE

6

CAPITOLUL III
Baze de date SQL Server
3.1 Arhitectura Client -Server

Clientul – este entitatea care asigură interfața cu utilizatorul, lansează cereri de
executare a unor operații către o entitate server și se ocupă de punerea într -o
anumită formă a datelor primite de la server în urma executării operației.

Serverul – este entitatea care recepționează, interpretează și execută cererile
(operațiile) lansate de clienți. De asemenea, el furnizează răspunsul către client.

Cele două entități se pot găsi sub formă de calculatoare diferite, sau pot conviețui pe același calculator. În această din urmă situație, calculatorul trebuie să
aibă instalat un sistem de operare multi -proces, cele două entități menționate
regăsindu- se sub formă de procese distincte. Un client poate să efectueze cereri
către mai multe servere, iar un server poate satisface cererile lansate de mau mulți clienți.

Într-o arhitectură C/S, serverul poate să ofere mai multe tipuri de servicii clienților.
• Asigurarea interfețelor grafice pentru dialogul cu utilizatorul;
• Accesul la fișiere și baze de date gestionate de server;
• Execuția de programe;
Se evidențiază următoarele variante de C/S :
 Client server de prezentare – este varianta în care un proces gestionează numai
funcția de dialog cu utilizatorul, pentru gestiunea datelor și execuția de cod de
program având asigurate alte procese.
 Client server de date – este varianta în care o aplicație accesează datele gestionate
de un server prin intermediul unei aplicații client. Aplicația client accesează datele gestionate de server cu ajutorul cererilor SQL.
 Client server de procedură – este varianta în care o aplicație controlează prin
intermediul unei interfețe execuția procedurilor stocate pe server.

LUCRARE DE DISERTAȚIE

7
3.2 Microsoft SQL Server

SGBD- ul SQL Server , se încadrează în categoria servere- lor de baze de date.
Dintre avantajele pe care acesta le oferă se pot menționa :
 scalabilitate : SQL Server poate rula pe o varietate foarte mare de platforme
hardware (de la sisteme laptop până la servere multiprocesor).

Pentru a ușura dezvoltarea de aplicații, SQL Server posedă același model de
programare care este utilizat pentru toate sistemele de operare Windows .

 integrarea cu alte produse software : este integrat cu servere de e- mail ( MS
Exchange), de web ( MS Internet Information Service);
 permite formularea și execuția interogărilor cu ajutorul utilitarului English Query în
locul interogărilor SELECT;
 ușurință în instalare, utilizare și dezvoltarea de aplicații : cuprinde o serie de instrumente de administrare ( SQL Service Manager, Enterpri se Manager, Sql
Server Management ) și dezvoltare de aplicații ( Query Analyzer ) care cresc foarte
mult productivitatea.

1. Utilitare SQL Server
SQL Server dispune de un set de programe (utilitare) care simplifică foarte mult
administrarea bazei de date și c rearea de aplicații ce folosesc acest tip de server de
baze de date.

Figura 3.1

 Fereastra de cone ctare este afișată în figura 3.2

LUCRARE DE DISERTAȚIE

8
 se tastează în rubrica SQL Server numele sau adresa IP a calculatorului din rețea
pe care este instalat SQL Server (dacă rubrica este lăsată vidă sau se scrie ( local)
se consideră că acesta este calculatorul local).

Figura 3.2

În continuare se alege tipul de autentificare dorit (pe baza utilizatorilor definiți în sistemul de operare Windows NT – opțiunea Use SQL Server authentication) iar în
continuare se completează rubrica Login Name cu numele utilizatorului și rubrica
Password cu parola aferentă acestuia.

2. Caracteristici ale unei baze de date SQL Server
O bază de date este organizată în componente logice vizi bile utilizatorilor : tabele
care conțin înregistrări, vederi ( views ), indecși, proceduri stocate și declanșatori
(triggers ).
Fizic, o bază de date constă din cel puțin două fișiere :
 un fișier primar de date ( primary data files);
 un fișier jurnal care stochează toate modificările efectuate asupra bazei de
date;
Bazele de date sistem sunt utilizate de SQL Server astfel :
 master – conține configurările SQL Server -ului și datele referitoare la toți utilizatorii
bazei de date ;
 model – este o bază de date model care este duplicată de fiecare dată când
utilizatorul creează o nouă baze de date ;
 tempdb – este utilizată pentru a memora tabelele temporare și rezultatele
intermediare ale unor interogări complexe ;
 msdb – este utilizată de SQL Server Agent (aces ta este un serviciu care permite
automatizarea anumitor sarcini repetitive, supraveghează SQL Server și în caz de nevoie alertează administratorul asupra apariției anumitor evenimente)

LUCRARE DE DISERTAȚIE

9
3.2.1 Elemente de T -SQL 12

T-SQL (Transact -SQL) reprezintă varianta de limbaj SQL care este implementată
de SQL Server.

Pentru realizarea unei baze de date se poate utiliza comanda CREATE DATABASE care are următoarea sintaxă simplificată (elementele care sunt încadrate de paranteze [….] sunt opționale):

CREATE DATABASE nume
[ ON PRIMARY (FILENAME=’nume_fisier1.mdf ’ ) ]
[ LOG ON (FILENAME=’nume_fisier2.ldf ’) ]
unde :
 nume : reprezintă numele bazei de date ;
 ON PRIMARY : specifică explicit faptul că ’nume_fisier1.mdf reprezintă fișierul
primar al bazei de date ;
 LOG ON : permite specificarea explicită a numelui fișierului jurnal (log) prin
nume_fisier2.ldf .

 opțiunile NULL și NOT NULL specifică dacă atributul respectiv permite valori nule sau nu;
 PRIMARY KEY : câmpul este cheie primară ;
 FOREIGN KEY : câmpul este cheie externă, tabel_ref specifică tabela la care se face referință,
iar câmp_ref specifică câmpul la care cheia externă face referință ;
 ON DELETE : permite specificarea acțiunii care va fi realizată în cazu l ștergerii unor
înregistrări din tabela părinte : CASCADE – vor fi șterse și înregistrările corespunzătoare din
tabela copil sau nu – NO ACTION ;
 ON UPDATE : permite specificarea acțiunii care va fi realizată în cazul modificării unor
înregistrări din ta bela părinte : CASCADE – vor fi modificate și înregistrările corespunzătoare
din tabela copil sau nu – NO ACTION ;

În acest capitol s -au folosit informații din [4],[5] și [11].

LUCRARE DE DISERTAȚIE

10
CAPITOLUL IV
TEHNOLOGII INFORMATICE PE PLATFORMA .NET FRAMEWORK

4.1 .Net Framework

4.1.1 Prezentare generală
Platforma .NET este un cadru de dezvoltare a softului, sub care se vor
realiza, distribui si rula aplicaț iile de tip forme Windows, aplicaț ii WEB și servicii
WEB. Ea constă în trei părț i principale: Common Language Runtime, clasele
specifice platformei și ASP.NET. O infrastructură ajutătoare, Microsoft .NET
Compact Fr amework este un set de interfeț e de programare care permite
dezvol tatorilor realizarea de aplicaț ii pentru dispozitive mobile precum telefoane
inteligente si PDA- uri.

4.1.2. Arhitectura platformei Microsoft .NET

Figura 4.1

4.1.3. De ce Microsoft .NET Framework?
În primul rând pentru că ne oferă instrumente pe care le putem folosi și în alte
programe, oferă acces ușor la baze de date, permite realizarea desenelor sau a altor elemente grafice. Spațiul de nume System.Windows.Forms conține instrumente (controale) ce permit implementarea elementelor interfeței grafice cu utilizatorul.
Folosind aceste controale, puteți proiecta și dezvolta rapid și interactiv,
elementele interfeței grafice. Tot .NET vă oferă clase care efectuează majoritatea sarcinilor uzuale cu care s e confruntă programele și care plictisesc și fură timpul
programatorilor, reducând astfel timpul necesar dezvoltării aplicațiilor.

LUCRARE DE DISERTAȚIE

11

4.2 . Limbajul C#

4.2.1. Introducere

Limbajul C# a fost dezvoltat în cadrul Microsoft. Principalii creatori ai
limbajului sunt Anders Hejlsberg (autorul limbajului Turbo Pascal ș i membru al
echipei care a proiectat Borland Delphi ), Scott Wiltamuth și Peter Golde. Prima
implementare C# larg distribuită a fost lansată de către Microsoft ca parte a ini țiativei
.NET în iulie 2000.

C# este un limbaj simplu, cu circa 80 de cuvinte cheie și 12 tipuri de date
predefinite. El permite programarea structurată, modulară și orientată obiectual,
conform perceptelor moderne ale programării profesioniste.

4.2.2. Principiile programarii orie ntate obiect

Metodologiile de programare s -au modificat continuu.

4.2.2.1 Incapsularea
Incapsularea este un mecanism care combina codul si datele pe care le
manipuleaza, mentinand integritatea acestora fata de interferenta cu lumea
exterioara .
4.2.2.2. Polimorfismul
Polimorfismul este calitatea care permite unei interfete sa aiba acces la un
grup generic de actiuni . Termenul este derivat dintr – n cuvant grecesc avand
semnificatia “cu mai multe forme”.
4.2.2.3. Mostenirea
Mostenirea este procesul prin care un obiect poate dobandi caracteristicile
altui obiect .
Asadar, mecanismul mostenirii este cel care face posibil ca un obiect sa fie o
instanta a unui caz mai general .

4.2.2.4. Reutilizarea
Atunci cand este creata o clasa, aceasta poate fi u tilizata pentru a crea o
multime de obiecte . Prin utilizarea mostenirii si incapsularii clasa amintita poate fi
reutilizata . Nu mai este nevoie sa testam codul respectiv ci doar a il utlizam corect .

LUCRARE DE DISERTAȚIE

12
4.2.3. Structura unui program C#

O aplicație C# este formată din una sau mai multe clase, grupate în spații de
nume (namespaces). Este obligatoriu ca doar una din aceste clase să conțină un
„punct de intrare” (entry point), și anume metoda (funcția) Main.

Clasa (class), în termeni simplificați, reprezintă principalul element
structural și de organizare în limbajele orientate spre obiecte, grupând date cât și
funcții care prelucrează respectivele date.
Spațiul de nume (Namespaces): din rațiuni practice, pr ogramele mari, sunt
divizate în module, dezvoltate separat, de mai multe persoane. Din acest motiv,
există posibilitatea de a apărea identificatori cu același nume.
4.2.4.Sintaxa limbajului
Ca și limbajul C++ cu care se înrudește, limbajul C# are un alfabet format din
litere mari și mici ale alfabetului englez, cifre și alte semne. Vocabularul l imbajului
este format din acele „simboluri” cu semnificații lexicale în scrierea programelor:
cuvin te (nume), expresii, separatori, delimitatori și comentarii.

4.2.4.1 . Nume
Definiție: Prin nume dat unei variabile, clase, metode etc. înțelegem o
succesiune de caractere care îndeplinește anumite reguli.

4.2.4.2. Cuvinte cheie in C#
Cuvintele cheie sunt identificatori predefiniți cu semnificație specială pentru
compilator.
În general, cuvintele cheie nu pot fi folosite în programele pe care le scriem,
dându- le o altă semnificație. În cazul în care, totuși, dorim să le dăm o altă
semnificație, va tre bui să le scriem cu simbolul „ @” ca prefix. Datorită neclarităților
care pot să apară, se va evita folosirea cuvintelor rezervate în alte scopuri.

4.2.4.3 Constante
În C# există două modalități de declarare a constantelor: folosind const sau
folosind modificatorul readonly. Constantele declarate cu const trebuie să fie
inițializate la declararea lor.

LUCRARE DE DISERTAȚIE

13
4.2.4.4. Variabile
O variabilă în C# poate să conțină fie o valoare a unui tip elementar, fie o
referință la un obiect. C# este „case sensitive”, deci face distincție între litere mari și
mici.

4.2.5. De ce Visual C#?

Visual C# este unul din cele mai populare limbaje de programare din lume, fiind
folosit atât în mediul de afaceri, cât și în domeniul educațional. Este un limbaj
orientat pe obiect și poate realiza aproape orice. Limbajul Visual C# este simplu,
comenzile sunt simpl e, iar elementele de bază sunt foarte ușor de înțeles și de
utilizat. Odată cunoscute elementele de bază, se poate realiza orice proiect dorit, cu design- ul dorit .
Pe lângă toate acestea, C# permite întotdeauna convertirea programelor scrise în
versiuni anterioare.

4.3 ADO .NET

ADO.NET (ActiveX Data Objects) reprezintă o parte componentă a nucleului
.NET Framework ce permite conectarea la surse de date di verse, extragerea,
manipularea ș i actualizarea datelor.
Conexiunile deschise necesit ă alocarea de resurse sistem. Atunci când
menț inem mai multe conexiuni deschise server -ul de baze de date va r ăspunde mai
lent la comenzile clienț ilor întrucât cele mai multe baze de date permit un num ăr
foarte mic de conexiuni concurente.
ADO.NET permite și lucrul în stil conectat dar și lucrul în stil deconectat.
ADO.NET oferă instrumentele de utilizare ș i reprezentare XML pentru transferul
datelor între aplicaț ii și surse de date.
Aceste caracteristici sunt determinate în stabilirea beneficiilor furnizat e de
ADO.NET:

 Interoperabilitate
 Durabilitate
 Programabilitate
 Performanț ă
 Accesibilitate

LUCRARE DE DISERTAȚIE

14
4.3.1. Furnizori de date (Data Providers)

.NET Framework include SQL Server.NET Data Provider pentru interac țiune
cu Microsoft SQL Server, Oracle Data Provider pentru bazele de date Oracle și OLE
DB Data Provider pentru accesarea bazelor de date ce utiliteaz ă tehnologia OLE DB
pentru expunerea datelor (de exemplu Access, Excel sau SQL Server versiune mai veche decât 7.0) .
Furnizorul de date permite unei aplicaț ii să se conecteze la sursa de date,
execut ă comenzi și salveaz ă rezultate .

4.3.2 Componentele unui furnizor de date
Fiecare furnizor de date ADO.NET constă î n patru componente: Connection,
Command , DataReader , DataAdapter .

4.3.2.1 Componenta Connection
Înainte de orice opera ție cu o surs ă de date externă , trebuie realizat ă o conexiune
(legătură) cu acea surs ă. Clasele din categoria Connection ( SQLConnection,
OleDbConnection etc.) con țin date referitoare la sursa de date.

4.3.2.2. Componenta Command

Clasele din categoria Command ( SQLCommand, OleDbCommand etc.)
conțin date referitoare la o comandă SQL (SELECT, INSERT, DELETE, UPDATE) și
metode pentru executarea unei comenzi sau a unor proceduri stocate. Aceste clase
implementeaz ă interfa ța IDbCommand.

4.3.2.3. Componenta DataReader

Datele pot fi explorate în mod conectat (cu ajutorul unor obiecte din categoria
DataReader ), sau pot fi preluate de la surs ă (dintr -un obiect din categoria
DataAdapter ) și înglobate în aplicaț ia curent ă (sub forma unui obiect din categoria
DataSet).
Clasele DataReader permit parcurgerea într -un singur sens a sursei de date,
fără posibilitate de modificare a datelor la surs ă. Dacă se dorește modificarea
datelor la surs ă, se va utiliza ansamblul DataAdapter + DataSet .

LUCRARE DE DISERTAȚIE

15
4.3.2. 4. Componenta DataAdapter

Folosirea combinat ă a obiectelor DataAdapter și DataSet permite operaț ii de
selectare, ștergere, modificare și ad ăugare la baza de date. Clasele DataAdapter
genereaz ă obiecte care func ționeaz ă ca o interfaț ă între sursa de date și obiectele
DataSet interne aplica ției, permi țând prelucr ări pe baza de date.

4.3.3 DataSet

Un DataSet este format din Tables (colec ție format ă din obiecte de tip
DataTable; DataTable este compus la rândul lui dintr -o colec ție de DataRow și
DataColumn), Relations (colec ție de obiecte de tip DataRelation pentru memorarea
legăturilor p ărinte–copil) și ExtendedProperties ce conț ine propriet ăți defi nite de
utilizator.
Așadar, DataAdapter deschide o conexiune doar atunci când este nevoie și
o inchide imediat aceasta nu mai este necesar ă.

După ce au fost f ăcute modific ări într- un DataSet acestea trebuie scrise și în
baza de date. Actualizarea se face prin apelul metodei Update.

4.4 Visual Studio 2019

4.4.1 Notiuni introductive

. Această ultimă versiune a mediului de dezvoltare Microsoft, are ca scop
furnizarea unui set unic de instrumente pentru o mare varietate de necesitați de
dezvoltare. Intenția sa este de a fi util într -o gamă largă de situații, de la nevoile unei
echipe mari de dezvoltare răspândită pe trei continente, până la nevoile unui singur developer care lucră pe cont propriu.

4.4.2 Arhitect ura Microsoft Visual Studio 2019

Microsoft Visual Studio 2019 este compus din mai multe instrumente distincte.
Aceste părți se pot conecta una cu cealaltă, cu alte tehnologii Microsoft, sau și cu
alte tehnologii non- Microsoft.
Mai jos, ne sunt prezentate principalele componente Microsoft Visual Stu dio
2019, precum și unele din alte tehnologii, cu care acestea comunică cel mai des.
-Visual Studio Team Foundation Server (TFS) 2019 – după cum ne
sugereaz ă figura de mai sus, TFS reprezintă astăzi centrul blocului Visual Studio.
Fiecare parte se conectează la TFS, care acționează ca un HUB central pentru
informațiile care circulă pe parcursul procesului de dezvoltare.

LUCRARE DE DISERTAȚIE

16
-Visual Studio 2019 IDE (integrated development environment) –Acest
instrument permite crearea, compilarea și rularea de cod, împr eună cu suportul
necesar pentru testare și alte funții de dezvoltare.

-Visual Studio Team Explorer 2019 – acest instrument se concentrează pe a
permite utilizatorilor să acceseze informațiile în TFS, cum ar fi rapoartele. Se poate
rula pe cont propriu (cum se poate observa și în figura de mai sus) sau în interiorul
Visual Studio IDE.

4.4.3 Obiecte Visual Studio pentru construirea interfețelor client.

Pentru a înc epe lucrul în Visual Studio 2019, trebuie creat un nou proiect din meniul
care apare odată cu deschiderea programului sau din meniul File -New Project.

Figura 4.2

Din chenarul din partea stângă a ferestrei se alege limbajul de programare utilizat
pentru noul proiect. Acest proiect a fost realizat în limbajul de programare C#.

LUCRARE DE DISERTAȚIE

17
4.4.3.1 Formulare

În cadrul aplicațiilor cu baze de date, tabelele sunt actualizate prin intermediul
unor machete specializate numite formulare (forms) . Formularele asigură:
a. Interfață prietenoasă cu utilizatorul final, realizată prin intermediul
diferitelor controale (butoane, casete text, etc.) sau alte elemente grafice
încorporate;
b. Actualizarea concomitentă a mai multor tabele prin intermediul
subformularelor;
c. Reguli de validare suplimentare celor definite la nivelul tabelelor.
Formularele din Visual Studio 2010 crează interfața utilizatorului pentru tabele,
având avantajul prezentării datelor într -un mod atrăgător și organizat. Formularele
sunt compuse dintr -o colecție de elemente constructive individuale denumite
controale sau obiecte de control. Formularele pot conține și subformulare.
Proiectarea unei ferestre are la bază un cod complex, generat automat pe măsură
ce noi desemnăm componentele și comportamentul acesteia. În fapt, acest cod
realizează: derivarea unei clase proprii din System.Window s.Forms.Form, clasă
care este înzestrată cu o colecție de controale (inițial vidă).

4.4.3.2 Modificarea proprietăților formularului.

Pentru a modifica aspectul formularului creat se va lucra cu fereastra de
proprietăți. Avand formularul selectat, în colțul din dreapta jos avem fereastra de
proprietăți :

Figura 4.3

LUCRARE DE DISERTAȚIE

18
În această fereastră avem posibilitatea modificării complete a formularului, prin
modificarea anumitor proprietăți cum ar fi :
(Name) – numele pe care îl va avea formularul în acest proiect.
BackColor – culoarea de fundal a formularului.
BackgroundImage – posibilitatea inserării unei imagini pe fundalul formularului.
FormBordersStyle – oferă posibilitatea modificării marginilor formularului,
precum și blocarea lor pentru a nu face posibilă modificarea lor de către utilizator.
Icon – alegerea unei iconițe pentru formular, un obiect de tip *.ico (colțul din
stânga sus).
MaximizeBox/MinimizeBox – determina daca formularul are sau nu
posibilitatea maximizării / minimizării.
Opacity – pentru a regla procentul de opacitate al formularului.
Size ( Width și Height ) – determină marimea formularului (rezoluția sa).
StartPosition – determină determină poziția ferestrei atunci când aceasta
apare prima dată.

Text – titlul formularului, care v -a fi afișat către utilizator, etc.

4.4.3.3. Adăugarea de controale pe formular.

Pentru a realiza acest lucru, mai întâi trebuie accesată caseta cu instrumente
Visua l Studio 2019: Toolbox -ul. De -alungul părții stângi a programului ar trebui să
găsim o etichetă Toolbox, care poate fi accesată cu un simplu click.

LUCRARE DE DISERTAȚIE

19
4.4.3.4. Prezentarea casetei cu instrumente Visual C# . Controale în formulare.

Adăugarea controalelor se poate face numai în etapele de creare sau
modificare a formularelor, astfel:

a) Din fereastra Toolbox se selectează butonul aferent controlului dorit;
b) Se descrie, cu ajutorul mouse -lui, o zonă dreptunghiulară pe suprafața
formularului, definind astfel poziția și dimensiunea noului control.

Figura 4.5

Fig. 4.4

LUCRARE DE DISERTAȚIE

20
Instr. Denumire Funcție

Pointer Permite selecția unuia sau a mai
multor obiecte de pe formular.

Button Crează un buton care, atunci când
este apasat, declanșează un eveniment
care poate executa o procedură.

CheckBox Crează o casetă de validare care
comută din starea On în starea Off la dispoziția userului.

CheckedListBo
x Crează o casetă pentru afișarea unei
liste de date cu c âte un checkbox în fața
fiecarei date.

ComboBox Crează o casetă combinată cu o
casetă de text editabilă în care se poate introduce o valoare, precum și o listă derulantă din care se poate selecta o valoare.

DateTimePicker Crează o casetă care permite userului
să aleagă o data anume, si să o afișeze într-un anumit format.
Label Crează o etichetă text.
LinkLabel Crează o etichetă text care permite
utilizarea hyperlink -ului precum și
formatarea acestuia.
ListBox Crează o casetă cu listă derulantă din
care se poate selecta o valoare.

ListView Crează o casetă cu listă derulantă cu
foarte multe opțiuni de editare, din care se poate selecta o valoare.
MonthCalendar Crează un calendar lunar din care
userul poate selecta o dată dorită.
NotifyIcon Afișează o iconiță în zona de notificare
(lângă ceas) pe timpul rulării.
NumericUpDow
n Afișează o valoare numerică pe care
userul o poate incrementa / decrementa.
PictureBox Afișează o imagine pe formular sau
intr-un raport.

LUCRARE DE DISERTAȚIE

21

4.4.3.5. Event -urile controalelor.

Proprietățile unui control sunt afișate în fereastra Properties, atunci când
controlul respectiv este selectat. Ca și în cazul formularelor, metodele aferente
controalelor sunt grupate în două categorii (Properties și Events).
Definirea unei funcții de tratare a unui eveniment asociat controlului se realizează
prin selectarea grupului Events din ferestra Properties a controlului respectiv și
alegerea evenimentului dorit.

4.4.4 De ce Visual Studio?

Visual Studio este un mediu de programare foarte flexibil si intuitiv. Cele mai
noi versiuni pot fi folosite în mod gratuit, iar actualizarile sunt frecvente.
Visual Studio este folosit de o mare parte a comunității IT pentru numeroasele
limbaje de programare pe care le suportă.

În acest capitol s -au folosit informații din: [8],[9],[10],[11] ș i [12].

LUCRARE DE DISERTAȚIE

22
CAPITOLUL V

PROI ECTAREA SI IMPLEMENTAREA APLICAȚIEI PENTRU
GESTIUNEA UNUI MAGAZIN DE PIESE ELECTRICE

5.1 Analiza problemei

În aplicația de fațǎ s -a pus problema gestiunii unui magazine de piese electrice sau
pentru un depozit de piese electrice/electronice. Se dorește crearea unei aplicații care sǎ monitorizeze inventarul, vânzările, cumpărările, furnizorii și clienții , precum și
istoricul tranzacțiilor efectuate.
Produsele pot fi vandute sau cumpărate, este ținut un stoc al acestora, împreună cu o listă de clienți și furnizori de produse.
Astfel, pe baza datelor existente în baza de date aplicația interfață trebuie să
permită:
♦ Vizualizarea tranzacțiilor împreună c u datele furnizate.
♦ Gestiunea inventarului de produse.
♦ Evidența furnizorilor/clienților împreună cu date despre aceștia.
♦ Înregistrarea tranzacțiilor efectuate și modificarea în timp real al
inventarului in funcție de numărul de produse vândute/cumpărate.
♦ Vizualizarea produselor existente pe stoc.

LUCRARE DE DISERTAȚIE

23
5.2 Proiectarea bazei de date

5.2.1 Proiectare tabelelor bazei de date

Baza de date a fost creată în Microsoft SQL Server database.
Limbajul care st ă la baza ei este T- SQL.

Baza de date va fi următoarea:
Tabelele bazei de date MagazinPiese.db:
Vom prezenta mai departe, fiecare table împreună cu rolul și structura
acestuia:

1. Tabelul “Categories” reține datele despre categoriile de produse.

Figura 5.1

LUCRARE DE DISERTAȚIE

24
2. Tabelul “Dea_Cust” reține datele despre furnizori și clienți.(dealer,customer)

Figura 5.2

3. Tabelul “Products” conține datele produselor înregistrate

Figura 5.4

4. Tabelul “ Transaction Detail ” conține detaliile tranzac țiilor efectuate

Figura 5.5

LUCRARE DE DISERTAȚIE

25
5. Tabelul “ Users ” conține detaliile de utilizator.

Figura 5.6

6. Tabelul “Transactions” contine tranzacțiile effectuate.

Figura 5.7

LUCRARE DE DISERTAȚIE

26
5.3 Realizarea interfeței aplicației

Astăzi nu există aplicație care să nu aibă o interfață grafică prin intermediul
căreia să se acceseze opțiunile programului. Prin urmare, s -a realizat și s -a
implementat o interfață principală care să permită accesarea diverselor opțiuni ale
aplicației d in meniu, folosind atât mouse- ul, cât și tastatura. Interfața a fost realizată
în Microsoft Visual Studio 2019, folosind lim bajul de programare Visual C#.

Figura 5.8

5.3.1 Forma “Logare ”

In aceasta formă, utilizatorul trebuie să introducă datele de autentificare,
aceastea se află în baza de date în tabelul Users.
Codul folosit în spatele acestei forme este următorul:

using MagazinPiese.BLL;
using MagazinPiese.DAL;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MagazinPiese.UI
{
public partial class frmLogin : Form

LUCRARE DE DISERTAȚIE

27
{
public frmLogin()
{
InitializeComponent();
cmbUserType.SelectedIndex = 1;
}

loginBLL l = new loginBLL();
loginDAL dal = new loginDAL();
public static string loggedIn;
private void pboxClose_Click(object sender, EventArgs e)
{
//Code to close this form this.Close();
}

private void btnLogin_Click(object sender, EventArgs e)
{
l.username = txtUsername.Text.Trim();
l.password = txtPassword.Text.Trim();
l.user_type = cmbUserType.Text.Trim();
//Checking the login credentials
bool sucess = dal.loginCheck(l);
if(sucess==true)
{
//Login Successfull MessageBox.Show("Autentificare cu succes!");
loggedIn = l.username;
//Need to open Respective Forms based on User Type
switch(l.user_type)
{
case "Admin":
{
//Display Admin Dashboard frmAdminDashboard admin = new frmAdminDashboard();
admin.Show();
this.Hide();
}
break;

case "User":
{
//Display User Dashboard
frmUserDashboard user = new frmUserDashboard();
user.Show(); this.Hide();
}
break;

default:
{
//Display an error message
MessageBox.Show("Invalid User Type.");
}
break;
}

LUCRARE DE DISERTAȚIE

28
}
else
{
//login Failed MessageBox.Show("Autentificarea a esuat. Incearca din nou!");
}
}

private void LblUsername_Click(object sender, EventArgs e)
{
}
private void CmbUserType_SelectedIndexChanged(object sender, EventArgs
e)
{

}
}
}

Figura 5.9

5.3.2 Forma “ Panou utilizator ” conține butoane care îndeplinesc diferite
funcții necesare în utilizarea aplicației . Acestea sunt prezentate mai jos.

namespace MagazinPiese
{
public partial class frmUserDashboard : Form
{
public frmUserDashboard()

LUCRARE DE DISERTAȚIE

29
{
InitializeComponent();
}
//Set a public static method to specify whether the form is purchase or
sales
public static string transactionType;
private void frmUserDashboard_FormClosed(object sender,
FormClosedEventArgs e) {
frmLogin login = new frmLogin();
login.Show(); this.Hide();
}

private void frmUserDashboard_Load(object sender, EventArgs e)
{
lblLoggedInUser.Text = frmLogin.loggedIn;
}

private void dealerAndCustomerToolStripMenuItem_Click(object sender,
EventArgs e)
{
frmDeaCust DeaCust = new frmDeaCust();
DeaCust.Show();
}

private void purchaseToolStripMenuItem_Click(object sender, EventArgs e)
{
//set value on transactionType static method
transactionType = "Purchase";
frmPurchaseAndSales purchase = new frmPurchaseAndSales();
purchase.Show();

}

private void salesFormsToolStripMenuItem_Click(object sender, EventArgs
e)
{
//Set the value to transacionType method to sales
transactionType = "Sales";
frmPurchaseAndSales sales = new frmPurchaseAndSales();
sales.Show();

}

private void inventoryToolStripMenuItem_Click(object sender, EventArgs
e)
{
frmInventory inventory = new frmInventory();
inventory.Show();
}
}
}

LUCRARE DE DISERTAȚIE

30

Figura 5.10

5.3.3 Forma “ Cumpărare” și forma Vânzare conțin butoane care îndeplinesc
diferite funcții necesare în gestionarea cumpărării/vânzării de produse. In aceste
forme gasim functii de cautare, adaugare, calcul, datagridview. Dupa introducerea
tuturor datelor, dupa butonul Salvare, se va genera o factura pentru imprimare.
Aceste două forme sunt identice ca aspect, dar gestionează produsele din inventar
în mod diferit, una adăugând, alta scăzând.

using MagazinPiese.BLL;
using MagazinPiese.DAL;
using DGVPrinterHelper; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Transactions;
using System.Windows.Forms;

namespace MagazinPiese.UI
{
public partial class frmPurchaseAndSales : Form
{

LUCRARE DE DISERTAȚIE

31
public frmPurchaseAndSales()
{
InitializeComponent(); }

private void pictureBoxClose_Click(object sender, EventArgs e)
{
this.Hide();
}
DeaCustDAL dcDAL = new DeaCustDAL();
productsDAL pDAL = new productsDAL();
userDAL uDAL = new userDAL();
transactionDAL tDAL = new transactionDAL();
transactionDetailDAL tdDAL = new transactionDetailDAL();
DataTable transactionDT = new DataTable();
private void frmPurchaseAndSales_Load(object sender, EventArgs e)
{
//Get the transactionType value from frmUserDashboard string type = frmUserDashboard.transactionType;
//Set the value on lblTop
lblTop.Text = type;
//Specify Columns for our TransactionDataTable
transactionDT.Columns.Add("Product Name");
transactionDT.Columns.Add("Rate");
transactionDT.Columns.Add("Quantity");
transactionDT.Columns.Add("Total");
}

private void txtSearch_TextChanged(object sender, EventArgs e)
{
//Get the keyword fro the text box
string keyword = txtSearch.Text;

if(keyword=="")
{
//Clear all the textboxes
txtName.Text = "";
txtEmail.Text = "";
txtContact.Text = "";
txtAddress.Text = "";
return;
}
//Write the code to get the details and set the value on text boxes
DeaCustBLL dc = dcDAL.SearchDealerCustomerForTransaction(keyword);
//Now transfer or set the value from DeCustBLL to textboxes
txtName.Text = dc.name;
txtEmail.Text = dc.email;
txtContact.Text = dc.contact;
txtAddress.Text = dc.address; }
private void txtSearchProduct_TextChanged(object sender, EventArgs e)
{
//Get the keyword from productsearch textbox

LUCRARE DE DISERTAȚIE

32
string keyword = txtSearchProduct.Text;

//Check if we have value to txtSearchProduct or not
if(keyword=="")
{
txtProductName.Text = ""; txtInventory.Text = "";
txtRate.Text = "";
TxtQty.Text = "";
return;
}

//Search the product and display on respective textboxes
productsBLL p = pDAL.GetProductsForTransaction(keyword);
//Set the values on textboxes based on p object
txtProductName.Text = p.name;
txtInventory.Text = p.qty.ToString();
txtRate.Text = p.rate.ToString(); }

private void btnAdd_Click(object sender, EventArgs e)
{
//Get Product Name, Rate and Qty customer wants to buy
string productName = txtProductName.Text;
decimal Rate = decimal.Parse(txtRate.Text);
decimal Qty = decimal.Parse(TxtQty.Text);

decimal Total = Rate * Qty; //Total=RatexQty

//Display the Subtotal in textbox
//Get the subtotal value from textbox
decimal subTotal = decimal.Parse(txtSubTotal.Text); subTotal = subTotal + Total;

//Check whether the product is selected or not
if(productName=="") {
//Display error MEssage MessageBox.Show("Alegeti produsul inainte. Incercati din nou!");
}
else
{
//Add product to the dAta Grid View transactionDT.Rows.Add(productName,Rate,Qty,Total);

//Show in DAta Grid View
dgvAddedProducts.DataSource = transactionDT;
//Display the Subtotal in textbox
txtSubTotal.Text = subTotal.ToString();

//Clear the Textboxes
txtSearchProduct.Text = ""; txtProductName.Text = "";
txtInventory.Text = "0.00";
txtRate.Text = "0.00";
TxtQty.Text = "0.00";
}

LUCRARE DE DISERTAȚIE

33
}

private void txtDiscount_TextChanged(object sender, EventArgs e)
{
//Get the value fro discount textbox
string value = txtDiscount.Text;

if(value=="") {
//Display Error Message
MessageBox.Show("Adaugati discount- ul inainte!");
}
else
{
//Get the discount in decimal value
decimal subTotal = decimal.Parse(txtSubTotal.Text);
decimal discount = decimal.Parse(txtDiscount.Text);

//Calculate the grandtotal based on discount decimal grandTotal = ((100 – discount) / 100) * subTotal;

//Display the GrandTotla in TextBox
txtGrandTotal.Text = grandTotal.ToString(); }

}

private void txtVat_TextChanged(object sender, EventArgs e)
{
//Check if the grandTotal has value or not if it has not value then
calculate the discount first
string check = txtGrandTotal.Text;
if(check=="") {
//Deisplay the error message to calcuate discount
MessageBox.Show("Calculati discount- ul si adaugati Total- ul
inainte!.");
}
else {
//Calculate VAT //Getting the VAT Percent first
decimal previousGT = decimal.Parse(txtGrandTotal.Text);
decimal vat = decimal.Parse(txtVat.Text);
decimal grandTotalWithVAT=((100+vat)/100)*previousGT;

//Displaying new grand total with vat
txtGrandTotal.Text = grandTotalWithVAT.ToString();
txtPaidAmount.Text = grandTotalWithVAT.ToString();

}
}

private void txtPaidAmount_TextChanged(object sender, EventArgs e)
{
//Get the paid amount and grand total
decimal grandTotal = decimal.Parse(txtGrandTotal.Text);
decimal paidAmount = decimal.Parse(txtPaidAmount.Text);

LUCRARE DE DISERTAȚIE

34

decimal returnAmount = paidAmount – grandTotal;
//Display the return amount as well
txtReturnAmount.Text = returnAmount.ToString();
}

private void btnSave_Click(object sender, EventArgs e) {
//Get the Values from PurchaseSales Form First
transactionsBLL transaction = new transactionsBLL();

transaction.type = lblTop.Text;
//Get the ID of Dealer or Customer Here
//Lets get name of the dealer or customer first
string deaCustName = txtName.Text;
DeaCustBLL dc = dcDAL.GetDeaCustIDFromName(deaCustName);
transaction.dea_cust_id = dc.id;
transaction.grandTotal =
Math.Round(decimal.Parse(txtGrandTotal.Text),2);
transaction.transaction_date = DateTime.Now; transaction.tax = decimal.Parse(txtVat.Text);
transaction.discount = decimal.Parse(txtDiscount.Text);

//Get the Username of Logged in user string username = frmLogin.loggedIn;
userBLL u = uDAL.GetIDFromUsername(username);

transaction.added_by = u.id;
transaction.transactionDetails = transactionDT;
//Lets Create a Boolean Variable and set its value to false
bool success = false;

//Actual Code to Insert Transaction And Transaction Details using (TransactionScope scope = new TransactionScope())
{
int transactionID = – 1;
//Create aboolean value and insert transaction
bool w = tDAL.Insert_Transaction(transaction, out
transactionID);

//Use for loop to insert Transaction Details
for(int i=0;i<transactionDT.Rows.Count;i++)
{
//Get all the details of the product
transactionDetailBLL transactionDetail = new
transactionDetailBLL();
//Get the Product name and convert it to id
string ProductName = transactionDT.Rows[i][0].ToString();
productsBLL p = pDAL.GetProductIDFromName(ProductName);

transactionDetail.product_id = p.id;
transactionDetail.rate =
decimal.Parse(transactionDT.Rows[i][1].ToString());

LUCRARE DE DISERTAȚIE

35
transactionDetail.qty =
decimal.Parse(transactionDT.Rows[i][2].ToString());
transactionDetail.total =
Math.Round(decimal.Parse(transactionDT.Rows[i][3].ToString()),2);
transactionDetail.dea_cust_id = dc.id;
transactionDetail.added_date = DateTime.Now;
transactionDetail.added_by = u.id;
//Here Increase or Decrease Product Quantity based on Purchase or sales
string transactionType = lblTop.Text;

//Lets check whether we are on Purchase or Sales
bool x=false;
if(transactionType=="Purchase")
{
//Increase the Product
x = pDAL.IncreaseProduct(transactionDetail.product_id,
transactionDetail.qty);
}
else if(transactionType=="Sales") {
//Decrease the Product Quntiyt
x = pDAL.DecreaseProduct(transactionDetail.product_id,
transactionDetail.qty);
}

//Insert Transaction Details inside the database
bool y = tdDAL.InsertTransactionDetail(transactionDetail);
success = w && x && y;
}

if (success == true)
{
//Transaction Complete
scope.Complete();

//Code to Print Bill
DGVPrinter printer = new DGVPrinter();

printer.Title = "\ r\n\r\n\r\n Magazin Piese electrice HD
\r\n\r\n";
printer.SubTitle = "Hunedoara, Romania \ r\n Telefon: 0745-
123-123 \r\n\r\n";
printer.SubTitleFormatFlags = StringFormatFlags.LineLimit |
StringFormatFlags.NoClip;
printer.PageNumbers = true;
printer.PageNumberInHeader = false;
printer.PorportionalColumns = true;
printer.HeaderCellAlignment = StringAlignment.Near;
printer.Footer = "Discount: "+ txtDiscount.Text +"% \ r\n" +
"TVA: " + txtVat.Text + "% \ r\n" + "Total: "+ txtGrandTotal.Text +"% \r\n"
+"Data: "+ DateTime.Now + "\ r\n\r\n" +"Multumim pentru colaborare!";
printer.FooterSpacing = 15; printer.PrintDataGridView(dgvAddedProducts);

MessageBox.Show("Tranzactie efectuata cu succes!");
//Celar the Data Grid View and Clear all the TExtboxes

LUCRARE DE DISERTAȚIE

36
dgvAddedProducts.DataSource = null;
dgvAddedProducts.Rows.Clear();

txtSearch.Text = "";
txtName.Text = "";
txtEmail.Text = "";
txtContact.Text = "";
txtAddress.Text = ""; txtSearchProduct.Text = "";
txtProductName.Text = "";
txtInventory.Text = "0";
txtRate.Text = "0";
TxtQty.Text = "0";
txtSubTotal.Text = "0"; txtDiscount.Text = "0";
txtVat.Text = "0";
txtGrandTotal.Text = "0";
txtPaidAmount.Text = "0";
txtReturnAmount.Text = "0"; }
else
{
//Transaction Failed
MessageBox.Show("Tranzactie esuata!");
}
}
}
private void LblcalculationTitle_Click(object sender, EventArgs e)
{

}

private void Panel1_Paint(object sender, PaintEventArgs e)
{

}

private void DtpBillDate_ValueChanged(object sender, EventArgs e)
{
}
}
}

LUCRARE DE DISERTAȚIE

37
5.3.4 Forma “Inventar” conț ine inventarul de produse. Acesta poate fi foarte ușor
vizualizat in datagridview și se poate folosi și funcția de căutare pe categorii.

Figura 5.11

namespace MagazinPiese.UI
{
public partial class frmInventory : Form
{
public frmInventory()
{
InitializeComponent();
}
categoriesDAL cdal = new categoriesDAL();
productsDAL pdal = new productsDAL();
private void pictureBoxClose_Click(object sender, EventArgs e)
{
//Addd Functionality to Close this form
this.Hide();
}

private void frmInventory_Load(object sender, EventArgs e)
{
//Display the CAtegories in Combobox
DataTable cDt = cdal.Select();

cmbCategories.DataSource = cDt;

//Give the Value member and display member for Combobox
cmbCategories.DisplayMember = "title";
cmbCategories.ValueMember = "title";

//Display all the products in Datagrid view when the form is loaded
DataTable pdt = pdal.Select();

LUCRARE DE DISERTAȚIE

38
dgvProducts.DataSource = pdt;
}

private void cmbCategories_SelectedIndexChanged(object sender, EventArgs e)
{
//Display all the Products Based on Selected CAtegory

string category = cmbCategories.Text;
DataTable dt = pdal.DisplayProductsByCategory(category);
dgvProducts.DataSource = dt;
}

private void btnAll_Click(object sender, EventArgs e)
{
//Display all the productswhen this button is clicked
DataTable dt = pdal.Select();
dgvProducts.DataSource = dt;
}

private void LblCategory_Click(object sender, EventArgs e)
{

}

private void DgvProducts_CellContentClick(object sender, DataGridViewCellEventArgs
e)
{
}
}
}

5.3.5 Forma “ Furnizor și client ” În această formă, se pot gestiona furnizorii și
clienții, se pot vizualiza, adăuga, actualiza sau șterge.

Figura 5.12

LUCRARE DE DISERTAȚIE

39
namespace MagazinPiese.UI
{
public partial class frmDeaCust : Form
{
public frmDeaCust()
{
InitializeComponent();
}

private void pictureBoxClose_Click(object sender, EventArgs e)
{
//Write the code to close this form this.Hide();
}

DeaCustBLL dc = new DeaCustBLL();
DeaCustDAL dcDal = new DeaCustDAL();

userDAL uDal = new userDAL();
private void btnAdd_Click(object sender, EventArgs e)
{
//Get the Values from Form dc.type = cmbDeaCust.Text; dc.name = txtName.Text;
dc.email = txtEmail.Text;
dc.contact = txtContact.Text;
dc.address = txtAddress.Text;
dc.added_date = DateTime.Now;
//Getting the ID to Logged in user and passign its value in dealer
or cutomer module
string loggedUsr = frmLogin.loggedIn;
userBLL usr = uDal.GetIDFromUsername(loggedUsr);
dc.added_by = usr.id;
//Creating boolean variable to check whether the dealer or cutomer
is added or not
bool success = dcDal.Insert(dc);

if(success==true)
{
//Dealer or Cutomer inserted successfully
MessageBox.Show("Furnizorul sau clientul a fost adaugat cu
succes!");
Clear();
//Refresh Data Grid View
DataTable dt = dcDal.Select();
dgvDeaCust.DataSource = dt;
}
else {
//Nu s- a putut adauga furnizorul sau clientul!
}
}
public void Clear()
{
txtDeaCustID.Text = "";
txtName.Text = "";
txtEmail.Text = "";

LUCRARE DE DISERTAȚIE

40
txtContact.Text = "";
txtAddress.Text = "";
txtSearch.Text = "";
}

private void frmDeaCust_Load(object sender, EventArgs e)
{
//Refresh Data Grid View
DataTable dt = dcDal.Select();
dgvDeaCust.DataSource = dt;
}

private void dgvDeaCust_RowHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
//int variable to get the identityof row clicked int rowIndex = e.RowIndex;
txtDeaCustID.Text = dgvDeaCust.Rows[rowIndex].Cells[0].Value.ToString();
cmbDeaCust.Text =
dgvDeaCust.Rows[rowIndex].Cells[1].Value.ToString();
txtName.Text = dgvDeaCust.Rows[rowIndex].Cells[2].Value.ToString(); txtEmail.Text = dgvDeaCust.Rows[rowIndex].Cells[3].Value.ToString();
txtContact.Text =
dgvDeaCust.Rows[rowIndex].Cells[4].Value.ToString();
txtAddress.Text =
dgvDeaCust.Rows[rowIndex].Cells[5].Value.ToString();
}

private void btnUpdate_Click(object sender, EventArgs e)
{
//Get the values from Form
dc.id = int.Parse(txtDeaCustID.Text);
dc.type = cmbDeaCust.Text;
dc.name = txtName.Text;
dc.email = txtEmail.Text; dc.contact = txtContact.Text;
dc.address = txtAddress.Text;
dc.added_date = DateTime.Now;
//Getting the ID to Logged in user and passign its value in dealer
or cutomer module
string loggedUsr = frmLogin.loggedIn;
userBLL usr = uDal.GetIDFromUsername(loggedUsr); dc.added_by = usr.id;

//create boolean variable to check whether the dealer or customer is
updated or not
bool success = dcDal.Update(dc);
if(success==true)
{
//Dealer and Customer update Successfully
MessageBox.Show("Furnizorul sau clientul a fost actualizat cu
succes!");
Clear();
//Refresh the Data Grid View
DataTable dt = dcDal.Select();

LUCRARE DE DISERTAȚIE

41
dgvDeaCust.DataSource = dt;
}
else {
//Failed to udate Dealer or Customer
MessageBox.Show("Eroare la actualizarea furnizorului sau
clientului!");
}
}

private void btnDelete_Click(object sender, EventArgs e)
{
//Get the id of the user to be deleted from form
dc.id = int.Parse(txtDeaCustID.Text);
//Create boolean variable to check wheteher the dealer or customer
is deleted or not
bool success = dcDal.Delete(dc);

if(success==true)
{
//Dealer or Customer Deleted Successfully MessageBox.Show("Furnizorul sau clientul a fost sters cu succes!");
Clear();
//Refresh the Data Grid View
DataTable dt = dcDal.Select();
dgvDeaCust.DataSource = dt;
}
else
{
//Dealer or Customer Failed to Delete
MessageBox.Show("Eroare la stergerea furnizorului sau clientului!");
}
}

private void txtSearch_TextChanged(object sender, EventArgs e)
{
//Get the keyowrd from text box
string keyword = txtSearch.Text;

if(keyword!=null)
{
//Search the Dealer or Customer
DataTable dt = dcDal.Search(keyword);
dgvDeaCust.DataSource = dt; }
else {
//Show all the Dealer or Customer
DataTable dt = dcDal.Select();
dgvDeaCust.DataSource = dt; }
}

private void LblID_Click(object sender, EventArgs e)

LUCRARE DE DISERTAȚIE

42

CONCLUZII
Tehnologiile informatice se pot folosi astazi in aproape toate domeniile de
activitate . Aplicațiile specifice utilizează baze de date și medii de programare
dedicate numite sisteme de gestiune a bazelor de date.

Lucrarea abordează mai multe tehnologii informatice pentru a permite
evidența abonaților intr -un complex sportiv . Se utilizează tehnolologii informatice
existente pe platforma NET FRAMEWORK.
Studiul de caz : Aplicație pentru gestiunea unui magazine de piese electrice.
Ce arată modul de integrare a unei baze de date proprietare cu interfete dezvoltate
pe platform a Net Framework. Studiul de caz propune o soluție de integrare a
bazelor de date SQL Server cu interfețe dezvoltate in NetFramework. Sunt alese
baze de date relaționale, iar interfata este programată în C#.

Studiul de caz folosește baze de date SQL Server pentru stocarea datelor, iar
pentru construirea interfeței client, interfețe Visual Studio, utilizând limbajul de programar e C#. Soluția aleasă permite stocarea datelor și accesarea lor prin
intermediul interfețelor client. Sunt folosite obiecte ADO.NET existente pe plat forma
NetFramework .

LUCRARE DE DISERTAȚIE

43
BIBLIOGRAFIE

[1]. Grupul BDASEIG – Baze de date. Fundamente teoretice și practice, Editura Infomega,
2002.

[2]. Octavian Bâscă – Baze de date, Editura ALL, 1998.
[3]. Florescu V, Staciu V. – Baze de date, Editura Economic ă, Bucuresti 1999.

[4]. Muscalagiu I, Petras. T. – Baze de date. SGBD -ul Visual FoxPro , Editura Mirton,
Timisoara 2002.

[5]. Kevin Kline – SQL in a Nutshell: A desktop quick reference, O’Reilly & Associates,
2000.
[6]. Herbert Schildt, C#: A Beginner’s Guide,(2001) .
[7]. MSDN Microsoft – Documentația pentru Microsoft Visual Studio, SQL Server.
[8]. Karli Watson, Beginning C# 2005 Databases, Wiley Publishing, Inc (2006);

[9]. Bradley L. Jones, SAMS Teach Yourself the C# Language in 21 Days, ( 2004);

[10]. MSDN Microsoft – Documentația pentru .net Framework
[11]. MSDN Microsoft – Documentația pentru Microsoft Visual Studio, SQL Server.

[12]. Mihai Tătăran, Petru Jucovschi, Tudor -Ioan Salomie – Introducere în programarea
.Net Framework.

Similar Posts