Lucrare de Licenţă
Lucrare de Licenţă
LUCRARE DE LICENŢĂ
Coordonator: Absolvent:
Ș.l. Dr. Ing. Călin Munteanu Drăghici Andrei-Cristian
2016
Cuprins
1. Introducere ........................................................................................................................ 6
1.1 Contextul proiectului ................................................................................................... 6
1.2 Descrierea domeniului din care face parte tema de licența ......................................... 6
2. Descrierea problemei abordate .......................................................................................... 7
2.1 Descrierea problemei abordate .................................................................................... 7
2.2 Studiu asupra realizărilor similare din domeniu .......................................................... 7
2.3 Stabilirea funcționalităților aplicației raportat la aplicațiile similare .......................... 8
3. Tehnologii utilizate ............................................................................................................ 9
3.1 Sistemul de operare Android ....................................................................................... 9
3.2 Tehnologii de comunicare client-server .................................................................... 12
3.2.1 Standardul TCP/IP .............................................................................................. 12
3.2.2 Network socketing .............................................................................................. 13
3.3 .NET Windows Forms ............................................................................................... 15
3.4 Microsoft SQL Server................................................................................................ 15
3.5 [Link] .................................................................................................................. 15
3.5 Limbajul de programare C# ....................................................................................... 16
3.6 Limbajul de programare Java .................................................................................... 16
4. Arhitectura sistemului ...................................................................................................... 17
4.1 Structura bazei de date ............................................................................................... 17
4.2 Aplicația de tip server ................................................................................................ 19
4.3 Aplicația Windows de tip client din incinta localului ............................................... 23
4.4 Aplicația Android pentru tabletă ............................................................................... 26
4.5 Aplicația Android pentru smartphone ....................................................................... 31
5. Utilizarea aplicațiilor ....................................................................................................... 34
5.1 Utilizarea aplicației Windows ................................................................................... 35
5.2 Utilizarea aplicației Android pentru tabletă............................................................... 37
5.3 Utilizarea aplicației Android pentru smartphone....................................................... 39
5.4 Scenariu de utilizare .................................................................................................. 44
6. Concluzii.......................................................................................................................... 45
7. Bibliografie ...................................................................................................................... 46
Listă de figuri
Fig. 2.1 Arhitectura Android .............................................................................................. 10
Fig. 2.2 Distribuție versiuni Android ................................................................................. 11
Fig. 2.3 Fluxul traficului utilizând standardul TCP/IP ....................................................... 12
Fig. 2.4 Conexiune client-server......................................................................................... 15
Fig. 4.1 Arhitectura sistemului ........................................................................................... 17
Fig. 4.2 Structura bazei de date .......................................................................................... 19
Fig. 4.3 Diagramă de clase aplicație server ........................................................................ 20
Fig. 4.4 Diagramă de clase aplicație Windows de tip client .............................................. 23
Fig. 4.5 Diagramă de clase aplicație Android pentru tabletă ............................................. 27
Fig. 4.6 Diagramă de clase aplicație Android pentru smartphone ..................................... 31
Fig. 5.1 Diagrama cazurilor de utilizare ............................................................................. 35
Fig. 5.2 Fereastra principală a aplicației Windows ............................................................ 36
Fig. 5.3 Fereastră pentru vizualizarea comenzii făcute la o masă ...................................... 36
Fig. 5.4 Fereastră pentru masă rezervată ............................................................................ 37
Fig. 5.5 Meniu principal aplicație Android pentru tabletă ................................................. 37
Fig. 5.6 Meniu mâncare aplicație Android pentru tabletă .................................................. 38
Fig. 5.7 Meniu băutură aplicație Android pentru tabletă .................................................... 38
Fig. 5.8 Meniu vizualizare notă de plată ............................................................................ 39
Fig. 5.9 Confirmarea cererii notei de plată ......................................................................... 39
Fig. 5.10 Meniu principal aplicație Android pentru telefon ............................................... 40
Fig. 5.11 Meniu mâncare aplicație Android pentru telefon ................................................ 40
Fig. 5.12 Meniu băutură aplicație Android pentru telefon ................................................. 41
Fig. 5.13 Vizualizare disponibilități mese .......................................................................... 41
Fig. 5.14 Confirmare rezervare masă ................................................................................. 42
Fig. 5.15 Eroare rezervare masă ce a fost ocupată între timp ............................................. 42
Fig. 5.16 Eroare rezervare masă deja ocupată .................................................................... 43
Fig. 5.17 Notificare cu codul rezervării .............................................................................. 43
Listă de secvențe de cod
Socializarea este una dintre nevoile principale ale omului alături de realizarea
personală, stima de sine, siguranță și nevoile fiziologice. Maslow a ordonat în anul 1954
aceste nevoi și le-a structurat sub forma unei piramide cu cinci niveluri, socializarea
situându-se pe cea de-a treia treapta. Acesta considera că nevoile situate pe nivelurile
superioare pot fi satisfăcute doar dacă cele aflate la baza piramidei sunt deja satisfăcute.
Zilnic, omul simte nevoia de a interacționa cu alte persoane, fie că sunt cunoscute sau nu.
În ziua de azi, oamenii preferă sa interacționeze într-un mediu plăcut, dar care să-i
ofere si senzația de securitate. Restaurantele și pub-urile sunt locațiile în care milioane de
oameni din toată lumea se întâlnesc zilnic pentru a socializa.
Piața aplicațiilor mobile a devenit din ce în ce mai puternica începând cu anul 2007
când compania Apple Inc. a lansat pe piață primul telefon iPhone ce rula pe sistemul de
operare iPhone OS1. In ultimii trei ani au fost vândute, anual, peste un miliard de telefoane
smartphone. Fără să-și dea seama, oamenii au devenit în ziua de astăzi dependenți de
smartphone-uri și de aplicațiile mobile. Statistic, o persoană îți petrece aproximativ 23 de
zile dintr-un an folosind aplicațiile de pe telefonul mobil, iar dezvoltatorii profită din plin
de acest lucru. In momentul de față, există în total aproximativ 4 milioane de aplicații
mobile disponibile pe cele patru sisteme de operare ce domină piața: Android, Apple,
Blackberry si Windows. Din totalul de aplicații disponibile, 1.6 milioane sunt destinate
sistemului de operare Android, deținut în prezent de către gigantul Google Inc., generând
in anul 2015 nu mai puțin de 6 miliarde de dolari. De asemenea, platforma Android
domină piața și punctul de vedere al numărului de telefoane vândute anual.
6
2. Descrierea problemei abordate
2.1 Descrierea problemei abordate
7
restaurant la o anumită dată și oră, dar fără a ocupa masa. În această categorie sunt incluse
aplicații precum: “OpenTable”, “Zagat”, “Urbanspoon”.1
Cu ajutorul tabletei de la masă clienții vor putea comanda, consulta nota de plată și
înștiința ospătarul de intenția de a pleca. Astfel, se va reduce timpul de așteptare necesar
pentru a putea comanda și pentru a cere nota de plată. De asemenea, clienții vor
interacționa cu ospătarul doar prin intermediul tabletei, exceptând momentul plecării când
vor trebui să-i dea personal banii.
1
Paste Magazine, 09.06.2016,
<[Link]
8
3. Tehnologii utilizate
3.1 Sistemul de operare Android
Android fost dezvoltat inițial de către o companie mică de tip startup, Android Inc.,
ce a fost cumpărată în anul 2005 de Google. În prezent, dezvoltarea sistemului de operare
este supervizată de Open Hanset Alliance, un consorțiu alcătuit din companii hardware,
software și de telecomunicații condus de către Google și din care fac parte: Samsung, LG,
Sony, HTC, T-Mobile, Intel si Nvidia.
Primul kernel Android a avut la bază versiunea 2.6.25 a kernelului Linux, iar în
prezent majoritatea dispozitivelor Android folosesc versiunea 3.4 sau 3.10 a kernelului
Linux. Toate versiunile de kernel Linux au suferit modificări de arhitectură pentru a putea
include componente precum: Binder (responsabil de comunicarea între procesele active),
ashmem (subsistem responsabil de alocarea memoriei virtuale), pmem (subsistem
responsabil de alocarea memoriei fizice), logger (subsistem folosit pentru afișarea erorilor
și avertismentelor), wakelock (subsistem responsabil de gestionarea consumului de
energie) si diferite soluții de tratare a situațiilor în care sistemul de operare rămâne fără
memorie disponibilă.
Primul nivel este reprezentat de kernelul Linux și conține drivere pentru afișare pe
display, cameră foto, Bluetooth, memorie flash, USB, tastatură, Wi-Fi, dar și
componentele adăugate ulterior de către inginerii Google enumerate anterior.
Dezvoltatorii de aplicații Android nu vor programa în mod direct la acest nivel;
Al doilea nivel conține bibliotecile native Android, toate fiind scrise intern în limbajul
C/C++. Aceste biblioteci conțin seturi instrucțiuni folosite de sistemul de operare
9
pentru tratarea diferitor tipuri de date. Bibliotecile se mai numesc și interfețe Java. Pe
același nivel se află și layerul Android Runtime ce este alcătuit din Dalvik Virtual
Machine și bibliotecile Android de bază. Aplicațiile Android sunt scrise în limbajul de
programare Java. Mașina virtuală are rolul de a face translația din codul Java in byte-
code cu ajutorul lui tool numit “dx”. Tool-ul convertește în momentul compilării
fișierele .class din Java în fișiere .dex deoarece acestea sunt mai compacte decât
fișierele Java pentru clase, factor important atunci când există limitări de memorie și
baterie așa cum se întâlnește la dispozitivele mobile ce utilizează Android.
Pe cel de-al treilea nivel se află Application Framework Layer. Majoritatea tool-urilor
sunt oferite de către Google și restul sunt extensii sau servicii pe care dezvoltatorii de
aplicații Android le scriu pentru programele lor. Cele mai importante tool-uri sunt:
Activity Manager (administrează ciclul de viață al aplicațiilor), Content Providers
(administrează datele de sunt transmise de la o aplicație la alta), Telephony Mnager
(administează toate apelurile vocale, inclusiv căsuța poștală), Location Manager
(responsabil de localizarea dispozitivului folosind GPS-ul sau stațiile de bază emisie
recepție) și Resource Manager (responsabil de administrarea resurselor folosite de
aplicații).
Ultimul nivel conține Application Layer și este cel cu care majoritatea utilizatorilor de
dispozitive Android interacționează. Acesta conține aplicațiile standard pentru apeluri,
mesagerie, navigare internet, administrare contacte, dar și cele pe care utilizatorii le vor
instala ulterior pe dispozitivul lor.
2
edureka! Education Solutions, 08.06.2016,
<[Link]
10
Fig. 2.1
Una dintre calitățile unice și puternice pe care Android le are este faptul că orice
aplicație standard a unui telefon poate fi înlocuită cu ușurință. Aplicațiile scrise de
producătorii de telefoane trec prin același API public la care are acces orice dezvoltator sau
utilizator Android. Această calitate a dus la diversitatea de aplicații și un număr
impresionant de 1.6 milioane de aplicații ce pot fi descărcate de pe magazinul online
Google Play condus în prezent de Google.
Pentru dezvoltarea celor două aplicații Android din cadrul proiectului a fost folosită
versiunea 4.4.2 (KitKat) a sdk-ului Android corespunzătoare nivelului API 19 aceasta fiind
cea mai răspândită versiune Android, aproximativ 31.6% din dispozitivele produse până în
prezent. IDE-ul utilizat pentru dezvoltarea aplicațiilor este Android Studio 2.0, fiind
mediul de dezvoltare oficial folosit pentru realizarea de aplicații Android începând din
decembrie 2014. Android Studio permite testarea aplicațiilor in timpul dezvoltării lor atât
pe emulatorul integrat în interfața IDE-ului, cât și pe un telefon conectat la calculator
printr-un cablu USB.
Codul folosit pentru dezvoltarea celor două aplicații Android este cod standard Java
ce folosește pachete și clase standard Java împreună cu pachete și clase dezvoltate special
3
Android Developer, 08.06.2016, < [Link]
11
pentru sistemul de operare Android. Interfața grafică cu utilizatorul este realizată folosind
fișiere XML specifice dezvoltării aplicațiilor Android.
Standardul TCP/IP, format din protocoalele TCP și IP, primele protocoale de rețea
dezvoltate, este un model de conectare în rețea al calculatoarelor și conține un set de
protocoale de comunicație între calculatoare conectate la Internet. TCP/IP a fost creat de
Ministerul Apărării Naționale al Statelor Unite din necesitatea realizării unei rețele de
comunicații ce ar putea rezista în orice condiții și să permită transmiterea vorbirii în timp
real. Acest standard asigura comunicații de date capăt la capăt specificând felul în care
datele trebuie împachetate, adresate, transmise, dirijate și recepționate. Funcționalitatea
este organizată în patru niveluri de abstractizare cu funcționalități diferite și bine definite:
Network Acces, Internet, Transport, Application.
4
Oracle, System Administration, 08.06.2016,
< [Link]
12
Nivelul Network Acces este cea mai de jos componentă a standardului și este
folosit pentru a realiza comunicația dintre doi clienți conectați în rețea. Aici, pachetelor de
date li se asignează câte un header înainte de a fi transmise mai departe pe calea fizică
către un alt echipament conectat la rețea. Printre funcțiile nivelului Network Acees se află:
adresarea fizică a fiecărui echipament prin adresele MAC, identificarea erorilor apărute
(fără a le corecta) și controlarea accesului la mediul de transmisie.
Cel de-al treilea nivel, Transport, conține protocolul TCP. TCP este un protocol
complex ce garantează ajungerea datelor la destinație. Înainte de a începe transferul datelor
are loc un schimb de mesaje între sursă și destinație cu scopul de verificare a
disponibilității și pentru a sincroniza numerele de secvență în baza cărora se va confirma
primirea datelor. Aici se creează canale de comunicație ce permit aplicațiilor din nivelul
superior să comunice, iar fiecare canal are asignat un număr către care se face referirea în
timpul comunicației. Acest lucru îl face să fie considerat un protocol orientat pe conectare.
Acest nivel al standardului TCP/IP asigură și faptul că: datele ajung de la sursă la
destinație în ordinea dorită, datele transmise au erori minimale la primire, duplicatele
primite sunt eliminate, pachetele pierdute pe traseu sunt retransmise și includ metode de
decongestionare a traficului în rețea.
13
considera că orice este un fișier în cadrul unui sistem de operare). De aici și analogia dintre
fișiere și sockete: acestea permit citirea, scrierea, deschiderea si închiderea amândurora. În
mod normal, fiecare punct de conectare are propriul socket, dar acestea diferă în funcție de
API-ul utilizat fiind abstractizate de protocolul de rețea pe care îl utilizează.
14
Fig. 2.4 Conexiune client-server5
.NET Windows Forms este una dintre tehnologiile majore ale platformei .NET.
Acesta este un API ce oferă dezvoltatorilor posibilitatea să creeze interfețe grafice cu
utilizatorii. Limbajul de programare folosit pentru dezvoltarea programelor ce folosesc
această tehnologie este C#. Am ales să folosesc această tehnologie datorită avantajelor pe
care le oferă față de alte tehnologii folosite cu același scop: simplitate (facilitează accesul
la resursele sistemului de operare și reduce numărul de erori din cod), portabilitate (același
program poate fi rulat pe mai multe calculatoare ce pot avea la rândul lor diferite versiuni
ale sistemului de operare Windows), eficiență (este scris mai puțin cod pentru a facilita
aceleași funcționalități ce se pot obține și cu alte tehnologii folosite pentru realizarea
interfețelor grafice cu utilizatorul), management (permite organizarea și depanarea mult
mai ușoară a programelor).
3.5 [Link]
5
Oracle – The Java Tutorials, 09.06.2016,
<[Link]
15
componente utilizate de către dezvoltatorii ce realizează proiecte alcătuite din mai multe
aplicații ce necesita intercomunicații. Acesta poate fi folosit pentru aplicații ce utilizează
baze de date sau fișiere XML. Am ales să utilizez această tehnologie datorită simplității cu
care un program poate comunica cu o bază de date.
De-a lungul dezvoltării .NET Framework, librăriile de clase au fost scrise inițial
într-un compilator numit SMC. În 1999, Anders Hejlsberg a format o echipă pentru a crea
un nou limbaj numit ”Cool”. Deși a fost considerată această denumire finală, nu a fost
folosită din motive ce au ținut de marcă înregistrată. Între timp, proiectul .NET a fost făcut
public în iulie 2000 la Professional Developers Conference, limbajul a fost redenumit C# și
toate bibliotecile de clase și ASP .NET au fost portate în C#.
16
4. Arhitectura sistemului
Pentru a îndeplini obiectivul propus a fost necesară crearea unei baze de date
centrală și a 4 aplicații ce comunică între ele: un server, o aplicație Windows și două
aplicații Android.
Pubs este tabela în care se rețin informații referitoare la localurile ce se vor regăsi
în lista cu localuri din aplicația pentru Android. Informațiile reținute aici sunt:
ID_pub – integer PK
Nume – nvarchar(40)
Oras – nvarchar(40)
17
Bonuri este tabela în care se rețin informații despre bonurile deschise în localuri.
Informațiile reținute aici sunt:
ID_bon – integer PK
ID_pub – integer FK
total – integer
status – integer
Meniu este tabela în care se rețin informații despre produse ce se pot cumpăra în
fiecare local. Informațiile reținute aici sunt:
ID_produs – integer PK
ID_pub – integer FK
uume – nvarchar(70)
uret – integer
unitate_masura – nvarchar(30)
Mese este tabela în care se rețin informații despre mesele din localuri. Informațiile
reținute aici sunt:
ID_masa – integer PK
ID_pub – integer FK
status – nvarchar(30)
bon_curent – integer
cod_rezervare – nvarchar(7)
ID_bon – integer
ID_produs – integer
nr_bucati – integer
ID_masa -integer
18
Fig. 4.2 Structura bazei de date
Pentru a permite celorlalte trei aplicații, la care mă voi referi ulterior cu termenul de
“client”, să acceseze baza de date și să preia informațiile de care au nevoie, a fost necesară
dezvoltarea unei aplicații de tip server. Această aplicație are rolul de a prelua cererile
clienților și să se returneze răspunsurile adecvate. Ea va face legătura dintre clienți și baza
de date centrală, în care se afla toate informațiile enumerate mai sus, stocată pe același
calculator pe care se află și serverul.
În limbajul de programare C#, utilizarea socketelor este mult mai ușoară decât în
cazul limbajelor precum C sau C++. În cadrul C# există o clasă predefinită numită
“Socket” inclusă în namespace-ul “[Link]”. Această clasă are rolul de a ajuta
programatorii în dezvoltarea aplicațiilor oferindu-le un set de metode deja definite ce
acoperă toate funcționalitățile pe care trebuie să le aibă un socket.
19
Odată creat socketul principal, acestuia i se atribuie tipul de adresă IP folosită (se
va folosi un IPv4), tipul de socket și protocolul Internet utilizat de către acesta. Serverul
dezvoltat de mine folosește un socket de tipul “Stream” ce permite o comunicare în două
sensuri, adică serverul va primi și va trimite informații către clienți. Protocolul de
comunicare folosit este TCP deoarece permite conectarea mai multor clienți simultan,
micșorând timpul necesar pentru a-i răspunde clientului, și permite o comunicare asincronă
cu clienții. Avantajul oferit de acest tip de comunicare va fi explicat când vor fi prezentate
aplicațiile de tip client.
Odată ce socketul principal a fost creat și ales tipul și protocolul Internet folosit,
acestuia i se va asigna o adresă IP, adresa IP este de obicei cea a calculatorului pe care
rulează serverul, și un port după care socketul va fi pus în starea de ascultare în care
așteaptă ca un client să trimită o cerere de conectare și se va preciza numărul maxim de
cereri de conexiune ce se pot afla la coadă. În acest moment socketul pornește o operație
asincronă de acceptare a cererilor de conectare ce vor fi redirecționate către metoda
“AcceptCallback”.
20
Secvență de cod 4.1 Inițializare server
21
În acest moment se poate considera că serverul cunoaște intențiile clientului.
Singurele nevoi pe care le pot avea clienții sunt de a utiliza baza de date centrală și pot fi
cereri de interogare, modificare sau adăugare de conținut. Cererile clienților li se va
răspunde folosind [Link] pentru a accesa și manipula baza de date. Namespace-ul
inclus în proiect pentru a utiliza această tehnologie este “[Link]” și includ
o serie de clase și metode predefinite ce ajută la manipularea bazei de date. Query-urile de
tipul insert sau update se vor trata rapid: se creează o nouă comandă utilizând clasa
“SqlCommand” specificând asupra cărei conexiuni cu o bază de date se aplică si query-ul
dorit. Deoarece modificările au loc direct asupra bazei de date, serverul nu va primi înapoi
un răspuns de la aceasta.
22
4.3 Aplicația Windows de tip client din incinta localului
23
În cadrul limbajului de programare C# task-urile pot fi utilizate folosind
namespace-ul “[Link]” ce conține clasa predefinită Task si toate
metodele necesare utilizării ei. Task-urile sunt utilizate în general pentru a executa o
singură operație în urma căreia nu se returnează nicio valoare și se execută în mod
asincron. În cazul aplicației de față, task-ul va rula metoda checkTables ce este
responsabilă cu obținerea status-urilor meselor, status ce va fi reținut în baza de date
deoarece acesta va fi accesat și de celelalte două aplicații Android. A fost necesară
utilizarea unui task datorită proprietății acestuia de a rula asincron. Rularea asincronă a fost
necesară în această situație pentru a nu bloca aplicație din momentul în care se va face
cererea către server și până când aplicația va primi un răspuns.
24
După separarea status-urilor meselor începe verificarea pe rând a acestora. Fiecare
element al listei cu status-uri va fi comparat cu unul dintre cele cinci posibile. Fiecare
dintre acestea va modifica interfața grafică și le va oferi ospătarilor informații despre ce se
întâmplă la mese. Prezența status-ului “rezervat” nu va avea doar rolul de a modifica
interfața grafică, ci se va ocupa și de tratarea rezervărilor. Fiecare masă are asociat câte un
timer, iar în momentul în care se observă că în baza de date există un status de tipul
“rezervat” se va verifica dacă timer-ul rulează, fiind pornit în cazul în care acesta era
oprit. Imediat după verificarea statusului fiecărei mese, se verifică durata de timp
înregistrată de timer-ul asociat fiecărei mese, pentru a putea determina dacă au trecut cele
15 minute, echivalentul a 900000 milisecunde contorizate de timer, în care este valabilă o
rezervare. Timer-ul va fi oprit și resetat în cazul în care cele 15 minute au trecut sau
status-ul mesei a fast modificat luând valoarea “ocupat”, indicând faptul că masa a fost
ocupată de cei ce au făcut rezervarea. În cazul în care timer-ul se oprește din cauza
depășirii perioade de 15 minute, aplicația se va conecta la server și va modifica status-ul
mesei respective marcând faptul că aceasta a devenit “liberă” și nu mai este „rezervată”.
Fiecare buton, ce reprezintă câte o masă, poate fi apăsat în cazul în care status-ul
mesei căreia îi corespunde este “comandă” sau ”plată”, fiecare fiind corespunzător
semnalat.
25
ajutorul unui obiect de tipul CheckedListBox. Acum, ospătarul poate bifa produsele pe
care le va duce sau tocmai au fost duse la masă, iar după apăsarea butonului “Ok!” listele
vor fi modificate adecvat. Produsele bifate vor fi adăugate în lista cu produse duse și șterse
din lista cu produse ce trebuie duse. În cazul în care lista cu produse ce trebuie duse este
goală, aplicația se va conecta la server și va marca masa ca fiind ocupată, modificând
adecvat interfața ferestrei principale.
În cazul apăsării butonului atunci când clienții anunță ca vor să achite nota pentru a
pleca se va afișa un mesaj ce anunță ospătarul că bonul se va printa, iar aplicația se va
conecta la server si va marca masa ca fiind liberă. În același timp, lista cu produsele ce au
fost duse la masă se va goli pentru a putea deservi următoarei comenzi.
Aplicația Android pentru tabletă este cea care le permite clienților să realizeze
comenzi, să vadă suma pe care trebuie să o plătească, dar și să anunțe ospătarul că doresc
să achite nota de plată pentru a pleca. Aceasta este alcătuită din cinci activități, iar structura
ei poate fi văzută în figura Fig. 4.5. Pentru a putea funcționa, aplicația necesită o conexiune
la Internet.
26
Fig. 4.5 Diagramă de clase aplicație Android pentru tabletă
Fiecare activitate a unei aplicații poate avea un layout unic. Layout-ul definește structura
vizuală a interfeței cu utilizatorul. Elementele componente interfeței grafice a unei
activități se declară in fișierul XML asociat acesteia. Un avantaj al declarării interfeței
grafice într-un fișier XML este separarea modului în care interfața arată de codul ce
controlează comportamentul acesteia. De exemplu se pot realiza layout-uri diferite pentru
limbi diferite în care o aplicație poate fi folosită, layout-ul schimbându-se în momentul în
care utilizatorul selectează o limba diferită. Fiecare astfel de fișier XML trebuie să aibă un
singur element rădăcină, acesta conținând la rândul lui toate celelalte elemente ce
alcătuiesc interfața grafică. Fișierul XML asociat unei activități trebuie încărcat în cadrul
metodei onCreate ce se apelează atunci când o activitate este creată. Acesta se încarcă
precum în exemplul următor: setContentView([Link].activity_menu) unde ”R”
reprezintă folder-ul de resurse al aplicației, ”layout” este folder-ul în care sunt salvate
fișierele XML utilizate pentru interfața grafică și ”activity_menu” este numele fișierului
XML ce trebuie încărcat.
Orice aplicație Android are o activitate principală ce este afișată prima oară atunci
când este deschisă, cu condiția ca aceasta să nu ruleze deja în background. Activitatea
27
principală a acestei aplicații este “MainActivity” și din cadrul acesteia utilizatorul va fi
redirecționat către celelalte activități din cadrul aplicației.
28
Activitatea “RezervationActivity” este cea care se ocupă de rezervările efectuate de
utilizatorii aplicației pentru smartphone. În interfața grafică a acestei activități se află un
container de text, TextView, ce îl înștiințează pe client că trebuie să introducă codul
rezervării, un câmp de tip input, EditText, și un buton ce trebuie apăsat pentru a verifica
codul introdus. În momentul în care butonul este apăsat se realizează o conexiune la server
și se extrage codul rezervării asociat mesei. Textul introdus în cadrul câmpului EditText
este copiat într-un string și se compară cu codul extras din baza de date. În cazul în care
cele doua coduri sunt identice se va crea o conexiune la baza de date pentru a specifica
faptul că masa este acum ocupată și un Intent ce va porni activitatea ”MainActivity” pentru
a le permite clienților să comande, iar în caz contrat se va crea și afișa un Toast ce conține
un mesaj corespunzător.
Un toast este un container de text ce permite afișarea unei mesaj sub formă de
popup. Acesta ocupă, în general, puțin loc pe ecran, suficient cât să cuprindă tot mesajul
dorit și dispare după o scurtă perioadă de timp. Pentru afișarea unui mesaj sub această
formă este necesară crearea unui thread de tip Looper, responsabil de menținerea pe ecran
a mesajului.
Din cadrul activității principale, utilizatorul poate naviga manual într-una din
celelalte trei activități, în funcție de preferințe, prin apăsarea unuia dintre cele trei butoane.
La apăsarea unui buton se va crea un Intent ce-l va redirecționa pe utilizator în activitatea
corespunzătoare.
29
conține bonul curent al mesei din tabela “Mese” după care se plasează comanda. În cazul
în care există un bon deschis se va trece direct la plasarea comenzii. Pentru a plasa
comanda se va crea un obiect de tipul Produs, corespunzător fiecărui produs, în care se va
vor salva ID-ul produsului, dacă s-a introdus text în câmpul EditText și ce text. Apoi
fiecare obiect de tip Produs va fi verificat pentru a vedea dacă câmpul EditText asociat era
gol sau nu, iar în cazul în care acesta nu este gol, obiectul va fi introdus într-o listă de astfel
de obiecte. La final lista va fi accesată, se vor extrage ID-urile produselor și cantitatea
dorită, se va realiza o conexiune la server și se va face un query multiplu de tip Insert ce va
introduce în tabela ”Comenzi” pentru fiecare produs ID-ul lui, numărul de astfel de
produse comandate, numărul bonului pe care va fi adăugat produsul și masa la care a fost
comandat.
30
Fiecărui TextView, EditText si Button îi asociat câte un ID, la creare, pentru a
putea realiza identificare lor și a ști cu exactitate care dintre acestea este folosit la un
moment dat. Butoanele sunt caracterizate și de o atributul onClick în care se specifică ce
metodă va fi executată in momentul apăsării lui.
31
Activitatea principală a aplicației este “MainActivity” și conține lista de localuri
disponibile. Lista este salvată într-un container de tip ScrollView ce conține un tabel. Pe
fiecare rând al tabelului se află numele unui local și doua butoane, unul pentru vedea
meniul și unul pentru a vedea harta localului și disponibilitățile meselor. Tranziția de la
activitatea principală la celelalte activități se face prin intermediul Intent-urilor.
Activitatea “RezervaPavone” este cea în care utilizatorii vor putea vedea în timp
real disponibilitatea meselor din localul Pavone. Când activitatea este creată, la apelarea
metodei onCreate, fiecărui buton i se va asocia un obiect de tip Button pentru a putea fi
identificat cu ajutorul ID-urilor atribuite și va fi creat un handler. Handler-ul este folosit
pentru a rula repetat, la un interval de timp prestabilit, anumite comenzi. Fiecare buton din
această activitate corespunde unei mese din local.
În cadrul metodei onStart, ce este rulată de fiecare dată când activitatea este
deschisă, o variabilă de tip boolean va primi valoarea de adevăr true. Handler-ul creat
anterior va fi pornit și va rula metoda checkTables din cinci în cinci secunde cât timp
variabila de tip boolean are valoarea de adevăr true.
Metoda checkTables este cea în care aplicația se conectează la baza de date pentru
a prelua status-ul meselor din localul respectiv. Răspunsul primit este sub forma unui string
de cuvinte formate din status-urile meselor și despărțite între ele prin caracterul special
”\n”. După ce acestea sunt separate și adăugate într-o listă ce conține string-uri, fiecare
element al acesteia va fi verificat dacă coincide cu “liber” pentru a modifica corespunzător
aspectul fiecărui buton asociat meselor.
32
va cronometra cele 15 minute. De asemenea, utilizatorul va primi o notificare pe telefon cu
codul generat ce va trebui introdus în tableta de la masă pentru a putea comanda.
33
5. Utilizarea aplicațiilor
Fiecare aplicație este destinată unui tip diferit de utilizator ce poate efectua diferite
acțiuni.
Citească meniurile
Comande produse
Vadă produsele comandate și valoarea lor
34
Fig. 5.1 Diagrama cazurilor de utilizare
35
Fig. 5.2 Fereastra principală a aplicației Windows
În momentul în care ospătarul apasă pe o masă ce are o comandă nouă sau la care
mai sunt produse din comanda anterioară ce trebuie duse, se va deschide o nouă fereastră .
În fereastra nou deschisă va fi afișată lista cu produse ce trebuie duse. Ospătarul va putea
să bifeze produsele pe care urmează să le ducă imediat sau pe care tocmai le-a dus. După
ce produsele au fost selectate, se va apăsa butonul “Ok!” pentru a salva modificările făcute
și pentru a închide fereastra. Dacă lista se va goli, culoarea mesei va deveni roșie și această
fereastră nu va mai putea fi deschisă până când nu se va mai face o nouă comandă, iar în
caz contrar butonul va rămâne albstru.
36
5.2 Utilizarea aplicației Android pentru tabletă
38
Fig. 5.8 Meniu vizualizare notă de plată
Odată confirmată cererea notei de plată, clientul este informat că ospătarul va veni
imediat pentru a lua banii.
Utilizatorii acestei aplicații vor putea vizualiza meniurile și să vadă în timp real
disponibilitățile meselor localurilor.
39
Fig. 5.10 Meniu principal aplicație Android pentru telefon
Apăsând pe butonul Meniu din dreptul unui local aceștia vor fi redirecționați către
o activitate în care poate fi consultat meniul de mâncăruri.
Apăsând butonul Bautura din cadrul acestei activități utilizatorii vor putea vedea
meniul de băuturi și se vor putea întoarce în fereastra anterioară apăsând butonul Mancare.
40
Fig. 5.12 Meniu băutură aplicație Android pentru telefon
Disponibilitățile meselor dintr-un local vor putea fi văzute apăsând butonul Rezerva
din dreptul localului respectiv. Odată ajunși în noua fereastră utilizatorii vor vedea harta
localului și mesele acestora. Fiecărei mese îi este asociat un buton ce poate avea două
culori: verde – simbolizează că masa este liberă și roșu – simbolizează că masa este
ocupată. În cazul în care este apăsat un buton verde se va deschide o fereastră de dialog
ce-i va comunica utilizatorului că este pe cale să rezerve o masă și i se va cere o
confirmare.
41
Fig. 5.14 Confirmare rezervare masă
În cazul în care masa a fost rezervată înainte ca utilizatorul să-și confirme intenția
se va afișa un mesaj corespunzător.
42
Fig. 5.16 Eroare rezervare masă deja ocupată
43
5.4 Scenariu de utilizare
În același timp, un alt grup de persoane, printre care nu se află niciun utilizator al
aplicației, ajunge în restaurantul în care utilizatorul menționat a rezervat masa. Aceștia văd
ca este o singură masă disponibilă și se așază la aceasta, dar constată că pentru a comanda
folosind tableta disponibilă la masă este nevoie de un cod asociat unei rezervări pe care
aceștia nu îl au și se văd nevoiți să se ridice de la masă și să se îndrepte către alt local.
Dorind să plece, grupul consultă nota de plată utilizând tableta și-l înștiințează pe
ospătar că doresc să dorește să plece. Ospătarul va fi notificat pe calculator de intenția
clienților, printează bonul și merge la masă pentru a lua banii.
44
6. Concluzii
În timpul dezvoltării aplicațiilor client, dar m-ai ales pentru cele Android, am fost
nevoit să gândesc aplicațiile din punctul de vedere al unui utilizator. Acestea trebuiau să
asigure toate utilitățile pe care mi le-am propus, dar și să arate într-un mod cât mai plăcut.
De asemenea, o altă problemă pe care a trebuit să o am în vedere a fost timpul necesar unei
aplicații pentru a modifica interfața grafică în funcție de informațiile din baza de date,
Inițial, timpul acesta era mare rezultând astfel durate de așteptare destul de lungi, dar după
multiple optimizări am obținut un timp de așteptare acceptabil.
Deși aplicația realizează toate funcțiile pe care mi-am dorit să le implementez, mai
pot fi aduse anumite îmbunătățiri precum:
45
7. Bibliografie
46