R aducu-R azvan Gheorghe [616675]

UNIVERSITATEA "LUCIAN BLAGA" DIN SIBIU
FACULTATEA DE S TIINT E
DEPARTAMENTUL DE MATEMATIC A S I INFORMATIC A
MATEMATIC A INFORMATIC A APLICAT A
LUCRARE DE DISERTAT IE
Masterand:
R aducu-R azvan Gheorghe
SIBIU
2019

UNIVERSITATEA "LUCIAN BLAGA" DIN SIBIU
FACULTATEA DE S TIINT E
DEPARTAMENTUL DE MATEMATIC A S I INFORMATIC A
MATEMATIC A INFORMATIC A APLICAT A
Aplicat ia sistemului RFID.
Programare tip Client-Server
Coordonator  stiint i c:
Conf. Univ. Dr. Florin Sofonea
Masterand:
R aducu-R azvan Gheorghe
SIBIU
2019

Cuprins
Introducere 3
1 Elemente teoretice 5
1.1 RFID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 De nit ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Elemente hardware utilizate pentru citirea unui RFID . . . . . . . . 7
1.1.3 Pa sii ^ n determinarea IP-ului cititorului RFID . . . . . . . . . . . . 9
1.2 Crearea bazei de date in SQL Server Management Studio . . . . . . . . . . 12
1.2.1 De nit ia unei baze de date . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.2 Evolut ia bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.3 Baza de date relat ional a . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.4 Pa sii ^ n crearea unei noi baze de date . . . . . . . . . . . . . . . . . 13
1.3 Aplicat ii de tip Windows Form ^ n C# . . . . . . . . . . . . . . . . . . . . . 15
1.3.1 Introducere ^ n aplicat iile C# Windows Forms . . . . . . . . . . . . 15
1.3.2 Crearea  si con gurarea unui dataset ^ n Visual Studio . . . . . . . . 18
1.4 Ret elele de calculatoare  si conexiunea de tip Client-Server . . . . . . . . . 20
1.4.1 Introducere ^ n ret ele . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4.2 Tipuri de ret ele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4.3 TCP/IP (Transmission Control Protocol/Internet Protocol) . . . . 26
1.4.4 Programare client-server . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.5 Interact iuni simple client-server folosind C# . . . . . . . . . . . . . 29
2 Aplicat ia BloodLife 36
2.1 DataGridView Donat ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2 Panoul "Indormat ii donator" . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Panoul "informat ii locat ie" . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.4 Filtrarea ^ nregistr arilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.4.1 Filtrarea dup a CNP . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.4.2 Filtrarea ^ n funct ie de grupa sanguin a . . . . . . . . . . . . . . . . . 45
2.4.3 Filtrarea ^ n funct ie de tipul rh-ului . . . . . . . . . . . . . . . . . . 45
2.5 Statistici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
1

2.6 Modi carea informat iilor din baza de date . . . . . . . . . . . . . . . . . . 49
2.7 Conectarea la cititorul RFID . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Bibliogra e 51
2

Introducere
Se spune c a tehnologia este arta de a transforma  stiint a^ n ceva practic. Astfel, am decis s a
^ mi demonstrez talentul artistic utiliz^ and cuno stiint ele dob^ andite p^ an a acum prin crearea
unei aplicat ii care ar putea folosit a ^ n domeniul medical  si probabil ar m ari procentul
donatorilor de s^ ange din Rom^ ania sau din alte t  ari.
Conform veri c arilor,^ n Rom^ ania aproximativ 1,7% din populat ie doneaz a s^ ange, acest
procent asigur^ and doar aproximativ 65% din totalul necesar. Din acest motiv au aparut
mai multe campanii care informeaz a populat ia despre bene ciile existente  si recomand a
donarea cel put in o dat a pe an.
Pornind de la aceea si idee, aplicat ia prezentat a ^ n lucrarea de fat  a ^  si propune s a
stocheze ^ ntr-o baz a de date ^ nregistr arile donat iilor, ^ mpreun a cu informat ii despre do-
nator, data donat iei  si locat ia de stocare a pungii de s^ ange.
Astfel, aplicat ia scris a ^ n limbajul de programare C#, folosind setul complet de in-
strumente de dezvoltare Visual Studio 2017, utilizeaz a o legatur a la o baz a de date SQL
 si o conexiune de tip TCP/IP la cititorul de etichete RFID.
Lucrarea de fat  a ^  si propune s a prezinte c^ ateva elemente teoretice utilizate ^ n aplicat ie,
 si anume informat ii despre RFID  si modul ^ n care ne putem conecta la un cititor RFID,
limbajul C#, crearea conexiunii dintre aplicat ie  si baza de date SQL.
Dup a acestea urmeaz a prezentarea propriu-zis a a aplicat iei  si a modului^ n care aceasta
lucreaz a. ^In acest capitol vom prezenta diagrama bazei de date  si leg aturile de tip "cheie
primar a ! cheie str ain a", modulul de adaugare a unei noi donat ii, ltarea^ nregistr arilor
^ n funct ie de CNP ul donatorului, de grupa sanguin a a donatorului sau de Rh-ul acestuia.
Este important de ment ionat c a ltrarea se poate face ^ n funct ie de una din propriet at iile
descrise mai sus sau ^ n funct ie de orice combinat ie a acestora.
O alt a component a a aplicat iei este reprezentat a ^ n meniul principal al aplicat iei prin
butonul "Statistici". La act ionarea acestuia informat ii din baza de date sunt prelucrate
 si se creeaz a un  sier Excel cu trei le, cont in^ and ecare c^ ate o digram a reprezentativ a
pentru sexul, grupa sanguin a, respectiv grupa sanguin a  si rh-ul donatorilor.
Un alt element important al meniului principal este reprezentat de butonul de conectare
"c". Prin act ionarea acestuia se ^ ncepe procedeul de conectare la cititorul de etichete
RFID. ^In cazul ^ n care conexiunea se realizeaz a cu succes, ^ n meniul principal vor mai
vizibile doar acele ^ nregistr ari a c aror etichet a RFID se a
 a ^ n raza de act iune a an-
3

tenei/antenelor conectate la cititor.
Am considerat c a "BloodLife" este un nume potrivit aplicat iei prezentate ^ n aceast a
lucrare deoarece lu^ and ^ n considerare mai multe interpret ari ne putem g^ andi la viat a
s^ angelui, la traseul pe care ^ l parcurge o pung a de s^ ange sau  sansa la viat  a pe care aceasta
o ofer a. S^ angele e viat  a  si s^ angele d a viat  a.
T  in s a ^ i mult umesc domnului Conf. Univ. Dr. Florin Sofonea pentru ajutorul acor-
dat, sust inerea ideii lucr arii prezente  si pentru accesul la elementele hardware necesare
pentru citirea tagurilor RFID. ^In acela si timp doresc s a ^ i mult umesc  si domnului Adrian
Negru sa de la rma Harting Technology Group pentru documentat ia  si suportul acordat
^ n domeniul RFID.
4

Capitolul 1
Elemente teoretice
1.1 RFID
^In acest subcapitol am utilizat informat ii din [3].
1.1.1 De nit ie
RFID este un acronim pentru "identi carea prin radiofrecvent  a"  si se refer a la o tehnologie
prin care datele digitale codi cate ^ n etichete RFID sau etichete inteligente (de nite mai
jos) sunt capturate de un cititor prin unde radio. Principiul de funct ionare a RFID -ului
este similar cu cel al unui cod de bare, ^ n faptul c a datele din etichet a sunt captate de
un dispozitiv care stocheaz a datele ^ ntr-o baz a de date. Cu toate acestea, RFID are mai
multe avantaje fat  a de sistemele care utilizeaz a software de urm arire a activelor de coduri
de bare. Cel mai notabil este faptul c a datele din tag-ul RFID pot citite ^ n afara liniei
de vedere, ^ n timp ce codurile de bare trebuie s a e aliniate cu un scaner optic.
RFID apart ine unui grup de tehnologii denumite Automatic Identi cation and Data
Capture (AIDC). Metodele AIDC identi c a automat obiecte, colecteaz a date despre ele
 si introduc aceste date direct ^ n sistemele informatice cu intervent ie uman a minor a sau,
^ n unele cazuri chiar far a aceasta. Metodele RFID utilizeaz a unde radio pentru a realiza
acest lucru. La un nivel simplu, sistemele RFID constau din trei componente: o etichet a
RFID sau o etichet a inteligent a, un cititor RFID  si o anten a. Etichetele RFID cont in un
circuit integrat  si o anten a, care sunt utilizate pentru transmiterea datelor c atre cititorul
RFID (numit  si interogator). Cititorul apoi converte ste undele radio ^ ntr-o form a mai
utilizabil a de date. Informat iile colectate de la etichete sunt apoi transferate printr-o
interfat  a de comunicat ie c atre un sistem de computer gazd a, unde datele pot stocate
^ ntr-o baz a de date  si analizate ulterior.
A sa cum am ment ionat mai sus, o etichet a RFID const a dintr-un circuit integrat  si
o anten a. Eticheta este, de asemenea, compus a dintr-un material de protect ie care t ine
piesele ^ mpreun a  si le protejeaz a de diferite condit ii de mediu. Materialul de protect ie
5

depinde de aplicat ie. De exemplu, insignele ID ale angajat ilor care cont in etichete RFID
sunt de obicei fabricate din plastic durabil, iar eticheta este ^ ncorporat a ^ ntre straturile de
plastic. Etichetele RFID vin ^ ntr-o varietate de forme  si dimensiuni  si sunt e pasive, e
active. Etichetele pasive sunt cele mai utilizate pe scar a larg a, deoarece acestea sunt mai
mici  si mai put in costisitoare de implementat. Etichetele pasive trebuie s a e "alimen-
tate" de cititorul RFID ^ nainte de a putea transmite date. Spre deosebire de etichetele
pasive, etichetele RFID active au o surs a de alimentare la bord (de exemplu, o baterie),
permit ^ andu-le astfel s a transmit a date ^ n orice moment.
De nit ia 1.1.1 Etichetele pasive sunt compuse din trei elemente: un circuit integrat sau
cip, o anten a  si un substrat. Cipul RFID stocheaz a date  si ^ ndepline ste sarcini speci ce.
^In funct ie de design, cipul poate citit (RO), scris o singur a dat a, citit de mai multe ori
(WORM) sau citit-scris (RW). ^In mod tipic, cipurile RFID au o memorie de 96 bit i, dar
pot varia de la 2 la 1000 de bit i. Ata sat la cip este antena, al c arei scop este absorbt ia
undelor radio-frecvent  a (RF) de la semnalul cititorului  si trimiterea  si primirea datelor.
E cacitatea pasiv a a etichetei RFID depinde foarte mult de dimensiunea antenei: cu c^ at
este mai mare antena, cu at^ at mai mult a energie poate colectat a  si apoi trimis a ^ napoi.
Prin urmare, antenele mai mari au intervale mai mari de citire (de si nu sunt la fel de
mari ca cele ale etichetelor active). Forma antenei este, de asemenea, important a pentru
performant a etichetei. Antenele de joas a  si de ^ nalt a frecvent  a (LF  si HF, respectiv)
sunt, de obicei, bobine, deoarece aceste frecvent e sunt predominant magnetice. Antenele
cu frecvent  a ^ nalt a (UHF), pe de alt a parte, arat a asem an ator antenelor de televiziune
vechi ("urechi de iepure"), deoarece frecvent ele ultrahigh sunt numai electrice ^ n natur a.
A treia component a a unei etichete pasive RFID se nume ste substrat, care este de obicei
un lm Mylar sau plastic. At^ at antena, c^ at  si cipul sunt ata sate la substrat, care poate
considerat ca ind "cleiul" care cont ine toate piesele etichetei ^ mpreun a. Spre deosebire de
etichetele RFID active, etichetele pasive sunt de obicei mai mici  si mai put in costisitoare.
Etichetele inteligente difer a de etichetele RFID prin aceea c a includ at^ at tehnologii
RFID, c^ at  si tehnologii de coduri de bare. Acestea sunt fabricate dintr-o etichet a adeziv a
^ ncorporat a cu o insert ie etichet a RFID  si pot cont ine, de asemenea, un cod de bare  si/sau
alte informat ii tip arite. Etichetele inteligente pot codate  si tip arite la cerere utiliz^ and
imprimante de etichete desktop, ^ n timp ce programarea etichetelor RFID necesit a mai
mult timp  si necesit a echipamente mai avansate.
Am ata sat mai jos imagini cu c^ ateva tipuri de taguri.
6

1.1.2 Elemente hardware utilizate pentru citirea unui RFID
^In aceast a subsect iune am utilizat informat ii din [1], [2]  si [10].
Cititorul RFID Ha-VIS RFID RF-R350 EU/FCC
Procesor 1 GHz ARM
Memorie externa Pana la 32 GB memorie
ash (prin Micro SD Card)
Memorie RAM 1 GB RAM
Memorie embedded 4 GB eMMC
Sistem de operare Linux (Kernel 3.x.x)
Fixare Set montare pe in DIN
A ajul de diagnosticare 3 LED-uri pentru a vizualiza starea aparatului i a antenei
Tensiune de alimentare 24 V
Interfata zica Speci caie complet 802.3 prin conector M12 IP67
Interfata de conectare Ethernet (TCP/IP) 10/100 Mbit/s
Conectori I/O 2 conectori RP-TNC (50 Ohm) (pentru conectarea la antena)
Injectorul PoE TL-POE150S
Respect a standardul IEEE 802.3af,  si poate funct iona ^ mpreun a cu echipamente PD
(Powered Devices) sau adaptoare de recept ie PoE compatibile PoE IEEE 802.3af, precum
TP-LINK TL-POE10R, sau alte produse echivalente, pentru a extinde ret eaua acolo unde
nu exist a cabluri electrice sau prize, ^ n locat ii ^ n care dorim s a amplas am dispozitive ca
AP-uri, camere IP sau telefoane IP, etc.
7

Antena Ha-VIS-RF-ANT-LR10
[]Interval de frecven 865..928 MHz
Impedanta electrica 50 Ohm
Conexiune tnc socket
Gradul de protectie IP67
Invelis antena invelis de polimeri, rezistent la conditii precare
Cablu tip RJ45 – M12 x-code
Conector 1Conector circular M12
M12 X-coding
mufa tata
Conector 2RJ45
HARTING RJ Industrial
Gigalink
mufa dreapta
Acest cablu se folose ste la conectarea cititorului RFID la injectorul PoE.
Cablu HA-VIS Coax TNC/TNC-RP, H155 PVC
8

Speci catii Mufat la ambele capete
Conector 1 Conector TNC
Conector 2 Conector TNC-RP
Tipul cablului Cablu de cupru (rotund)
Descrierea cablului Cablu coaxial
Acest cablu se folose ste la conectarea cititorului RFID la anten a.
Router wireless
^In dezvoltarea aplicat iei am folosit un "Router wireless Extender ASUS RT-N12+, 300
Mbps" pentru a avea acces pe aceea si ret ea pe laptop  si pe cititor. Laptopul a fost
conectat printr-un cablu UTP, mufat la ambele capete cu RJ45, la router  si cititorul s-a
conectat la ret ea prin acela si tip de cablu, prin injectorul PoE.
Cablu UTP
Pentru conectarea cititorului RFID la ret eaua de internet vom avea nevoie  si de cabluri
UTP.
1.1.3 Pa sii ^ n determinarea IP-ului cititorului RFID
^In aceast a subsect iune am utilizat informat ii din [1]  si [2].
^Intruc^ at pentru conectarea la cititorul RFID prin itermediul TCP/IP avem nevoie de
IP-ul acestuia vom prezenta pa sii pentru a
area informat iei dorite.
9

Conectarea elementelor hardware
Primul pas este reprezentat de conectarea corect a a elementelor hardware enumerate ^ n
subsect iunea anterioar a. Acest lucru se realizeaz a prin urm arirea instruct iunilor urm atoare:
Crearea ret elei Ethernet locale; aici vom utiliza routerul pentru funct ia de repeater.
^In cazul ret elei pe care s-a testat aplicat ia am folosit funct ia hotspot a unui telefon
mobil pentru a trimite internet c atre router, ind necesar a con gurarea acestuia
pentru ca  si conexiunea la telefonul mobil s a funct ioneze corect.
Dup a nalizarea celor de mai sus vom utiliza dou a cabluri UTP, unul de la router
la injectorul PoE (cablul UTP trebuie introdus ^ n slotul de pe aceea si parte cu cea
a slotului de alimentare a injectorului)  si unul de la router la dispozitivul de pe care
se ruleaz a aplicat ia. Cel de-al doilea cablu nu este obligatoriu ^ ntruc^ at dispozitivul
se poate conecta la ret eaua creat a de router  si prin Wireless.
Alimentarea cititorului RFID
^Intruc^ at acesta nu are integrat direct un slot de alimentare, aceasta se va realiza
prin intermediul injectorului. Folosim cablul RJ45 – M12 x-code pentru conectarea
celor dou a dispozitive, cap atul cu mufa RJ45 se va conecta la injector, respectiv cel
M12 x-code ( muf a tat a) la slotul PoE al cititorului RFID.
Conectarea antenei la cititorul RFID
Pentru aceast a etapa vom folosi cablul Coax TNC/TNC-RP, cap atul cu muf a tat a
ind conectat la anten a, respectiv cel cu muf a mam a la unul din sloturile de anten a
din cadrul cititorului ( ANT1 sau ANT2 ).
Conectarea la cititorul RFID prin intermediul unui browser de internet
Pe spatele cititorului se poate observa eticheta cu urm atoarele informat ii, prezentate
^ n imaginea de mai jos:
10

Vom deschide un browser  si vom tasta device name-ul din imagine. ^In cazul ^ n care
am realizat corect pa sii precedent i ni se va a  sa
Introducem parola prezent a pe spatele readerului  si ap as a pe butonul Login. Astfel
vom accesa meniul principal din cadrul cititorului.
Continu am prin meniul settings, apoi network. Vom ajunge astfel la informat ia
dorit a.
11

1.2 Crearea bazei de date in SQL Server Manage-
ment Studio
^In aceast a sect iune am utilizat informat ii din [8].
1.2.1 De nit ia unei baze de date
O baz a de date este o colect ie de informat ii care este organizat a astfel ^ nc^ at s a e u sor
accesibil a, gestionat a  si actualizat a.
Datele sunt organizate ^ n r^ anduri, coloane  si tabele  si sunt indexate pentru a facilita
g asirea informat iilor relevante. Datele sunt actualizate, extinse  si  sterse pe m asur a ce se
adaug a informat ii noi. Bazele de date proceseaz a datele de lucru pentru a le crea sau
actualiza, interog^ and datele pe care le cont in deja.
Bazele de date pentru computere cont in, de obicei, agreg ari ale ^ nregistr arilor sau
 sierelor de date, cum ar tranzact iile de v^ anzare, cataloagele produselor  si stocurile  si
pro lurile client ilor.
De cele mai multe ori managerul bazei de date ofer a utilizatorilor opt iunea de a
citi/scrie ^ n baza de date respectiv a, av^ and posibilitatea s a genereze rapoarte  si s a anal-
izeze utilizarea. Unele baze de date ofer a compatibilitatea ACID (atomicitate, consistent  a,
izolare  si durabilitate) pentru a garanta c a datele sunt coerente  si c a tranzact iile s-au -
nalizat ^ n mod corect.
Bazele de date sunt predominante ^ n sistemele mari de mainframe, dar sunt prezente  si
pe stat iile de lucru distribuite mai mici  si pe sistemele de tip middlerange  si calculatoarele
personale.
1.2.2 Evolut ia bazelor de date
Evolut ia bazelor de date a luat av^ ant ^ nc a de la ^ nceputul anilor 0, ^ ncep^ and cu baze de
date ierarhice  si de ret ea, cu baze de date orientate pe obiecte prin anii 0  si ast azi cu baze
de date SQL  si NoSQL  si baze de date cloud.
^Intr-o anumit a perspectiv a, bazele de date pot clasi cate ^ n funct ie de tipul de
cont inut: bibliogra c, text integral, numeric  si imagini. Bazele de date sunt uneori clasi -
cate ^ n funct ie de abordarea lor organizat ional a. Exist a numeroase categorii de baze
de date, de la cea mai r asp^ ndit a abordare, baza de date relat ional a, la o baz a de date
distribuit a, o baz a de date cloud sau o baz a de date NoSQL.
1.2.3 Baza de date relat ional a
O baz a de date relat ional a, inventat a de E.F. Codd la IBM ^ n 1970, este o baz a de date
tabular a ^ n care datele sunt de nite astfel ^ nc^ at s a poat a reorganizate  si accesate ^ n mai
12

multe feluri diferite.
Bazele de date relat ionale sunt alc atuite dintr-un set de tabele cu date care se^ ncadreaz a
^ ntr-o categorie prede nit a. Fiecare tabel are cel put in o categorie de date ^ ntr-o coloan a
 si ecare r^ and are un anumit tip de exemplu de date pentru tipurile de nite ^ n coloane.
Limbajul de interogare structurat (SQL) este interfat a standard a utilizatorului  si a
aplicat iei pentru o baz a de date relat ional a. Bazele de date relat ionale sunt u sor de extins
 si o nou a categorie de date poate adugat a dup a crearea original a a bazei de date f ar a a
necesar a modi carea tuturor aplicat iilor existente.
1.2.4 Pa sii ^ n crearea unei noi baze de date
Pentru crearea bazei de date am folosit programul Microsoft SQL Server Management
Studio.
Dupa deschiderea programului respectiv  si conectarea la server, ^ n cazul nostru la
serverul localhost, extindem meniul precum ^ n imaginerea urm atoare  si d am click dreapta
pe Databases  si select am New Database.
Dup a nalizarea acestor pa si o s a apar a o nou a fereastr a ^ n care vom completa numele
dorit, astfel ^ nchei^ and procesul cre arii noii baze de date. Vom observa c a acum aceasta
va vizibilil a ^ n partea st^ ang a, ca  si "copil" al meniului Databases.
13

Urm atorul pas ^ n dezvoltarea bazei de date ^ l reprezint a ad augarea tabelelor ^ n acesta.
Acest lucru se realizeaz a ^ ntr-un mod asem an ator cre arii bazei de date, urm^ andu-se
instruct iunile din imagine.
Urmeaz a ad augarea coloanelor ^ n tabel  si salvarea acestuia.
Dup a adaugarea tuturor tabelelor necesare putem crea diagrama bazei de date  si legarea
tabelelor prin leg aturi de tip cheie primar a – cheie str ain a.
14

Dup a nalizarea acestor etape, ^ n cazul bazei de date pe care se va axa aplicat ia
obt inem urm atoarea diagram a.
Complet am apoi tabelele create cu date, la fel ca ^ n exemplul de mai jos, valabil pentru
tabelul Grupe sanguine
1.3 Aplicat ii de tip Windows Form ^ n C#
1.3.1 Introducere ^ n aplicat iile C# Windows Forms
Windows Forms este o bibliotec a de clas a de interfat  a gra c a (GUI) care este cuprins a
^ n .Net Framework. Scopul s au principal este de a oferi o interfat  a mai u soar a pentru
dezvoltarea aplicat iilor pentru desktop, tablet a, PC-uri. Este, de asemenea, numit Win-
Forms. Aplicat iile care sunt dezvoltate utiliz^ and Windows Forms sau WinForms sunt
cunoscute sub numele de aplicat ii Windows Forms. WinForms poate folosit numai pen-
tru a dezvolta aplicat iile Windows Forms, nu  si pentru aplicat ii web. Aplicat iile WinForms
pot cont ine diferite tipuri de controale cum ar etichete, casete de list a, instrumente etc.
15

Pentru crearea unei astfel de aplicat ii se urmeaz a urm atoarele instruct iuni.
Mai ^ nt^ ai, deschidet i Visual Studio apoi Go to File – >New – >Project pentru a crea
un proiect nou  si apoi selectat i limbajul ca Visual C# din meniul din st^ anga. Facet i click
pe aplicat ia Windows Forms (.NET Framework) ^ n mijlocul ferestrei curente. Apoi dat i
numele proiectului  si facet i click pe OK.
Aici solut ia este precum un container ce cont ine proiectele  si  sierele care pot solic-
itate de program.
Dup a aceea va a  sat a fereastra care va ^ mp art it a ^ n trei p art i dup a cum urmeaz a:
Fereastra de editor sau fereastra principal a: Aici vom lucra cu formulare  si editarea
codului. Putem observa aspectul formei care este acum necompletat. Vem face
dublu clic pe formular, dup care va deschide codul pentru aceasta.
Solution Explorer: Este folosit pentru a naviga ^ ntre toate elementele din solut ie.
De exemplu, dac a select am un  sier din aceast a fereastr a, atunci anumite informat ii
vor a  sate ^ n fereastra de propriet at i.
Properties window: Aceast a fereastr a este utilizat a pentru a schimba diferitele pro-
priet at i ale elementului selectat din Solution Explorer. De asemenea, putem schimba
propriet at ile componentelor sau comenzilor pe care le ad augam la formulare.
16

Pentru a ad auga comenzi ^ n aplicat ia WinForms, acces am la Toolbox prezent a ^ n
partea st^ ang a extrem a a Visual Studio. Aici putem vedea o list a de comenzi. Pentru
a accesa cele mai frecvent utilizate comenzi, acces am Common Controls prezent ^ n la
Toolbox.
Acum tragem  si plas am comenzile de care avem nevoie pe formularul creat. De exem-
plu, putem ad auga TextBox, ListBox, Button etc., dup a cum se arat a mai jos. F ac^ and
click pe un control particular, ^ i putem vedea  si schimba propriet at ile prezente ^ n colt ul
din dreapta al Visual Studio.
^In imaginea de mai sus, putem vedea c a butonul este selectat  si propriet at ile acestuia,
cum ar Text, TextAlign, Visible etc., sunt deschise ^ n colt ul din dreapta. Avem posi-
bilitatea s a modi c am valorile propriet at ilor sale conform necesit at ilor aplicat iei. Codul
comenzilor va ad augat automat ^ n fundal.
17

1.3.2 Crearea  si con gurarea unui dataset ^ n Visual Studio
Un dataset este un set de obiecte care stocheaz a date dintr-o baz a de date ^ n memorie  si
suport a urm arirea modi c arilor pentru a permite operat iunile de creare, citire, actualizare
 si  stergere (CRUD) pe aceste date f ar a a nevoie s a e mereu conectate la baza de date.
Dataset-urile au fost proiectate pentru formulare simple pe aplicat iile de date de afaceri.
Crearea unui nou dataset utiliz^ and Data Source Con guration Wizard
Deschidem proiectul ^ n Visual Studio,  si select am Project – >Add New Data Source
pentru a porni Data Source Con guration Wizard
Alegem tipul de surs a de date la care ne vom conecta.
Alegem baza de date va sursa de date pentru setul de date.
18

Alegem tabelele (sau coloanele individuale), procedurile stocate, funct iile din database
pe care le dorim ^ n dataset.
Dup a ap asarea butonului Finish dataset ul va ap area ca un nod^ n Solution Explorer.
Facem click pe nodul dataset din Solution Explorer pentru a-l deschide din Design
DataSet. Fiecare tabel din setul de date are un obiect TableAdapter asociat, care
este reprezentat ^ n partea de jos. Tabelul adapter este utilizat pentru a popula setul
de date  si, opt ional, pentru a trimite comenzi c atre baza de date.
Liniile de leg atur a care conecteaz a tabelele reprezint a relat iile de tabel, a sa cum
sunt de nite ^ n baza de date. Implicit, constr^ angerile cheie str ain a ^ ntr-o baz a de
date sunt reprezentate doar ca o relat ie, cu regulile de actualizare  si  stergere setate
la none. De obicei, asta se vrea. Cu toate acestea, putem face click pe linii pentru a
a  sa dialogul Relat ie, unde putem schimba comportamentul actualiz arilor ierarhice.
19

Ad augarea unui tabel database sau a unui alt obiect la un dataset existent
Aceast a procedur a ne arat a cum s a ad aug amun tabel din aceeasi baz a de date pe care am
folosit-o la crearea dataset ului.
Click pe nodul dataset ^ n Solution Explorer pentru a aduce fereastra DataSet De-
signer ^ n prim plan.
Ap as am click pe tabul Data Sources din marginea st^ ang a a Visual Studio, sau scriem
data sources ^ n fereastra de c autare.
Click dreapta pe nodul dataset  si select Con gure Data Source with Wizard.
Speci c am acum tabelele adit ionale, procedurile stocate sau alte obiecte din database
pe care dorim s a le ad aug am la dataset.
1.4 Ret elele de calculatoare  si conexiunea de tip Client-
Server
^In acest subcapitol am utilizat informat ii din [4]  si [5].
1.4.1 Introducere ^ n ret ele
^In epoca tehnologiei de mare vitez a vechiul model de lucru al unui singur calculator
(mainframe) care serve ste anumite probleme de calcul a fost uploadat la un model ^ n
care sarcinile de lucru sunt executate de un num ar mai mare de calculatoare, acestea
ind utilizate separat, dar av^ and o conexiune ^ ntre acestea ( ind interconectate). Prin
cooperarea ^ ntre respectivele dispozitive se pot realiza diferite sarcini, precum:
transferul  sierelor ^ ntre dispozitive;
posibilitatea acces arii unei baze de date a
at a pe un alt dispozitiv;
transmiterea mesajelor ^ ntre dispozitive;
utilizarea resurselor HW  si SW ale unui alt dispozitiv.
Dispozitivele legate ^ ntre ele ^ n acest mod alc atuiesc o ret ea.
Ce a stept ari avem de la o ret ea de calculatoare?
Ret eaua de calculatoare aduce o serie de avantaje. Utilizarea acesteia are o leg atur a
direct a cu reducerea costurilor. Acesta este unul din motivele pentru care este necesar a
o atent ie suplimentar a asupra dezvolt arii unei astfel de ret ele. C^ ateva dintre motivele
pro-ret ele sunt:
20

Comunicarea mult mai e cient a;
E cientizarea transferurilor de date;
Reducerea costurilor;
Simplitatea  si e cient a protej arii datelor;
Asigurarea disponibilit at ii;
Optimizarea proceselor ce supra^ nc arcau dispozitivul;
Optimizarea mentenant ei;
Comunicarea
Ret elele sunt utilizate pentru simpli carea schimbului de informat ii. De exemplu, ^ ntr-o
ret ea a unei rme ( ret ea ^ nchis a) se pot publica nout at i care pot ajunge la tot personalul
t int a.
E cientizarea transferurilor de date
^In perioada precedent a dezvolt arii ret elelor de calculatoare, ^ n cazul proiectelor ^ n cadrul
c arora erau implicate mai multe persoane se folosea transferul informat iilor prin itermediul
altor metode zice ( dischete, etc.). ^In momentul actual respectivele informat ii pot
copiate de pe un dispozitiv pe altul prin intermediul unei ret ele. O alt a posibilitate este
reprezentat a de crearea unui dispozitiv tip server unde datele s a e stocate central, iar
userii s a poat a avea acces la acestea.
^In acest caz se poate vorbi despre o leg atur a de date. Acest lucru se poate exempli ca,
ind vorba de scopul principal al ec arei ret ele,  si anume acela de a avea access la baza
de date de pe oricare dintre stat iile legate.
O alt a categorie a bazelor de date este cea a celor distribuite, acestea ind stocate pe
diferite calculatoare, dar legate ^ ntre ele astfel ^ nc^ at ecare utilizator poate vedea baza de
date complet a.
E cient a ret elei depinde de modul ^ n care aceasta a fost construit a  si de modul ^ n care
se pot introduce informat ii ^ n aceasta. Modul de c autare  si stocarea respectivelor date
trebuie s a e de nite printr-un algoritm logic, u sor de ^ nt eles de c atre utilizator.
E cientizarea reducerii costurilor
Acest lucru se poate realiza prin utilizarea acelorea si resurse acolo unde este posibil. Un
exemplu ar cazul ad aug arii unei imprimante ^ n ret ea. Aceasta va putea folosit a de
c atre oricare dintre utilizatorii din cadrul ret elei. Un alt exemplu, de data aceasta ind
vorba despre o component a software, ar putea instalarea unui program pe un dispozitiv
21

central, put^ and folosit de tot i userii din ret ea. Compararea costurilor HW economisite
cu cele administrative este destul de di cil a. Putem vorbi ^ n acest caz de o interconectare
funct ional a. Acest lucru ^ nseamn a c a toate resursele disponibile ^ n cadrul ret elei pot
utilizate de oricare dintre participant ii conectat i ^ n ret eaua respectiv a. Prin intermediul
resurselor ne referim la orice component a a dispozitivului, de exemplu harddisk-ul, CD-
ROM-ul. Pentru toate aceste resurse exist a posibilitatea ad aug arii ^ n folo sint  a general a
^ n interiorul ret elei.
Protejarea datelor
Dac a toate informat iile unei rme sunt ad augate dup a o anumit a schem a ^ n ret ea, un
simplu algoritm poate dezvolta protect ia automat a a acestora (de exemplu protejarea ^ n
funct ie de anumite zone de acces). Fiindc a datele sunt salvate pe un numar destul de mic
de dispozitive, uploadarea tehnologiei de protect ie a informat iilor devine  si mai simpl a.
Asigurarea disponibilit at ii
^In cazul defect arii anumitor componente singulare de la un dispozitiv ret eaua trebuie s a
e capabil a s a funct ioneze f ar a s a afecteze utilizatorii. Acest lucru vine ca o provocare
suplimentar a deoarece ^ n cazul defect arii unor componente funct iile acestora trebuie pre-
luate de alte componente din cadrul ret elei. Ca  si exemplu, ^ n cazul defect arii unei stat ii
de lucru, aceasta trebuie s a poat a ^ nlocuit a cu un alt dispozitiv cu toate elementele
hardware  si software necesare continu arii muncii.
Optimizarea proceselor ce supra^ ncarc a dispozitivul
Se refer a la optimizarea ^ n cadrul c areia un dispozitiv supra^ nc arcat este ajutat de un alt
calculator care este mai put in ^ nc arcat.
Optimizarea mentenant ei
Odat a cu cre sterea complexit at ii ret elei devine din ce^ n ce mai imporatant a det inerea unor
instrumente de lucru propice pentru administrare  si intret inere c^ at mai u soar a a ret elei.
^In cazul posibilit at ii diagnostic arii  si ^ ntret inerii de la distant  a se faciliteaz a service-ul.
De nit ia 1.4.1 O ret ea de calculatoare este format a dint-un ansamblu de echipamente
de calcul r asp^ andite geogra c, interconectate prin intermediul unor medii de comunicatie,
asigur^ andu-se ^ n acest mod utilizarea ^ n comun de c atre un num ar mare de utilizatori a
tuturor resurselor zice (HW), logice (SW  si aplicat ii de baza)  si informationale (baze de
date) de care dispune ansamblul de calculatoare conectate.
22

De nit ia 1.4.2 O ret ea de calculatoare mai poat a de nit a  si ca o colect ie de dispozi-
tive autonome interconectate. Spunem c a dou a calculatoare sunt interconectate daca pot
schimba informat ii ^ ntre ele.
De nit ia 1.4.3 Lucrul ^ n ret ea este reprezentat de conceptul de conectare a unor calcu-
latoare care partajeaz a resurse. Resursele pot :
date (baze de date);
aplicat ii (orice tip de software);
periferice (imprimante, scannere, etc.).
1.4.2 Tipuri de ret ele
^In aceast a subsect iune am utilizat informat ii din [4].
Exist a mai multe criterii de clasi care a ret elelor,  si anume:
Dup a tehnologia de transmisie
ret elele cu difuzare (broadcast) sunt ret elele cu un singur canal de comunicat ie,
acesta ind partajat (este accesibil) de toate calculatoarele din ret ea. Mesajul poate
adresat unui singur dispozitiv, tuturor dispozitivelor din ret ea (acest mod de
operare ind difuzarea) sau la un subset de dispozitive (acest mod de operare ind
trimiterea multipl a). Acest mod de transmitere este caracteristic ret elelor LAN.
ret ele punct – la – punct sunt ret elele care dispun de numeroase conexiuni ^ ntre
perechi de calculatoare individuale. Pentru a ajunge de la calculatorul surs a la
dispozitivul destinat ie, un pachet s-ar putea s a e nevoit s a treac a prin unul sau mai
multe calculatoare intermediare. Deseori sunt posibile trasee multiple, de diferite
lungimi, etc.
Dup a distant a pe care opereaz a ret eaua
ret elele locale (LAN) sunt ^ n general ret ele private localizate ^ ntr-o singur a camera,
cl adire sau ^ ntr-un campus de cel mult cat iva kilometri;
ret elele metropolitane (MAN) reprezint a o extensie a ret elelor LAN  si utilizeaz a ^ n
mod normal tehnologii similare cu acestea. Aceste ret ele pot at^ at private c^ at  si
publice.
ret elele de arie ^ ntins a (WAN) sunt acele ret ele care acoper a o arie geogra c a intinsa
– deseori o t ar a sau un^ ntreh continent. ^In acest tip de ret ea calculatoarele se numesc
23

gazde (host sau sistem nal). Gazdele sunt conectate ^ ntre ele printr-o subret ea de
comunicat ie. Sarcina subret elei este s a transmit a mesajele de la host la host.
Subret eaua este format a din:
{linii de transmisie ( circuite, canale sau trunchiuri) au rolul de a transporta
bit ii ^ ntre dispozitive;
{elemente de comutare, calculatoare specializate, folosite pentru a conecta dou a
sau mai multe linii de transmisie.
Internet-ul (GAN= Global Area Network);
Dup a topologia ret elei
ret eaua tip magistral a (bus) este cea mai simpl a  si mai uzual a metod a de conectare
a calculatoarelor ^ n ret ea, const^ and dintr-un singur cablu, numit trunchi.
ret eaua tip stea (star) este aceea ^ n care toate calculatoarele sunt conectate la un
nod central care joac a un rol particular ^ n funct ionarea ret elei. Orice comunicat ie
^ ntre dou a calculatoare va trece prin acest nod central, care se comport a ca un
comutator fat  a de ansamblul ret elei.
ret eua tip inel (ring) este o con gurat ie de ret ea ^ n care conexiunile dispozitivului
creeaz a o cale circular a de date. Fiecare dispozitiv conectat la ret ea este conectat
la alte dou a, ca puncte ^ ntr-un cerc.
^Intr-o ret ea tip inel, pachetele de date c al atoresc de la un dispozitiv la altul p^ an a
c^ and ajung la destinat ie. Cele mai multe topologii de tip inel permit pachetelor s a
c al atoreasc a numai ^ ntr-o singur a direct ie, numit a ret ea de apeluri unidirect ionale.
Altele permit datelor s a se deplaseze ^ n ambele direct ii, numite bidirect ionale.
24

ret ele combinate.
Dup a tipul sistemului de operare utilizat
ret elele peer-to-peer sunt acele ret ele ^ n care partajarea resurselor nu este facut a
de c atre un singur calculator, ci toate aceste resurse sunt puse la comun de c atre
calculatoarele din ret ea. Aceste ret ele au anumite caracteristici:
{pot conectate maxim 10 calculatoare la un workgroup;
{implica costuri mici;
{se utilizeaz a atunci c^ and zona este restr^ ans a;
{toate calculatoarele sunt egale; toate sunt  si client  si server.
ret elele bazate pe server (client / server) sunt acele ret ele care au ^ n component  a un
server specializat: de  siere  si de tip arire; de aplicat ii; de comunicat ii, etc. Printre
avantajele ret elelor bazate pe server amintim:
{partajarea resurselor;
{securitate;
{salvarea de sigurant  a a datelor;
{redundant a;
{num ar de utilizatori.
Dup a tipul mediului de transmisie a semnalelor
ret ele prin medii ghidate ( precum cablu ciaxial sau bra optica);
ret ele prin medii neghidate (precum infrarosu, unde radio,etc.).
25

Dup a tipul utilizatorilor
private (utilizate industrial, militar, civil);
publice .
Toate ret elele au anumite componente, funct ii  si caracteristici comune, precum:
servere; sunt acele calculatoare care ofer a resurse partajate pentru utilizatorii ret elei;
client i; sunt acele calculatoare care acceseaz a resursele partajate ^ n ret ea de un
server;
medii de comunicat ie; reprezint a modul^ n care sunt conectate calculatoarele^ n ret ea
(tipul cablului utilizat, a modemului);
date partajate; reprezint a  sierele puse la dispozit ie de serverele de ret ea;
resurse:  siere, imprimante  si alte componente care pot folosite de utilizatorii
ret elei.
1.4.3 TCP/IP (Transmission Control Protocol/Internet Proto-
col)
^In aceast a subsect iune am utilizat informat ii din [4]  si [5].
TCP / IP sau Transmission Control Protocol / Internet Protocol, este o suit a de pro-
tocoale de comunicat ii utilizate pentru interconectarea dispozitivelor de ret ea pe internet.
TCP / IP poate folosit  si ca protocol de comunicat ie ^ ntr-o ret ea privat a (un intranet
sau un extranet).
TCP / IP speci c a modul ^ n care datele sunt schimbate pe internet prin furnizarea
de comunicat ii de tip end to end, care identi c a modul ^ n care ar trebui s a e sparte ^ n
pachete, adresate, transmise, direct ionate  si primite la destinat ie. TCP / IP necesit a un
management redus central  si este conceput pentru a face ret elele abile, cu capacitatea
de a se recupera automat ^ n cazul defect arii oric arui dispozitiv din ret ea.
Cele dou a protocoale principale din suita de protocoale de internet servesc funct ii
speci ce.
TCP de ne ste modul ^ n care aplicat iile pot crea canale de comunicare ^ ntr-o ret ea.
De asemenea, gestioneaz a modul ^ n care un mesaj este asamblat ^ n pachete mai
mici ^ nainte ca acestea s a e apoi transmise prin internet  si reasamblate ^ n ordinea
corect a la adresa de destinat ie.
IP de ne ste modul de adresare  si ruta ec arui pachet pentru a ne asigura c a acesta
ajunge la destinat ia potrivit a. Fiecare computer gateway din ret ea veri c a aceast a
adres a IP pentru a determina unde s a trimit a mesajul.
26

Istoric TCP/IP
Agent ia pentru proiectele de cercetare avansat a ^ n domeniul ap ar arii (DARPA), lial a de
cercetare a Departamentului Ap ar arii al SUA, a creat modelul TCP / IP ^ n anii 0 pentru
a utilizat ^ n ARPANET, o ret ea vast a care a precedat internetul. TCP / IP a fost
conceput init ial pentru sistemul de operare Unix  si a fost construit ^ n toate sistemele de
operare care au urmat.
Cum funct ioneaz a TCP/IP
TCP / IP utilizeaz a modelul de comunicare client / server ^ n care un utilizator sau o
ma sin a (un client) are un serviciu (de ex. trimiterea unei pagini web) de c atre un alt
computer (un server) ^ n ret ea.
^In mod colectiv, suita de protocoale TCP / IP este clasi cat a ca apatrid, ceea ce
^ nseamn a c a ecare solicitare a clientului este considerat a nou a deoarece nu are leg atur a
cu cererile anterioare. Fiind apatrid elibereaz a c aile de ret ea, astfel ^ nc^ at acestea s a poat a
utilizate ^ n mod continuu.
Layer-ul de transport^ nsu si este totu si statal. Transmite un singur mesaj  si conexiunea
acestuia r am^ ane ^ n vigoare p^ an a c^ and toate pachetele dintr-un mesaj au fost primite  si
reasamblate la destinat ie.
Modelul TCP / IP difer a u sor de modelul de ret ea de interconectare deschis a (OSI) cu
seven-layer proiectat dup a acesta, care de ne ste modul ^ n care aplicat iile pot comunica
pe o ret ea.
Straturile modelului TCP / IP
Funct ionalitatea TCP / IP este^ mp art it a^ n patru straturi, ecare dintre acestea cuprinz^ and
protocoale speci ce.
Layerul aplicat iei ofer a aplicat ii cu schimb de date standardizat. Protocoalele sale
includ protocolul de transfer al html (HTTP), protocolul de transfer de  siere
(FTP), Post Oce Protocol 3 (POP3), Simple Mail Transfer Protocol (SMTP)
 si Simple Network Management Protocol (SNMP).
Layerul de transport este responsabil pentru ment inerea comunicat iilor^ ntre capetele
ret elei. TCP gestioneaz a comunicat iile ^ ntre gazde  si ofer a controlul
uxului, mul-
tiplexarea  si abilitatea. Protocoalele de transport includ TCP  si User Datagram
Protocol (UDP), care sunt uneori folosite ^ n loc de TCP pentru scopuri speciale.
Layerul de ret ea, denumit  si stratul de internet, se ocup a cu pachetele  si conecteaz a
ret elele independente pentru a transporta pachetele ^ n limitele ret elei. Protocoalele
de nivel de ret ea sunt IP  si Internet Control Message Protocol (ICMP), acesta din
urm a ind folosit pentru raportarea erorilor.
27

Layerul zic const a ^ n protocoale care funct ioneaz a numai pe o leg atur a { compo-
nenta de ret ea care interconecteaz a nodurile sau gazdele din ret ea. Protocoalele
din acest strat includ Ethernet pentru ret elele locale (LAN)  si Address Resolution
Protocol (ARP).
Avantajele TCP/IP
TCP/IP nu are proprietar  si, prin urmare, nu este controlat de nicio companie. Prin
urmare, suita de protocol Internet poate modi cat a cu u surint  a. Este compatibil cu
toate sistemele de operare, astfel ^ nc^ at poate comunica cu orice alt sistem. Suita de
protocol Internet este, de asemenea, compatibil a cu toate tipurile de hardware  si ret ele
de calculatoare.
1.4.4 Programare client-server
^In aceast a subsect iune am utilizat informat ii din [5], [7]  si [9].
Generalit at i
Modelul standard pentru aplicat ii ^ n ret ea este cel client-server. ^In principiu, modul
de funct ionare pentru un astfel de sistem este: procesul server este pornit iar acesta
intr a ^ ntr-o stare de a steptare p^ ana la conectarea unui posibil client. Procesul client este
pornit, se conecteaz a la server  si face cereri pentru anumite servicii (servicii pe care le
ofer a serverul). Clientul poate pornit pe acela si sistem ca  si serverul sau pe un altul.
Urmeaz a o conversat ie ^ ntre client  si server care se termin a ^ n momentul ^ n care clientul a
obt inut rezultatul dorit de la server. ^In acel moment serverul revine la starea de a steptare.
Serverul poate de doua tipuri:
iterativ acel server care poate servii client ii ^ ntr-un timp dat (de obicei foarte scurt),
clientul ind servit chiar de procesul server.
concurent timpul pentru procesarea unei cereri de la client este necunoscut, ^ n
consecint  a, client ii vor servit i^ ntr-o manier a concurent a. Astfel, respectivul proces
server va clona un nou proces, identic cu procesul original. Noul proces va prelua
respectivul client, procesul server original revenind ^ n starea de a steptare dup a alt i
client i.
Socket
^In aceast a subsect iune am utilizat informat ii din [7].
Un socket este o leg atur a de comunicat ie ^ ntre dou a programe (Programul de tip server
 si Programul de tip client) care ruleaz a ^ n aceea si ret ea. Avem nevoie de dou a programe
28

pentru comunicarea unei aplicat ii socket ^ n C#  si anume: un server Socket Program
(Server)  si un Program Socket Client (Client).
Exist a dou a tipuri de servicii de transport pentru socket:
leg aturi orientate pe conexiune;
Se mai numesc  si sigure, ^ n cazul acestora se garanteaz a livrarea datelor. Clientul
trebuie s a se conecteze ^ n mod explicit la server ^ nainte de a transmite sau primi
date. Clientul nu va accepta connect() p^ an a c^ and serverul nu accept a clientul.
Serverul trebuie s a a stepte ^ n mod explicit clientul ^ nainte de a trimite/primii date.
Serverul va a stepta cu accept() p^ an a la connect() din partea clientului.
leg aturi f ar a conexiune (nesigure) nu se garanteaza livrarea;
^In cazul acestora nu exist a o identi care explicit a a serverului sau a clientului. Dac a
se init ializeaz a contactul cu cealalt a parte trebuie cunoscute adresa de IP  si num arul
portului sau procesul care a steapt a s a e contactat. Se lucreaza cu datagrame.
Exemplu de socket
Programul C# Server Socket: programul care ruleaz a pe un computer are un socket care
se leag a la un port pe acela si computer  si ^ ndepline ste solicit arile primite de la client.
Programul C# Client Socket: acesta trebuie s a cunoasc adresa IP (Hostname) a com-
puterului pe care se a
 a programul server  si num arul portului alocat pentru ^ ndeplinirea
solicit arilor clientului.
Odat a ce conexiunea se stabile ste ^ ntre Server  si Client, ace stia pot comunica (citi sau
scrie) prin propriile socketuri.
Exist a dou a tipuri de protocoale de comunicat ie folosite pentru Socket Programming
^ n C#, acestea ind comunicarea TCP / IP  si comunicarea UDP / IP.
1.4.5 Interact iuni simple client-server folosind C#
^In aceast a subsect iune am utilizat informat ii din [6].
Vom prezenta un exemplu mic ce arat a comunicarea client-server bazat a pe comuni-
carea pe TCP (folosind instrumentele furnizate ^ n System.Net.Sockets). De asemenea,
speci c am un protocol simplu bazat pe mesaje, astfel ^ nc^ at s a putem p astra mesajele
^ mpreun a, de si nu este obligatoriu de utilizat.
Clientul
Este termenul pentru un utilizator care se conecteaz a la un server, de obicei pentru a
solicita date. De exemplu, browserul act ioneaz a ^ n calitate de client ^ n timp ce descarc a
materiale de pe Internet. Pentru majoritatea cazurilor, exist a un singur server  si mai
29

mult i client i  si dac a dorim s a scriem o aplicat ie care comunic a cu serverele existente, tot
ce trebuie s a utiliz am este un socket client.
Crearea unui socket client cu funct ii .NET obi snuite este u sor dezordonat a, a sadar
vom prezenta doar o copert a. Odat a ce avem socket-ul, trebuie s a cre am o instant  a a
ClientInfo pentru a obt ine accesul la date pentru evenimente.
// In headerul f i s i e r u l u i va t r e b u i sa adaugam intotdeauna
using System . Net . Sockets ;
using RedCorona . Net ;
c l a s s SimpleClient
f
C l i e n t I n f o c l i e n t ;
void Start ( )
f
Socket sock = Sockets . CreateTCPSocket ( " 1 9 2 . 1 6 8 . 4 3 . 1 3 4 " , 8 8 8 8 ) ;
c l i e n t = new C l i e n t I n f o ( sock , f a l s e ) ; / / Inca nu primim date ;
c l i e n t . OnReadBytes += new ConnectionReadBytes ( ReadData ) ;
c l i e n t . BeginReceive ( ) ;
g
void ReadData ( C l i e n t I n f o ci , byte [ ] data , i n t len )
f
Console . WriteLine ("Am primit "+len+" bytes : "+
System . Text . Encoding .UTF8. GetString ( data , 0 , len ) ) ;
g
g
Conexiunea s-a realizat  si presupun^ and c a avem un server ce trimite date rezult a c a
vom primi informat iile respective. Pentru a trimite date de tip text c atre server utiliz am
comanda client.Send("text").ClientInfo  si comanda client.Socket.Send() pentru trimiterea
informat iilor ^ n binar.
Comunicarea prin mesaje
Primirea datelor cu OnReadBytes nu garanteaz a c a primim mesajele^ ntr-o singur a bucat a.
ClientInfo ne ofer a dou a moduri de a p astra mesajele ^ mpreun a, unul adecvat pentru
mesajele text simpli cate  si unul potrivit pentru comunicarea arbitrar a pe baz a de mesaje.
30

Mesaje text
Adesea, posibilitatea de a transmite textul cu un marcator de cap at adecvat, adesea o
linie nou a, este tot ceea ce avem nevoie ^ ntr-o aplicat ie. Se pot face lucruri asem an atoare
cu datele primite ^ n acest fel ca  si ^ n cazul  sirurilor de comand a. Pentru a face acest lucru,
atribuim un handler la evenimentul OnRead:
c l a s s TextClient
f
C l i e n t I n f o c l i e n t ;
void Start ( )
f
Socket sock = Sockets . CreateTCPSocket ( " 1 9 2 . 1 6 8 . 4 3 . 1 3 4 " , 8 8 8 8 ) ;
c l i e n t = new C l i e n t I n f o ( sock , f a l s e ) ; / / Inca nu primim date ;
c l i e n t . OnRead += new ConnectionRead ( ReadData ) ;
c l i e n t . Delimiter = ' nn ' ; / / valoarea d e f a u l t de v e r i f i c a r e
c l i e n t . BeginReceive ( ) ;
g
void ReadData ( C l i e n t I n f o ci , String text )
f
Console . WriteLine (" Mesajul text primit e s t e : "+text ) ;
g
g
Acum, orice date primite vor interpretate ca text (text tip UTF8, pentru a mai
precis), iar ReadData() va apelat ori de c^ ate ori se va g asi o linie nou a. Este important
s a ret inem c a dac a datele nu sunt de tip text ( si nu sunt valide UTF8), caracterele nevalide
vor ^ nlocuite cu "?" – este indicat s a nu utiliz am aceast a metod a dec^ at atunci c^ and  stim
sigur c a manipul am text.
Mesaje binare
Pentru aplicat ii mai avansate, este posibil s a dorim s a transmitem un
ux de octet i (care
poate reprezenta orice), dar s a p astr am mesajul complet. Acest lucru se face de obicei
prin trimiterea primei lungimi, iar ClientInfo face acela si lucru. Pentru a utiliza acest
protocol, trebuie s a punem clientul ^ ntr-un mod de mesagerie  si s a utiliz am comanda
OnReadMessage():
c l a s s MessageClient
f
C l i e n t I n f o c l i e n t ;
31

void Start ( )
f
Socket sock = Sockets . CreateTCPSocket ( " 1 9 2 . 1 6 8 . 4 3 . 1 3 4 " , 8 8 8 8 ) ;
c l i e n t = new C l i e n t I n f o ( sock , f a l s e ) ; // Inca nu primim date ;
c l i e n t . MessageMode = MessageMode . Length ;
c l i e n t . OnReadMessage += new ConnectionRead ( ReadData ) ;
c l i e n t . BeginReceive ( ) ;
g
void ReadData ( C l i e n t I n f o ci , uint code , byte [ ] bytes , i n t len )
f
Console . WriteLine ("Am primit "+len+" bytes : "+
System . Text . Encoding .UTF8. GetString ( bytes , 0 , len ) ) ;
g
g
^In versiunea curent a, un parametru de lungime de 4 octet i este trimis ^ naintea datelor
(big-endian); de exemplu, un mesaj care cont ine cuv^ antul "BloodLife" ar avea forma byte
00 00 00 05 42 (B) 6C (l) 6F (o) 6F (o) 64 (d) 4C (L) 69 (i) 66 (f) 65 (e). Evident, cel alalt
cap at al conexiunii trebuie s a utilizeze acela si protocol! Putem trimite mesaje, ^ n acela si
format, utiliz^ and comanda client.SendMessage(cod, octet i).
Probabil v a ^ ntrebat i pentru ce este folosit acel uint code. ^In aceea si idee cu Mes-
sageType.Length, exist a, de asemenea, un MessageType.CodeAndLength care ne permite
s a speci c am un cod de 4 octet i care s a e trimis cu ecare mesaj. (Este trimis ^ naintea
lungimii.) Operatorul de evenimente din acest tip de aplicat ie va , de obicei, ceva de
genul:
void ReadData ( C l i e n t I n f o ci , uint code , byte [ ] bytes , i n t len )
f
switch ( code )
f
case 0 :
Console . WriteLine (" Mesaj : "+
System . Text . Encoding .UTF8. GetString ( bytes , 0 , len ) ) ;
break ;
case 1 :
Console . WriteLine (" Eroare : "+
System . Text . Encoding .UTF8. GetString ( bytes , 0 , len ) ) ;
break ;
// . . . etc
32

g
g
Dac a trimitem mesajul "BloodLife" cu tagul 0x12345678,
uxul de octet i va 12 34
56 78 00 00 00 09 42 6C 6F 6F 64 4C 69 66 65.
Serverul
Pe l^ ang a primirea  si trimiterea de informat ii (la fel ca un client), un server trebuie s a t in a
evident a legat de cine este conectat la acesta. De asemenea, este util s a putem difuza
mesaje, pe care le trimitem ec arui client conectat (de exemplu, un mesaj care indic a
faptul c a serverul este pe cale s a e oprit pentru ^ ntret inere).
Mai jos prezent am un exemplu de clas a de server simpl a, care pur  si simplu "bounces"
( ^ ntoarce ) mesaje ^ napoi de unde au venit, cu except ia cazului ^ n care ^ ncep cu "!", caz
^ n care le difuzeaz a.
c l a s s SimpleServer
f
Server s e r v e r ;
C l i e n t I n f o c l i e n t ;
void Start ( )
f
s e r v e r = new Server (8888 , new ClientEvent ( ClientConnect ) ) ;
g
bool ClientConnect ( Server serv , C l i e n t I n f o n e w c l i e n t )
f
n e w c l i e n t . Delimiter = ' nn ' ;
n e w c l i e n t . OnRead += new ConnectionRead ( ReadData ) ;
return true ; // acceptam conexiunea
g
void ReadData ( C l i e n t I n f o ci , String text )
f
Console . WriteLine ("Am primit de l a "+c i . ID+": "+text ) ;
i f ( text [ 0 ] == ' ! ' )
f
s e r v e r . Broadcast ( Encoding .UTF8. GetBytes ( text ) ) ;
g
e l s e
33

f
c i . Send ( text ) ;
g
g
g
Dup a cum putem vedea, Handler-ul de conectare este trecut printr-un ClientInfo,
pe care ^ l putem trata ^ n acela si mod ca pe un client (atribuim handlerul OnReadXxx
 si MessageType). De asemenea, putem respinge o conexiune prin returnarea mesajului
false din Connect. ^In plus fat  a de Broadcast(), exist a comanda BroadcastMessage() dac a
folosim comunicarea prin mesagerie.
La crearea unui ClientInfos acesta prime ste automat un ID, controlat de proprietatea
static a NextId. Acesta va unic ^ ntr-o aplicat ie, cu except ia cazului ^ n care reset am
NextID oric^ and dup a crearea unuia. O aplicat ie server va dori adesea s a t in a evident a
"tranzact iilor" unui client. Putem face acest lucru ^ n dou a moduri:
Exist a o proprietate Data a ClientInfo, la care putem atribui orice date dorim.
Datele se p astreaz a p^ an a c^ and ClientInfo este eliminat ( este garantat c a acest lucru
se va ^ nt^ ampla doar dup a ce moare conexiunea).
Putem utiliza valoarea client.ID ca  si cheie ^ ntr-un Hashtable sau similar. Dac a
facem acest lucru trebuie s a furniz am un dispozitiv de tratare a deconect arii:
void ConnectionClosed ( C l i e n t I n f o c i )
f
myHashtable . Remove( c i . ID ) ;
g
pentru a ne asigura c a datel au fost  sterse.
Criptarea
Aceast a bibliotec a include capacitatea de a proteja un socket, folosind un algoritm de
criptare. Acest lucru poate activat prin transmiterea unei valori pentru encryptionType
^ n constructorul ClientInfo sau setarea propriet at ii EncryptionType ^ nainte de a apela
BeginReceive  si setarea propriet at ii DefaultEncryptionType pe server:
public void EncryptionExamples ( )
f
// Client , Metoda 1 : apelam c o n s t r u c t o r u l complet
C l i e n t I n f o encrypted1 = new C l i e n t I n f o ( socket1 , null ,
myReadBytesHandler , C l i e n t D i r e c t i o n . Both , true ,
EncryptionType . ServerKey ) ;
34

// Client , Metoda 2 : i n t a r z i e r e a p r i m i r i i s i s e t a r e a EncryptionType
C l i e n t I n f o encrypted2 = new C l i e n t I n f o ( socket2 , f a l s e ) ;
encrypted2 . EncryptionType = EncryptionType . ServerRSAClientKey ;
encrypted2 . OnReadBytes = myReadBytesHandler ;
encrypted2 . BeginReceive ( ) ;
// Server : s e t a r e a DefaultEncryptionType
s e r v e r = new Server (2345 , new ClientConnect ( ClientConnect ) ) ;
s e r v e r . DefaultEncryptionType = EncryptionType . ServerRSAClientKey ;
g
Exist a trei moduri de criptare acceptate. Primul, nici unul, nu efectueaz a nicio criptare
 si este implicit. EncryptionType.ServerKey ^ nseamn a c a serverul trimite o cheie simetric a
pentru conexiune atunci c^ and clientul se conecteaz a pentru prima oar a; deoarece cheia este
trimis a necriptat a, acest mod de criptare nu este foarte sigur, dar^ nseamn a c a comunicarea
nu este ^ n text simplu. Cea mai sigur a metod a este ServerRSAClientKey: serverul va
trimite o cheie public a RSA la conectare, iar clientul va genera o cheie simetric a  si va
cripta utiliz^ and cheia RSA^ nainte de a-l trimite pe server. Aceasta^ nseamn a c a respectiva
cheie nu este niciodat a vizibil a de o tert  a parte  si conexiunea este destul de sigur a; pentru
a accesa mesajul va trebui s a spargem algoritmul de criptare.
Dac a alegem s a utiliz am socketuri criptate vom avea foarte put ine modi c ari ^ n cod
aplicat iei. Cu toate acestea, pe server ar trebui s a r aspundem la evenimentul ClientReady,
nu ClientConnect, ^ n majoritatea cazurilor. ClientReady este apelat c^ and schimbul de chei
este nalizat  si un client este gata s a trimit a  si s a primeasc a date; ^ ncercarea de a trimite
date c atre un client ^ nainte de acest eveniment va avea ca rezultat o except ie. ^In mod
similar, dac a dorim s a trimitem date printr-un socket client criptat, trebuie s a r aspundem
la evenimentul OnReady sau s a veri c a proprietatea EncryptionReady^ nainte de a trimite
date.
35

Capitolul 2
Aplicat ia BloodLife
Primul pas ^ n conectarea prin cod la baza de date
Primul pas ^ n dezvoltarea aplicat iei curente este reprezentat de conectarea la baza de date
pe care o vom folosi. Acest lucru se realizeaz a utiliz^ and urm atoarea secvent  a de cod:
SqlConnection cs=new SqlConnection (" Data Source=Lenovo PC;
I n i t i a l Catalog=RFIDdatabase ; Integrated Security= TRUE" ) ;
^Inc arcarea datelor ^ n BindingSource
Urmeaz a preluarea datelor din tabelele bazei de date. Se creeaz a c^ ate un obiect de tip
BindingSource pentru ecare tabel care va utilizat  si se preia informat iile din baza de
date ^ n modul urm ator:
donatietableBindingSource . DataSource =
db . Donatie table . Include (" Donator " ) . ToList ( ) ;
36

grupesanguineBindingSource . DataSource =
db . Grupe sanguine . Include (" Donators " ) . ToList ( ) ;
rhBindingSource . DataSource =
db . Rhs . Include (" Donators " ) . ToList ( ) ;
sexBindingSource . DataSource =
db . Sexes . Include (" Donators " ) . ToList ( ) ;
judeteBindingSource . DataSource =
db . Judetes . Include (" Donators " ) . ToList ( ) ;
locatieBindingSource . DataSource =
db . Locaties . Include (" Donatie table " ) . ToList ( ) ;
^Inc arcarea datelor ^ n comboboxuri
^In continuare am introdus opt iunile pentru comboboxurile din interfat  a. Mai jos am
prezentat c^ ateva exemple ^ n care se prezint a acest procedeu. Codul de mai jos se refer a
la ad augarea datelor ^ n comboboxurile folosite pentru c autare ^ n baza de date, acestea
ind prezente ^ n partea dreapta a butonului "Statistici". ^Intr-un mod asem an ator se
procedeaz a  si pentru comboboxurile din panoul "Informat ii donator", din partea dreapt a
a interfet ei.
comboBoxGrupa . Items . Add(" S e l e c t a t i grupa " ) ;
comboBoxGrupa . Items . Add("0 I " ) ;
comboBoxGrupa . Items . Add(" AII " ) ;
comboBoxGrupa . Items . Add(" BIII " ) ;
comboBoxGrupa . Items . Add("ABIV" ) ;
comboBoxRh . Items . Add(" S e l e c t a t i Rh" ) ;
comboBoxRh . Items . Add(" negativ " ) ;
comboBoxRh . Items . Add(" p o z i t i v " ) ;
^In nal sunt veri cate datele donat iei curente  si informat iile relevante sunt a  sate ^ n
interfat  a. Astfel, la pornirea aplicat iei datele vor ^ nc arcate  si a  sate.
37

2.1 DataGridView Donat ie
^In acest DataGridView^ nc arc am anumite informat ii din^ nregistr arile tabelei "Donat ie table".
Acest DataGridView este principalul component al interfet ei gra ce, toate ^ nregistr arile
donat iilor ind a  sate ^ n aceast a fereastr a.
Acest element gra c, ^ mpreun a cu toate coloanele interioare acestuia, au fost create
direct din interfat a Visual Studio C#. Acest proces se realizeaz a urm and pa sii:
Se selecteaz a DataGridView-ul  si se d a click pe iconit a s ageat a cu v^ arful spre partea
dreapta, din partea dreapt a a respectivului GridView. ^In acest mod se va a  sa o
nou a fereastr a, numit a "DataGridView Tasks".
Dup a selectarea BindingSource-ului din care dorim preluarea coloanelor  si implicit
a informat iilor d am click pe "Edit columns"  si se va a  sa fereastra urm atoare
38

Folosind aceast a fereastr a am de nit ^ n c^ ampul de date DataPropertyName coloana
din care prelu am date  si ^ n c^ ampul HeaderText textul care va vizibil ^ n interfat  a.
Id donat ie
Reprezint a cheia primar a din tablul "Donatie table". Acesta are o legatur a unu la unu
cu id ul unui tag RFID ^ n modul de conectare la cititor.
CNP donator
Este u sor de observat c a acesta reprezint a identi catorul de legatur a ^ ntre datele donat iei
 si datele donatorului, date ce vor vizibile ^ n panoul "Informat ii donator", din partea
dreapt a a interfet ei.
Data donat iei
^In aceast a coloan a sunt vizibile informat iile legate de data la care a avut loc donat ia.
Data utiliz arii donat iei
Datele vizibile ^ n aceast a coloan a au acela si format ca cele din coloana precedent a. Acest a
coloan a accept a  si valoarea nul a, acesta ind cazul ^ n care punga de s^ ange ^ nc a nu a fost
folosit a. Folosind datele din coloana aceasta  si cea precedent a putem face o statistic a
privind durata de "a steptare" a unei pungi de s^ ange. Pentru a crea o statistic a mai
interesant a putem ad auga condit ii precum tipul grupei de s^ ange sau tipul de rh.
39

Id locat ie donat ie
Este u sor de observat c a acesta reprezint a identi catorul de legatur a ^ ntre datele donat iei
 si datele locat iei pungii de s^ ange, date ce vor vizibile ^ n panoul "Informat ii locat ie", din
partea dreapt a sus a interfet ei.
S tergere ^ nregistrare
Aceast a coloan a este creat a manual, ne ind importat a din baza de date. La ap asarea
butonului corespunz ator unei ^ nregistr ari  si coloanei respective se face o trimitere c atre
o funct ie care veri c a printr-o ^ ntrebare dacua chiar se dore ste  stergerea ^ nregistr arii
respective.
Rularea programului
La rularea programului DataGridView-ul va ar ata ^ n felul urm ator:
2.2 Panoul "Indormat ii donator"
^In acest panou ^ nc arc am informat ii reprezentative pentru ^ nregistrarea selectat a ^ n
view-ul principal. Am realizat acest lucru prin crearea unei leg aturi de tip cheie primar a
– cheie str ain a ^ ntre elementul CNP din tabelul Donat ie  si elementul CNP din tabelul
Donatori.
40

CNP:
A sa cum am speci cat  si mai sus acesta este identi catorul tabelei donator, toate celelalte
informat ii depinz^ and de acesta. Acest c^ amp a fost alegerea ideal a pentru cheia primar a,
ind "cheie primar a"  si in viat a real a.
Nume:
Este evident c a este important s a det inem  si alte detalii despre persoana ^ n cauza, nu doar
CNP-ul. ^In principiu respectiva ^ nregistrare nu reprezint a doar ni ste numere, ci prezint a
o viat  a ce ajut a la salvarea altor viet i.
Prenume:
Pe acela si principiu ca  si ^ n cazul numelui prenumele este destul de important.
Telefon:
Num arul de telefon este un mod principal de contact al persoanei respective. De exemplu,
^ n cazul ^ n care este nevoie urgent a de s^ ange din grupa si rh-ul respectivei persoane acesta
ar putea contactat  si anunt at c a este nevoie de s^ ange csi dac a poate veni s a doneze. ^In
momentele de genul se folosesc datele de mai sus pentru a i se adresa corect.
Grupa:
Tipul grupei sanguine este un factor important ^ n domeniul aplicat iei curente ^ ntruc^ at
grupa donatorului trebuie sa e compatibil a cu grupa celui care prime ste donat ia. ^In
cazul de fat  a am folosit un obiect de tip combobox pentru a cre ste e cient a. Fiind vorba
de un num ar limitat de tipuri de grupe sanguine este mult mai u sor de lucrat cu un astfel
de obiect. Acesta este "^ nc arcat" cu tipurile de grupe  si ca un exemplu, ^ n momentul ^ n
care modi c am sau ad ag am o nou a ^ nregistrare putem selecta direct valoarea dorit a. Un
alt mod ^ n care putem folosi tipul grupei sanguine este prin crearea unei statistici privind
donatorii.
Rh:
^In aceea si idee ca  si ^ n cazul grupei tipul rh-ului este un factor important, o persoan a
cu rh-ul negativ neput^ and primi o donat ie de la o persoan a cu rh-ul pozitiv, chiar dac a
grupele sanguine ale celor dou a persoane sunt compatibile. Am folosit un combobox din
acelea si motive ca mai sus. Un alt mod ^ n care putem folosi tipul rh-ului este prin crearea
unei statistici privind donatorii.
41

Sex:
Aceast a informat ie ne ajut a ^ n cazul apel arii persoanei respective  si ^ n cazul realiz arii unei
statistici pentru a vedea procentajul donat iilor de s^ ange ^ n funct ie de sexul donatorilor.
Am folosit un combobox din acelea si motive ca mai sus.
Judet :
Aceast a informat ie ne ajut a ^ n cazul realiz arii unei statistici pentru a vedea procenta-
jul donat iilor de s^ ange ^ n funct ie de judet ul de provenient  a al acestora. Am folosit un
combobox din acelea si motive ca mai sus.
Dup a rularea aplicat iei panoul "Informat ii donator" va ar ata ca ^ n exemplele de mai
jos:
2.3 Panoul "informat ii locat ie"
Situat ^ n dreapta sus ^ n fereastra principal a aceasta face legatura ^ ntre id-ul de locat ie
din DataGridView-ul donat iilor  si descrierea explicit a a locat iei pungii de s^ ange. Am
pornit de la ideea c a pungile sunt depozitate ^ ntr-o sal a, ^ n condit iile necesare pentru
buna p astrare a s^ angelui.
Raft:
Se presupune c a ^ n sala respectiv a avem mai multe rafturi, numerotate de la 1 la n. Astfel,
primul element din panoul de informat ii ne speci c a raftul pe care se situeaz a punga de
s^ ange dorit a.
42

Nivel:
Din cauz a faptului c a o bun a organizare prevede faptul c a pe un raft se pot depozita un
num ar mare de donat ii se speci c a  si nivelul pe care se situeaz a ecare ^ n parte.
Num ar:
Presupun^ and  si c a rafturile sunt destul de lungi am ad augat  si informat ia referitoare la
pozit ia de pe nivelul deja cunoscut.
De si ^ n mod normal nu este cazul unei localiz ari at^ at de exacte, ind spitale care au
un singur raft  si nu mai mult de 10, 20 de pungi de s^ ange ^ n permanent  a, idealul ar ca
organizarea de mai sus s a ajung a s a e necesar a.
Dup a rularea aplicat iei panoul "Informat ii locat ie" va ar ata ca ^ n exemplele de mai
jos:
2.4 Filtrarea ^ nregistr arilor
Deoarece este posibil ca utilizatorul aplicat iei s a doreasc a s a caute o anumit a persoan a,
o anumit a grup a de s^ ange, un anumit tip de rh, etc. am ad augat  si opt iuni cu privire la
acest aspect.
Pentru a realiza ltrarea am realizat o funct ie care ia ^ n considerare at^ at c^ ampul
utilizat pentru c autarea dup a CNP c^ at  si combobox-urile pentru grup a  si rh.
Prima oar a trat am cazul ^ n care nu mai avem niciun ltru aplicat. ^In cazul acesta
vom a  sa toate ^ nregistr arile.
^In caz contrar init iliz am c^ ate un query pentru ecare opt iune de ltrare ^ n felul
urm ator:
var queryCNP = from o in db . Donatie table . Include ()" Donator ")
where o . CNP donator . Contains ("")
s e l e c t o ;
Urm atorul pas este reprezentat de veri carea c^ ampului de c autare CNP. ^In cazul ^ n
care acesta este diferit de null aplic am ltrul dorit prin:
43

queryCNP = from o in db . Donatie table . Include
(" Donator ") where o . CNP donator . Contains ( txtSearch . Text )
s e l e c t o ;
^In cazul ^ n care mai avem aplicat  si ltrul pe grupa sanguin a query-ul nu se va mai
aplica pe Donatie table ci pe query-ul precedent
i f (comboBoxGrupa . SelectedIndex != 0)
f
queryGrupa = from o in queryCNP
where o . Donator . Grupe sanguine . Grupa . Contains
(comboBoxGrupa . Text ) s e l e c t o ;
g
^In caz contrar
queryGrupa = queryCNP ;
Acela si algoritm se repet a  si pentru cazul ltrului pe tipul de rh.
^In nal se aplic a query-ul obt inut
donatietableBindingSource . DataSource = queryRh . ToList ( ) ;
 si se veri c a dac a exist a ^ nregistr ari care s a ^ ndeplineasc a condit iile ltrelor.
^In caz contrar se va a  sun mesaj care speci c a acest lucru  si din ltru se va elimina
o opt iune. Operat ia se repet a ^ n cazul ^ n care ^ nregistr arile existente nu ^ ndeplinesc
condit iile.
2.4.1 Filtrarea dup a CNP
Aceasta se realizeaz a prin completarea c^ ampului prezentat ^ n imaginea de mai sus  si
ap asarea butonului Enter de la tastatur a. Respectivul c^ amp poate folosit pentru
c autarea dup a CNP-ul complet sau dup a o parte din acesta.
De exemplu, dac a dorim s a vedem doar donatorii de sex feminin n ascut i ^ n anii 0 este
su cient s a complet am ^ n c asut  a cu "29". Ap as am enter  si obt inem:
44

2.4.2 Filtrarea ^ n funct ie de grupa sanguin a
La extinderea combobox-ului se vor a  sa toate opt iunile, a sa ca ^ n imaginea de mai jos:
Dup a selectarea grupei ltrul se va aplica  si vom obt ine:
Se poate observa ^ n partea dreapt a c a ^ nregistrarea ^ ndepline ste condit iile ltrului ( ^ n
informat ii donator grupa este 0I ).
2.4.3 Filtrarea ^ n funct ie de tipul rh-ului
La extinderea combobox-ului se vor a  sa toate opt iunile, a sa ca ^ n imaginea de mai jos:
Dup a selectarea rh-ului ltrul se va aplica  si vom obt ine:
Se poate observa ^ n partea dreapt a c a ^ nregistrarea ^ ndepline ste condit iile ltrului ( ^ n
informat ii donator rh-ul este pozitiv ).
45

2.5 Statistici
Pentru a avea o evident  a direct a asupra num ar alui de persoane cu o anumit a caracteristic a
am ad augat^ n interfat  a un buton care creeaz a un excel cu statistici bazate pe^ nregistr arile
din baza de date. La ap asarea butonului Statistici se va crea  sierul Excel nou, ^ n cazul
^ n care acesta deja exist a vom ^ ntrebat i dac a dorim s a ^ nlocuim  sierul respectiv cu
unul nou, ^ n care folosim baza de date cu informat ii actualizate. Dac a suntem de acord
cu suprascrierea vom primi un alt mesaj ^ n care se speci c a calea c atre locul unde a fost
creat  sierul  si acesta se va deschide automat.
Primul pas ^ n algoritmul acesta este reprezentat de veri carea existent ei programului
Microsoft Oce Excel pe dispozitivul pe care ruleaz a aplicat ia.
^In cauzul ^ n care programul Excel este prezent se continu a cu crearea primului work-
sheet.
//Adaugarea f i l e i s t a t i s t i c a grupe sanguine
xlWorkSheetGrupe = ( Microsoft . O f f i c e . Interop . Excel .
Worksheet ) xlWorkBook . Worksheets . Add ( ) ;
xlWorkSheetGrupe .Name = "Grupe sanguine " ;
//add data
xlWorkSheetGrupe . C e l l s [ 1 , 1 ] = "";
xlWorkSheetGrupe . C e l l s [ 1 , 2 ] = "0 I " ;
xlWorkSheetGrupe . C e l l s [ 1 , 3 ] = "AII " ;
xlWorkSheetGrupe . C e l l s [ 1 , 4 ] = " BIII " ;
xlWorkSheetGrupe . C e l l s [ 1 , 5 ] = "ABIV" ;
Dup a crearea primei linii se init ializeaz a cu 0 valorile tabelului ce va folosit ^ n crearea
statisticii.
i n t counterDonators = db . Donators . Count ( ) ;
f o r ( i n t i = 0 ; i <counterDonators ; i++)
f
f o r ( i n t j = 2 ; j <6 ; j++)
f
xlWorkSheetGrupe . C e l l s [ i +2, j ] = 0 ;
g
g
Primul for merge de la 0 la num arul donat iilor, iar al doilea merge de la 2 la 6 deoarecere
in Excel avem nevoie sa completam coloanele de la 2 la 5 (a sa cum am stabilit pe prima
linie).
Urm atorul pas este completarea locat iilor cu 1 ^ n cazul ^ n care ceea ce ne intereseaz a
46

se respect a.
foreach ( Donator donator in db . Donators )
f
xlWorkSheetGrupe . C e l l s [ currentRow , donator . Grupe sanguine .
idgrupa + 1 ] = 1 ;
currentRow++;
g
Urmeaz a calcularea num arului total din ecare opt iune
xlWorkSheetGrupe . C e l l s [ currentRow , 1 ] = " Total " ;
xlWorkSheetGrupe . C e l l s [ currentRow , 2 ] . Formula = "=SUM(B2 :B" +
( currentRow1 ) . ToString ( ) + " ) " ;
xlWorkSheetGrupe . C e l l s [ currentRow , 3 ] . Formula = "=SUM(C2 :C" +
( currentRow1 ) . ToString ( ) + " ) " ;
xlWorkSheetGrupe . C e l l s [ currentRow , 4 ] . Formula = "=SUM(D2 :D" +
( currentRow1 ) . ToString ( ) + " ) " ;
xlWorkSheetGrupe . C e l l s [ currentRow , 5 ] . Formula = "=SUM(E2 :E" +
( currentRow1 ) . ToString ( ) + " ) " ;
Se creeaz a un nou chart ^ n worksheetul curent  si se folosesc datele obt inute.
Excel . ChartObjects xlCharts =
( Excel . ChartObjects ) xlWorkSheetGrupe . ChartObjects (Type . Missing ) ;
Excel . ChartObject myChart =
( Excel . ChartObject ) xlCharts . Add(288 , 16 , 384 , 3 1 5 ) ;
Excel . Chart chartPage = myChart . Chart ;
chartPage . HasTitle = true ;
chartPage . ChartTitle . Text = "Grupe sanguine " ;
chartRange = xlWorkSheetGrupe . get Range
("$A$1 : $E$1 , $A$"+currentRow +":$E$"+currentRow ) ;
chartRange . Columns . AutoFit ( ) ;
chartPage . SetSourceData ( chartRange , misValue ) ;
chartPage . ChartType = Excel . XlChartType . xl3DPieExploded ;
chartPage . ApplyDataLabels ( XlDataLabelsType . xlDataLabelsShowValue ,
XlDataLabelsType . xlDataLabelsShowLabel , true , f a l s e , f a l s e , true ,
f a l s e , true ) ;
// s f a r s i t f i l a grupe sanguine
47

Statistic a grupe sanguine
Pentru ^ nregistr arile prezente ^ n baza de date obt ine:
Statistic a grupe sanguine + rh
Pentru ^ nregistr arile prezente ^ n baza de date obt ine:
48

Statistic a ^ n funct ie de sexul donatorilor
Pentru ^ nregistr arile prezente ^ n baza de date obt ine:
2.6 Modi carea informat iilor din baza de date
Pentru modi carea unei^ nregistr ari sau ad augarea unei^ nregistr ari am ad augat^ n interfat  a
urm atoarele butoane:
Butonul Adaug a
La ap asarea acestui buton se creeaz a o nou a ^ nregistrare de tip donat ie  si un nou Donator.
Dup a completarea datelor din panoul informat ii donator  si completarea ^ n linia tabelului
cu donat ii putem salva ap as^ and butonul Salvare.
Butonul Editare
La ap asarea acestui buton panoul informat ii donator se deblocheaz a  si putem modi ca
datele din interior. Acest buton poate folosit ^ n cazul schimb arii num arului de telefon,
sau al numelui de familie, ^ n cazul c as atoriei. Pentru nalizarea modi c arilor dorite se
apas a pe butonul Salvare.
49

Butonul Anulare
Acest buton are un efect c^ and suntem ^ n modul de ad augare sau editare. La ap asarea
acestui buton ultimele modi c ari nu vor luate ^ n considerare  si la urm atoarea a  sare a
^ nregistr arilor se va reveni la situat ia precedent a.
Butonul Salvare
Acesta funct ioneaz a ^ n acelea si situat ii ca  si butonul de anulare, doar c a acesta are o
react ie opus a celei din cazul precedent.
2.7 Conectarea la cititorul RFID
Conectarea la cititor se face prin introducerea IP-ului ^ n c^ ampul dedicat  si ap asarea
butonului de conectare. ^In momentul ^ n care conexiunea este realizat a mesajul "Citi-
torul RFID nu este conectat" se va modi ca ^ n "Cititorul RFID este conectat"  si ^ n
DataGridView-ul donat ii vor mai vizibile doar acele ^ nregistr ari care sunt legate printr-
o relat ie cu tagurile RFID din raza antenei.
50

Bibliogra e
[1] HARTING Technology Group, "RF-R3x0QuickStart2.1.0" , 2018-10-08.
[2] HARTING Technology Group, "RF-R350 RFID App V2.0.x – User Manual" , Edition
2018, 07/17.
[3] https://www.abr.com/what-is-r d-how-does-r d-work/
[4] https://aureldeac89.weebly.com/uploads/4/6/8/0/4680293/2 20retele decalculatoare.pdf
[5] https://biblioteca.regielive.ro/cursuri/retele/retele-de-calculatoare-9963.html
[6] https://www.codeproject.com/Articles/12286/Simple-Client-server-Interactions-
using-C
[7] http://csharp.net-informations.com/communications/csharp-socket-
programming.htm
[8] https://searchsqlserver.techtarget.com/de nition/database
[9] https://www.scribd.com/document/376589830/C6-sockets-pdf
[10] https://www.tp-link.com/ro/business-networking/accessory/tl-poe150s
51

Similar Posts