Mihaela Stan (Anastasiu) [622239]
UNIVERSITATEA “TITU MAIORESCU” DIN BUCUREȘ TI
FACU LTATEA DE INFOR MATICĂ
LUCRARE DE
LICENȚĂ
COORDONA TOR ȘTIINȚIFIC:
Conf. univ. dr. ing. Mironela Pîrnău
ABSOLVENT: [anonimizat]
2020
UNIVERSITATEA “TITU MAIORESCU” DIN BUCUREȘ TI
FACU LTATEA DE INFOR MATICĂ
LUCRARE DE LIC ENȚĂ
Implementarea unei aplicații de tip bibliotecă folosind
tehnologia Java Swing
COORDONA TOR ȘTIINȚIFIC:
Conf. univ. dr. ing. Mironela Pîrnău
ABSOLVENT: [anonimizat]
2020
UNIVERSITAT EA TITU MAIORESCU FAC ULTAT EA DE INFOR MATICĂ
DEPARTA MENTUL DE INFOR MATICĂ
REF ERAT
DE APR ECIERE A LUCRĂRII DE LICENȚĂ
TITLU : Implementarea unei aplicații de tip bibliotecă folosind tehnologia Java Swing
ABSOLVENT: [anonimizat](Anastasiu) Mihaela
PROFE SOR COORD ONATOR: Conf. univ. dr. ing. Mironela Pîrnău
Referitor la conținutul lucrării, fac următoarele aprecieri:
A. Conținutul științific al lucrării 1 2 3 4 5 6 7 8 9 10
B. Document area din liter atura de specialitate 1 2 3 4 5 6 7 8 9 10
C. Contribuția proprie 1 2 3 4 5 6 7 8 9 10
D. Calitatea exprimării s crise și a redactării lucrării 1 2 3 4 5 6 7 8 9 10
E. Conlucr area cu coordonatorul științific 1 2 3 4 5 6 7 8 9 10
F. Realizarea aplicației pr actice 1 2 3 4 5 6 7 8 9 10
Punctaj total = (A+B+C+D+E+2F)/7
În concluzie, consider că lucrarea de licență întrunește condiți ile pentru a fi susținu tă
în fața comisiei pentru examenul de lic ență din sesiunea
__________________________ și o apr eciez cu nota___________________.
COND UCĂTOR ȘTIINȚIFI C,
1
Cuprins
Introducere ………………………….. ………………………….. ………………………….. ………………………….. ……………….. 2
Capitolul 1. Noțiuni Introductive ………………………….. ………………………….. ………………………….. ……………… 3
1.1 Aplicații cunoscute ………………………….. ………………………….. ………………………….. …………………… 3
1.2 Tehnologii utilizate ………………………….. ………………………….. ………………………….. ………………….. 5
1.2.1 XAMPP ………………………….. ………………………….. ………………………….. ………………………….. . 5
1.2.2 MySQL ………………………….. ………………………….. ………………………….. ………………………….. . 6
1.2.3 Netbeans ………………………….. ………………………….. ………………………….. ………………………….. 6
1.2.4 Java Swing ………………………….. ………………………….. ………………………….. ………………………. 7
Capitolul 2. Prezentarea aplicației ………………………….. ………………………….. ………………………….. ………….. 11
2.1 Crearea bazei de date în phpMyAdmin ………………………….. ………………………….. ……………………….. 11
2.2 Accesul la baze de date folosind JDBC ………………………….. ………………………….. ………………………. 13
2.3 Stabilirea unei conexiuni cu baza de date ………………………….. ………………………….. ……………………. 14
2.4 Crearea proiectului Biblioteca în NetBeans folosind limbajul Java ………………………….. …………….. 16
2.5 Prezentarea interfeței grafice a aplicații ………………………….. ………………………….. ………………………. 16
2.5.1 Diagrama cazurilor de utilizare ………………………….. ………………………….. ………………………….. .. 16
2.5.2 Interacțiunea utilizatorului cu aplicația ………………………….. ………………………….. …………………. 17
Capitolul 3. Detalii de implementare ………………………….. ………………………….. ………………………….. ………. 22
3.1 Interacțiunea functionalitatilor aplicației prin Java Swing ………………………….. ………………………….. 22
3.2 Prezentarea funcționalitaților aplicației ………………………….. ………………………….. ………………………. 29
3.3 Testarea aplicației ………………………….. ………………………….. ………………………….. ……………………….. 36
Concluzii: ………………………….. ………………………….. ………………………….. ………………………….. ……………….. 41
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …………….. 42
2
Introducere
Lucrarea de faț ă își propune să detalieze implementarea unei aplicații de tip bibliotec ă
folosind tehnologia Java Swing. Aplicația Biblioteca rulează în mediul desktop și este destinat ă
atât bibliotecilor școlare cât ș i bibliotecilor publice avad ro lul de a furniza bibliotecarilor
posibilitatea de a administra și gestiona cărțile împrumutate fizic de către diverși utilizatori. De
asemenea pe lângă gestionarea cărților împr umutate aplicația permite personalului autorizat din
cadrul bibliotecii să gestioneze cărțile noi, dar să și creeze conturi utilizatorilor care doresc să
folosească serviciile biblioteci i, putând astfel gestiona și controla mult mai ușor principalele
sarci ni ale acestora.
Conținutul lucrării este prezentat în 3 capitole principale. Primul capitol furnizează
informații atât pentru aplicațiile cunoscute și folosite în dom eniu cât și descrierea detaliat ă a
tehnologiilor utilizate în cadrul aplicației dezvoltat e.
Al doilea capitol prezint ă functionalitatile aplicației din punct de vedere al folosir ii
acestora de către utilizatori, funcționalități detaliate în diagrama cazurilor de utilizare. Aplicația
conține caracteristicile principale a gestiunii unei bibliote ci, de exemplu împrumută o carte,
adaugă o carte noua în bibliote că, vizualizează un raport cărți împrumutate și cărți returnate, etc.
Toate aceste caracteristici au fost detaliate în acest capitol. De asemenea capitolul conține și
informații despre creare a bazei de date, accesul către baza de date cât și stabilirea conexiunii
intre baza de date și mediul de programare ales.
Ultimul capitol descrie opțiunile folosite pentru crearea grafica a ferestrelor de dialog
utilizând tehnologia Java Swing, metodele cr eate în limbajul de programare Java și utilizate în
realizarea functionalitatilor aplicației. Acest capitol cuprinde și câteva exemple de cazuri
(scenarii) de testare care au fost f olosite pentru aplicația curent ă.
Din punct de vedere al gradulu i de noutate al lucrări, aceast ă lucrare nu are un grad
ridicat, tendințele actuale de dezvoltare a aplicațiilor indreptandu -se tot mai mult în mediu
online, dar aplicația curenta înglobează mai multe tehnologii deja folosite și cunoscute care
furnizează începă torilor în domeniul dezvoltării aplicaților o imagine de ansmablu și descrie
pașii pentru realizarea unei aplicații de tip desktop cu accent pe utilizarea tehnologiei Java
Swing.
3
Capitolul 1. Noțiuni Introductive
1.1 Aplicații cunoscute
Bibliotecile actuale t ind să devină adevărate centre informaționale, care extind ariile de
cercetare ale utilizatorilor. În ciuda răspândirii din ce în ce mai largi a bibliotecilor virtuale și
construcția de clădiri pentru biblioteci moderne, noi, este în plin avânt.
Digitalizarea informației creste cererea de biblioteci moderne, înzestrate cu toată electronica
necesară pentru a accesa informațiile înmagazinate, specialiștii documentariști și bibliotecari
contribuie la apariția de noi metode, de ex. interactive, care s ă potențeze eficiența la folosirea
bibliotecilor de orice natură.
Activitățile de digitizare cuprinde activități de stocare, scanare, prelucrare digitală și
publicare online, și se desfășoară în cadrul unui serviciu organizat, cu personal specializat și
instruit în folosirea corectă a echipamentelor și programelor, cu respectarea standardelor de lucru
europene în domeniu.
Cu trecerea timpului de la o cultură a hârtiei la o cultură a electronicii s -a început
automatizarea bibliotecilor, urmată de intercone ctarea lor în rețele de biblioteci, astfel încât peste
multe biblioteci tradiționale se suprapun și biblioteci electronice. Acest fapt contribuie la
transformarea bibliotecii clasice într -o bibliotecă „virtuală”. Biblioteca virtuală este o bibliotecă
alcăt uită din colecții de date electronice aflate în biblioteci electronice interconectate între ele
prin intermediul unei rețele de calculatoare că de ex. Internetul. Bibioteca virtuală este accesibilă
de la distanță; de aceea își poate pune la dispoziție mate rialele simultan la oricâți utilizatori,
răspândiți pe tot globul.
Avantajele bibliotecilor digitale (electronice):
• Accesul utilizatorului la o mare cantitate de documente dintr -un singur loc de lucru, fără
deplasare fizică. Locul de lucru trebuie desi gur să fie dotat cu un aparat special, că de exemplu
un calculator sau un e -book reader.
• Accesul la bibliotecă al unui număr sporit de utilizatori (de exemplu utilizatori de pe tot
globul, cu ajutorul Internetului)
• Accesul simultan al mai multor util izatori la același document
• Protejarea originalelor față de tratarea neglijentă sau răuvoitoare
4
• Posibilitate relativ simplă de creare a unei copii electronice de siguranță a întregii biblioteci
• Posibilitatea de a muta copia de siguranță pe un cu to tul alt server în altă clădire, în altă
localitate, pentru a exclude pierderea datelor în cazul unui eveniment de forță majoră (incendiu,
inundație, cutremur, act de terorism etc.)
• Simplificarea (automatizarea) încasării taxei de utilizare
Biblioteci digitale românești:
• Biblioteca Digitală Națională este parte componentă a Bibliotecii Digitale Europene și are
că principal scop conservarea și protecția patrimoniului cultural național existent în bibliotecile
din Sistemul Național de Biblioteci precum și promovarea colecțiilor și lărgirea accesului la
informație. Sunt incluse și documentele create numai în format electronic (cărți și reviste on -line,
resurse electronice de pe site -uri, baze de date, etc). Prin digitalizarea informațiilor în cadrul
acestei biblioteci se asigura și promovarea valorilor naționale, o mai buna răspândire a
informației, cât și valorificarea la nivel narional și international a documentelor rare și a
colecțiilor speciale.
• Biblioteca Digitală a Bucureștilor este dezvoltată î n sistemul de management al obiectelor
digitale și este bazat pe tehnologii de ultimă generație, precum serviciile web (SOAP), XML,
XSD, XSL, ODBC, Unicode și JPEG 2000
• Biblioteca Digitala BCU Cluj. Biblioteca Digitală a Universității „Lucian Blaga” din Sibiu
Exemple de software pentru gestinarea unei biblioteci:
• Milvacom (https://www.milvacom.ro/biblioteca.html) reprezintă un soft destinat
gestionarii unei biblioteci de cărți pentru a ușura munca bibliotecarilor a administrării cărților cât
și a împrumuturilor acestora de către diverși utilizatori.
• SafirBibliotecar (http://www.safir -informatica.ro/safir -bibliotecar) permite înregistrarea
cărților din biblioteca și gruparea lor pe categorii, edituri, colecții, autori, limbi străine. Se pot
înregistra de asemenea și cărțile împrumutate.
5
1.2 Tehnologii utilizate
Pentru dezvo ltarea aplicației “Implementarea unei aplicații de tip biblioteca folosind
tehnologia Java Swing “ s -au fost folosit aplicațiile de mai jos. Aplicația dezvoltata în lucrarea de
fața este destinata doar sistemului de operare Windows.
• XAMPP
• MySQL
• Netb eans
• Java Swing
1.2.1 XAMPP
XAMPP este un pachet de programe gratuite de software și cross -platforma pentru server
web care consta în Apache HTTP Server, baza de date MySQL și interpretoare pentru scripturile
în limbajele de programare PHP și Perl.
Etimologia numelui XAMPP este un acronim pentru:
• X (de la “cross”, care înseamnă cross -paltforma)
• Apache HTTP Server
• MYSQL
• PHP
• Perl
Acest program este lansat sub termenul licenței de GNU și acționează ca un server web,
capabil de a servi pagini d inamice. GNU este o colecție mare de software pentru a dezvolta un
sistem de operare Unix. XAMPP este disponibil pentru mai multe sisteme de operare, de
exemplu Microsoft Windows, Linux, Solaris, Mac, etc. Este utilizat în principal pentru
dezvoltarea proi ectelor web.
Intenția utilizării acestui program a fost, în mod official gândită de designerii XAMPP de
a fi utilizată numai ca utilitar de dezvoltare, pentru a permite designerilor și programatorilor web
să își testeze munca pe calculatoarele proprii, far ă a avea nevoie de access la internet.
De asemenea XAMPP asigura support pentru crearea și manipularea bazelor de date în
MySQL și SQLite intre utilizatori.
6
1.2.2 MySQL
MySql este un sistem de gestiune a bazelor de date relaționale, produs de compania
suedeza MySQL AB. Este cel mai popular sistem de gestiune a bazelor de date open -source.
Desi este folosit foarte des împreună cu limbajul de programare PHP, cu MySQL se pot construi
aplicații în orice limbaj major. Exista multe scheme API disponibile pentru MySQL ce permit
scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date
MySQL, cum ar fi: C, C++, C#, Java, Perl, PHP, Pythn, etc.
PhpMyAdmin este o unealta scrisa în PHP cu scopul de a administra baze de date MySqL
pe web. Poa te crea, șterge, modifica tabele, adaugă, șterge, modifica câmpuri, executa interogări
SQL, administra privilegii, exporta datele în diverse forme.
PHP (acronim recursiv pentru PHP: Hypertext Preprocessor) este un limbaj de scripting
de uz general, cu cod -sursă deschis (open source), utilizat pe scară largă, și care este potrivit în
special pentru dezvoltarea aplicațiilor web și poate fi integrat în HTML.
Colocările MySQL unicode_ci (utf8_unicode_ci în particular) sunt menite să suporte
toate caracterele i ndiferent de localizare. Latin2 (ISO 8859 -2 Central European) este folosit
pentru centrul Europei.
1.2.3 Netbeans
NetBeans este un mediu de dezvoltare integrat (IDE) pentru Java. NetBeans permite
aplicațiilor să fie dezvoltate dintr -un set de componente software modulare numite module.
NetBeans rulează pe Windows, macOS, Linux și Solaris. Pe lângă dezvoltarea Java, ar e extensii
și pentru alte limbi precum PHP, C, C ++, HTML5 și JavaScript. Aplicațiile bazate pe NetBeans,
inclusiv NetBeans IDE, pot fi extinse de către dezvoltatorii terți.
Platforma NetBeans este un cadru pentru simplificarea dezvoltării aplicațiilor de sktop
Swing. Pachetul NetBeans IDE pentru Java SE (engl. Standard Edition) conține ceea ce este
necesar pentru a începe să dezvolte pluginuri NetBeans și aplicații bazate pe Platforma
NetBeans; nu este necesar un SDK suplimentar.
Aplicațiile pot instala mo dule în mod dinamic. Orice aplicație poate include modulul
Update Center pentru a permite utilizatorilor aplicației să descarce actualizări semnate digital și
funcții noi direct în aplicația care rulează. Reinstalarea unei actualizări sau a unei noi versiu ni nu
îi obligă pe utilizatori să descarce din nou întreaga aplicație.
7
Platforma oferă servicii refolosibile comune aplicațiilor desktop, permițând
dezvoltatorilor să se concentreze asupra logicii specifice aplicației lor. Printre caracteristicile
platform ei se numără:
• Gestionarea interfeței cu utilizatorii (de ex. Meniuri și bare de instrumente)
• Gestionarea setărilor utilizatorului
• Managementul stocării (realizează stocarea eficientă)
• Managementul ferestrei
• Cadrul asistent (acceptă dialoguri pas cu pas)
• Biblioteca vizuală NetBeans
• Instrumente de dezvoltare integ rate
1.2.4 Java Swing
Java este un limbaj de programare de nivel înalt, orientat obiect, proiectat inițial în scopul
realizării de aplicații pentru internet. Acesta este utilizat cu success în prezent și pentru
programarea aplicațiilor destinate intranet -urilor. În acest sens, multe firme recurg la limbajul
Java în procesul de informatizare întrucât oferă un foarte bun support pentru tehnologiile de vârf
și nu în ultimul rand, pentru că este gratuit și în mod continuu îmbogățit și îmbunătățit.
Biblioteca Swing este partea JFC (engl. Java Foundation Classes) care oferă
componentele necesare programatorilor pentru crearea de interfețe grafice moderne, complexe și
prietenoase aplicațiilor Java. Swing aduce îmbunătățiri calitative fata de mai vechiul pachet
AWT (engl. Abstract Window Toolkit), totuși pachetul Swing este construit peste AWT.
Interfața cu utilizatorul, pe scurt UI (engl. User Interface), reprezintă totalitatea
mecanismelor care perm it interacțiunea dintre o aplicație și utilizatorii ei. O particularizare a
interfeței cu utilizatorul o reprezintă interfață grafica, pe scurt GUI (engl. Graphic User
Interface), care se refera stict la comunicarea vizuala dintre utilizator și aplicație. Putem spune că
interfața grafica este locul de întălnire dintre utilizatori și aplicația care le este destinata.
Deseori aplicațiile sunt percepute de utilizatorii finali doar prin intermediul interfețelor
acestora și, de aceea, o interfață realizata defic itar poate compromite întreagă aplicație, chiar
daca funcțional ea este foarte bine realizata. O problema în procesul de realizare a interfeței
grafice o reprezintă posibilitatea că utilizatorul să nu înțeleagă cum să o utilizeze după ce a fost
creata. Ace st lucru se întâmplă, daca utilizatorii unei aplicații (destinatarii aplicației) nu sunt și
8
programatori (cei care tind să creeze aplicația conform propiului model mental, diferit de cel al
utilizatorilor) .
În procesul de proiectare a interfețelor grafi ce se poate folosi prototopizarea care
presupune realizarea de prototipuri ale interfeței grafice, prototipuri care sunt evaluate și
reactualizate pe tot parcusrsul dezvoltării. Prototipurile interfeței grafice clarifica interacțiunile
aplicației cu utiliz atorii sau cu alte aplicații, respective functionalitatile aplicației.
JFC (Java Foundation Classes ) reprezintă un grup de API -uri (engl. Application
Programming Interface) incluse în platforma J2SE(engl. Java 2 Standard Edition), care permit
dezvoltatorilor să creeze interfețe grafice(GUI) pentru aplicațiile Java. Java Foundation Classes
consta în 5 pachete: AWT, Swing, Accessibility, Java 2D și Drag and Drop.
Parte Componenta a JFC Explicație
AWT Parte a JFC proiectata pentru a oferi supp ort pentru
crearea interfețelor grafice, folosind modul graphic. Oferă o
ierarhie de clase suficiente pentru proiectarea unei interfețe
grafice nesofisticate pentru un applet sau o aplicație. Reprezintă
nucleul JFC și fundamental pe care s -a construit pach etul Swing.
Figura 1
9
Swing Reprezintă un set vast de compoenente grafice, de la cele
mai simple, cum ar fi etichetele sau butoanele, la cele mai
complexe ca de exemplu, tabelele cu arborii. Oferă independența
fata de platforma peste care este instalată mașina virtuala și
posibilitatea personalizării aspectului interfeței și a
comportamentului acesteia la acțiunile utilizatorului.
Accessibility Reprezintă posibilitatea de a oferi ajutor utilizatorilor cu
deficient, cum ar fi posibilitatea de a descifra interfaț a folosind
mesaje vocale, Braille sau dispositive exterioare atașate
calculatorului.
Java 2D API API-ul care permite utilizatorilor să incorporeze în
aplicațiile lor grafică 2D complexă, text și imagini
Drag and Drop Oferă posibilitatea de a realiza operații de drag -and-drop
intre aplicația curenta și aplicațiile native sau intre doua aplicații
Java
Diferența majora dintre Swing și AWT este aceea că, spre deosebire de AWT,
componentele Swing sunt scrise 100% în Java, necontinand cod nativ(dependent de sistemul de
operare). Acesta înseamnă că butoanele Swing, spre exempu, vor arata și se vor comporta identic
pe platforme Macintosh, Solaris, Linux sau Windows. Butoanele AWT luau mereu aspectul
platformei pe care rula aplicația. De asemenea prin aceast a independența fată de platforma se
obține o îmbunatățire a vitezei de execuție și a aplicațiilor având interfețe realizate în Swing.
Componentele Swing sunt aproape toate derivate dintr -o singura clasa de baza numita
JComponent, care moștenește, la rândul ei clasa Container din AWT. Moștenirea clasei
JComponent dă componentelor posibilitatea de a avea chenare, tooltips, respective look -and-feel
configurabil. De asemnea din Jcomponent se moștenesc și metodele prin care se pot seta
dimensiunile și poziționar ea componentelor.
10
MVC (Model -View -Controller ) este filozofia
(nivelul conceptual) clasica pentru proiectarea interfețelor
grafice în limbajele obiectuale care datează din anii 1970.
Reprezintă structurarea componentelor în trei parți: un
model, o vizualizare și un controller, fiecare având propria
utilitate și funcționalitate și interacționând cu celalalte
parți. Componenta devine un mediator între model,
vizualizare și controller.
Partea componentă Explicație
Model Modelul păstrează, în general, datele cărora se dorește să li se dea o
vizualizare numindu -se, în acest caz, modelul de date. De exemplu,
pentru o componenta text, datele reprezintă textul ce se vrea vizualizat.
Modelele comunica indirect cu vizualizarea și controlerul prin
intermediul sistemului de evenimente și nu dețin referințe la nici unul
dintre acestea. Pot să existe modele care să nu tina neapărat datele
componentei, ci stări ale vizualizării grafice pentru componenta. Un
exemplu ar putea fi un model pentru o lista care încapsulează modulul
de selecție sau pentru un buton, un model care încapsulează starea
butonului: armat, apăsat, etc. Deseori modelele încorporează atât datele
componentei cât și stări ale vizualizării componentelor.
Vizualizare Reprezentarea vizuala a modelului descriind pentru componenta modul
cum arata. Vizualizarea este responsabilă pentru păstrarea pe ecran a
reprezentării actualizate, primind in acest scop mesaje de la model și
controller.
Controler Controlerul ia datele de intrare ale utilizatori lor din vizualizare și le
transformă în schimburi corespunzătoare în model. Controlerul are rolul
de a determina când și cum va reacționa componenta la evenimentele de
intrare dinspre dispozitivele de intrare cum ar fi mouse -ul și tastatura. În
acest sens reprezintă comportamentul componentei.
Figura 2
11
Capitolul 2. Prezentarea aplicației
2.1 Crearea bazei de date în phpMyAdmin
Pentru crearea bazei de date a acestei aplicații s -a folosit phpMyAdmin, folosind:
http://localhost/phpmyadmin/. S -a creat o baz ă de date cu denumirea BIBLIOTECA din tabul
“Database”, opțiunea “Create database”.
Apoi s -au creat o tabelele: cont, utilizatori, cărți, împrumuturi, returnare în baza de date
bibliotecă. Tabela cont conține informații despre utilizatori primari (personal angajat al
bibliotecii) , cei care vor folosi aplicația. Având un cont și o parola folosite pentru autentificare
cât și pentru crearea unui cont nou. Cheia primară a fost setata
nume_utilizator de tip varchar. Pentru securizarea parolei de
autentificare s -a folosit setul de funcții criptografice SHA -256
(Secure Hash Algoritm ), astfel în baza de date lungimea
stringului este alocată de 256 caractere.
Tabela utilizatori conține informații despre utilizatorii care împrumută cărți din cadrul
biblioteci. Aceștia sunt adaugați în aplicație de către
personalul angajat al bibliotecii definiți în tabela cont.
Acești utilizatori pot fi adaugați în baza de date și
identificați după cod utilizator. Cod_util izator a fost definit
cheie primara de tip integer.
Figura 3
Figura 4
Figura 5
12
Tabele cărți, împrumuți și returnare conține informații despre cărțile aflate în biblioteca
titlu cărții, numărul de exemplare, formatul cărții, editura, etc. Nr. Inventar este definit ca ș i
cheie primara.
Pentru fiecare tabelă din baza de date s -a definit o
cheie primară. De exemplu pentru tabela cont, s -a definit
cheia primară nume_utilizator. S -au folosit atribute de tip
“integer” și “varchar. Pentru colocarii s -a folosit
latin2_general_ ci (latin2 | ISO 8859 -2 Central European |
latin2_general_ci) pentru a acoperii caracterele în funcție de
localizare.
Relatii intre tabele
Câmpurile prin care se realizează legăturile trebuie să fie de același t ip, în prima tabelă
fiind cheie primară, iar în a doua tot cheie primară sau cheie străină .
•1:1 (one to one) fiecărei linii în primul tabel îi corespunde cel mult o singura linie în al
doilea
•1:m (one to many) fiecărei linii în primul tabel îi pot corespunde mai multe în al doilea
și fiecărei l inii al doilea îi corespunde exact una în primul
•m:m (many to many) unei linii în primul tabel îi pot corespunde mai multe în al doilea și
unei linii în al doilea tabel îi pot corespunde mai multe în primul .
Figura 6
13
2.2 Accesul la baze de date folosind JDBC
JDBC (engl. Java DataBase Connectivity) reprezintă API -ul (engl. Application
Programmimng Interface) dezvoltat de Sun Microsystems in colaborare cu diverși parteneri,
pentru a oferii aplicațiilor Java access la baza de date gestionate de diverse DBMS -uri (Sisteme
de Gestiune a Bazelor de Date). Într -o arhitectură client –server, bazele de date se pot afla pe
aceiași masina sau pe o alta masina cu care clientul este conectat dintr -un intranet sau chiar
internet. Cele mai importante facilități ale JDBC sunt p osibilitatea lucrului cu instrucțiuni
SQL(engl. Structured Query Language) și procesarea eventualelor rezultate obținute în urma
interogărilor într -o maniera independenta și consistentă. API -ul JDBC este o interfață standard
intre aplicații și diverse DBMS -uri. Apelurile SQL sunt preluate, traduse și trimise mai departe
de diverse drivere în parte pentru fiecare DBMS.
Prin introducerea unui nivel de abstractizare reprezentat de API -ul JDBC, se evita situația
neplăcută ca programatorii să gestioneze singuri apleurile SQLcatre un DBMS specific, în acest
caz codul aplicației ar fi trebuit modificat pentru a se putea accessa un alt DBMS. Pentru a ne
conecta la un alt DBMS, este deajuns să schimbam driverul, operație care se poate realiza
dinamic, chiar în timpul rulării aplicației, nemaifiind necesară recompilarea acesteia. Această
facilitate împreună cu portabilitatea limbajului Java, permite interogarea oricărei baze de date de
sub orice platformă fară recompilarea codului.
Procesul obțineri i de informații dintr -o bază de date folosind JDBC implică în principiu
cinci pașii:
1. înregistrarea drverului JDBC folosind gestionarul de drivere DriverManager;
Figura 7
14
2. stabilirea unei conexiuni cu baza de date;
3. execuția unei instrucțiuni SQL;
4. procesa rea rezultatelor;
5. închiderea conexiunii cu baza de date.
Rolul managerului de drivere este acela de a tine o referință la fiecare dintre obiectele
driver disponibile în aplicația curentă. Când clasa driver este încărcată dinamic, un driver JDBC
este au tomat încărcat de către managerul de drivere. Se folosește Class.forName() pentru a
încarcă dinamic un driver JDBC.
Se încarcă driverul punteJDBC -ODBC din pachetul sun.jdbc.odbc, apoi driverul MySQL
Connector/J care face conectarea la serverul de baze de d ate MySQL.
Class.forName(“com.mysql.jdbc.Driver”);
Class.forName(“sun.jdbc.odbc.JdbcODBCDriver”));
Metoda static Class.forName permite mașinii virtuale Java să aloce dynamic, să încarce și
sa facă legătura la clasa specifică ca argum ent printr -un sir de caractere.
2.3 Stabilirea unei conexiuni cu baza de date
Odată ce s -a încărcat un driver, putem să îl folosim pentru stabilirea unei conexiuni cu
baza de date. O conexiune JDBC este identificată printr -un URL JDBC specific. Sintaxa
particulară pentru MySQ L: jdbc:mysql://server[:port]/numeBazaDate
Url-ul definit în aplicație pentru stabilirea conexiuni cu baza de date (biblioteca) din
MySQL.
Figura 8
15
În dosarul(folder) Library s -a adăugat JAR/Folder. S -a adăugat fișierul mysql -connector –
java-5.1.48 -bin.jar în folder -ul Library al proiectului Biblioteca.
Pentru stabilirea unei conexiuni la o bază de date se folosește metoda static
getConnection() din clasa DriveManager.
Connection con = DriveManager.getConnection(“jdbc:mysql://localhost/arhiva”)
S-a creat un pachet DBConnection în Source Package. S -a creat o clasa nou ă, denumită
DatabaseHelper.
Cod scris în fișierul DatabaseHelper pentru conexiunea la baza de date bibliotecă.
package DBConnection;
import java.sql.Connection ;
import java.sql.DriverManager ;
public class DatabaseHelper {
public static Connection getConnection (){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/biblioteca",
"utilizator", "parola");
return con; }
catch (Exception e)
{ System.err.println("Eroa re de conexiune");
return null; } } }
Figura 9
Figura 10
16
2.4 Crearea proiectului Biblioteca în NetBeans folosind limbajul Java
S-a creat un proiect nou “Biblioteca” în NetBeans folosind aplicația Java. Acesta
cuprinde 4 dosare (folders), Sourse Packages, Test Packages, Libraries, Test Libraries.
2.5 Prezentarea interfeței grafice a aplicații
Aplicația este destinată bibliotecarilor atât pentru gestionarea și înregistrarea cărților
împrumutate și returnate cât și pentru gestionarea uti lizatorilor care împrumută și returnează
cărți.
2.5.1 Diagrama cazurilor de utilizare
Pentru diagrama cazurilor de utilizare s -a folosit aplicatia StarUML versiunea 3.
StarUML este u n modelator sofisticat de software pentru modelare agilă și concisă . Aceasta
aplicatie contine diagramele: clasă, obiect, caz de utilizare, componentă, desfășurare, structură
compusă, secvență, comunicare, diagramă de stat, activitate și diagrama de profil. Suport a pentru
crearea diagramelor de relații de entitate (Entity -Relationship Diagrams – ERD), diagrame de
flux de date (Data -flow DiagramsDFD) și diagrame de flux (Flowchart Diagrams).
Diagrama cazurilor de utilizare are rolul de a prezenta înt r-o forma grafică
functionalita țile pe care trebuie să le îndeplinească sistemul informatic în faza finală.
Functionalita țile principale sunt detaliate în diagrama cazurilor de utilizare prezentate în figura
de mai jos.
Figura 11
17
2.5.2 Interacțiunea utilizatorului cu aplicația
Pentru accesarea aplicației bibliotecă s -a creat o
fereastra de autentificare în care se completează datele
de idetificare ale contului utilizatorului (bibliotecar) care
manipulează aplicația. Datele de identificare ale contului
sunt numele utilizatorului și parola aferentă acestuia.
Pentru accesarea contului se folosește butonul
autentificare. Fereastra de autentificare se poate închide
de la optunea “X” sau fereastra de autentificare poate fi
minimalize de la opțiunea “ -“ din colțul dreapra sus al
ferestr ei de dialog.
Figura 12
Figura 13
18
Figura 15 Pentru a creea un cont nou se folosește opțiunea “Creează
cont nou” din pagina de autentificare. La accesarea butonului de
creare cont nou, o noua fereastră de dialog se deschide permițând
utilizatorului să genereze un cont nou. Pentru a creea un cont nou
trebuie completatat următo arele câmpuri: Nume Utilizator, Nume,
Parola, Răspuns(pentru întrebarea de Securitate). Întrebarea de
securitate se poate alege din
meniul derulant. Apoi se apasă
pe butonul “Creează cont nou”.
După autentificare, aplicația se încarcă în câteva
secunde și informează utilizatorul prin mesajele Bine ați
venit! și Aplicația se încarcă vă rugam așteptați! din fereastra
de dialog denumita Biblioteca.
Utilizatorul este redirecționat cătr e meniul principal al aplicației Biblioteca unde are la
dispoziție principalele funcționalități ale aplicației și
anume:
• Adaugă cărți
• Împrumută cărți
• Returnează cărți
• Adaugă utilizatori
• Raport
Pentru a accesa una dintre opțiuni, utilizatorul
trebuie să de -a click pe una din imaginile aferente
opțiunilor. Automat aplicația va redirecționa
utilizatorul către pagina de dialog corespunzătoare.
Figura 16
Figura 17
19
Cititorul care dorește să împrumute o carte de la biblioteca, trebuie să aleagă fizic o carte
și să o în mâneze bibliotecarului pentru a extrage informațiile necesare pentru a fi introdu -se în
aplicație.
Pentru a adăuga o carte noua în bibliotecă, bibliotecarul trebuie să introducă următoarele
informații: titlu carte, autori, gen, editură, anul de apariție a cărții, numărul de exemplare,
numărul de pagini al cărții, formatul cărții, codul ISBN, cota deposit și cota raft.
ISBN este un cod internațional de identificare a cărților, definit prin ISO 2108. Sistemul
ISBN este aplicat în peste 160 de țări. Activitatea ISBN este administrată la nivel mondial de
către Agenția Internațională ISBN cu sediul în Londra, iar la nivel națion al de către Centrul
Național ISBN, parte a Centrului Național ISBN -ISSN -CIP din cadrul Bibliotecii Naționale a
României. Acordarea codurilor ISBN este un serviciu gratuit, atât pentru edituri, cât și pentru
autorii care publică în regie proprie (ISBN ocazi onal).
Cota este adresa cărții, ea determină locul în care este așezată cartea la raft. În B.C.U.T.
se utilizează două tipuri de cotă: Cotă deposit și Cotă raft.
Cota depozit reprezintă un ansamblu de numere care indică locul documentului la raft în
cadrul unui depozit. Orice document din bibliotecă are o cotă de depozit unică. Ex: 323125,
15361, etc. Ea se regăsește pe prima copertă a documentului, în partea stângă sus, pe pagina de
titlu, precum și pe paginile de control.
De asemenea, mai apare în part ea stângă pe fișa tradițională de descriere bibliografică și
în descrierea de exemplar din catalogul electronic.
Cota raft este un instrument de așezare și regăsire a documentelor într -o bibliotecă cu
acces liber la raft. Ex: 821RO/P9121 Ea este compusă di ntr-un indice CZU specific unui
domeniu și semnul de autor Cutter. 821 – literatură RO –română P9121 – semnul de autor Cutter
formată din prima literă a vedetei și indicele corespunzător Cota raft se regăsește pe cotorul
documentului și în descrierea de exemplar din catalogul electronic.
Numărul de inventor este un număr unic și este generat automat de către aplicație pentru
a evita atribuirea a aceluiași număr către 2 cărți diferite.
20
Pentru a adaugă un utilizator (cititor) nou în aplicație trebuie să se folosească opțiunea
Adaugă utilizatorii din meniul principal al aplicației Biblioteca. Apoi, automat aplicația
generează un cod utilizator unic, pentru a evita eroarea de a atribui același cod de utilizator către
mai mulți cititori.
Se completează în câmpurile dedicate numele, prenumele, numele tatălui. Se alege din
meniul derulant statusul (e.g. Student)
Pentru a salva și adaugă datele
utilizatorului în aplicație trebuie să se folosească
opțiunea Adaugă. Pentru a revenii la meniul
principal al aplicației se folosteste opțiunea
Biblioteca.
Pentru înregistrarea în aplicație a împrumutării
unei cărți , bibliotecarul trebuie să completeze câmpul
destinat pentru numărul de inventar, codul utilizatorului
și sa completeze data de împrumut.
Pentru completarea automată a câmpurilor
aferente în secțiunile de detalii carte și detalii utilizator
se folosește optiunea de Căutare aflat în dreptul
numărului de inventar și codului utilizator. Automat vor
fi completate toate informațiile aferente celor 2
secțiunii, altfel se evita introducerea erorilor.
Pentru a împrumuta o carte se apasă pe opțiunea
Împrumută cartea. În momentul în care cartea a fost
împrumutată aplicația notifică utilizatorul printr -un
mesaj “Carte împrumutată cu succes! “, iar apoi stocul
de exemplare este actualizat automat.
Figura 19
Figura 18
21
Pentru returnarea unei cărți se folosește
opțiunea Returnează cărți din meniul principal al
aplicației Biblioteca. Se completează codul utilizatorului
și apoi se folosește opțiunea Caută care va completa
automat toate celalte câmpuri aferente secțiunilor detalii
utilizator și detalii carte. Apoi se completează data de
returnare a cărții. În momentul returnării cărții, daca
operațiunea a fost cu success, se notifică utilizatorul cu
mesajul: “Cartea a fost returnată”.
Pentru a avea un raport a cărților împrumutate și a cărților ret urnate, se poate accesa
optinea Raport din meniul principal al aplicației Biblioteca. Se pot observa 2 tabele conținând un
istoric al cărților împrumutate cât și a celor returnate detaliind informații despre acestea.
Figura 20
Figura 21
22
Capitolul 3. Detalii de implementare
3.1 Interacțiunea functionalitatilor aplicației prin Java Swing
Interfața grafica (reprezentată de părțile grafice membre) este separată de implementare,
care se reprezintă prin cod ce se dorește a fi executat în urma interacțiunii cu utilizatorul. Swing
a fost conceput ca un sistem condus de evenimente. Evenimentele sunt generate de fiecare dată
când accesam (apăsam) un buton al mouse -ului sau o tasta și sunt tratate corespunzător prin
codul scris de programator.
Compo nentele Swing pot genera mai multe tipuri de evenimente. Din clasa
java.util.EventObject, fiecare eveniment este conținut într -un obiect derivat prin intermediul
căruia programatorul îl gestionează putând determina sursa sa, și informații despre tipul
even imentului, starea sursei înainte și dupa ce evenimentul a fost generat.
Componentele Swing pot fi împărțite în 3 categorii:
containere de bază (JFrame, Jwindow, Jdialog, JApplet, JInternalFrame)
containere intermediare (JPanel, JScrollPane,JSplitPane)
containere atomice (JLabel, JButton, JList, JComboBox, JtextFiled, JTextArea,
JTable, JTree, JMenu, JPopup, JMenuitem, JToolBar, JOptionPane, JFileChooser,
JSlider, JScrollBar, JDecktopBar, JinternalFrame)
Containerul este cel mai des folosit pentru o apli cație bazată pe Swing este JFrame. O
fereastră JFrame conține un camp protected cu numele rootpane care este o instanță a clasei
JRootPane, servind drept container pentru alte câteva componente panou. Pentru a adăuga o
componenta unei ferestre JFrame trebu ie să atașam aceea componenta panoului contentPane.
Toate ferestrele de dialog din cadrul interfeței grafice a aplicației biblioteca sunt realizate
utilizând JFrame Form. Pentru toate ferestrele JFrame exceptând cea a meniului principal
Biblioteca, s -a folosit opțiunea “Undecorated” din proprietăți. Aceasta opțiune nu conține
implicit numele ferestrei cât și opțiunile de minimizare, maximizare și închidere a ferestrei
Jframe.
Figura 22
23
Fereastrele de dialog sunt toate centra te în mijlocul ecranului. Aceast ă centrare s -a
obținut utilizând metoda SetLocationRelativeTo (null). Exemplu pentru ferestra de Autentificare:
Apoi s -au aplicat două componente JPane peste JFrame. Pentru componentele JPane s -au
configurat parametrii de design, background RGB [248,148,6] pentru prima componentă și
respectiv RGB [108,122,137] pentru cea de a doua componentă JPane, font -ul folosit [Tahoma
11 Plain]). Layoutul celor 2 componente JPane s -au setat cu opțiunea Free Design. Prima
componentă JPane are rolul visual al unui antent cuprinzând informațiile detaliate mai jos.
În cadrul primei componente JPane, s -a adăugat numele ferestrei de dialog din interfață
aplicației în partea stangă -sus folosind opțiunea JLabel. De exemplu, pentr u fereastra de dialog
afișată la interfață, “Adaugă cărți”, s -a folosit opțiunea “label” din componenta Swing Controls.
Apoi au fost configurate opțiunile de design pentru acesta etichetă (font, background, etc).
Tot în cadrul primei componente JPane, s -au adăugat opțiunile de minimizare și închidere
a ferestrei de dialog poziționate în partea dreapta – sus. Astfel s -au folosit două etichete JLabel,
marcate cu “ -“ pentru minimalizare și “x” pentru închidere. Pentru aceste 2 etichete s -a aplicat
câte un eveniment pentru fiecare dintre ele, folosit atunci când acestea sunt accesate cu mouseul.
public Login() {initComponents();
this.setLocationRelativeTo(null); //center form in the screen }
Figura 23
Figura 24
24
În modul Source din aplicația NetBeans, s -a folosit metoda:
• this.setState(JFrame.ICONIFIED); pentru minimalizare
• System.exit(0); pentru închidere
În cadrul celei de a doua componentă JPane au fost adăugate principalele funcționalități
ale aplicației folosindu -se componente din Swing Controls și Swing Menus: JLabel, TextField,
JButton, JSeparator, JComoBox, JTable, JP rogressBar.
Pentru componenta JTextFiled s-au configurat opțiunile de design. O parte din câmpurile
de tip text se pot completa de către utilizator la interfață. Acestea sunt stocate în baza de date
MySQL folosită pentru aceasta aplicație. Câmpurile de tip text sunt înregistrate în tabela
corespunzătoare stocării informației dorite. Cealaltă parte din câmpurile de tip text sunt
needitabile, acestea având doar rol informativ. Ele sunt populate în momentul în care se folosește
opțiunea de “Căutare” de la inte rfață.
Componenta JComboBox combină un buton (care se transformă într -un camp text când
componenta este editabilă ) cu o listă expandabila la cerere din care utilizatorul poate să
selecteze o singura opțiune la un moment dat. Această componentă se găsește în fereastra de
dialog “Uti lizatori“ de la interfața utilizatorului. Din proprietățile acestei componente se adaugă
contentul aferent opțiunilor pe care utilizatorul și le poate alege cât și se setează valoarea
implicită.
S-a folosit componenta JSeparator pentru a delimita vi sual două zone, de exemplu, una
dedicată informațiilor despre utilizator și cealaltă zona furnizând informații despre cărți.
Figura 25
25
Un buton poate reprezenta atât text, cât și imagini. Tratarea evenimentelor generate de
butoane se face în funcție de tipul de buton. În general, se adaugă ascultători ActionListener care
tratează evenimentul generat de apăsarea butonului.
Componenta JButton este folosită în mai multe ferestre de dialog. Pentru fiecare JButton
au fost configurate atât proprietățile de design (background, font) cât și acțiunile activate la
acționarea acestora (actionPerformed).
Exemplu de accesare buton denumit “Biblioteca” care redirectioneaza către fereastra
principala:
JTable este componenta grafică care permite operarea cu tabele. Clasa JTable face parte
din pachetul javax.swing care extinde clasa JCompoenent. Compoenenta JTable este construită
pe același principiu clasic în Swing, numit model -delegat, care reprezintă o despă rțire a datelor private void jButton1AnulareActionPerformed(java.awt.event.ActionEvent evt) {
Home ho = new Home();
ho.setVisible (true);
this.dispose();}
setVisible(true) – controlează dacă o componentă și copiii săi sunt afișați pe ecran
Figura 26
Figura 27
26
de modul lor de vizualizare. Datele tabelei vor fi intotdeauna ținute într -o matrice, într -o listă de
vectori, de fapt orice structură de date tabelară.
Reprezentarea grafică a datelor este încapsulată împreună cu modul în care componenta
reacționează la acțiunile utilizatorului într -un obiect, care poarta denumirea de delegate, asociat
fiecărei componente grafice. Componenta joacă rolul unui mediator intre vizualizare și datele
care reprezintă conținutul ce se vrea vizualizat.
Datele ce s e doresc a fi vizualizate sunt la rândul lor înfășurate într -un model care prin
sistemul de ascultători actualizează automat vizualizarea în urma modificări făcute în structura
de date.
JTable oferă mai mulți
constructori pentru realizarea tabelelor.
Constructorul JTable() construiește un
tabel care este inițializat cu modelul de
date implicit, modelul implicit pentru
coloane și modelul implicit pentru
selecție.
Folosind metoda trimite i ntero gare (String interogare) pentru a adăuga capul de tabel
conținând numele câmpurilor din tabela MySql.
public void Detalii_imprumuturi_tabel(){
try { String sql = "select data_imp as 'Data Imprumut', cod_utilizator as
'Cod utilizator', nume_utilizator as 'Nume', pr enume_utilizator as 'Prenume',"
"status_utilizator as 'Status', nr_inventar as 'Nr. inventar', titlu_carte as 'Titlu carte',
"autori_carte as 'Autori carte', gen as 'Gen', editura as 'Editura', isbn as 'ISBN' from
imprumuturi" ;
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
Figura 28
27
Componenta JProgr essBar este folosită pentru a indica progresul unei operații
consumatoare de timp, arătând utilizatorului că operația monitorizată este activa și în
desfășurare. Grafic se reprezintă printr -o bară orizontala sau verticală care creste dinspre stânga
spre dr eapta, de la o valoare minimă la una maximă. Prin intermediul acesteia poate fi vizualizat
procentul din acțiune care a fost deja consumat.
JProgressBar a fost concepută pentru a monitoriza operații care durează un timp lung, din
punct de vedere computațio nal (mai mult de o secunda). Exista două tipuri de a programa o bara
de progress, și anume modul analogic și modul digital. JProgressBar poate fi folosită pentru a
arata că se petrece ceva și nu pentru a măsura exact cât a evoluat o operațiune. Acest mod d e a
vedea lucrurile se numește analogic, subliniidu -se mai mult progresele care au loc în
desfășurarea operației, oferind astfel posibilitatea de a face comparatii între cât s -a desfășurat din
operație și ce mai este de făcut. Modul digital reprezintă atun ci când se dorește reprezentarea
exacta a modului în care decurge operația, progresul barei de progress fiind continuu și fară
salturi. În general cele două moduri de prezentare se combină, deoarece deseori avem de a face
cu operații care decurg greu, iar programatorul nu poate ști de la început când se vor termina.
Pentru această aplicație, JProgressBar a fost creat doar să simuleze această încărcare. În timpul
monitorizării s -a folosit metoda setValue() pentru a reactualiza starea barei de progress. Acea sta
metodă trebuie utilizată în firul de execuție event -dispatching thread pentru a nu apărea probleme
la desenare. Detalii_imprumuturi_tabel.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) { JOptionP ane.showMessageDialog(null, e); } }
public void run (){
try {for (int i=0; i<=200; i++)
{ s=s+1;
int x = Progress_Bar.getMaximum();
int y = Progress_Bar.getValue();
if (x<y)
28
Culoarea fundalului și a foreground -ului se modifică la fel că în cazul oricărei
componente. Proprietatea borderPainted specifică daca se va desena un chenar în jurul
componentei.
Pentru fereastra principală denumita Biblioteca, sunt configurate opțiunile de
minimalizare, maximizare, închidere a ferestrei de dialog cât și a numirii acesteia din opțiunile
implicite JFrame. S -au adăugat d ouă meniuri de tip JMenuBar, conținând taburile File și Edit. În
tabul File s -a creat un JMenuItem denumit Autentificare. În momentul apăsări pe submeniul
Autentificare, automat aplicația redirectioneaza utilizatorul către fereastra de Autentificare.
{Progress_Bar.setValue(Progress_Bar.getValue()+1); }
else{i=201;
setVisible(false);
Home ob = new Home();
ob.setVisible(true );}
Thread.sleep(50); }}
catch (Exception e) {JOptionPan e.showMessageDialog(null, e);}}
Login_meniu_option.setText("Autentificare");
Login_meniu_option.addActionListener(new
Figura 29
Figura 30
29
3.2 Prezentarea funcționalitaților aplicației
Pentru stabilirea conexiunii la baza de date se folosește metoda statică getConnection()
din clasa DriverManager. După ce s -a stabilit conexiunea se pot trimite instrucțiuni SQL către
baza de date. Clasa Prepared Statement permite folosirea instrucțiunilor SQL precompilate și a
parametrilor de intrare în interogări. Aceasta metodă de a face interogări este utilă în cazul în
care se fac interogări care diferă doar printr -un număr de parametrii. Se realizează apeluri SQL
având date variabile date de intrare. Prin construcție obiectul PrepareStatement primește că
intrare o instrucțiune SQL. Instrucțiunea SQL primită ca parametru este trimisă direct către baza
de dat e unde este precompilata. Se dau valori variabilelor folosind metoda set (setString)
corespunzătoare tipurilor de date și se execută efectiv interogarea. Aceasta manieră de interogare
este mai rapida decât folosirea clasei Statement, în cazul în care dorim execuția repetată a unei
instrucțiuni SQL. Instrucțiunea SQL este compilată o singura dată în momentul creearii instanței
clasei PrepareStatment și folosită apoi repetat, eventual cu valori diferiteale parametrilor.
De exemplu pentru informațiile necesar e adăugării unei cărți noi în biblioteca,
informațiile introduse de către utilizator la interfață prin completarea câmpurilor de tip text sunt
stocate în tabela Cărți din baza de date. java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Login_meniu_optionActionPerformed(evt); }
public class Adauga_carti extends javax.swing.JFrame {
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
public Adauga_carti() {
initComponents();
con = DatabaseHelper.getConnection();}}
30
Pentru generarea aleatoare de numere s -a folosit metoda Random. Aceasta metodă
aleatoare a fost at ribuita câmpurilor numărului de inventar și codului utilizator din interfața cu
utilizatorul și generează numere aleatoare. Acestea sunt stocate în baza de date către parametrii
aferenți. Cod utilizator și număr inventar sunt chei primare (primary key) în baza de date.
Exemplu: Metoda Random folosita pentru câmpul Nr. Inventar :
private void jButton2InregistrareActionPerformed( java.awt.event.ActionEvent
evt) {
try { String sql = "insert into carti" +"(nr_inventar, titlu_carte, autori, gen,
editura, an_aparitie, nr_exemplare, nr_pagini, format, isbn, cota_depozit, cota_raft) "
+ "values (? ,?,?,?,?,?,?,?,?,?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, Nr_Inventar_field.getText());
ps.setString(2, Titlu_carte_field.getText());
ps.setString(3, Autori_field.getText());
ps.se tString(4, Gen_field.getText());
ps.setString(5, Editura_field.getText());
ps.setString(6, An_aparitie_field.getText());
ps.setString(7, Nr_exemplare_field.getText());
ps.setString(8, Nr_pagini_field.getText( ));
ps.setString(9, Format_carte_field.getText());
ps.setString(10, ISBN_field.getText());
ps.setString(11, cota_depozit_field.getText());
ps.setString(12, cota_raft_field.getText());
ps.execute ();
JOptionPane.showMessageDialog(null, "Carte adaugata cu succes!");
} catch (Exception e) { JOptionP ane.showMessageDialog(null, e); } }
Figura 31
31
Pentru actualizarea numărului de exemplare a cărților din bibliotecă s -a creat metoda
Update . Această metodă actualizează numărul de exemplare de cărți din bibliotecă în
momementul în care o carte este împrumutată. Numărul de exemplare existend în baza de date
este parsat în variabila de tip integer. Apoi se scade o unitate din acesta. Daca există cel puțin o
carte în stoc atunci se actualizează tabela cărți în baza de date. Daca actualizarea s -a realizat cu
success atunci utilizatorul este informat printr -un mesaj, iar dacă actualizarea stocului de cărți nu
a putut fi realizată, atunci apare la interfața cu utilizatorul un mesaj în care acesta este informat. public void Random(){
Random ra= new Random();
Nr_Inventar_field.setText(""+ra .nextInt(1000+1)); }
public void update(){
int ex = Integer.parseInt(nr_exemplare_field.getText()); // denumire
//parametru din baza de date unde sunt înregistrate nr de exemplare a unei cărți
int a = 1;
int upd = ex – a; // se scade o carte din numărul de exemplare pt a se
// actualiza atunci când se împrumută o carte
String s = String.valueOf(upd );
nr_exemplare_field.setText(s);
try { int n = Integer.parseInt(s);
if (n>0){ //daca exista cel puțin o carte pe stoc atunci
String val1= Nr_inventar_field.getText();
String val2 = nr_exemplare_field.getText();
String sql = "update carti set nr_inventar='"+val1+"', "
//actualizează tabela cărți din baza de date
+ "nr_exemplare='"+val2+"' where nr_inventar=' "+val1+"'";
ps = con.prepareStatement(sql);
ps.executeUpdate();
32
În momentul când o carte este returnată, atunci această înregistrare este ștearsă din tabela
de împrumuturi, identificarea făcându -se după cod utilizator .
De asemenea se actualizează numărul de exemplare în baza de date atunci când o carte
este returnata.
Pentru o utilizare mai ușoară a aplicației s -a adăugat opțiunea de căutare, astfel
utilizatorul nu este nevoit să completeze toate câmpurile de fiecare dată când o carte este JOpt ionPane.showMessageDialog(null, "Inregistrare actualizata");
// mesaj cand inregistrarea a fost cu succes
} else {JOptionPane.showMessageDialog(null, "Cartea nu este
inregistrata");}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
} finally {
try { rs.close();
ps.close();} c atch (Exception e) {
JOptionPane. showMessageDialog(null, e); }}}
public void delete(){
String sql = "delete from imprumuturi where cod_utilizator=?";
try { ps = con.prepareStatement(sql);
ps.setString(1, cod_utilizator_field.getText());
ps.execute();
} catch (Exception e) {
JOptionPane.sho wMessageDialog(null, e);
private void Returneaza_carteaActionPerformed(java.awt.event.ActionEvent evt ) {
delete();
returnUpdate();}
33
împrumutată sau când un utilizator returnează o carte. De exemplu, mai jos, este detaliat codul
scris pentru căutarea în tabela împrumuturi a codului unui utilizator. Codul utilizatorului este
introdus în interfața aplicației și apoi este căutat în baza de date împrumuturi. Daca acest cod este
găsit, atunci automat toate celalalte câmp uri detaliate în codul de mai jos sunt automat
completate. Daca codul utilizatorului nu a fost găsit în baza de date, atunci aplicația afișează un
mesaj către utilizator: "Utilizatorul nu a fost găsit!".
private void cauta_utilizatorActionPerformed(java.a wt.event.ActionEvent evt) {
String sql = "select * from imprumuturi where cod_utilizator =? "; // se caută în
//tabela împrumuturi din baza de date după cod_utilizator
try {
ps = con.prepareStatement(sql);
ps.setString(1, cod_utilizator_field.getText());
rs = ps.executeQuery();
if (rs.next()) {
String add2 = rs.getString("nume_utilizator");
nume_field.setText(add2);
String add3 = rs.getString("prenume_utilizator");
prenume_field.setText(add3);
String add4 = rs.getString("status_utilizator");
status_u tilizator_field1.setText(add4);
String add5 = rs.getString("nr_inventar");
Nr_inventar_field.setText(add5);
String add6 = rs.getString("titlu_carte");
Titlu_carte_field.setText(add6);
String add7 = rs.getStri ng("autori_carte");
Autori_carte_field.setText(add7);
String add8 = rs.getString("gen");
gen_i mprumuturi_field.setText(add8);
String add9 = rs.getString("editura");
editura_fie ld.setText(add9);
34
Pentru autentificarea utilizatorilor la aplicații și sisteme, parola reprezintă cel mai des
folosit mecanism. Aflarea parolei are ca și consecință posibilă obținerea accesului în sistem.
Pentru obținerea accesului în aplicații sau sisteme, parolele sunt vu lnerabile la o serie de atacuri.
Furtul identității reprezinata în momemtul de fata „infracțiunea informatica” cu cea mai mare
rata de creștere.
Pentru securizarea parolei de autentificare s -a folosit setul de funcții criptografice SHA -2
(Secure Hash Algoritm 2 ). Funcțiile criptografice hash sunt operații matematice care se aplică pe String add10 = rs.getString("isbn");
ISBN_field.setText(add10);
String add11 = rs.getString("data_imp");
data_imprumut_field.setText(add11);
String add12 = rs .getString("nr_exemplare");
nr_exemplare_field.setText(add12);
String add13 = rs.getString("cota_depozit");
cota_depozit_field.setText(add13);
String add14 = rs.getString( "cota_raft");
cota_raft_field.setText(add14);
rs.close();
ps.close();
} else {
JOptionPane.showMessageDialog(null, "U tilizatorul nu a fost gasit!"); }
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
} finally {
try {
rs.close();
ps.close();
} catch (Exception e) {
JOptionP ane.showMessageDialog(null, e);}} }
35
date digitale, prin compararea unui „hash” (valoarea finală a funcției) cu un alt hash cunoscut, se
poate determina integritatea. Un aspect cheie al funcțiilor criptografice hash este rezistența la
coliziune: nimeni nu ar trebui să poată să găsească două de valori de intrare diferite (de exemplu,
două fișiere distincte) care ar duce la unul și același hash de ieșire. SHA -2 include schimbări
semnificative de la pr edecesorul său, SHA -1. SHA -2 familia este format din șase funcții hash cu
digesturi (valori hash) care pot fi de 224, 256, 384 sau 512 biți: SHA -224, SHA -256, SHA -384,
SHA -512, SHA -512/224, SHA -512/256.
În baza de date, în tabela cont, parola este securizată prin folosirea setului de funcții
criptografice SHA -2 având ca valoare hash 256 biți.
SHA -2 este o modalitate bună de a stoca parolele utilizatorilor, deoarece este mult mai
sigur decât MD5 sau SHA -1. Chiar dacă este mai sigur, se poate ad ăuga un salt pentru
îmbunătățirea securității parolei. Un salt este un șir de caractere care se adaugă la parola
utilizatorului pentru a o prelungi și pentru a adăuga caractere speciale .
În momentul în care utilizatorul se autentifică în aplicație, parola introdusă este securizată
folosind același set de funcții criptografice SHA -2 (256 biți) și se compară stringul din baza de
date cu noul string obținut de la parola introdusă pentru autentificare. Daca sunt identice atunci
utilizatorul se autentifică cu su cces, daca nu, apare mesajul „Nume și parolă incorecte!”.
private void jButton2Login1ActionPerformed(java.awt.event.ActionEvent evt) {
String sql = "select * from cont where nume_utilizator=? and parola = ?";
try { ps = con.prepareStatement(sql);
ps.setString(1, NumeUtilizator_filed.getText());
ps.setString(2, SHA256.hash(parola_field.getText().toString(), "salt"));
rs = ps.executeQuery();
Figura 32
36
3.3 Testarea aplicației
Rolul procesului de testare este de a asigura examinarea funcționalităților înainte ca
sistemul să fie folosit în producție, și orice defectare să fie raportată echipei de dezvoltare pentru
a fi rezolvată. Testarea nu poate înlătura direct defectele, și nu poate nici îmbunătăți calitatea, dar
prin raportarea defectelor descoperite, acestea pot fi înlăturate crescând astfel fiabilitatea
sistemului.
Procesul de testare diferă în funcție de metoda de dezoltare (exemplu meto da Waterfall
sau Agile(Scrum)).
Un test constă în execuția programului pentru un set de date de intrare convenabil ales,
pentru a verifica dacă rezultatul obținut este correct. Un caz de test este un set de da te de intrare
împreună cu datele de ieșire pe care programul ar trebui să le producă.
Testarea este activitatea de concepție a cazurilor de test, de execuție a testelor și de
evaluare a rezultatelor testelor, în diferite etape ale ciclului de viață al programelor.
Metode de Testare:
• Testare funcțională. Testarea în vederea verificării programului folosește date de
test alese de participanții la procesul de dezvoltare a programului. Ea este efectuată la mai multe
nivele: la nivel de unitate funcționa lă, de modul, de subsistem, de sistem. if (rs.next()) {
rs.close();
ps.close();
this.dispose();
}else{
JOptionPane.showMessageDialog(null, "Nume si parola incorecte!") }
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e); } }
37
• Testare back box. Nu se bazează pe cunoașterea interna a design -ului său a
codului. Testele sunt bazate pe cerințe și funcționalitate
• Testarea white box. Se bazează pe cunoașterea logicii interne a codului aplica ției.
Testele sunt bazate pe acoperirea sintaxei de cod, ramuri, cai, condiții
În prezent, testarea se realizează utilizând fie strategia black box (când se urmarește
numai comportamentul funcțional al produsului), fie strategia white box (se analizează
comportamentul programului având la dispoziție codul sursă al acestuia).
Inițial, testarea se făcea integral manual, fiind considerată singura soluție de a descoperi
eventualele defecte. Testele automate execută practic o secvență de acțiuni cu intervenție umană
minimă și pot simula utilizarea unei aplicațîi în condițîi reale, de simultaneitate ridicată.
Cele mai importante beneficii are testării automate sunt:
• acoperirea tuturor etapelor de testare de la concepție până la lansare
• posibilitatea simulăr ii testării cu mai mulți utilizatori.
• posibilitatea repetării testelor – creșterea siguranței în produs
Unelte pentru sistemele de testare automata:
• GUI , prin folosirea metodei "înregistrare/redare".
• analizoare de cod – analizează complexitatea co dului scris, respectarea unor
standarde de scriere a codului.
• analizoare de memorie – detectează depășirea memoriei alocate, suprascrieri în
zone nealocate și zone rămase nedealocate.
• testare de solicitare/performanță – pentru testarea aplicațiilor w eb și client/server
în diferite cenarii de solicitare.
• testare servere web – verifică validitatea și integritatea link -urilor, a codului html,
programe client -side și serverside, securitatea transmiterii datelor.
• alte unelte – pentru managementul docu mentației, raportării bug-urilor,
configurației, etc.
38
Testarea automată nu va putea înlocui în întregime testarea manuală și nici nu trebuie.
Tester -ii pot să observe cum un utilizator poate interacționa cu produsul, în timp ce un sistem de
testare automa tă nu poate întotdeauna să prevadă aceste acțiuni sau să găsească cea mai bună
cale de a le testa. Dacă sunt bine folosite, programele de testare automată măresc considerabil
productivitatea QA, economisesc costuri, măresc semnificativ consistența și calit atea produsului
și ajută la optimizarea și accelerarea procesului de dezvoltare al unei aplicații.
Testarea acestei aplicații s -a realizat utilizând testarea manuala. S -a creat un plan de
testare incluzând scenarii de testare exemplificate atât prin acțiu ni din interfață utilizatorului cât
și acțiuni de testarea manuala în mediul de programare (e.g. conectare și actualizare baza de
date).
Exemple cazuri de testare utilizate:
Nr.
test Nume
caz de
testare Acțiuni din cadrul
scenarului de
testare Rezultat așteptat Rezultatul curent
1 Împrumu
tă cărți:
Actualiza
re număr
de
exemplar
e cărți 1.1 Din fereastra
Împrumută Cărți se
completează Nr.
Inventar
1.2 Se apasă pe
butonul Caută
1.3 Se observă
valoarea numărului
de exemplare
1.4 Se compleaza
Cod utilizato r
1.5 Se apasă bunonul
Caută
1.6 Se compleaza
data an/luna/zi
1.7 Se apasă pe
opțiunea “Împrumută
cartea”
1. Câmpurile Nr. Inventar și Cod
utilizator sunt editabile
2. După apăsarea opțiunii Caută,
automat toate celalte câmpuri sunt
completate automat
3. Se observă valoarea numărului
de exemplare
4. Data împrumutării unei cărți
poate fi introdusa în câmpul
editabil
5. După folosirea opțiunii
“împrumută o carte”, apare
mesajul “Carte împrumutată cu
success!”
1. Câmpurile Nr. Inventar și Cod
utilizator sunt editabile
2. După apăsarea opțiunii Caută,
automat toate celalte câmpuri sunt
completate automat
3. Se observă valoarea numărului
de exemplare
4. Data împrumutării unei cărți
poate fi introdusa în câmpul
editabil
5. După folosirea opțiunii
“împrumută o carte”, apare mesajul
“Carte împrumutată cu success!”
39
6. Apoi apare mesajul “
Înregistrare actualizata”
7. Se observă numărul de
exemplare. Acesta trebuie să fie
cu un număr mai mic comprativ
cu el dinaintea folo sirii opțiuni
împrumută cartea.
6. Apoi apare mesajul “
Înregistrare actualizata”
7. Se observă numărul de
exemplare. Acesta trebuie să fie cu
un număr mai mic comprativ cu el
dinaintea folo sirii opțiuni
împrumută cartea.
Nr.
test Nume
caz de
testare Acțiuni din cadrul
scenarului de
testare Rezultat așteptat Rezultatul curent
2 Creare
cont nou Șcenariu 1:
1.1 Se completează
în fereastra Cont nou
următoarele câmpuri:
Nume utilizator, Șcenariu 1:
1. Câmpurile sunt editabile și se
pot completa corespunzător
2. Se poate alege întrebarea de
Securitate Șcenariu 1:
1. Câmpurile sunt editabile și se
pot completa corespunzător
2. Se poate alege întrebarea de
Securitate
40
Nume, Parola
1.2 Se alege
întrebarea de
Securitate “Care este
limba ta maternă”
1.3 Se completează
răspunsul la
întrebarea de
Securitate de la
punctul 1.2.
1.4 Se crează contul
nou prin
apăsarea
opțiunii/butonul
ui de “Crează
Cont Nou”
3. Atât răspunsul întrebării de
securitate cât și câmpul parolei
sunt indescifrabile (ascunse)
4. După apăsarea butonului
“Crează cont nou” apare mesajul
“cont nou creat”
3. Atât răspunsul întrebării de
securitate cât și câmpul parolei sunt
indescifrabile (ascunse)
4. După apăsarea butonului
“Crează cont nou” apare mesajul
“cont nou creat”
Șcenariu 2:
2.1 Se repetă pașii de
la 1.1 până la 1. 3 de
la scenariu 1
2.2 Se folosește
opțiunea/butonul
Autentificare
Șcenariu 2:
1. După apăsarea butonului
“Autentificare” aplicația
redirectioneaza
utilizatorul către
fereastra de autentificare
Șcenariu 2:
1. După apăsarea butonului
“Autentificare” aplicația
redirectioneaza
utilizatorul către fereastra
de autentificare
41
Concluzii :
Aplicația Bibliotec ă are o interfață prietenoasă și intuitivă fiind ușor de învățat și de
folosit de orice utilizator. Aplicația dezvoltată furnizează funcționalități de bază necesare pentru
gestionarea cărților într -o bibliotec ă.
Alegerea platformei Java ca mediu de dezvolta re al aplicației și folosirea tehnologiei Java
Swing furnizează o modalitate simplă și ușoară de a realiza intefete grafice, care permit
personalizarea look and feel a componentelor grafice, putând fi asociate acelorași date mai multe
moduri de vizualizare chiar în același timp.
În urma dezvoltării acestei aplicații am învățat să îmbin mai multe tehnologii de la mai
multe discipline, cuprinzând realizarea interfeteleor grafice prin folosirea componentelor din
biblioteca Swing, crearea conexiuni către baza de date folosind MySQL, stocarea și citirea
parametrilor în baza de date prin metoda de interogare, dar și îmbinarea dintre caracteristicele de
funcționalitate de la interfața utilizatorului și metodele folosite în dezvoltarea lor.
Se recomandă despărțirea părții logice a aplicației de interfața grafica din motive de
reutilizare a codului, atât pentru interfață cât și pentru partea logica a aplicației. Astfel se pot
aplica îmbunătățiri într -o parte a aplicației fară a o afecta pe cealaltă.
Functionalitatile disponibile în aceasta aplicație pot fi ușor extinse și îmbunătățite. D intre
cele care pot fi adăugate ar fi: un utilizator să poată primi recomandări pe baza cărților pe care le –
a citit, crearea de filtre pentru o mai bună catalogare a raportului cu priv ire la cărțile împrumutate
sau returnate, extinderea căutării unei cărți după mai multe câmpuri disponibile, etc.
Ca și funcționalități de extindere a acestei aplicații, această aplicație se poate dezvolta
ulterior să poată fi folosită și de către cititori, astfel încât aceștia pot folosi aplicația din cadrul
biblioteci pentru a -și împrumuta și returna singuri cărțile, reducând astfel sarcinile
bibliotecarilor. O altă posibilitate de a extinde această aplicație este de a fi portata (emulata) pe
sistemul de operare Android deveniind astfel accesibilă și de pe smartphone.
42
Bibliografie
Referințe cărți:
1. Java de la 0 la expert – Autori: Ștefan Tanasa, Ștefan Andrei, Cristian Olaru, Ed. A II -a rev –
Iași Editura Polirom, 2011.
2. Proiectarea Interfețelor Grafice – Autor: Conf. univ. dr. ing. Mironela PÎRNĂU
3. Swing: A Beginner's Guide 1st Edition – Autor: Herbert Schildt
4. The Definitive Guide to Java Swing (Definitive Guides (Paperback)) 3rd Edition –
Autor: John Zukows ki
5. phpMyAdmin Starter – Autor: Marc Delisle
Referințe web:
1. https://ro.wikipedia.org/wiki/
2. http://www.bibnat.ro/Biblioteca -Digitala -Nationala -s135 -ro.htm
3. http://www.bibnat.ro/ISBN -s21-ro.htm
4. http://www.bcut.ro/dyn_doc/tutorial e/cota.pdf
5. http://www.euroqual.pub.ro/wp -content/uploads/C10 -Metodologie -testare -sw.pdf
6. https://owasp.org/www -pdf-archive/Secure_Password_Storage_@OWASPChicago.pdf
7. https://go.java/?intcmp=gojava -banner -java-com
8. https://ro.wikipedia.org/wiki/SHA -2
9. http://staruml.io/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Mihaela Stan (Anastasiu) [622239] (ID: 622239)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
