Aplicatie Suport Utilizata In Managementul Rezervarii de Bilete Pentru Evenimente

1. Introducere

Tema pe care am ales s-o tratez in cadrul lucrării de licență este “Aplicație suport utilizată în managementul rezervării de bilete pentru evenimente”.

Lucrarea de licență este structurata in șase capitole, numerotate cu cifre arabe. Capitolul al doilea, inspirat din titlul lucrării, descrie problema abordată de lucrare – “Rezervarea de bilete pentru evenimente”. Capitolul trei cuprinde descrierea tehnologiilor și metodelor utilizate în aplicația realizată de mine.

În capitolul al patrulea, denumit “Arhitectura soluției” sunt descrise funcțiile și principalele modele, fără a se face referire la tehnologiile utilizate. Capitolul cinci, care este și cel mai cuprinzător, conține descrierea implementării soluției, mai precis a celor mai importante funcții, a principalelor clase implementate, a structurii bazei de date și a legăturilor dintre tabelele acesteia.

Capitolul șase, care este și ultimul, conține concluziile lucrării, alături de posibile viitoare dezvoltări ale soluției propuse.

Scopul acestei teme de licență este de a-i ajuta pe studenți, în special pe studenții Academiei de Studii Economice să aibă acces la un sistem de rezervare de bilete, care să se plieze pe necesitățile lor.

Există multe site-uri de rezervări de bilete online în România, dar acestea nu se adresează unei categorii anume de persoane și niciunul nu oferă facilități studenților, care reprezintă o parte importantă din clienții acestor site-uri.

În plus, aceste site-uri se regăsesc în mediul online, neexistând multe aplicații desktop de acest tip, sau cel puțin sunt necunoscute pentru publicul larg. Unul din avantajele acestei aplicații este că vei avea nevoie de conexiune la internet doar pentru a recepționa emailul de confirmare a comenzii efectuate.

Printre facilitățile de care vor beneficia studenții care vor utiliza această aplicație se va număra și acordarea unui discount la cumpărarea unui bilet, reducerea fiind de aproximativ 50% pentru fiecare bilet cumpărat.

Probabil cel mai important avantaj al unei vânzări de bilete prin utilizarea unei aplicații îl reprezintă accesul rapid la informațiile dorite. Astfel, poți afla foarte ușor detalii generale despre evenimente, despre locația și data evenimentelor, sau despre prețul unui bilet. Odată ce ai cumpărat aplicația și ai instalat-o pe calculatorul propriu, vei putea să ai acces zilnic la ea.

Un alt avantaj îl reprezintă plata care se va putea face folosind un card bancar. După ce vei rezerva biletul, vei avea posibilitatea să plătești utilizând cardul, trebuind doar să completezi un formular cu niște date , cum ar fi codul de securitate al cardului. Biletul îl vei putea primi în format electronic, pe care va trebui să-l tipărești la imprimantă, prin sistemul print at home, de care această aplicație dispune.

Un avantaj important ale unei aplicații desktop este accesul la resursele calculatorului. O aplicație desktop poate utiliza toate librăriile sistemului, spre deosebire de o aplicație web, care nu are acces la ele, din motive de securitate.

Aplicatiile desktop îți oferă un răspuns mai rapid față de aplicațiile web. O aplicatie desktop nu are nevoie de un server extern pentru a-și găzdui datele. Ai control total asupra datelor, pe care nu le poți pierde dacă îți faci frecvent copii de rezervă.

În ceea ce privește securitatea, aplicatiile web sunt expuse la mai multe riscuri decât aplicațiile desktop. Vei avea un control total asupra unei aplicații desktop, pe care o vei putea proteja de diferite vulnerabilități. Acest lucru nu se aplică și în cazul aplicatiilor web, deoarece acestea sunt folosite de un număr mare de utilizatori din întreaga lume și astfel cresc pericolele la care sunt expuse.

Dezvoltarea și întreținerea de aplicatii web presupun costuri mai mari și continue. Odată ce ai achiziționat o aplicație desktop, în caz de nevoie, vei mai plăti doar pentru mentenanța aplicației.

Datorită faptului că aplicația este scrisă în limbajul Java, aceasta prezintă mai multe avantaje. Dintre acestea, amintim portabilitatea și faptul că este un limbaj gratuit.

Astfel, această aplicație, fiind scrisă în limbajul Java va putea fi rulată și pe alte sisteme de operare în afară de Windows, precum Linux sau MAC OS.

2. Rezervarea de bilete pentru evenimente

2.1. Motivația pe baza căreia a fost aleasă tema

Tema lucrării de licență alese este “Rezervarea de bilete pentru evenimente”. Am ales această temă deoarece atât domeniul rezervărilor, cât și cel al vânzărilor de bilete sunt domenii de actualitate și, după părerea mea, de mare perspectivă.

Motivul alegerii acestei teme de licență provine din dorința de a cerceta mai detaliat aceste domenii. Un alt argument care m-a determinat să aleg această temă a fost faptul că eu însuși am utilizat mai multe aplicații de acest tip, toate aflate în mediul online.

Aceste aplicații, care deși sunt foarte cunoscute și în general nu au puncte slabe, totuși, încă nu am găsit o aplicație de acest gen care să se adreseze studenților. Aplicația realizată de mine își propune să rezolve această problemă, oferind reduceri la cumpărarea de bilete pentru evenimente, celor care s-au înregistrat și au fost validați ca fiind studenți.

De asemenea, toate aceste aplicații sunt aplicații web și depind în întregime de o conexiune la internet. Aplicația dezvoltată de mine este o aplicație desktop ce își propune să rezolve, pe cât posibil și potențiala problemă legată de conexiunea la internet.

2.2. Principalii comercianți de bilete online din România

„Eventim.RO este membru al grupului CTS Eventim AG & Co. KGaA, companie lider pe piața Europeana de Ticketing și Live Entertainment.”

CTS EVENTIM AG & Co. KGaA este o companie de servicii online în domeniul vânzării de bilete și organizării de evenimente, cu sediul central în Bremen.

Afacerea Eventim este împărțită în două zone principale: bilete de avion și bilete la evenimente. În plus, compania este, de asemenea activă în domeniul sistemelor de control acces, marketingului bazelor de date, evenimentelor sau licitațiilor online. Ca lider de piață europeană în domeniul ticketingului, Eventim este prezentă în 20 de țări, cum ar fi Germania, țările Benelux, Elvetia, diferite țări din Europa de Est, Rusia și Italia.  

Segmentul de ticketing include comercializarea și distribuirea de bilete pentru toate tipurile de evenimente. În Europa sunt aproximativ 20.000 de agentii de bilete, mai multe centre de apel și portaluri de internet.

MyTicket a fost lansat pe 2 martie 2006, fiind primul serviciu profesionist din Romania dedicat vânzărilor online a biletelor pentru spectacole.

„De la data lansării, MyTicket a beneficiat de peste 2.000.000 de vizitatori interesați de cumpărarea biletelor pentru o gamă variata de spectacole, unele unice in Romania. Cateva exemple sunt: Madonna, Depeche Mode, Rolling Stones, Metallica, George Michael, Iron Maiden, Leonard Cohen, Shakira, Muse, Lenny Kravitz, Placebo, Buena Vista – The Havana Lounge, Sting, Jose Carreras, Massive Attack, Vonda Shepard, Lady Gaga, Red Hot Chili Peppers, precum si festivalurile B’ESTFEST, Artmania, Coke Live, Stuffstock.” 

Pe langa posibilitatea de a cumpara bilete de pe site, serviciu care asigura livrarea biletelor la adresa indicata de comparator, MyTicket mai pune la dispoziție si rețeaua de magazine partenere, cu puncte de vânzare în locații cheie din București și din marile orașe ale țării.

„Bilete.ro este un furnizor profesional de soluții de achiziție de bilete pentru o plajă largă de evenimente culturale, sportive, în incinte închise sau în aer liber.

Este printre primele companii cu acest profil de activitate apărute pe piața românească. Principala sa preocupare este să ofere servicii de calitate care să vină în întâmpinarea nevoilor organizatorilor de evenimente și a publicului acestora. ”

2.3. Avantajele și dezavantajele unei vânzari online de bilete

Probabil cel mai important avantaj al unei vânzări online de bilete îl reprezintă accesul rapid la informațiile dorite. Astfel, poți afla foarte ușor detalii generale despre evenimente, despre locația și data evenimentelor, sau despre prețul unui bilet. Serviciul online este disponibil 24 de ore din 24, în condiții normale, adică site-ul nu are probleme tehnice , iar conexiunea ta de internet este funcțională.

Un alt avantaj îl reprezintă prețul mai mic al unui bilet la cumpărarea acestuia în primele luni de la anunțarea evenimentului. Multe site-uri au această practică și pentru a-și atrage cât mai mulți clienți, acordă reduceri substanțiale în această perioadă.

Dintre avantaje mai amintim și plata care se va putea face tot online. După ce vei rezerva biletul, vei avea posibilitatea să plătești online cu cardul, trebuind doar să completezi un formular cu niște date , cum ar fi codul de securitate al cardului. Biletul îl vei putea primi tot în format electronic, pe care va trebui doar să-l tipărești la imprimantă, prin sistemul print at home, de care majoritatea site-urilor dispun.

Un dezavantaj major este că nu vei putea fi niciodată sigur că informațiile identificate pe internet sunt reale. Informațiile trebuie verificate întotdeauna din mai multe surse, altminteri clienții site-urilor vor avea parte de surprize neplăcute.

Un alt dezavantaj este situația în care un eveniment este anulat și tu ai intrat deja în posesia biletelor. Dacă ai ales să-ți fie livrată comanda printr-o firmă de curierat sau dacă ai ales să-ți tipărești biletul la imprimantă prin sistemul “print at home”, îți vei recupera toți banii, mai puțin taxa de livrare, respectiv taxa suplimentară aferentă.

Unul dintre dezavantaje este legat de plata online cu cardul. Va trebui să fii foarte atent la ce date confidențiale divulgi deoarece poți să devii victima unui furt de informații. În plus, este recomandat să folosești un antivirus bun care să te protejeze de eventualii viruși care circulă pe internet.

Faptul că depinzi de o conexiune la internet constituie o altă problemă și poate fi considerat un dezavantaj, la fel cum este și neîncrederea pe care un client ar putea să o manifeste din cauza faptului că datele sale confidențiale sunt găzduite pe un server aflat la distanță.

2.4. Viitorul în domeniul vânzării de bilete online

„Conform unor studii efectuate de Google Barometer, în România, 64% din români efectuează cautări pe internet, spre deosebire de doar 56% dintre europeni, conform aceluiași studiu. România este înaintea lor în acest domeniu și asta arată că piața românească are un apetit extraordinar pentru mediul online. Procentul de vânzări care se produc în urma contactului clienților cu promovarea online este din ce în ce mai mare, de la an la an, în toate domeniile. ”

În comerțul electronic, cultura este reprezentată în principal de trei subsectoare care au reușit să se adapteze la noile cerințe ale consumatorilor. Aceste subsectoare includ:

– Site-urile de e-cărti și reviste online.

– Platformele de descărcare de muzică.

– Site-urile de vânzare a biletelor la muzee, cinema, festivaluri.

Astăzi, e-ticketingul cultural nu este așa de dezvoltat în comparație cu alte sectoare, cum ar fi biletele de călătorie. Observăm vânzări majore în domeniul concertelor, spectacolelor și evenimentelor sportive și, mai scăzute, în ceea ce privește biletele la muzee și teatre.

Vânzarea de bilete online este o problemă importantă pentru dezvoltarea și competitivitatea actorilor culturali. Astăzi, nu există prea multe avantaje în cazul în care cumperi un bilet online, comparativ cu unul de la casele de bilete. Prețul este de cele mai multe ori la fel, dar un mare avantaj îl reprezintă timpul câștigat în cazul biletelor cumpărate de pe internet. Factorii care au adus succesul comerțului electronic sunt instrumente evidente de creștere a acestui sector neexploatat suficient.

„Cea mai bună strategie pentru creșterea vânzărilor online este construirea unei comunități în jurul afacerii tale. Dacă vei reuși să coagulezi comunitatea în jurul tău prin oferirea de soluții practice care să îi ajute pe toți membrii ei să își atingă obiectivele care îi fac fericiți, în cazul de față, creșterea vînzărilor online, atunci strategia ta va fi una de succes. ”

O altă strategie pentru creșterea vânzărilor pentru site-urile existente este ca acestea să fie multilingve. În primul rând, acestea ar trebui să aibă o versiune în limba engleză, deoarece este cea mai vorbită limbă din lume. În plus, este recomandat ca site-urile să aibă versiuni și în alte limbi vorbite frecvent în toată lumea.

„Probabil cel mai puternic instrument de vânzare online este emailul, deoarece îți permite să ai o discuție 1 la 1 cu oricine, oricând și despre orice. Spre deosebire de postările de pe Social Media, emailul ajunge întotdeauna la destinație și e un permis de încredere pe care ți-l dă comunitatea ta. ”

Din ce în ce mai mulți români interacționează cu aplicațiile din mediul online și implicit cu aplicațiile pentru rezervări și/ sau vânzări de bilete pe internet. Este o afacere aflată încă la început, care, datorită apetenței românilor pentru mediul online, coroborată cu internetul de mare viteză de care dispune țara noastră, comparativ cu alte țări mai dezvoltate din punct de vedere economic, se preconizează că în câțiva ani va deveni o afacere de mare succes.

3. Tehnologiile utilizate

3.1. Java Swing

Java este un limbaj de programare lansat în anul 1995 de către compania Sun Microsystems, care a schimbat complet lumea dezvoltatorilor de software, prin simplitate, robustețe și mai ales, prin portabilitate.

Principalele caracteristici care au făcut ca tehnologia Java să devină probabil cea mai populară din industria software sunt:

Simplitatea – obținută prin eliminarea supraîncărcării operatorilor, moștenirii multiple și a celorlalte lucruri ce pot contribui la scrierea unui cod confuz.

Ușurința – se pot crea aplicații complexe ce utilizează programarea în rețea, thread – uri, interfața grafică sau lucrul cu baze de date.

Robustețea – prin renunțarea la pointeri și prin utilizarea de garbage collector, o procedură de colectare a obiectelor specifică programării orientate-obiect, se vor elimina multe dintre sursele frecvente de erori.

Securitatea – Java este un limbaj de programare foarte sigur care verifică în detaliu codul pentru a detecta secvențele periculoase și stabilește niște reguli foarte stricte pentru rularea proceselor la distanță. În plus, programele scrise în limbajul Java nu pot accesa memoriile heap sau stack, deoarece Java nu folosește pointeri și alocă memorie doar la execuție.

Portabilitatea – limbajul Java va rula fără nicio diferență pe toate sistemele de operare cunoscute, fie că vorbim de Windows, Linux sau Mac OS.

Performanța – chiar dacă pare mai lent decât unele limbaje de programare ce generează executabile native pentru anumite platforme de lucru, compilatorul Java asigură o performanță ridicată a codului de octeți, astfel încât vom putea realiza aplicații oricât de complexe, utilizând inclusiv animații sau grafică 3D.

Are la bază limbajele C și C++, trecerea de la aceste limbaje la tehnologia Java, făcându-se cu ușurință.

Limbaj interpretat și compilat – programele Java sunt initial compilate în niște fișiere asemănătoare codului de asamblare, numite byte code, pentru ca mai apoi acestea să fie interpretate de mediul de execuție Java în instrucțiuni mașină corespunzătoare platformei sistem.

Limbaj distribuit – permite utilizarea obiectelor locale și de la distanță, oferind posibilitatea dezvoltării de aplicații pentru internet, capabile să ruleze pe platforme distribuite și eterogene. De asemenea, se poate utiliza și în aplicații de rețea deoarece respect protocoalele de rețea, cum ar fi HTTP sau FTP.

Limbaj orientat obiect – probabil cea mai importantă trăsătură a limbajului Java. Limbajul evidențiază toate caracteristicile legate de programarea orientate obiect și anume folosirea obiectelor, încapsularea, polimorfismul, moștenirea, modificatorii de acces.

Java Swing reprezintă un set de componente GUI (Graphical User Interface) ce face parte din Java Foundation Classes (JFC), și este folosit pentru a crea aplicații ce prezintă interfață grafică.

Acesta este construit pe baza AWT (Abstract Windowing Toolkit) API și acționează ca înlocuitor al acestuia, deoarece are aproape fiecare control corespunzător unui control AWT.

Arhitectura Swing API se bazează pe modelul arhitectural MVC (Model-View-Controller) după cum urmează:

Un model reprezintă datele unei componente.

View-ul conține reprezentarea vizuală a datelor componentei.

Controller-ul ia datele de intrare de la utilizator, din view și reflectă schimbările în datele componentei.

Componentele Swing au Modelul ca element separat, iar View-ul și Controller-ul sunt grupate în elementele interfeței utilizator.

Caracteristici Java Swing:

Componentele Swing sunt independente de sistemul de operare nativ al API-ului, controalele API-ului Swing sunt generate în mare parte folosind codul JAVA, și nu de apeluri ale sistemului de operare.

Swing oferă un set bogat de controale complexe, cum ar fi JTree, JTabbedPane, JSlider, JColorPicker, JMenu sau JTable.

Controalele Swing pot fi personalizate foarte ușor deoarece aspectul vizual este independent de reprezentarea lor internă.

3.2. Sistemul de gestiune a bazelor de date relaționale MySQL

MySQL reprezintă cel mai popular sistem open-source de gestiune a bazelor de date, fiind dezvoltat, distribuit, și susținut de către compania Oracle.

O bază de date este o colecție structurată de date. Pentru a adăuga, accesa și a procesa datele stocate într-o bază de date dintr-un calculator, vei avea nevoie de un sistem de gestiune a bazelor de date, cum ar fi MySQL Server.

O bază de date relațională stochează datele în tabele separate și nu le depozitează pe toate într-un singur loc. Modelul logic conține obiecte, cum ar fi baze de date, tabele, view-uri, rânduri și coloane și oferă un mediu de programare flexibil. Au fost stabilite reguli care reglementează relațiile dintre diferitele câmpuri de date, cum ar fi one-to-one, one-to-many, unique, required sau optional, precum și legături între diferite tabele.

Conceptul de Open Source înseamnă că oricine poate utiliza și modifica software-ul. Oricine poate descărca software-ul MySQL de pe Internet și să-l utilizeze fără să plătească nimic. În plus, codul sursă se poate studia și modifica pentru a se potrivi nevoilor fiecărui utilizator.

MySQL Server a fost inițial dezvoltat pentru a manipula baze de date mari, mult mai mari decât cele existente și a fost folosit cu succes în medii de producție extrem de solicitante timp de mai mulți ani. Deși în continuă dezvoltare, MySQL Server oferă astăzi un set bogat de funcții. Conectivitatea, viteza și securitatea fac ca MySQL Server să fie foarte potrivit pentru accesarea bazelor de date pe Internet.

Clienții se pot conecta la MySQL Server folosind protocolul TCP/IP sau utilizând protocolul IPC (inter-process communication socket) pentru sistemul de operare Unix.

Interfața Connector / J oferă suport MySQL pentru programele client Java care utilizează conexiuni JDBC. Programele pot fi rulate atât pe Windows, cât și pe Unix.

Sistemul de gestiune a bazelor de date MySQL permite utilizarea următoarelor tipuri de date:

int/unsigned int pe 1,2,3,4 și 8 octeți.

long, float, double.

char, varchar.

binary, varbinary.

text.

blob.

date, time, datetime, timestamp, year.

OpenGIS pentru date spațiale.

3.3. Java Database Connectivity

JDBC (Java Database Connectivity) este o tehnologie Java de conectare la baze de date specifică platformei Java Standard Edition din cadrul companiei Oracle. Această tehnologie este o interfață pentru programarea de aplicații (API) din cadrul limbajului Java ce stabilește modalitatea în care un client poate accesa o bază de date. Tehnologia JDBC furnizează metode pentru interogarea și actualizarea datelor unei baze de date și este orientată spre bazele de date relaționale.

API-ul JDBC utilizează un driver manager și drivere specifice bazelor de date pentru a oferi o conexiune la bazele de date eterogene.

Driver Manager-ul JDBC se asigură că este utilizat driver-ul corect pentru a accesa fiecare sursă de date. Driver Manager-ul este capabil să suporte mai multe drivere conectate simultan la multiple baze de date.

Componentele JDBC:

Driver Manager este clasa ce gestionează o listă de drivere de baze de date. Potrivește cererile de conexiune din aplicația java cu driverul bazei de date folosind un subprotocol de comunicație. Primul driver care va recunoaște un anumit subprotocol va fi folosit pentru a stabili o conexiune la baza de date.

Driver-ul este o interfață ce gestionează comunicarea cu serverul bazei de date. Vei interacționa direct cu obiectele driver-ului foarte rar. În schimb, vei utiliza Driver Manager-ul, care gestionează obiecte de acest fel.

Connection reprezintă o interfață ce conține toate metodele necesare contactării unei baze de date. Comunicarea cu baza de date se va face în întregime printr-un obiect de conectare.

Statement. Vei putea utiliza obiecte create prin această interfață pentru a trimite statement-urile SQL către baza de date. Unele interfețe derivate acceptă parametri adiționali pentru a executa proceduri stocate.

ResultSet sunt obiecte ce conțin date extrase dintr-o bază de date, după ce se execută o interogare SQL folosind obiecte de tip Statement. ResultSet acționează ca un iterator care permite deplasarea printre datele sale.

SQLException este o clasă care gestionează erorile care apar într-o aplicație cu baze de date.

3.4. Model-View-Controller

Model-View-Controller (MVC) este un model arhitectural folosit în principal în crearea de interfețe grafice. Modelul se bazează pe modularitate, iar principalul său scop este să separe cele trei componente diferite ale interfeței grafice: datele (Model), reprezentarea vizuală a datelor (View), și interfața dintre view și model (Controller).

Principalul motiv pentru separarea acestor trei componente este ca fiecare componentă să fie independentă de celelalte pe cât posibil și modificările aduse unei componente să nu afecteze modificările aduse celorlalte.

De obieci, modelul este construit prima data. Modelul are rolul de a stoca o stare și de a gestiona abonați. Stocarea unei stări presupune modul în care stochezi datele și utlizarea de set-eri și get-eri. Cu toate acestea, orice proprietate care se poate schimba trebuie să aibă o listă de listeners, pe care aceasta îi va contacta ori de câte ori își va modifica valoarea.

Odată ce ai construit modelul, următorul lucru pe care va trebui să-l faci va fi să creezi view-ul. View-ul este partea din aplicație care se abonează la un model. De obicei, view-ul este însoțit de o interfață grafică, denumită și GUI. Interfața grafică este alcătuită și din alte componente care sunt, de obicei, parte a controller-ului și pot fi gestionate ulterior.

Părțile care nu se actualizează atunci când modelul se schimbă sunt responsabilitatea controller-ului. Un view nu poate fi editat, acesta fiind "read-only". Atunci când se încearcă modificarea unui câmp din view, controller-ul trebuie să se ocupe de acest eveniment, să-l proceseze și să-l trimită mai departe către model. Modelul va actualiza apoi view-ul atunci când valoarea sa actuală se modifică.

Aplicația mea utilizează de asemenea modelul architectural MVC. Am împărțit cele trei componente în pachete diferite, denumite sugestiv și am încercat să păstrez, pe cât posibil, arhitectura MVC specifică unei aplicații Java desktop.

3.5. Data Access Object

Un obiect de acces la date (DAO) furnizează o interfață abstractă pentru baze de date sau pentru alte mecanisme de persistență. El presupune faptul că, logica domeniului, în loc să comunice direct cu baza de date, sistemul de fișiere sau serviciul web, utilizează layer-ul Data Access Object.

Prin maparea apelurilor dinspre aplicație către layer-ul de persistență, Data Access Object furnizează operațiuni specifice cu date, fără a expune detalii ale bazei de date. Prin separarea interfeței publice a obiectului de acces la date de implementarea sa se respectă principiul “Single responsibility”.

Componentele modelului Data Access Object:

Interfața Data Access Object – definește operațiunile standard ce vor fi efectuate pe un obiect din model.

Clasa concretă Data Access Obiect – reprezintă clasa care implementeaza interfața DAO. Această clasă este responsabilă pentru a obține date dintr-o sursă de date care poate fi o bază de date, un fișier xml sau un alt mecanism de stocare.

Modelul sau valoarea obiectului – reprezintă un obiect ce conține metode get și set pentru a stoca datele preluate folosind clasa DAO.

Avantajul folosirii Data Access Object este că, dacă vei avea nevoie să schimbi mecanismul de persistență, va trebui să schimbi doar layer-ul DAO, și nu toate secvențele de cod în care layer-ul a fost utilizat. De asemenea, toate detaliile de stocare sunt ascunse de restul aplicației, layer-ul acționând ca un intermediar între aplicație și baza de date.

3.6. Algoritmul MD5

Algoritmul Message Digest 5 (MD5) este reprezentat de o funcție hash criptografică utilizată pe o scară largă, ce produce o valoare hash exprimată ca un număr hexazecimal de 32 cifre. Algoritmul a fost utilizat într-o gamă largă de aplicații criptografice, și este, de asemenea, utilizat în mod obișnuit pentru a verifica integritatea datelor.

Algoritmul procesează un mesaj de lungime variabilă într-o ieșire de lungime fixă de 128 biți. Mesajul de intrare este divizat în blocuri cu lungimea de 512 biți, mesajul fiind construit astfel încât lungimea sa să fie divizibilă cu 512.

Prima parte a construirii mesajului constă în adăugarea unui bit cu valoarea 1 la sfârșitul mesajului. Valoarea 1 este urmată de atâtea zerouri câte sunt necesare pentru ca lungimea mesajului să fie mai scurtă cu 64 biți decât un multiplu de 512. Biții rămași sunt umpluți cu un întreg pe 64 de biți, reprezentând lungimea mesajului original.

Aplicația mea utilizează algoritmul MD5 în criptarea parolelor tuturor utilizatorilor, indiferent că sunt administratori sau utilizatori obișnuiți, cărora le stochează parolele în tabela Login care face parte din baza de date EventDB.

4. Arhitectura soluției

4.1. Descrierea principalelor funcții ale aplicației

Aplicația este structurată sub forma modelului arhitectural Model-View-Controller (MVC), clasele sale fiind organizate în pachete cu denumiri sugestive: model, gui și controller.

Pe lângă aceste trei pachete, aplicația mai conține pachetul numit “dao”, ce conține clasele unde sunt implementate toate operațiile de tip CRUD (Create – Read – Update – Delete), necesare pentru utilizarea bazei de date. Ultimul pachet conține clasa principală, care, la pornirea aplicației, va asigura deschiderea ferestrei principale, cea de logare a utiilizatorilor.

La rularea aplicației, prima fereastră care va apărea va fi fereastra de logare. Pentru început, dacă datele utilizatorului nu se află în baza de date, acesta va trebui să se înregistreze. Funcția de înregistrare presupune specificarea id-ului, numelui, prenumelui, emailului, numărului de telefon, rolului utilizatorului (administrator sau utilizator obișnuit), precum și a numelului de utilizator și a parolei. Aceste date de identificare vor fi inserate în tabelele Login și Users.

Funcția de logare a fost concepută ca să distingă un utilizator cu rol de administrator față de unul obișnuit. Astfel, dacă un utilizator este identificat ca fiind administrator al aplicației, se va deschide fereastra pentru administratori, numită AdminFrame. Dacă utilizatorul este unul obișnuit, se va deschide fereastra UserFrame. În cazul în care datele utilizatorului nu se află în baza de date, aplicația va deschide automat fereastra de înregistrare.

Administratorul, odată ce s-a înregistrat și ulterior, logat, va putea să adauge, modifice sau șterge evenimente, artiști sau locații, toate aceste operații efectuându-se asupra tabelelor Event, Artist și Venue.

Un utilizator obișnuit, după ce se va loga, aplicația îl va direcționa către fereastra UserFrame, unde va putea să vizualizeze toate evenimentele existente, sortate în funcție de tipul lor: culturale, muzicale sau sportive, precum și artiștii și locațiile unde se vor desfășura evenimentele respective. De asemenea, utilizatorul va avea posibilitatea să caute un eveniment, un artist sau o locație, prin specificarea numelui acestora.

Utilizatorul, după ce va selecta evenimentul la care va dori să participe, acesta va fi direcționat către fereastra ChooseTickets, unde va trebui să specifice numărul de bilete și categoria biletelor pe care va dori să le achiziționeze. Prețul biletelor va fi calculat automat și va ține cont atât de numărul și categoria biletelor, cât și de faptul că un utilizator este student sau nu.

Un utilizator va putea să cumpere între unul și patru bilete, la categoriile Gold, Silver și Bronze, cu prețuri cuprinse între 250 și 750 de lei per bilet și va putea beneficia de o reducere de până la 50%, dacă utilizatorul este student.

După ce va finaliza procesul de alegere a biletelor, utilizatorul va trebui să aleagă modalitatea de plată. Acesta va putea plăti numerar, atunci când va intra în posesia biletelor sau cu un card bancar. În cazul în care utilizatorul va alege să platească folosind un card bancar, acesta va trebui să specifice numele titularului cardului, numărul cardului și codul de securitate al acestuia.

Apoi, utilizatorul va trebui să aleagă modalitatea de livrare a biletelor. Acesta va putea să-și tipărească biletele de unul singur, alegând opțiunea “Print at home”, plătind și o taxă suplimentară de 5 lei sau comanda sa va putea fi livrată prin curierat. Dacă utilizatorul va alege cea de-a doua opțiune, acesta va trebui să specifice adresa la care va dori să-i fie livrate biletele.

După ce comanda clientului va fi procesată, administratorul aplicației îi va trimite un email clientului, care va conține detalii referitoare la comanda ce va fi livrată.

4.2. Modelarea sistemului prin utilizarea limbajului UML

Diagramele cazurilor de utilizare.

Cerințele funcționale pe care le-am în vedere în cadrul dezvoltării acestei aplicații vor fi stabilite și modelate prin intermediul diagramelor cazurilor de utilizare. Aceste diagrame exprimă modalitatea în care sistemul va fi utilizat, părțile interesate fiind reprezentate de actorii externi , iar acțiunile ce vor fi efectuate, prin intermediul cazurilor de utilizare.

Figura 1. Diagrama generală a cazurilor de utilizare

Figura 2. Diagrama cazului de utulizare înregistrare comandă

Diagramele de activități.

Aceste diagrame contribuie la reprezentarea grafică a secvențelor de acțiuni pentru care ne dorim să obținem un anumit rezultat. Sunt realizate pentru cazurile de utilizare cele mai importante sau pentru descrierea unor operații mai complexe. Pentru aplicația mea, am realizat două diagrame de activități: diagrama de activitate pentru modul de plată și diagrama de activitate pentru livrarea unei comenzi.

Figura 3. Diagrama de activitate pentru modul de plată

Figura 4. Diagrama de activitate pentru livrarea unei comenzi

Diagramele de stări.

Aceste diagrame modelează starea dinamică a unui anumit obiect, identificând în același timp și evenimentele care fac trecerea unui obiect dintr-o stare în alta. Pentru această aplicație am realizat două diagrame de stări: diagrama de stare a unui bilet și diagrama de stare a unei locații.

Figura 5. Diagrama de stare a unui bilet

Figura 6. Diagrama de stare a unei locații

Diagrama de componente.

Diagrama de componente se raportează la fișierele sistemului informatic în care vor utiliza clasele aplicației. Sistemul conceput este compus din fișiere de tip arhivă (.jar) și fișiere de tip program sursă (.java).

Figura 7. Diagrama de componente a aplicației

5. Implementarea soluției

5.1. Descrierea principalelor clase implementate

Aplicația este construită sub forma modelului arhitectural Model-View-Controller (MVC) și este alcătuită din cinci pachete, toate cu denumiri sugestive pentru rolul claselor ce le compun.

Astfel, primul pachet numit “model” este alcătuit din clasele Artist, Card, Event, Role, Ticket, User și Venue, clase ce conțin constructori impliciți, constructori cu parametri, metode de acces (get-eri și set-eri) și au suprascrisă metoda toString.

De asemenea, pachetul conține și clasa MD5, ce are în componență metoda statică getCode, necesară pentru criptarea parolelor utilizatorilor, prin utilizarea algoritmului MD5.

Figura 8.Codul sursă al funcției MD5

Pachetul “controller” cuprinde clasa AccessController care conține mai multe metode statice care asigură interacțiunea claselor din pachetul “model” cu cele din pachetul “dao”. Metodele statice din controller vor fi apelate în clasele din pachetul “gui”, atunci când vor fi preluate datele introduse de utilizator.

Pachetul numit “dao” conține clasele ArtistDAO, CardDAO, EventDAO, TicketDAO, UserDAO, VenueDAO și DBCredentials. Toate aceste clase, cu excepția ultimei, implementează operații de tip CRUD (Create – Read – Update – Delete) necesare pentru interacțiunea cu baza de date a aplicației.

Clasa DBCredentials conține atributele statice Url, Username și Password, ce conțin informațiile necesare pentru conectarea la serverul MySQL și pentru accesul la baza de date a aplicației.

Pachetul “gui” conține clase ce prezintă interfață grafică bazată pe tehnologia Swing, corespunzătoare componentei View din modelul arhitectural Model-View-Controller.

Pachetul “main” conține clasa principală a aplicației, MainWindow, esențială pentru ca aplicația să ruleze.

5.2. Implementarea principalelor funcții ale aplicației

Funcția de înregistrare a unui utilizator.

Inițial, se introduc date într-un formular din clasa Register. La apăsarea butonului Register, se va apela funcția statică setUser din controller-ul aplicației. Această funcție face legătura între clasele User și UserDAO. Acțiunea propriu-zisă se petrece în clasa User DAO, și mai precis în funcția Add, adică se inserează valorile introduse de utilizator în tabelele Login și Users.

Figura 9. Codul sursă al preluării datelor necesare funcției de înregistrare

Figura 10. Codul sursă al inserării în tabelele Login și Users

Funcția de logare în aplicație.

După completarea câmpurilor corespunzătoare numelui de utilizator și parolei, la apăsarea butonului Login sau tastei “Enter”, ni se va deschide o fereastră diferită, în funcție de tipul utilizatorului (Administrator sau utlizator obișnuit). Dacă datele unui utilizator nu se află în baza de date a aplicației, acesta va fi direcționat automat către fereastra de înregistrare.

În acest timp, în clasa Login va fi apelată funcția statică getUser din controller-ul aplicației, funcție care la rândul ei va apela funcțiile Login și selectID din clasa UserDAO. Prin aceste două funcții, se vor extrage datele din tabelele Login și Users, introduse în procesul de înregistrare al unui utilizator. Dacă aceste date vor corespunde cu valorile preluate din formularul Login, atunci utilizatorul va putea continua în aplicație.

Figura 11. Codul sursă al funcției care verifică tipul de utlizator

Figura 12. Codul sursă al funcțiilor pentru interogarea tabelelor Login și Users

Dacă un utilizator va fi identificat de aplicație ca fiind administrator, acesta va putea să adauge, actualizeze și sterge evenimente, artiști sau locații de desfășurare ale evenimentelor.

Funcția de adăugare a unui eveniment.

Inițial, administratorul va introduce date într-un formular din clasa AddEvent. La apăsarea butonului Add, vor fi apelate funcția statică setEvent din controller și funcția UpdateTable. În funcția setEvent va fi apelată funcția AddEvent din clasa EventDAO. Aici, se va produce operația de inserare a valorilor introduse de administrator în tabela Event. Prin apelul funcției UpdateTable, vom putea să vizualizăm într-un tabel, toate datele pe care le conține tabela Event.

Figura 13. Codul sursă pentru inserarea în tabela Events

Figura 14. Codul sursă pentru actualizarea tabelului cu evenimente

Funcția de actualizare a unui eveniment.

Pentru început, administratorul va selecta un eveniment din tabelul alăturat și va modifica una sau mai multe valori ale atributelor acestuia. La apăsarea butonului Update, vor fi apelate funcția statică updateEvent din controller și funcția UpdateTable. În interiorul funcției updateEvent va fi apelată funcția UpdateEvent din clasa EventDAO, unde vor fi actualizate valorile pentru evenimentul aflat pe rândul selectat din tabel.

Figura 15. Codul sursă pentru preluarea datelor necesare actualizării unui eveniment

Figura 16. Codul sursă pentru actualizarea unui eveniment

Funcția de ștergere a unui eveniment.

Inițial, administratorul va selecta un eveniment situat pe un anumit rând din tabelul alăturat. La apăsarea butonului Delete, vor fi apelate funcția statică deleteEvent din controller, funcția de ștergere a unui rând din tabel și funcția UpdateTable, de actualizare a tabelei alăturate. În interiorul funcției deleteEvent va fi apelată funcția DeleteEvent, prin intermediul căreia se va șterge evenimentul aflat de rândul selectat din tabel.

Figura 17. Codul sursă pentru preluarea datelor necesare ștergerii unui eveniment

Figura 18. Codul sursă pentru ștergerea unui eveniment

În cazul în care utilizatorul este unul obișnuit, acesta va putea, printre altele să caute un eveniment, un artist sau o locație, să rezerve bilete, să aleagă modul de plată, să aleagă modalitatea de livrare și să-și genereze biletele în format PDF.

Funcția de căutare a unui eveniment, artist sau locații.

Utilizatorul va avea posibilitatea să caute un eveniment, un artist sau o locație, aplicația utilizând în acest sens, o funcție de tip “autocomplete”.

Figura 19. Codul sursă pentru căutarea unui eveniment, artist sau locații

Funcția de rezervare a biletelor.

Inițial, utilizatorul va trebui să introducă o valoare pentru id-ul unui bilet și să selecteze categoria și numărul de bilete. Categoria biletelor va putea fi aleasă dintre Gold, Silver și Bronze, iar numărul de bilete pe care le vei putea rezerva va fi între 1 și 4. Prețul biletelor va fi calculat automat, în funcție de categoria și numărul de bilete. Dacă utilizatorul este student, acesta va putea beneficia de o reducere de până la 50 % din prețul total al biletelor.

La apăsarea butonului Reserve Tickets, va fi apelată funcția statică setTicket din controller. În interiorul funcției va fi apelată funcția AddTicket din clasa TicketDAO. Prin intermediul acestei funcții, vor fi inserate în tabela Ticket valorile preluate din fereastra TicketFrame.

Figura 20. Codul sursă pentru preluarea datelor necesare rezervării de bilete

Figura 21. Codul sursă pentru inserarea datelor în tabela Ticket

Funcția de selectare a modului de plată.

Utilizatorul va trebui să aleagă modul de plată: numerar sau utilizând un card bancar, prin selectarea unui control de tip “radio button”.

Figura 22. Codul sursă pentru selectarea modului de plată

Funcția de selectare a modalității de livrare.

Utilizatorul va trebui să aleagă modalitatea de livrare: print at home sau livrare prin curierat, prin selectarea unui control de tip “radio button”.

Figura 23. Codul sursă al selectării modalității de livrare

Funcția pentru generarea biletelor în format PDF.

Funcția preia datele din fereastra anterioară, TicketFrame, adăugând o taxă suplimentară de 5 lei la prețul biletelor. La apăsarea butonului Generate PDF, aceste date se vor regăsi în PDF-ul nou creat, împreună cu o imagine sugestivă.

Figura 24. Codul sursă pentru generarea biletelor în format PDF

Funcția pentru expedierea unui email de validare a comenzii.

Cu ajutorul acestei funcții, administratorul va trimite clientului un email de validare a comenzii, datele de contact ale utilizatorului fiind preluate din fereastra MailDeliveryFrame. Pentru a asigura expedierea emailului, funcția utilizează protocolul de transport “smtp”, serverul “smtp.gmail.com” și port-ul 465.

Figura 25. Codul sursă pentru expedierea unui email de validare a comenzii

Funcția pentru afișarea numărului total de bilete achiziționate pentru fiecare eveniment.

Cu ajutorul acestei funcții vom putea vizualiza, printr-un grafic de tip “Bar Chart”, numărul total de bilete achiziționate pentru fiecare eveniment în parte.

Figura 26. Codul sursă pentru graficul evenimentelor în funcție de numărul total de bilete vândute

Figura 27. Graficul evenimentelor în funcție de numărul total de bilete vândute

Funcția pentru afișarea numărului de locuri pentru toate locațiile de desfășurare ale evenimentelor.

Cu ajutorul acestei funcții vom putea vizualiza, printr-un grafic de tip “Pie Chart”, capacitatea fiecărei locații de desfășurare a unui eveniment.

Figura 28. Codul sursă al graficului locațiilor de desfășurarea a evenimentelor în funcție de capacitatea acestora

Figura 29. Graficul locațiilor în funcție de capacitatea acestora

5.3. Structura bazei de date

Aplicația utilizează o bază de date MySQL, creată în interiorul mediului de dezvoltare Netbeans, prin folosirea tehnologiei JDBC (Java Database Connectivity). Pentru ca aplicația să se poată conecta la baza de date, vom avea nevoie să importăm driverul MySQL JDBC.

Baza de date a apicației se numește EventDB și conține un număr de 10 tabele. Cele 10 tabele componente ale bazei de date sunt: Login, Role, Users, Event, Artist, Venue, Event_artist, Event_venue, Ticket și Card.

Figura 30. Schema logică a bazei de date a aplicației

5.4. Descrierea tabelelor și a legăturilor dintre acestea

Tabela Login conține datele necesare logării în aplicație. Este o tabelă independentă, deoarece nu conține nicio restricție de tip cheie externă. Cheia primară a tabelei este câmpul id, care este de tip numeric. De asemenea, tabela mai conține câmpurile username și password, ambele de tip șir de caracter.

Tabela Role conține date referitoare la tipul rolul unui utilizator în aplicație. Cheia primară a tabelei este câmpul id, care este de tip numeric. Tabela conține și câmpul name, de tip șirde caracter, care poate avea valoarea Administrator sau User.

Tabela Users conține datele preluate de la un utilizator în timpul procesului de înregistrare al acestuia. Cheia primară a tabelei este câmpul id, care este de tip numeric. Tabela conține câmpurile de tip șir de caracter firstname, lastname, phone și email, toate trebuind să fie completate în mod obligatoriu. De asemenea, tabela conține și restricția de tip cheie externă, reprezentată de câmpul idRole, care face legătura cu tabela Role. Relația între aceste două tabele este de tip unu-la-unu, adică fiecare utilizator va avea un rol bine definit.

Tabela Event conține informații despre evenimentele la care se vor putea achiziționa bilete. Cheia primară a tabelei este câmpul id, care este de tip numeric. Tabela mai conține câmpurile name și type, de tip șir de caracter și date, de tip dată calendaristică. Toate aceste câmpuri trebuie completate în mod obligatoriu.

Tabela Artist conține informații despre artiștii care vor lua parte la aceste evenimente. Cheia primară a tabelei este câmpul id, care este de tip numeric. De asemenea, tabela conține câmpurile name, category și nationality, date de tip șir de caracter ce trebuie completate în mod obligatoriu.

Tabela Venue conține informații despre locațiile în care se vor desfășura evenimentele. Cheia primară a tabelei este câmpul id, care este de tip numeric. Tabela mai conține câmpurile name, country, city și street, date de tip șir de caracter, precum și câmpul noPlaces, care este de tip numeric.

Tabela Ticket conține informații referitoare la biletele rezervate de către utilizator în cadrul aplicației. Pe lângă cheia primară a tabelei, id, care este de tip numeric, tabela conține câmpurile category, de tip șir de caractere și câmpurile noTickets și price, care sunt de tip numeric. În plus, tabela conține și o restricție de tip cheie externă, denumită idEvent, care face legătura acestei tabele cu tabela Event. Relația dintre aceste două tabele este de tip unu-la-mulți, ceea ce înseamnă că la un eveniment se pot cumpăra mai multe bilete.

Tabela Card conține informații referitoare la modalitatea de plată utilizând un card bancar. Tabela conține câmpul id, de tip numeric, ce are rol de cheie primară a tabelei. Tabela mai conține câmpurile holderName, de tip șir de caracter și câmpurile de tip numeric cardNumber și securityCode. De asemenea, tabela Card conține și restricția de tip cheie externă idEvent, care asigură legătura dintre această tabelă și tabela Event. Între aceste două tabele există o legătură de tip unu-la-mulți, ceea ce înseamnă că pentru un eveniment se pot efectua mai multe plăți utilizându-se același card bancar.

Deoarece între tabelele Event și Artist ar exista o legătură de tip mulți-la-mulți, a fost creată o tabelă sumplimentară numită Event_artist, care are o cheie primară compusă, formată din câmpurile idEvent și idArtist, care sunt și cheile externe care fac legătura acestei tabele cu tabelele Event și Artist.

Din același motiv, a fost creată și tabela Event_venue, care conține o cheie primară compusă, alcătuită din câmpurile idEvent și idVenue, ce au rol și de chei externe care asigură legătura acestei tabele cu tabela Event, respectiv cu tabela Venue.

6. Concluzii

Prin această lucrarea de licență mi-am propus să realizez o aplicație pentru rezervarea de bilete la diferite evenimente. Aplicația dezvoltată de mine este o aplicație desktop realizată cu ajutorul limbajului Java ce prezintă o interfață grafică realizată prin utilizarea tehnologiei Swing și care se conectează la o bază de date MySQL cu ajutorul tehnologiei Java Database Connectivity.

Un avantaj al aplicației dezvoltate de mine este faptul că, fiind o aplicație desktop, nu depinde într-o mare măsură de o conexiune la internet. În cardul acestei aplicații vei avea nevoie să accesezi internetul doar pentru a recepționa emailul care va conține detaliile comenzii de bilete ce-ți va fi livrată. O noutate propusă de acestă aplicație este faptul că oferă posibilitatea achiziționării de bilete la preț redus pentru studenți.

Faptul că această aplicație nu este una web poate constitui un dezavantaj, deoarece nu va putea fi accesibila oricui, ci numai clienților care vor achiziționa produsul.

Aplicația va putea să fie utilizată atât de administratorii ei, cât și de utilizatorii obișnuiți. Administratorii acestei aplicații vor putea să adauge, să actualizeze și să elimine evenimente, artiști sau locații de desfășurare ale evenimentelor.

Aplicația se adresează în special utilizatorilor obișnuiți, aceștia fiind și clienți ai acestei aplicații. Imediat după ce se vor loga în aplicație, aceștia vor avea posibilitatea de a căuta un eveniment. După ce vor selecta evenimentul dorit, aceștia vor trebui să specifice categoria biletelor și numărul de bilete pe care vor dori să le achiziționeze la acest eveniment.

Apoi, ei vor trebui să aleagă modul prin care vor plăti biletele, având de ales între plata în numerar și plata utilizând un card bancar. După ce au selectat modul de plată, ei vor trebui să aleagă modalitatea prin care doresc să le fie livrate biletele. Acestea fie vor fi livrate de către o firmă de curierat, fie utilizatorii vor utiliza sistemul “print at home”, prin care vor putea să-și tipărească singuri biletele, plătind în schimb doar o taxă suplimentară modică.

Dacă utilizatorii vor alege varianta prin care biletele să le fie livrate printr-o firmă de curierat, aceștia vor primi un email de la administratorul aplicației în care li se vor da mai multe detalii referitoare la comanda ce le va fi livrată. În cazul în care utilizatorul va alege sistemul “print at home”, va fi generat automat un document de tip Pdf care va conține biletul de acces la evenimentul dorit.

În momentul de față, acestea sunt funcționalitățile aplicației mele. Pe viitor voi încerca să adaug noi funcționalități acestei aplicații. În primul rând, voi încerca să integrez și partea de vânzare propriu-zisă a biletelor prin utilizarea unui card bancar.

De asemenea, plănuiesc ca aplicația să ofere posibilitatea vizionării anumitor statistici referitoare la numărul de spectatori care au participat la un anumit eveniment, evenimentele care au avut loc într-o anumită perioadă de timp sau istoricul comenzilor pentru un anumit utilizator.

O altă funcționalitate pe care vreau s-o adaug aplicației mele este o interfață în mai multe limbi. Momentan interfața mea este în limba engleză, dar în viitor vreau ca aceasta să fie disponibilă atât în limba română, cât și în alte limbi de circulație internațională.

În viitorul apropiat îmi doresc să realizez o aplicație pentru rezervarea de bilete și pentru telefoanele mobile sau tabletele dotate cu sistemul de operare Android. În opinia mea, procesul de rezervare al biletelor va decurge mult mai rapid în cazul unei aplicații Android, un alt avantaj fiind accesul mai multor utilizatori la ea față de o aplicație desktop. Consider că nu este necesară încă o aplicație web de acest tip deoarece există multe site-uri de rezervare a biletelor, atât în țară, cât și în străinătate.

Similar Posts