Tudorică Paul Ștefan Aplicație Android Sistem de afișare a orarului [625534]

UNIVERSITATEA “LUCIAN BLAGA” D IN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ

PROIECT DE DIPLOMĂ

Îndrumător: Șef lucr. dr. mat. Crețulescu Radu

Absolvent: [anonimizat], 2017 –

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
2

UNIVERSITATEA “LUCIAN BLAGA” D IN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ

Aplicație Android – Sistem de
afișare a orarului

Îndrumător: Șef lucr. dr. mat. Crețulescu Radu

Absolvent: [anonimizat], 2017 –

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
3
Cupr ins

1. Prezentarea temei ………………………….. ………………………….. ………………………….. ………………………… 5
1.1. Contextul proiectului ………………………….. ………………………….. ………………………….. ……………….. 5
1.2. Ideea și scopul proiectului ………………………….. ………………………….. ………………………….. …………. 5
1.3. Structura proiectului ………………………….. ………………………….. ………………………….. …………………. 5
1.4. Structura lucrării ………………………….. ………………………….. ………………………….. ……………………… 6
2. Considerații Teoretice ………………………….. ………………………….. ………………………….. ………………….. 7
2.1 Sistemul de Operare Android ………………………….. ………………………….. ………………………….. ………….. 7
2.2 Android ………………………….. ………………………….. ………………………….. ………………………….. …………… 9
2.3 Limbajul de programare Java ………………………….. ………………………….. ………………………….. ………… 11
2.4 Limbajul de programare C# ………………………….. ………………………….. ………………………….. …………… 13
2.5 HTML – Hyper Text Markup Language ………………………….. ………………………….. ………………………… 14
2.6 MSSQL ………………………….. ………………………….. ………………………….. ………………………….. …………. 15
2.7 Task Scheduler ………………………….. ………………………….. ………………………….. ………………………….. . 17
2.8 Medii de dezvoltare folosite ………………………….. ………………………….. ………………………….. …………. 18
2.8.1 Android Studio ………………………….. ………………………….. ………………………….. …………………………. 19
2.8.2 Visual Studio ………………………….. ………………………….. ………………………….. ………………………….. … 19
2.8.3 SQL Server ………………………….. ………………………….. ………………………….. ………………………….. …… 20
3. Arhitectura aplicației ………………………….. ………………………….. ………………………….. ………………….. 22
3.1 Structura generală ………………………….. ………………………….. ………………………….. ………………………. 22
3.2 Ap licația Android ………………………….. ………………………….. ………………………….. …………………………. 23
3.2.1 SignUpActivity ………………………….. ………………………….. ………………………….. ………………………….. 23
3.2.2 SignInActivity ………………………….. ………………………….. ………………………….. ………………………….. .. 24
3.2.3 UserActivity ………………………….. ………………………….. ………………………….. ………………………….. …. 25
3.2.3 GuestActivity ………………………….. ………………………….. ………………………….. ………………………….. .. 27
3.2.4 Use -case -uri ………………………….. ………………………….. ………………………….. ………………………….. … 28
3.3 Servic iul C# ………………………….. ………………………….. ………………………….. ………………………….. …….. 29
3.4 Baza de date MSSQL ………………………….. ………………………….. ………………………….. ……………………. 31
4. Implementarea aplicației ………………………….. ………………………….. ………………………….. ……………. 34
4.1 Denumire și Logo -ul Aplicației ………………………….. ………………………….. ………………………….. ………. 34
4.2 Serviciul C# ………………………….. ………………………….. ………………………….. ………………………….. …….. 35
4.2.1 Modulul Profesori ………………………….. ………………………….. ………………………….. …………………….. 35

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
4
4.2.2 Modulul Săli ………………………….. ………………………….. ………………………….. ………………………….. … 38
4.2.3 Modulul Specializări ………………………….. ………………………….. ………………………….. ………………….. 39
4.3 Aplicația Android ………………………….. ………………………….. ………………………….. …………………………. 39
4.3.1 Home Activity ………………………….. ………………………….. ………………………….. ………………………….. . 40
4.3.2 Ac tivitatea Înregistrare ………………………….. ………………………….. ………………………….. ……………… 42
4.3.3 Activitatea Autentificare ………………………….. ………………………….. ………………………….. ……………. 44
4.3.4 User Activity ………………………….. ………………………….. ………………………….. ………………………….. … 45
4.3.5 Guest Activity ………………………….. ………………………….. ………………………….. ………………………….. . 49
4.3.6 Afișarea Orarului ………………………….. ………………………….. ………………………….. ………………………. 50
4.3.7 Conexiunea la baza de date ………………………….. ………………………….. ………………………….. ……….. 53
4.4 Configurarea și Implementarea Bazei de date ………………………….. ………………………….. ……………… 55
5.Concluzii și dezvoltări ulterioare ………………………….. ………………………….. ………………………….. ………. 58
6.Webliografie si Bibliografie ………………………….. ………………………….. ………………………….. ……………… 60

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
5
1. Prezentarea temei

1.1. Contextul proiectului

În lumea î n care trăim comunicarea este d in ce în ce mai importantă î n viața de zi cu zi,
iar nevoia de a ră mâne conectați cu ceilalți oameni se manifestă în orice moment. Tehnologia d in
zilele noastre ne ajută sa fim interconectați, iar dispozitivele mobile reprez intă probabil cel mai
important „a ctor” al acestei tehnologii.

Putem spune ca suntem „dependenți” de aceste telefoane inteligente ( smartphones )
datorită faptului c ă înglobează nevoile noastre uzuale, ca de exemplu agenda telefonică, rețele de
socializare, jocuri, dieta, întâlniri de afac eri, alarme ș i multe altele.

1.2. Ideea ș i scopul proiectului

După cum am am intit mai sus, su ntem în punctul în care suntem înconjurați de
tehnologie . Peste tot, dacă ne uităm atent, toată lumea este ocupată cu telefoanele mobile ș i
„butonează ” ceva. Acești indivizi sunt em noi, care rămâ nem conectați î n orice moment al zilei
pentru că ne dorim acest lucru. Tehnologia are scopul să ne uș ureze munca, de a rezolva mai
repede probleme d in diverse domenii , de a comunica mai ușor dar ș i de a ne informa rapid printr-
o simplă accesare a unei aplicații sau o comandă vocală.

Datorită faptului că sunt student î n acest domeniu m -a învățat sa gândesc î n așa fel încât
să concep ceva util care să ajute alte persoane. Încă din primul an de studiu, eu și colegii mei ne
gândeam că ar fii utilă o aplic ație pe telefonul mobil, care să afiș eze orar ul facultății datorită
faptului că ar fi mai comod în așa fel decât să accesă m câteva link-uri ca să putem face acest
lucru. Prin interme diul acestei aplic ații, studenț ii vor putea afla mult mai ușor când trebuie să fie
prezenț i la cursuri.

1.3. Structura proiectului

Obiectivele stabilite dezvoltă rii proiectului au fost:

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
6

– Dezvoltarea unei ap licații care sa afiș eze orarul Facultății de Inginerie
– Dezvoltarea parții de client unde utilizatorul își poate vedea propriul orar, să caute
orarul unei alte semigrupe, a unui profesor sau a unei s ăli
– Dezvoltarea unei baze de date
– Dezvoltarea unui serviciu care să populeze baza de date
– Comunicarea datelor d intre aplicație ș i baza de date
– Interfață ușor de înț eles de că tre utilizator
– Crearea unui Task Scheduler pentru a se actualiza baza de date

1.4. Structura lucrării

Structura lucrării constă în două părț i mari , și anume: o parte teoretică, care conț ine
informații în legă tură cu tehnologiile f olosite pentru a realiza aplicația și a doua parte care
explica în detaliu aplicaț ia pro priu-zisă.

În prima parte a lucră rii sunt prezentate limbajele de programare folo site pentru a
implementa aplicaț ia, mediile de dezvoltare folosite precum și sistemul de gestiune a bazei de
date MSSQL.

În a doua parte a lucrării este prezentată aplicația propriu -zisă care este compusă d in doua
aplicaț ii complementare: Serviciul C# – cu care se populează baza de date și se actualizează la o
perioadă de timp stabilită ș i Aplicaț ia Android – unde utilizatorul poate vizualiza orarul Facultății
de Inginerie.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
7
2. Considerații Teoretice

2.1 Sistemul de Operare Android

Sistemul de operare Android este un sistem de operare dezvoltat de compania Google,
bazat pe kernel -ul Linux și conceput în special pentru dispozitive mobile, cum ar fi telefoanele
inteligente(smartphones), tablete și mai nou ș i pentru televizoare inteligente (Smart TV).
Interfaț a utilizatorului Andro id se axează în special pe ge sturi tactile care corespund acț iunilor
din lumea reală. După cum am spus, Google a dezvoltat în continuare Android TV pentru
televizoare, Android Auto pentru mași ni respectiv Android Wear pentru ceasuri le
inteligente(SmartWatc h). De ase menea Android mai este prezent ș i pe notebook -uri, conso le de
jocuri, camere digitale ș i alte produse [1].

Android a fost creat de către Andy Rub in, Rich M iner, Nick Sears ș i Chris White în anul
2003, iar în 2005 a fost cumpărat de că tre gigantul Google. În anul 2007 Google a decis ca toată
lumea să aibă acces l a codul sursă gratuit, deven ind open source. Din acest motiv marea
majoritate a companiilor de telefonie mobila folosesc acest sistem de operare pe dispozitivele lor.

Datorită faptului că Android rulează pe majoritatea dispozitivelor d in lume, dezvoltato rii
de aplicații preferă să dezvolte aplicaț ii pe acest sistem de operare datorită faptului că aplicaț iile
lor vor putea rula pe oricare d intre acestea.

Principalu l competito r pe piaț a dispozitivelor mob ile al Android SO este iOS -ul dezvoltat
de Apple.

Datorită faptului că dispozitivele Android sunt alimentate la b aterie, Android este
conceput să gestioneze procesele pentru a menți ne consumul de energie la un nivel m inim.

Arhitectura sistemului de operare Android [2]:

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
8

Figura 2.1: Arhitectura Sistemului de Operare Android

 Kernel -ul Linux
La baza platformei Android stă kernel -ul Linux. Aici putem da exemplu ART ( Android
RunTime) care se bazează pe kernel -ul L inux pentru funcționalităț i adiacente, cum ar fi
thread ing sau management -ul memoriei la un n ivel scă zut.
 HAL (Hardware Abstration Layer)
HAL este alcătuit d in mai multe biblioteci, fiecare executând anumite funcționalități
pentru o anumită componentă hardware, cum a r fi modulul camerei foto sau modulului
Bluetooth .
 Android RunTime

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
9
Pentru dispozitivele care au instalate versiunea 5.0 sau mai superioara a Android -ului,
fiecare aplicație ruleaz ă în propriul proces și propria instanță a Android RunTime.
 Biblioteci native C / C++
Anumite componente sau servicii ale sistemului de operare Android sunt dezvoltate pe
baza codului care necesită biblioteci native scrise în C/C++. De exemplu, putem accesa OpenGL
ES pr in intermediul API -ul Java OpenGL pentru a adăuga suport pentru a forma obiecte grafice
2D/3D în interiorul aplicaț iei.
 Java API Framework
Întreg setul de caracteristici ale sistemului de operare Android este disponibil pr in
intermediul API-urile scrise în limbajul Java. Ac este API -uri construiesc blocurile de care avem
nevoie în aplicaț iile Android, ca de exemplu sistemele de vizualizare, managerii de resurse,
notifică ri sau de activitate.
 Sistemul de Aplicații
Sistemul de operare Android v ine cu un set de aplicaț ii de baza gata instalate, utilizate
pentru e -mail, calendar, browser, agendă telefonica etc.

2.2 Android

Prin dezvoltarea de aplicații Android se ext inde funcționalitatea dispozitivelor mobile .
Acestea sunt dezvoltate folos ind Android Software Development Kit (Android SDK). Pentru
dezvoltarea aplicațiilor se folosește ca limbaj de programare pr incipal Java deoarece are acces
total la API -urile Android dar, Java poate fi comb inat cu C/C++.

Exista 5 componente pr incipale ce pot fi fo losite pent ru a dezvolta aplicaț ii pe Android.

 Activitate
O activitate reprez intă o interfața cu utilizatorul. O aplicație poate avea una sau mai multe
activități. De exemplu o aplicație de tip E -mail, poate avea o activitate pentru Inbox, alta pentru
scrierea de e-mail-uri și alta pentru e -mail-uri șterse sau pentru spam. Fiecare activita te are
propriul ciclu de viață ș i care este independent de ciclul de viața asociat aplicaț iei.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
10
 Serviciu
Un serviciu este un proces ce rule ază în fundal, fără a avea contact cu utilizatorul. De
exemplu un serviciu poate sa descarce anumite date de pe web sau sa ruleze o melodie pana ce
utilizatorul iese d in aplicaț ie.

 Furnizorul de conț inut (Content Provider )
Este un API folosit pentru a adm inistra datele aplicaț iei. Este folosi t pentru a partaja sau
controla transferul de date între aplicații, dacă are permisiune a necesară .

 Broadcast Reciever
Componenta care ră spunde la anumite semnale la nivel de sistem, ca de exemplu baterie
scăzută , stingerea ecranului sau un a pel nepreluat. Acesta nu foloseș te o interfaț a dar poate crea
anumite notifică ri pentru utilizator pr in care îl anunță că a avut loc un eveniment.

 Intent
Reprez intă o operație care urmează a fi executată sau un mesaj transmis de c ătre o
componentă către alta pentru a anunța o operație. Este asemănă toare cu conceptul de event –
handler disponibil în Java sau .NET. Poate fi gestionată de o instanț a a clasei Intent.

Figura 2. 2: Lansarea unui Intent

În Figura 2.2 este reprezentată lansarea unui Intent. Ca prim pas se creează un obiect de
tipul Intent ca re are ca atribute doua activități, activitatea curentă și activitatea care se dorește a fi
activată. Al doilea pas e sa apelă m metoda startActivity care primeș te ca parametru intent-ul.

Android foloseș te limbajul XML( Extensible Markup Language). XML este un limbaj
care definește un set de reguli pentru codificarea documentelor într-un format care poate fi citit
atât de om cât ș i de calculator. Este un format foarte popular pe web dat orită simplităț ii. În
Android acesta este folosit pentru a declara elemente de interfață grafică . Fiecare controller

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
11
grafic poate fi declarat implicit în XML și pe urmă sa fie adă ugat în cod pentru a le schimba
starea.
În continuare este prezentat un cod XML care reprezintă o activitate în Android [4].

Figura 2. 3: Cod XML

În Figura 2.3 avem reprezentat un layout XML în care folosim un Linear Layout care
conți ne un TextView și un Button . LinearLayout este un control care poate conți ne controllere
de tip copil ca re pot fi orientate pe verticală sau orizontală , în cazul dat este verticală . Sunt
prezente do ua controllere copil, TextView ș i Button. Fiecare control a re un id propriu care se
declară astfel android:id = „@+id/numeID” unde numeID este id -ul ales pentru controller. În
exemplu l dat, TextView -ul are id -ul „text” iar Button=ul are id -ul „button”. Un alt atribut care se
poate observa este mesajul afiș at de controllere cu ajutorul atributului android:text .

2.3 Limbajul de programare Java

Limbajul de programare Java a fost dezvolta t inițial de către Sun MicroSystems ș i inițiat
de James Gosl îng fiind lansat în 1995 ca o componentă principală a platformei Java Sun
Microsystems (Java 1.0[J2SE]). [5]

Cea mai noua versiune Java Standard Edition este Java SE 8.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
12
Deven ind tot mai popular, au fos t con struite mai multe configuraț ii pentru a se potrivi
diferitelor tipuri de platforme, ș i aici am intim J2EE pentru aplicațiile Enterprise și J2ME pentru
aplicaț iile mobile.

Java este un limbaj de programare orientat pe obiect e. În Java, t otul este un obiect și
poate fi uș or ext ins deoarece se bazează pe modelul obiect. Java are platformă independentă , spre
deosebire de alte limbaje de programare precum C sau C++, Java atunci câ nd este compilat
acesta nu este compilat pe o platf ormă specifi că unei mași ni și mai degrabă pe platforma
independentă Byte code. Acest By te code este distribuit pe web ș i este interpretat de Java Virtual
Mach ine(JVM) pe orice platformă pe care se rulează .

Java este un limbaj de programare uș or de învățat datorită sintaxei care se aseamănă
foarte mult cu C, C++ sau C#.

Fiind un limbaj orientat pe obiecte, acesta sprij ină conceptele de încapsulare,
abstractizare, moș tenire sau polimorfism. Are modificatori de acces, care descriu drepturile de
utilizare a clasei într-un program Java. Aceștia sunt opționali, avâ nd o valoare default(private). În
Java o clasă poate moșteni o clasă dar poate implementa oricâ te interfeț e. În Java m etodele sunt
default „virtual” ș i pot fi suprascrise(override) în clasele derivate lor.

Un alt atribut al limbajulu i Java este securitatea, permițând dezvoltarea de sisteme fără
viruș i. Tehnicile de autentificare sunt bazate pe criptarea cheilor publice. Este MultiThreaded, se
pot scrie programe care se pot executa simultan.[18]

Java este con siderat a fi mai dinamic decât C sau C++ pentru că este proiectat să se
adapteze la un mediu în evoluț ie.

Figura 2. 4: Structura unui program JAVA

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
13
În Figura 2.4 este descris un program în limbajul Java. Acesta va afișa în consolă
mesajul „Hello World”. După cum se poate vedea, acesta conține o clasă publică numită
HelloWorld în care avem metoda main care va afișa mesajul.

2.4 Limbajul de programare C#

În timpul dezvoltării Framework -ului .NET, bibliotecile de clasă au fost inițial scrise
folosind un sistem de coduri de administrare numit Simple Managed C. În anul 1999, Anders
Hejlsberg a început împreună cu echipa sa să creeze un nou limbaj de programare, numit in acel
moment COOL. Microsoft a vrut inițial sa păstreze acest nume dar a ales, din motive comerciale
sa nu facă acest lucru. În iulie 2000, proiectul .NET a fost anunțat public iar limbajul a fost
redenumit in C#. [6]

Numele „C#” a fost inspirat de nota ția muzicală in care un diez(#) indică faptul ca nota
scrisă ar trebui mărită cu jumătate de măsură. Acest lucru se aseamănă cu C++ unde „++” indică
faptul ca o variabilă ar trebui incrementată cu unu. Simbolul # seamănă cu patru simboluri +, si
se poate s pune ca este o îmbunătățire a C++.

Limbajul de programare C# este un limbaj de programare, declarativ, funcțional, generic,
orientat pe obiecte(bazat pe clase) și orientat pe componente. Cea mai recenta versiune de C#
este 7.0 si a fost lansată in anul 20 17 totodată cu Visual Studio 2017.

Spre deosebire de C, C++ și Java, limbajul C# are anumite facilități care ușurează
dezvoltarea de aplicații, cum ar fii scrierea codului. În C# putem declara o variabilă de tipul var
care să ia orice tip de date. Putem declara implicit un array cu keyword -ul new[ ] . Blocurile if și
while necesită o expresie de tip bool iar în C# se poate pune doar variabila in condiție, verificându –
se automat daca aceasta returnează adevărat sau fals, fără a mai pune condiția de egalita te(ex.
if(a)). La fel ca în C++, în C# putem folosi cuvântul cheie virtual pentru a putea suprascrie metodele
clasei de bază într -o clasă derivată. O altă facilitate oferită de C# sunt proprietățile prin care putem
apela sau seta o variabila din clasă.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
14
Ca tipuri de date, putem avea tipuri referință si tipuri valoare. Tipurile valoare nu au o identitate
referențială și sunt derivate din System.ValueType . Ele au întotdeauna o valoare implicită. Ca
exemple de tipuri valoare putem enumera tipurile primitive, cum ar fi int, char sau System.DateTime.
Alte exemple sunt enum(enumerările) si struct(structurile). În contrast, tipurile referință au noțiunea
de identitate referențială. Fiecare instanța a unui tip referință este distinctă fața de orice altă instanță.
Ca exemple de tipuri referință putem enumera obiectele, System.String(orice șir de caractere) sau
System.Array(clasa de bază pentru orice vector sau matrice). [17]

Figura 2. 5: Structura unui program C#

În Figura 2.5 este descris un program în limbajul C#. Acesta va afișa în consolă mesajul
„Hello World”. Prin linia „using System;” se introduce biblioteca System in cadrul proiectului,
prin linia „namespace HelloWorldApplication” specificăm ca programul face parte din acea
colecție de clase. Programul con ține o clasă numită HelloWorld în care avem metoda main care
va afișa mesajul folosindu -ne de metoda Console.WriteLine(). Metoda Console.ReadKey() este
folosită pentru a ține fereastra deschisă până la apăsarea unei taste.

2.5 HTML – Hyper Text Markup Language

HTML -ul este limbajul standard pentru crearea de pagini web și aplicații web. Împreuna
cu CSS si JavaScript formează un triplet de tehnologii de bază pentru WorldWideWeb. Prima
versiune de HTML a apărut in anul 1991, iar cea mai recenta este HTML 5.1 apărută în 2016.

În următoarea imagine este prezentată structura unei pagini scrisă in HTML. [8]

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
15

Figura 2. 6: Structura unei pagini HTML

Linia <!DOCTYPE html> definește documentul ca fiind o pagina HTML5. Tag -ul <html
> este elementul rădăcină a paginii HTML, tag -ul <head> conține informații despre document,
tag-ul <title> va conține titlul documentului, elementul <body> conține conținutul care va fii
afișat in interiorul browser -ului web, <h1> definește un text cu fond mare iar tag -ul <p>
inițializează un paragraf. [7]

Tag-urile HTML sunt elementele care conțin numele între paranteze unghiulare. Deobicei
tag-urile sunt formate dintr -o pereche ca de exemplu <p>TEXT</p>, un de <p> indică începerea
unui paragraf iar </p> închiderea acestuia.

Browser -ele web (Google Chrome, IE, Firefox) au scopul de a citi un document html și sa
îl afișeze. Browser -ul nu va afișa tag -urile HTML, dar se folosește de ele ca să poată afișa
docume ntul. Documentul descris în Figura 2.6 , va afișa în interiorul browser -ului mesajul
„Hello World”.

2.6 MSSQL

MSSQL este un sistem de gestionare al bazelor de date relaționale (SGBDR) dezvoltat de
Microsoft. MSSQL este cel mai popular tip de baza de date folosit pe server -ele Windows.
Produsul este construit pentru a stoca și prelucra orice fel de date ne dorim. [9]

MSSQL este o bază de date folosită pentru aplicațiile web pe o platformă Windows
folosind .NET sau ASP.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
16
O bază de date relațională conține unul sau mai multe tabele, unde fiecare tabel are 0 sau
mai multe înregistrări de date. Datele de pe fiecare rând sunt organizare în unități discrete de
informații, cunoscute sub numele de fields sau coloane.

Multe tabele din baza de date au relații de asociativitate între ele, ca de exemplu una -la-
una sau una -la-mai multe. Conexiunea dintre tabele se face prin intermediul perechii Cheie
Primara – Cheie Străină unde field -urile cheii străine sunt trimise de către cheia primară a altui
tabel.

Prelucrarea datelor se face utilizând query -urile. Query -ul Select este cel care se folosește
în cazul în care ne dorim să obținem anumite informații din baza de date. Query -ul Select are o
formă simplă, dar poate avea multe opțiuni sau extensii care oferă flexibilit ate.
Cel mai comun Select are două componente, prima care conține coloanele pe care dorim
sa ni le returneze și a doua componentă care conține tabelul de unde dorim datele. [10]

Figura 2.7: Selecție din baza de date

În Figura 2.7 este descris un query, care returnează toate înregistrările din coloanele
Nume, Prenume, Facultate, Specializare din tabelul Studenți.
Dacă dorim să obținem toate înregistrările din tabela Studenți putem înlocui coloanele cu
„*”.
Dacă dorim sa obținem doar anumite înregi strări pe baza unei condiții, cum ar fii să
returnăm Studenții care sunt la specializarea ISM, putem rula comanda din Figura 2.8.

Figura 2.8: Selecție din baza de date cu condiție

Există multe alte extensii, ca de exemplu selectarea in ordine crescăt oare, selectarea unor
înregistrări care încep cu o anumită literă sau selectarea unor înregistrări care au valori între
anumite limite.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
17

Pentru a șterge o bază de date sau un tabel putem folosi una din comenzile din Figura
2.9, unde Universitate este o ba za de date, iar Studenți este o tabelă.

Figura 2.9 Ștergerea unei baze de date și a unui tabel

Pentru a introduce date noi in baza de date se poate folosi comanda Insert Into. Aceasta
poate fi folosită fie să introducă date pentru fiecare coloana sau d oar pentru anumite coloane.

În Figura 2.10 adăugam în tabela Stud enți următorul student, Tudorică Paul care este
student la Facultatea de Inginerie, Specializarea ISM.

Figura 2.10 Adăugarea unui student in baza de date

Pentru modificarea unor date existente in baza de date se poate folosi comanda Update.
Aceasta poate fi folosită fie pentru a actualiza toate coloanele, fie doar una singură.

În Figura 2.11 actualizăm coloana Specializare din tabelul Studenți cu valoarea
„Calculatoare”, unde numel e studentului este „Tudorică”.

Figura 2.11 Modificarea specializării unui student in baza de date

2.7 Task Scheduler

Task Scheduler este o componentă sistemului de operare Microsoft Windows care
permite sa se efectueze automat script -uri sau progr ame pe un calculator in anumite momente

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
18
predefinite. Task Scheduler realizează acest lucru prin gestionarea sarcinilor. Sarcina se referă la
acțiunea luată ca răspuns la declanșare. [11]

Task Scheduler poate fi utilizat pentru pornirea unei cereri, trimiterea unui e -mail, sau
afișarea unui mesaj. Sarcinile pot fi programate să fie executate la un anumit moment, la un
anumit interval de timp sau când este pornit sistemul. În cazul de față, creăm un task pentru a fi
rulat la un interval de o săptămână prin care să se ruleze Serviciul C# care actualizează baza de
date.

Figura 2.12 Crearea unui task in Windows Task Scheduler

2.8 Medii de dezvoltare folosite

Pentru dezvoltarea aplicației, am utilizat Microsoft Visual Studio pentru crearea
serviciului prin care face parsarea datelor de pe site -ul facultății și se introduc in baza de date. De
asemenea serviciul permite și actualizarea bazei de date. Prin intermediul mediului de dezvoltare
Android Studio, am realizat front -end-ul aplicației, p artea pe care utilizatorul o vede. Prin
Android Studio, am realizat preluarea datelor din baza de date dar și introducerea în cazul unui
cont de utilizator nou. Am utilizat Miscrosoft SQL Server pentru crearea bazei de date și a
tabelelor. Tot cu ajutorul SQL Server, am reușit sa vad in timp real ce date au fost introduse.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
19
2.8.1 Android Studio

Aplicația Android a fost dezvoltată in mediul de dezvoltare Android Studio care este
oferit gratuit de compania Google. Pentru realizarea aplicației am avut nevoie ș i de Andr oid
SDK(Software Developer Kit)[12].

Android Studio este un mediu de dezvoltare pentru platforma Android. Prima versiune a
fost lansată in luna mai 2013, și a înlocuit principalul mediu de dezvoltare precedent,
ADT(Eclipse Android Development Too ls).

Aceasta este bazat pe JetBrains’ IntelliJ IDEA Software și este disponibil pe sistemele de
operare Windows, Linux si MacOS.

Fiecare proiect dezvoltat în Android Studio conține unul sau mai multe coduri sursă și
fișiere de resurse. Ca tipuri de mod ule putem întâlnii module, module de aplicație Android,
biblioteci sau module Google app Engine. Toate fișierele de construcție(build) sunt vizibile la
nivelul cel mai de sus sub Script -urile Gradle si fiecare modul de aplicație conține folderele
manifest, java și res.

Android Studio are de asemenea parte de interfață cu utilizatorul(User Interface UI) unde
utilizatorul poate navigheze prin resurse, sa scrie cod, sa ruleze aplicația, sa facă debugging sau
sa vadă erorile apărute in anumite cazuri. Sunt dis ponibile și scurtături pentru a ușura munca
utilizatorului, cum ar fii monitorul Android, rulare, debug sau completarea codului automat. [13]

2.8.2 Visual Studio

Mediul de dezvoltare integrat(IDE) Microsoft Visual Studio este dezvoltat de compania
Microsoft. Prin intermediul acestuia putem dezvolta programe pe calculator care au instalat ca
sistem de operare Windows, dar și aplicații Web, servicii Web sau aplicații mobile. Visual
Studio folosește platforme de dezvoltare software ca de exemplu, Windo ws API, Windows
Forms, Windows Store sau Windows Presentation Foundation.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
20
In Visual Studio este integrat un editor de cod care suporta ImtelliSense, care este
responsabilă cu completarea codului dar si de refactorizare a codului. O altă funcționalitate a
acestui IDE este debugger -ul care funcționeaza atat ca un depanator la nivel de sursa, dar si la
nivel de mașină. Mai există și alte instrumente incorporate ca, web designer, designer de clase
sau designer de scheme de baze de date. Este posibilă si adăuga rea de noi biblioteci. [14]

Visual Studio suportă nu mai puțin de 36 de limbaje de programare diferite si permite
editorului de cod sa suporte aproape orice limbaj cu conditia sa existe un serviciu specific
limbajului. Câteva exemple de limbaje de programa re disponibile prin intermediul Visual Studio,
sunt C++, VB.NET, C#, Python sau Node.js. De asemene a accepta și HTML/XHTML sau
XML/XSLT.

Microsoft oferă și o versiune gratuită a Visual Studio, si anume ediția Community, iar
ultima versiune disponibila est e Microsoft Visual Studio 2017.

2.8.3 SQL Server

Microsoft SQL Server este un sistem de gestionare a bazelor de date relaționale și care a
fost dezvoltat de către compania Microsoft. Ca server de baze de date, are drept funcție
principală de a stoca și recupera date, așa cum este cerut de către alte aplicații software care pot
rula fie de pe același computer, fie calculatoarele care sunt conectate la aceiași rețea sau
Internet. [15]

Prima versiunea a Microsoft SQL Server a apărut in anul 1989, iar cea mai recenta
versiune este Microsoft SQL Server 2016 care este suportată doar pe procesoarele pe 64 biți.

Stocarea de date se face in bazele de date, care este de fapt o colecție de tabele cu coloane
tipizate. Sunt acceptate diferite tipuri de date, inclu siv tipurile de date integer, float, decimal,
char, varchar(șirurile de caractere de lungime variabilă) sau binar(blob -uri nestructurate de date).

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
21
Microsoft SQL Server folosește mai multe tool -uri GUI pentru configurarea,
administrarea si gestionarea co mponentelor. Cel mai important tool este SQL Server
Management Studio care include atât editori de script -uri, cât și editori grafici. Acest tool a fost
introdus odată cu Microsoft SQL Sever 2005 și a înlocuit Object Explorer. SQL Server
Management Studio permite vizualizarea și analizarea planurilor de interogare. Prin intermediul
aplicației putem crea baze de date noi, tabele sau putem face interogări pe bazele de date
existente.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
22
3. Arhitectura aplicației
3.1 Structura general ă

Aplicația este bazată pe trei componente principale: Serviciul C#, baza de date MSSQL și
Aplicația Android.

MSSQL
Database
Serviciul C #
HTML
PARSER
UPDATE
DATABASE
Aplic ația Android
SERVICES
TASKS
CLIENT
MODELS
HELPERS
USER INTERFACE

Figura 3.1 Structura generală a aplicației

După cum se poate observa în Figura 3.1, aplicația funcționează in felu l următor:
Serviciul C# este responsabil cu parsarea paginilor HTML, introducerea datelor în baza de date,
respectiv, actualizarea acestora la un interval de timp dat. În baza de date MSSQL sunt stocate
datele venite dinspre serviciul C# respectiv dinspre aplicația Android. Aplicația Android este
responsabila cu preluarea datelor din baza de date, afișarea acestora respectiv introducerea unor
date noi in baza de date, în momentul în care se creează un cont de utilizator nou sau când se
face un update unor d ate.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
23
3.2 Aplicația Android

O aplicație Android este compusă din mai multe activități, care presupun o parte de front –
end și back -end. Partea de front -end reprezintă codul XML, unde putem adăuga diverse
controllere, respectiv partea de back -end unde „prog ramăm” aceste controllere.

Aplicația pentru afișarea orarului este formată din 14 activități prin care utilizatorul poate
să își creeze un cont, cu care se poate autentifica, poate să își vizualizeze propriul orar, orarul
profesorilor, sălilor sau a altor semigrupe. Totodată, dacă utilizatorul este conectat la propriul
cont, el poate să își actualizeze semigrupa în cazul in care a trecut într -un an superior. Dacă
utilizatorul aplicației nu deține un cont, acesta are posibilitatea de a vizualiza orarul unei
semigrupe, a unui profesor sau a unei săli din cadrul Facultății de Inginerie.

3.2.1 SignUpActivity

În SignUpActivity se află metodele și variabilele care se moștenesc din clasa Activity din
cadrul SDK -ului Android. Aceasta se ocupă cu crearea unei „ferestre de vizualizare” unde
întâlnim anumite controllere grafice. Acest modul se execută prima dată in momentul lansării
aplicației.
SignUpActivity
– Nume : EditText
– Username : EditText
– Parolă : EditText
– E-mail : EditText
– Semigrupa : AutoCompleteTextView
– Înregistrare : Button
– LinkCătreAutentificare : TextView
# onCreate () : void
– setViews () : void
– buttonsAction () : void
– populateData () : void
– verifyIfExistsSG () : void
– isValidEmail (email : String ) : boolean
# doInBackground : String

Figura 3.2 Diagrama Activității SignUp

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
24

În Figura 3.2 este prezentată diagrama clasei SignUpActivity. După cum se pe poate
observa, în partea de sus sunt prezentate obiectele pe care activitatea le are în componență ,
respectiv in partea de jos metodele din componența activității.

Când un utilizator al aplicației dorește să își creeze un cont nou, intră pe această activitate
și trebuie sa comple teze câmpurile necesare, numite EditText -uri. El completea ză fiecare
EditText pe rând iar când ajunge la câmpul de introducere a semigrupei care nu este un EditText
ci un AutoCompleteTextView, care este încărcat cu semigrupele aflate în baza de date. El poate
introduce un caracter iar apoi aplicația ii oferă câte va sugestii preluate din baza de date. Când
ajunge la final apasă butonul de Înregistrare.

Metoda setViews() instanțiază obiectele grafice aflate in cadrul activității iar metoda
buttonsAction() instanțiază butoanele. Popularea AutoCompleteTextView cu sem igrupele aflate
in baza de date se face apelând metoda populateData() .

Când utilizatorul apasă butonul Înregistrare, butonul verifică pe rând dacă s -au completat
toate câmpurile necesare, verifică prin intermediul metodei isValidEmail () daca e -mail-ul
introdus de utilizator respectă standardele de adresă de e -mail(de exemplu, daca conține „@” sau
daca are .domeniu), parola trebuie sa aibă minim opt caractere ca să fie validă, iar prin
intermendiul metodei verifyIfExistsSG () se verifică, daca semigrupa introdusă există. Dacă una
dintre aceste condiții nu este respectată, user -ul va primi un mesaj corespunzător. Dacă toate
datele sunt valide, datele utilizatorului sunt introduse in baza de date, user -ul va primi un mesaj
că operațiunea s -a finalizat cu succes și apoi el se poate conecta la contul său.

Din cadrul acestei activități, utilizatorul poate să acceseze activitatea de autentificare,
apăsând pe text -ul „Ai deja cont? Autentifica -te aici! ”.

3.2.2 SignInActivity

În cadrul activității SignIn, utilizatorul poate să își acceseze contul personal din cadrul
aplicației .

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
25

SignInActivity
– E-mail : EditText
– Parolă : EditText
– Autentificare : Button
– LinkCătreÎnregistrare : TextView
# onCreate () : void
– setViews () : void
– buttonsAction () : void
– isValidEmail (email : String ) : boolean
# doInBackground : String
Figura 3.3 Diagrama activității SignIn

În Figura 3.3 este prezentată diagrama clasei SignInActivity. După cum se pe poate
observa, în partea de sus sunt prezentate obiectele pe care activitatea le are în componență,
respectiv in partea de jos metodele din componența activității.

Când un utilizator dorește să intre în contul personal din cadrul aplicației, acesta intră pe
activitatea SignIn. El trebuie sa completeze câmpurile aflate pe această pagină. După ce acesta
completează toate EditText -urile trebuie sa apese butonul Autentificare care va verifica prima
dată dacă e -mail-ul este valid, iar apoi daca datele introduse sunt corecte v erificând datele în
baza de date. În cazul în care datele sunt corecte, utilizatorul este redirecționat către
UserActivity, care este pagina contului personal al utilizatorului.

În cazul în care user -ul a accesat din greșeală această activitate si vrea sa își creeze un
cont, el poate apăsa pe text -ul „Nu ai cont? Înregistrează -te aici! ” și va fi redirecționat că tre
activitatea SignUp.

3.2.3 UserActivity

Dacă autentificarea a decurs fără probleme, utilizatorul este redirecționat către această
activitate. Această activitate este pagina utilizatorului. De aici poate sa vizualizeze orarele
disponibile in cadrul aplicației sau să își facă anumite modificări contului personal.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
26
În Figura 3.4 este prezentată diagrama activității User. În partea de sus sunt pr ezentate
obiectele pe care activitatea le are în componență, iar in partea de jos, metodele sale.

UserActivity
– Logo : ImageView
– NumeUser : TextView
– OrarUser : Button
– OrarSali : Button
– OrarProfesori : Button
– OrarSemigrupe : Button
– UpdateUser : Button
– IeșireCont : Button
# onCreate () : void
– setViews () : void
– buttonsAction () : void
– onKeyDown () : boolean
+ openMessageBox : void

Figura 3 .4 Diagrama activității User

În partea de sus a ferestrei se află o imagine cu logo -ul Universității Lucian Blaga, care a
fost încărcată prin intermediului ImageView -ului Logo. În dreapta logo -ului se află un mesaj de
„Bună ziua”, urmat de numele utilizatorului conectat la cont. În continuare se află butoane
prezentate mai sus in diagrame.

Utilizatorul poate să vizualize ze orarul semigrupei din care face parte apăsând butonul
Orarul Meu. Dacă vrea să vadă orarul unui profesor, el trebuie să apese pe butonul Caută după
Profesor , la fel daca vrea să caute o altă semigrupă apasă pe Caută dupa semigrupă și dacă
vrea sa caute orarul unei săli, el va apăsa pe Caută după sală . În aceste trei cazuri, utilizatorul
este redirecționat către alte activități unde va găsi un EditText si un Buton. El va introduce
primele caractere în EditText și apoi va primii sugestii. După aceea, el apasă butonul Caută.
Dacă datele au fost introduse corect, se va deschide o noua activitate cu orarul căutat, iar dacă
utilizatorul a introdus date care nu se află în baza de date, acesta va fi avertizat printr -un mesaj
corespunzător.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
27
Utilizatorul poate sa acceseze si butonul Setări , care îl va redirecți ona către pagina de
setări. Pe această pagina , utilizatorul își poate schimbă semigrupa setată la înregistrare. De acest
caz este nevoie la trecerea dintr -un an universitar în altul, când se schimba denumirea
semigrupelor.

Pentru ieșirea din cont, utiliz atorul are doua variante. Prima, apăsând butonul
Deconectare și a doua pe tasta back a telefonului cu sistem de operare Android. Pentru
siguranța, am introdus un message box care se afișează de fiecare dată când utilizatorul vrea să
iasă din cont. Acest m essage box, avertizează utilizatorul că urmează sa iasă din cont și așteaptă
confirmarea din partea acestuia. Dacă este de acord, utilizatorul este redirecționat către home
page, dacă nu el rămâne în cont.

3.2.3 GuestActivity

Dacă utilizatorul aplicaț iei nu dorește să își creeze cont, sau vrea doar sa vadă repede un
orar, el poate face acest lucru accesând meniul aplicației din home page.

El poate apăsa butonul pentru meniu, apoi butonul Orar. El este redirecționat către o
activitate asemănătoare cu U serActivity, dar cu mai puține opțiuni. Utilizatorul poate accesa aici
doar căutare după profesori, săli sau semigrupe. În Figura 3.5 este prezentată interfața activității
Guest.

Figura 3.4 Interfața GuestActivity

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
28
3.2.4 Use-case -uri

În continuare vor fi prezentate două use -case-uri prezente în cadrul aplicației prezentate.
În Figura 3.5 este prezentat use -case-ul în care utilizatorul accesează aplicația și are de ales intre
a intra în contul personal sau de a rămâne ca guest accesând meniul, iar apoi activitatea de orare.
Deschide aplicația
Se conecteaza la cont Rămâne "musafir "
Accesează Meniu /Orare Accesează cont
Caută orare

Figura 3.5 Use -case modul de folosire a aplicației

În Figura 3.6 este prezentat use -case-ul în care utilizatorul dorește să își creeze un cont,
pentru a -l accesa sau doar sa îl acceseze. Pentru primul caz, acesta trebuie să deschidă aplicația,
să intre pe înregistrare, să completeze câmpurile necesare, sa apese Înregistrare si abia după să își
acceseze contul creat.
Deschide aplicația
Apasă AutentificareApasă Înregistrare
Completează EditText -urile
Completează EditText -urile
Caută orareApasă butonul Înregistrare

Figura 3.6 Use -case modul de aut entificare

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
29
3.3 Serviciul C#

Serviciul C# a fost implementat pentru a parsa paginile web HTML de pe site -ul
departamentului pentru a obține datele de pe acestea. Ca date preluate putem aminti numele
profesorilor, denumirile sălilor sau a semigrupelor cu link-ul corespunzător fiecăruia. Folosind –
ne de aceste date, putem apoi sa preluăm tabelul HTML care conține orarul, fiecărei categorii
enunțate mai sus.

După preluarea acestor date, acestea se adaugă pe rând în baza de date, folosindu -ne de
biblioteca SqlClient prin care putem accesa „connection string -ul”.

Serviciul C #
-ProffesorDictionary :Dictionary <string ,string >
-ClassroomDictionary :Dictionary <string ,string >
-SemigroupsDictionary :Dictionary <string ,string >
-webClient : WebClient
-urlContent : string
-getSpecializationCode ():void
-getProfessorCode ():void
-getClassroomCode ():void
-populateSpecializationDictionary ():void
-populateProfessorDictionary ():void
-populateClassroomDictionary ():void \
-deleteDatabaseProfData ():void
-deleteDatabaseGrupeData ():void
-deleteDatabaseSaliData ():void
-addInDatabaseProfData ():void
-addInDatabaseGrupeData ():void
-addInDatabaseSaliData ():void

Figura 3.7 Diagrama serviciului C#

În Figura 3.7 este prezentată diagrama serviciului C#. În partea de sus se regăsesc
variabilele și structurile de date necesare serv iciului sa funcționeze, iar în partea de jos regăsim
metodele implementate în cadrul serviciului.

Dicționarele sunt structuri de date disponibile în .NET prin care putem stoca perechi de
tipul key -value. În aplicația curentă am folosit trei astfel de str ucturi de date. Câte unul pentru
fiecare dintre categorii, pentru profesori, săli și semigrupe. Atât key -ul cât si valoarea key -ului

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
30
sunt de tip string. În key este memorată denumirea f iecărui element din categorie iar valoare a
fiind link -ul unde se găseșt e orarul elementului respectiv.

Metodele getSpecializationCode(), getClassroomCode() respectiv getClassroomCode() se
ocupă cu preluarea într -un string a codului HTML corespunzător fiecărei categorii de mai sus.
Apoi pe baza acestor string -uri se apelează metodele populateSpecializationDictionary(),
populateClassroomDictionary() și populateProfessorDictionary() pentru a se popula dicționarele
amintite mai sus sub forma <denumire, link>.

După ce dicționarele au fost apelate, acestea se parcurg element cu e lement și se adaugă
in baza de date folosindu -ne de connectionString.

Pentru a actualiza baza de date, am creat un Task Scheduler pe care l -am programat sa
ruleze serviciul C# la un interval de 24 ore. Pentru asta, serviciul trebuie să facă, pe lângă pa șii
descriși mai sus, ștergerea datelor actuale din baza de date. Pentru asta se apelează metodele
deleteDatabaseProfData(), deleteDatabase Grupe Data() și deleteDatabase SaliData() prima dată.
Apoi se preia codul pentru fiecare categorie de pe link, se popul ează dicționarele și apoi se
adaugă in baza de date.

În Figura 3.8 este prezentată succesiunea de pași pe care serviciul C# îi face de la
începutul rulării și până la terminarea lui.
Dictionary ProffesorDictionary
Dictionary ClassroomDictionary
Dictionary SemigroupsDictionaryInițializare
START

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
31

DeleteDataBaseProfData ()
DeleteDataBaseGrupeData ()
DeleteDataBaseSaliData ()Apelare
getProfessorCode ()
getSaliCode ()
getSpecialization Code ()ApelaregetProfessorCode ()
getSaliCode ()
getSpecialization Code ()Apelare
getProfessorCode ()
getSaliCode ()
getSpecialization Code ()Apelarepopulate Professor Dictionary ()
populate SaliDictionary ()
populateSpecializationDictionary () ApelaregetProfessorCode ()
getSaliCode ()
getSpecialization Code ()Apelarepopulate Professor Dictionary ()
populate SaliDictionary ()
populateSpecializationDictionary () Apelare
getProfessorCode ()
getSaliCode ()
getSpecialization Code ()Apelarepopulate Professor Dictionary ()
populate SaliDictionary ()
populateSpecializationDictionary () ApelaregetProfessorCode ()
getSaliCode ()
getSpecialization Code ()ApelareAddInDataBaseProfData ()
AddInDataBaseGrupeData ()
AddInDataBaseSaliData () Apelare
STOP

Figura 3.8 Pașii serviciului C#

3.4 Baza de date MSSQL

Am ales MSSQL ca sistem de gestiune a bazelor de date. Motivul pentru care l -am ales a
fost determinat de faptul că este construit de Microsoft și conectivitatea cu Visual Studio a fost
simplă și rapidă. Pe l ângă asta m -am documentat cu privire la conectarea cu Android Studio și
am văzut că nu vor fii probleme.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
32

IP-ul server -ului
local
Numele Bazei de
date MSSQL
Tabelele folosite
in aplicație
Figura 3.9 Structura bazei de date

În Figura 3.9 este descrisă structura bazei de date a aplicației curente. Se observă faptul
că structura este una simplă având cinci tabele.

Tabela Usertbl conține datele referitoare la informațiile despre utilizatori. Aici sunt
memorate adresele de e -mail, numele, username -urile, parolele și semigrupele persoanelor care
dețin cont în cadrul aplicației. Tabela SalaSchedule conține date despre o rarele pe săli. Această
tabela are în componență, ca coloane, numele sălii, link -ul unde se poate găsi orarul săli respectiv
tabelul html care conține orarul. Tabela ProfSchedule conține date despre orarele profesorilor.
Această tabela are în componență, c a coloane, numele profesorului, link -ul unde se poate găsi
orarul profesorului respectiv tab elul html care conține orarul și u ltima tabelă
SemigrupaSchedule, conține date despre orarele semigrupelor. Această tabela are în componență,
ca coloane, numele sem igrupei, link -ul unde se poate găsi orarul semigrupei respectiv tabelul
html care conține orarul semigrupei.

De exemplu, în tabela Usertbl, putem avea o înregistrare de forma Nume: Tudorică Paul
Ștefan, Username: pault, E -mail: paul.tudorica@ulbsibiu.ro , Parola: parola1234 iar semigrupa:
243/1. În tabelele responsabile să păstreze datele referitoare la categoriile de orare, putem avea o
înregistrare, în cadrul SemigrupaSchedule de exemplu, de forma Nume: 24 3/1, Link:
http://inginerie.ulbsibiu.ro/orar/afis_n0.php?id_tip=1867&tip=n0 și TableCode, un cod de tabel
html.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
33
În Figura 3.10 este prezentată diagrama bazei de date folosită pentru a putea realiza
aplicația de afișare a orarului. Se poate observa că id -ul fiecărei tabele este declarată ca fiind
cheie primară.

Figura 3.10 Diagrama bazei de date

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
34
4. Implementarea aplicației

Proiectul a fost implementat în trecut ca pagină Web de către membrii facultății, dar s -a
dorit implementarea acestuia și ca aplicație pe dispozitive mobile. Totul este bazat pe acea
aplicație Web. Prin intermediul acestei aplicații se fac anumite parsări a codului HTML, pentru a
obține datele necesare realizării aplicației Android.

În continuare vor fi prezentate componentele lucrării, din ce sunt compuse, cum au fost
ele implementate respectiv cu ce medii de dezvoltare au fost create. Din motive de sim plitate și
de optimizare in unele cazuri, am ales ca unele componente sa fie implementate utilizând
biblioteci gata implementate. Toate modulele au fost dezvoltate în etape, iar în timp s -au aplicat
metode de refactoring asupra codului cu privire la variab ile sau metode. Aplicația este structurată
pentru două tipuri de useri, un user care deține cont în cadrul aplicației și user -ul „musafir” care
vrea să vadă doar orarul fară a se conecta sau de a -și crea cont.

4.1 Denumire și Logo -ul Aplicației

Am ales să pun ca logo al aplicației, logo -ul Universității Lucian Blaga datorită faptului
că toți studenții îl cunosc și cred că va fi mai ușor de observat prin aplicațiile de pe telefonul
mobil. Ca denumire, am ales o prescurtare din limba engleză și pe care o cred sugestivă.

FoES – Faculty of Engineering Schedule (Orarul Facultății de Inginerie)

În Figura 4.1 este prezentat logo -ul împreună cu denumirea aplicației.

Figura 4.1 Logo -ul și denumirea aplicației

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
35
4.2 Serviciul C#

Pentru a putea afișa orarele prin intermediul aplicației Android, a trebuit implementat un
modul prin care să obținem datele necesare. Acest modul am ales sa îl fac folosindu -mă de
limbajul de programare C# datorită cunoștințelor avansate pe care le am cu acesta. Pentru crearea
acestuia am folosit ca mediu de dezvoltare Microsoft Visual Studio 2015.

Serviciul C# este compus din trei module: Modului Profesori prin care obținem datele
necesare pentru categoria profesori, Modulul Săli prin care obținem datel e necesare pentru
categoria săli și Modulul Specializări prin care obținem datele necesare pentru categoria
Specializări.

Ca punct de p ornire, prin intermediul bibliotecii System.Net, am creat un obiect de tipul
WebClient prin intermediul căruia am putut apela metoda DownloadString care a inițializat un
string care conține codul HTML a unei pagini din cadrul aplicației Web de afișare a orarului
disponibilă pe website -ul departamentului nostru.

Prin intermediul unui TaskScheduler disponibil în sistemul de operare Windows,
serviciul C# actualizează baza de date la un interval de 24 ore. Acest lucru se realizează prin
apelarea serviciului automat, lucru făcut de TaskScheduler. Pentru a putea fi realizat acest lucru,
serviciul este un proiect de tip Console A pplication.

4.2.1 Modulul Profesori

Modulul Profesori este compus din mai mulți pași. Acesta realizează ștergerea datelor din
tabela Profesori, obținerea datelor necesare și apoi adăugarea datelor obținute în baza de date. În
continuare sunt prezentați pașii necesari pentru actualizarea datelor pentru categoria profesori.

În primul rând, se șterg datele actuale disponibile în tabela ProfSchedule. Pentru a putea
realiza acest lucru am folosit biblioteca System.Data.SqlClient pentru a putea crea un obiec t de
tipul SqlConnection care să conțină string -ul de conexiune la baza de date. Apoi se deschide
conexiunea apelând metoda Open() disponibilă obiectului creat. După acest pas se creează un

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
36
obiect de tipul SqlCommand care primește ca parametrii string -ul de interogare a bazei de date și
obiectul SqlConnection. Pentru obiectul de tipul SqlCommand se apelează metoda
ExecuteNonQuery() prin care se executa comanda asupra bazei de date, iar apoi se închide
conexiunea prin metoda Close(). Toți pașii enumerați mai sus sunt prezenți in Figura 4.2 .

Figura 4 .2 Ștergerea datelor din ProfSchedule

Al doilea pas, îl constă obținerea datelor necesare pentru repopularea tabelei
ProfSchedule. Pentru aceasta am declarat global un dicționar ProffesorDictionary care are ke y-ul
de tip string și valoare tot de tip string. În acest dicționar vor fii memorate numele profesorilor și
link-ul unde se află orarul profesorului respectiv.

Figura 4 .3 Declararea dictionarului ProfessorDictionary de tip <string,string>

Folosindu -mă de string -ul obținut prin luarea codului HTML de pe pagina web, efectuez
o tăiere a codului pe baza unor cuvinte cheie pentru a obține codul aferent datelor profesorilor.
Pentru a apela metoda Substring am avut nevoie de doi parametri, index -ul de unde să înceapă
tăierea și index -ul unde se încheie. Pașii prezentați mai sus sunt descriși în Figura 4.4 .

Figura 4 .4 Preluarea codului aferent datelor profesori

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
37
Având codul aferent datelor profesorilor, populăm dicționarul pentru profesori. Pentr u
acest lucru trebuie sa obținem link -ul și numele profesorului. Am folosit tipul Regex pentru a
putea definii un pattern ca să obțin href -ul din codul html, iar pe baza lui am putut lua si valoarea
reprezentând numele profesorului. Pentru a obține toți pr ofesorii am utilizat o buclă foreach prin
care parcurg fiecare href din cod. Înainte de a adăuga link-ul în dicționar am concatenat
http://inginerie.ulbsibiu.ro/orar/ cu href -ul găsit pentru a obține link -ul complet.

Figura 4 .5 Pașii pentru popularea dicționarului profesori

Ca ultim pas, datele trebuie introduse în baza de date. Acest lucru l -am realizat
parcurgând fiecare pereche de tip cheie -valoare din dicționar și făcând pentru fiecare pentru
fiecare următorii pași. Prin intermediul unui obiect de tipul WebClient am descărcat codul html
aferent fiecărui profesor. Pe baza lui am tăiat codul pentru a obține doar tabelul html ce conține
orarul profesorului prin intermediul metodei getScheduleTable Code() prezentată în Figura 4.6 .
Am declarat o interogare pentru baza de date de tip „Insert Into” care adaugă în baza de date
informațiile obținute. Această interogare este primită ca parametru împreună cu string -ul de
conexiune la baza de date de obiectu l de tipul SqlCommand. Prin intermediul obiectului se
apelează metoda ExecuteNonQuery(). Iar la sfârșit se închide conexiunea. În caz de excepție se
va afișa un mesaj corespunzător.

Figura 4 .6 Metoda de obținere a tabelului ce conține orarul

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
38
În Figura 4 .7 sunt prezentați toți pașii explicați mai sus prin metoda care este folosită
pentru a implementarea obținerii codului html a orarului și adăugarea datelor obținute în baza de
date.
Acestea au fost cele trei etape ce trebuie parcurse pentru a actualiza ta bela profesorilor
din baza de date.

Figura 4 .7 Pașii necesari pentru a popula tabela ProfSchedule

4.2.2 Modulul Săli

La fel cum am prezentat mai sus în cazul modulului profesori, prima dată se execută
ștergerea datelor din baza de date a tabelei SaliSchedul e, asta realizându -se asemănător cazul ui
profesorilor, schimbându -se doar interogarea la baza de date. Obținerea codului aferent sălilor de
pe pagina html se realizează la fel ca în cazul din Figura 4.4 , singura diferență o constă
schimbarea ind exilor de începere și de încheiere a tăierii codului. După ce s -a obținut codul, se
realizează popularea dicționarului ClassroomDictionary punând in cheie numele sălii cu valoarea
aferentă ca fiind link -ul unde se găsește orarul sălii. Având dicționarul in ițializat, acesta se
parcurge, se obține codul html a orarului și informațiile se adaugă în tabela SalaSchedu le a bazei
de date asemănător cazul ui profesorilor prezentat în Figura 4.7 cu singurele diferențe fiind
dicționarul ce se parcurge respectiv, string-ul de adăugare în baza de date.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
39
4.2.3 Modulul Specializări

Pașii de actualizare a tabelei SemigrupaSchedule din cadrul bazei de date, se realizează
asemănător cazurilor profesori și săli. Această tabela conține informații despre semigrupele din
cadrul facultății și orarele acestora. Ca pași de actualizare, mai înt âi se șterg datele din tabela
SemigrupaSchedule. Se obține codul aferent semigrupelor din pagina html a departamentului. Se
populează dicționarul SpecializationDictionary, apoi se parcuge pereche cu pereche, se obține
codul tabelului html și se adaugă in b aza de date.

Serviciul C# este compus din cele trei module prezentate mai sus. Parcurgând toți pașii
celor trei module se realizează actualizarea completă a bazei de date. Actualizarea este foarte
benefică în cazul în care se execută modificări asupra o rarului, iar în așa fel utilizatorii aplicației
FoES vor fi mereu informați corect și rapid.

4.3 Aplicația Android

Aplicația Android FoES a fost dezvoltată utilizând mediul de dezvoltare Android Studio.
Prin intermediul acestei aplicații am realizat part ea de user -interface, prin care utilizatorul poate
să își vizualizeze orarul propriu respectiv alte orare din cadrul Facultății de Inginerie.

Aplicația Android este compusă din mai multe activități care au în componență doua
elemente principale. Codul XM L prin care se realizează partea vizuală respectiv un fișier JAVA
prin care se leagă elementele din partea vizuală și li se atribuie funcționalități. Fiecare resursă
enunțată mai devreme deține câte un folder unde se află fișierele aferente. Pentru fișiere le XML
se creează un subfolder, in cadrul folder -ului resources, numit sugestiv layout. Aici se află de
obicei toate fișierele XML din cadrul aplicațiilor. Pentru fișierele JAVA se creează un subfolder
în cadrul folder -ului java unde sunt stocate fișierele .java. Aceste fișiere sunt legate automat de
Android Studio prin intermediul activităților.

Aplicația este destinată către două tipuri de utilizatori, și anume utilizatorul care dorește
să își creeze cont și să îl acceseze sau un utilizator „musafir” care nu dorește să își creeze cont
sau nu dorește să îl acceseze.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
40
Ordinea de apariție a activităților este urm ătoarea. După ce apăsăm sa accesăm aplicația
apare o activitate ce conține un ImageView în care este încărcat logo-ul și numele Universității
Lucian Blaga. Această activitate este activă preț de câteva momente iar apoi suntem
redirecționați către pagina pr incipală. Pe pagina principală întâlnim trei butoane prin care putem
naviga către formularele de înregistrare, autentificare sau sa accesam meniul. Meniul trebuie
accesat de către utilizatorii ce hotărăsc sa rămână musafiri. În cadrul meniului se găsește u n
buton care îi redirecționează către o pagină unde ei vor putea căuta orare după categorii. Butonul
Înregistrează redirecționează utilizatorul către pagina de înregistrare unde trebuie completate
anumite câmpuri. Pentru accesarea contului personal, user -ul trebuie sa acceseze butonul
Autentificare unde își introduce datele și apoi poate accesa pagina de user. Acolo va întâlni mai
multe butoane cu nume sugestive, pentru a căuta orare, pentru a -și vizualiza propriul orar sau
pentru a -și actualiza datele în c azul semigrupei.

Interfața cu utilizatorul este una cât se poate de prietenoasă și simplu de înțeles. În
următoarele sub -capitole vor fi prezentate câteva dintre paginile vizuale.

4.3.1 Home Activity

După cum am specificat mai sus, Home Activity este pagina principală și acesta se
activează după pagina de intro. În cadrul acestei pagini, utilizatorul alege cum dorește sa
folosească aplicația. În Figura 4.8 este prezentat UI activității home.

Figura 4 .8 Home Activity UI

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
41
Toate elementele vizuale din cadrul UI -ul sunt declarate în codul XML aferent
activității. Legătura între elementele din codul XML și codul Java se realizează prin intermediul
unui id care este declarat în XML sub forma „android:id="@+id/menuBtn" . Prin int ermediul
acestui id putem declara în JAVA un obiect de tipul elementului vizual și sa facem legătura intre
acesta si id -ul din XML. Acești pași sunt descriși in Figura 4.9 .

Figura 4 .9 Legarea obie ctului din JAVA de obiectul XML

Pentru imaginea de fundal a fost declarat un ImageView în interiorul codului XML ca
nod copil a unui LinearLayout având orientarea pe orizontală. Acesta este inițializat prin
intermediul unei poze de tip png aflată în folder -ul de resurse. În Figura 4.10 este prezentată
inițializarea unui ImageView prin cod XML.

Figura 4 .10 Inițializarea unui ImageView prin cod XML

Prin intermediul paginii de home, utilizatorul poate naviga către paginile de autentifcare,
respectiv înregistrare. Aceste navigări se realizează prin interm ediul unor obiecte numite Intent.
Aceste obiecte primesc, la instanțiere, ca parametrii clasa actuală și unde se dorește să se
navigheze, ce pagină să se deschidă. Intent -ul se declanșează prin intermediul metodei
startActivity().

Figura 4 .11 Declanșare a unui Intent

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
42
În Figura 4.11 este prezentată declanșarea unui intent prin care se navighează de la
pagina de home la pagina de înregistrare. Acest lucru se realizează prin intermediul unui
eveniment declanșat la apăsarea butonului de Înregistrare. În Java acest lucru se face prin
apelarea metodei setOnClickListener pentru obiectul de tipul buton prin care se apelează o altă
metodă care se suprascrie, si anume onClick(). În interiorul metodei onClick() noi declarăm
intent -ul și îl pornim.

4.3.2 Activitatea Înregistrare

Pentru a ajunge pe această activitate, utilizatorul aplicației FoES poate alege două
metode, prima apăsând butonul Înregistrare din activitatea main sau prin accesarea meniului
aplicației și apăsarea butonului cu același nume.

Funcționalit atea acestei activități, după cum îi spune și numele, este ca utilizatorul sa își
creeze un cont nou în cadrul aplicației. Acesta este nevoit sa completeze mai multe EditText -uri
reprezentând datele personale. El trebuie sa completeze pe rând câmpurile Num e, Username, E –
mail, Parola și Semigrupa.

Fiecare câmp este format dintr -un TextView prin care am pus mesaj cu ceea ce trebuie
scris în EditText. În cazul semigrupei, acesta nu este un EditText, ci un AutoCompleteTextView
unde, utilizatorul dacă introduc e primele doua caractere acest controller îi va da sugestii cu
semigrupele care încep cu caracterele respective. Acest lucru este posibil printr -o interogare a
bazei de date prin care populăm o listă pe care o convertim mai apoi într -un ArrayAdapter care
se adaugă AutoCompleteTextView -ului. Acești pași sunt descriși în Figura 4.12 prin metoda
populateData().

Figura 4 .12 Popularea unui AutoCompleteTextView

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
43
După completarea fiecărui EditText, utilizatorul apasă butonul Înregistrare care va
verifica următoarele:
 Dacă au fost completate toate câmpurile din formular
 Dacă adresa de e -mail are format valid sau nu
 Dacă adresa de e -mail există cumva in baza de date sau nu
 Dacă parola are minim 8 caractere
 Dacă semigrupa există in baza de date
Dacă una dint re condiții nu este îndeplinită, utilizatorul va primi un mesaj de avertizare
cu privire la ceea ce nu este în regulă. În Figura 4.13 este prezentat mesajul prin care utilizatorul
este avertizat că adresa de e -mail a mai fost folosită o dată.

Figura 4 .13 Mesaj generat de aplicație in cazul in care e -mail a mai fost folosit

În Figura 4.14 este prezentat cum se poate afișa un mesaj ca cel prezentat mai sus. Acest
mesaj este un obiect de tip Toast care primește ca parametri, activitatea unde să se afișeze, text -ul
ce se vrea a fi afișat și durata acestuia.

Figura 4 .13 Afișarea unui Toast

Verificarea e -mail-ului cu privire la format se face prin verificarea string -ului introdus
printr -un pattern care ar trebui să fie respectat. Acest pattern verifică dacă string -ul introdus are
simbolul „@” sau dacă adresa are un template de forma XXXX@XXXX.XXX .

Verificarea e -mail-ului dacă există în baza de date se face astfel, se face o interogare
asupra bazei de date prin care returnăm toate e -mail-urile înregistrate, iar apoi se verifică e -mail-
ul introdus cu toate e -mail-urile din baza de date. Dacă există vreo egalitate de string -uri atunci,
utilizatoru l va primi un mesaj corespunzător.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
44
Verificarea semigrupei se face datorită faptului ca există șansa ca utilizatorul sa introducă
un string care nu se află in suges tiile prezen tate. Acest lucru se prin popularea unei liste în urma
unei interogări a bazei de date ce a returnat toate semigrupele și apoi verificarea dacă string -ul
introdus se află in lista respectivă.

Dacă toate condițiile au fost îndeplinite cu succes, utilizatorul va primi mesajul prezentat
in Figura 4.14 și va fi redirecționat pe activit atea home. După acest pas, el se poate autentifica la
contul abia creat.

Figura 4 .14 Mesajul trimis când contul a fost creat cu succes

4.3.3 Activitatea Autentificare

Dacă utilizatorul aplicației are deja un cont creat, acesta trebuie doar să se conecteze la
acesta. Pentru a ajunge pe această activitatea, utilizatorul poate apăsa ori pe butonul din cadrul
activității home, fie prin accesarea meniului și apăsarea butonul ui Autentificare disponibil acolo.

După ce accesează activitatea de autentificare, utilizatorul trebuie sa introducă în
EditText -uri, e -mail-ul și parola. După completarea tuturor câmpurilor, utilizatorul apasă pe
butonul Autentificare care va efectua o verificare prin care să vadă dacă există vreun cont cu
datele respective în baza de date. Dacă verificarea a returnat un rezultat pozitiv utilizatorul va
primi un mesaj corespunzător și va fi redirecționat către activitatea user -ului, daca rezultatul este
unul negativ, utilizatorul va primi un mesaj corespunzător. Mesaje primite de utilizator sunt
descrise în Figura 4.15 .

Figura 4 .15 Mesaj ele primite de user in caz de autentificare cu succes sau nu

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
45
Verificarea datelor introduse se face printr -o interogare la baza de date prin care se
verifică dacă există vreun e -mail ca cel introdus și are asociat parola introdusa. String -ul de
interogare este sub forma: „Select * from Usertbl where Email=„ + editTex t1.Value + ”and
Password =”+editText2.Value; .

Pe lângă pașii de mai sus, mai există o metodă prin care căutam numele utilizatorului ce
se conectează la cont cu datele respective. Cu valoarea acestuia, inițializăm o variabilă globală
printr -o metoda priva ta de tip set și pentru a putea lua variabila, am creat o metodă publică de tip
get. Am avut nevoie de aceste metode pentru a putea avea acces la numele utilizatorului în
activitatea user.

Figura 4 .16 Metodele setName și getName

4.3.4 User Activity

Pe această activitate pot ajunge doar utilizatorii care dețin cont in cadrul aplicației și s -au
autentificat cu succes. Asta este pagina utilizatorului unde poate să -și vizualizeze propriul orar,
să caute orice alt orar al categoriilor prezentate sau sa îș i actualizeze datele contului.

În Figura 4.17 este prezentată interfața utilizatorului. Cum se poate observa în partea de
sus avem logo -ul Universității Lucian Blaga, iar în dreapta acestuia un mesaj „Bună ziua,” cu
numele utilizatorului conectat. Pe cen trul UI -ului avem niște butoane cu nume sugestive, care la
apăsare ne redirecționează către alte activități. Butonul Orarul meu ne redirecționază către o
pagină unde este afișat orarul semigrupei din care face parte utilizatorul conectat. Următoarele
trei butoane ne redirecționează, in funcție de categorie, către o altă pagină unde putem căuta
după profesori, săli sau semigrupe. Pe butonul de Setări, suntem redirecționați către pagina de

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
46
setări, iar butonul de Deconectare ne deconectează de la cont. Toate a cestea vor fii exemplificate
în continuare.

Figura 4 .17 User -Interface a utilizatorului

La apăsarea butonului Orarul meu, se execută mai mulți pași pentru a afișa orarul. Se
obține semigrupa utilizatorului conectat prin intermediul adresei de e -mail, apoi pe baza
semigrupei se interoghează baza de date pentru a obține orarul. Toți pașii sunt descriși în Figura
4.18.

Figura 4 .18 Pașii pentru a obtine orarul utilizatorului conectat

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
47
În cazul apăsării unui buton pentru căutare după o categorie, fie ea profesori, săli sau
semigrupe, se deschide o activitate formată dintr -un AutoCompleteTextView care este încarcat
automat la încărcarea paginii cu toate elementele aferente fiecărei catego rii. Acest lucru se
întamplă prin intermediul unei interogări asupra bazei de date prin care returnăm toate
elementele în funcție de categorie.

Utilizatorul introduce primele caractere a ce își dorește să caute, și primește toate
sugestiile care încep c u caracterele respective. În Figura 4.19 este prezentat un exemplu în care
utilizatorul caută un profesor cărui nume începe cu CRE și are patru sugestii de profesori care
încep cu aceste caractere.

Figura 4 .19 Sugestii pentru profesori căror nume începe cu CRE

După introducerea numelui, utilizatorul apasă butonul Caută care va verifica daca numele
profesorului există in baza de date, în eventualitatea in care user -ul a ales să introducă manual
numele și nu a ales o sugestie. În caz de numele este corec t, atunci va apărea orarul, în caz
contrar va fi afișat un mesaj corespunzător.

Figura 4 .20 Mesaj dacă numele introdus nu există în baza de date

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
48
În cazul în care utilizatorul apasă pe butonul Setări, acesta este redirecționat către pagina
unde el își p oate actualiza semigrupa. Această funcționalitate a fost adăugată în ideea în care, o
dată cu trecerea într -un an superior, numele semigrupei se schimbă. Utilizatorul va avea un mesaj
prin care este informat despre ce actualizează care este vizibil în Figu ra 4.21 . El poate alege o
semigrupa din lista de sugestii la fel cum se întâmplă când cauți orare după nume.

Figura 4 .21 Activitatea unde utilizatorul poate actualiza semigrupa

În spate, se verifică dacă semigrupa introdusă este validă sau nu, afișând un mesaj
corespunzător. Dacă semigrupa este validă se execută un update a bazei de date în care se
modifică valoarea semigrupei vechi cu cea nouă.

Pentru deconectare, utilizatorul poate folosi două metode. Una prin butonul din listă
numit Deconectare i ar altă metodă prin apăsare butonului back al telefonului mobil. Utilizatorul
va fi întrebat prin intermediul unui AlertDialog dacă e sigur că vrea să facă această operațiune.
AlertDialogul este afișat in Figura 4.22 .

Figura 4 .22 AlertDialog -ul in cazul deconectării

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
49
În cazul în care utilizatorul apasă că dorește acest lucru, el va fi redirecționat către
activitatea home, în caz contrar el va rămâne pe activitatea user.

Codul asociat butonului back respectiv, codul pentru afișarea AlertDialog sunt pre zentate
în Figura 4.23 .

Figura 4 .23 KeyBack event și afișarea AlertDialog

4.3.5 Guest Activity

Această activitatea este disponibilă utilizatorilor care nu doresc să își creeze cont în
cadrul aplicației sau celor care nu doresc conectarea la acesta. Aceasta este asemănătoare cu
activitatea utilizatorului, singurele difere nțe le constau butoanele specifice user -ului, ca de
exemplu activitatea unde este afișat orarul utilizatorului sau pagina de setări.

Această pagină poate fii accesată prin intermedi ul meniului aflat pe activitatea home și
apăsarea butonului Orar din cadrul meniului. Interfața utilizatorul pentru pagina de orare este
prezentată în Figura 4.24 . În această activitate, după cum se poate observa, sunt trei butoane prin
care putem căuta or are după categoriile profesori, săli sau semigrupe.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
50

Figura 4 .24 Interfața utilizatorului activității guest

La fel ca în cazul activității utilizatorului, butoanele caută după … ne redirecționează
către o activitate nouă, unde după caz putem căuta orare după profesori, săli sau semigrupe. La
accesarea unei pagini, se încarcă automat AutoCompleteTextView -ul cu sugestii privind ceea ce
căutam. La fel ca în cazurile prezentate mai sus, introducem primele caractere a ceea ce vrem și
primim sugestii cu ce element începe cu acele caractere. Un caz este prezentat in Figura 4.19 .
După selectarea EditText -ului se apasă butonul Caută și se va face verificarea string -ului
introdus. Dacă acesta este valid, se va afișa orarul elementului căutat, altfel se va afișa un mesaj
corespunzător. Acest pas de verificare se execută in eventualitatea în care utilizatorul a ales sa
introducă manual string -ul și nu să aleagă din sugestiile prezentate.

4.3.6 Afișare a Orar ului

Prezentarea orarului se realizează prin intermediul unui WebView declarat în codul
XML. Acesta preia un tabel html și în introduce in cadrul WebView -ului care are anumite
dimensiuni. Î n cazul aplicației curente, acesta preia tabelul în care este orarul elementului căutat
și îl afișează într -un WebView care are dimensiunile ecranului dispozitivului Android. Codul
XML este prezentat în Figura 4.25 . După cum se poate observa, WebView -ul are un id prin
intermediul căruia putem să -l legăm de un obiect de tipul WebView creat în fișierul Java, ca
dimensiuni și ca lățime, și ca lungime acesta are atributul „match_parent”, adică dimensiunile

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
51
Layout -ului în care este creat și sunt egale cu dimensiunile ecranului. Și mai există încă două
atribute de poziționare, să fie pus în partea de sus respectiv central.

Figura 4 .25 Declararea unui WebView în cadrul codului XML

Tabelul html care conține orarul se obține din baza de date. La apăsarea butonului Caută
se realizează o interogare a bazei de date prin care se returnează valoarea căutată. Această
valoare este obținută în clasa unde se fac se execută verificarea valorii introduse. Valoarea este
trimisă către webview prin intermediul unor metode set, get.

În Figura 4.26 este prezentat codul prin care se obține codul html din cadrul bazei de
date. Tot aici se execută verificarea elementului introdus să existe în baza de date.

Figura 4 .26 Verificarea elementului și obținerea tabelul elementului din baza de date

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
52
Pentru afișarea codului html în interiorul WebView -ului au trebuit parcurși pașii descriși
în Figura 4.27 . Prima dată a trebuit creat un obiect de tipul WebVi ew prin care am legat obiectul
din cadrul codului XML, ajutându -ne de id. Apoi am introdus într -un string codul html obținut
prin interogarea bazei de date. Am adăugat anumite setări asupra webview -ul pentru a putea
efectua zoom in sau zoom out și la sfârș it am încărcat string -ul în cadrul webview -ului.

Figura 4 .27 Legarea WebView -ul din Java de cel din XML și încărcarea datelor în acesta

În Figura 4.28 este prezentată afișarea unui orar în interiorul unui webview.

Figura 4 .28 Afișarea unui orar în cadrul unui WebView

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
53
4.3.7 Conexiunea la baza de date

Pentru a putea conecta proiectul dezvoltat în Android Studio de baza de date MSSQL a
trebuit să includ în proiect o bibliotecă de tip .jar. Această bibliotecă se numește jtds -1.2.7 și
permite conectarea proiectului la baza de date MSSQL. Acest lucru a fost posibil prin adăugarea
acesteia în folder -ul libs și adăugarea unei dependințe în cadrul proiectului prin intermediul
fișierului build.grandle. Adăugarea dependinței este ilustrată în Figura 4.29.

Figura 4 .29 Adăugarea bibliotecii jtds -1.2.7 în cadrul proiectului

Pentru a ne putea conecta la baza de date creată în mediul de dezvoltare Microsoft SQL
Server, a trebuit să creăm string -ul de conectare. Pentru asta am creat o clasă numită
ConnectionClass care este ilustrată în Figura 4.30 . Aceasta conține ca variabile, ip-ul server -ului
unde se află baza de date, numele bazei de date, numele unui user cu drepturi pentru scriere si
citire din baza de date, respectiv parola user -ului. Ca variabilă mai avem și numele bibliotecii
care este responsabilă pentru conexiunea la b aza de date. În cadrul clasei avem o metodă prin
care se returnează string -ul de conectare la baza de date.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
54

Figura 4 .30 Clasa ConnectionClass pentru string -ului de conexiune la baza de date

De fiecare dată când avem nevoie de o interogare a bazei de date, trebuie creat un obiect
de tipul clasei ConnectionClass pentru a obține string -ul de conexiune. Acest lucru se întâmplă în
interiorul unei clase ce moștenește clasa AsyncTask , îar in metoda BackGroundTask se află ce
metodele moștenesc. AsyncTask est e o clasă abstractă din cadrul SDK -ului Android care
folosește anumite fire de execuție în background pentru conexiunea la baza de date fără a se
afecta în vreun fel componentele grafice ale aplicației. Aceste fire de execuție se efectuează fără
ca client -ul să își dea seama. Metoda doInBackGround () primește ca parametri valori string și
returnează un string care conține un mesaj pentru atenționarea utilizatorului. Acest mesaj este
afișat prin intermediul metodei onPostExecute() care îl primește ca parametr u. Tot în interiorul
metodei doInBackGround() se inițializează obiectul de tipul clasei ConnesctionClass, se verifică
dacă acesta s -a instanțiat și se executa una sau mai multe interogări ale bazei de date. Un
exemplu de clasă care moștenește clasa AsyncTa sk este prezentată în Figura 4.31 În acest
exemplu este reprezentată verificarea datelor prin care utilizatorul încearcă să se conecteze la
contul personal.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
55

Figura 4 .31 Exemplu de clasă ce moștenește clasa AsyncTask

4.4 Configurarea și Implementarea Bazei de date

Baza de date a fost creată utilizând mediul de dezvoltare Microsoft SQL Server. Am ales
acest mediu de dezvoltare pentru că este ușor de folosit în combinație cu Visual Studio și am
aflat ca se poate conecta și la Android Studio. Acesta are un UI prietenos și intuitiv pentru
utilizator. O dată cu lansarea programului, va apărea o fereastră unde utilizatorul trebuie sa își
introducă datele de conectare. O astfel de fereastră este ilustrată în Figura 4.32 . Trebuie
completat ip -ul serverului, nu mele utilizatorului si parola acestuia.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
56

Figura 4 .32 Fereastră de autentificare în SQL Server

Pentru a putea rula pe calculatorul personal, a trebuit activat ip -ul calculatorului. Acest
lucru s -a realizat prin intermediul aplicației complementare SQL Server -ului și anume SQL
Server Management Studio unde am putut activa ip -ul calculatorului. Acești pași sunt prezentați
în Figura 4.33 .

Figura 4 .33 Activarea ip -ul calculatorului pentru utilizarea în SQL Server

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
57
Pentru a putea crea un utilizator nou care să aibă acces la baza de date, a trebui să ne
autentificăm la SQL Server prin intermediul system administrator care are toate drepturile asupra
bazei date. Prin intermediul acestuia am creat un nou cont, căruia i -am oferit drepturi de citire și
scriere din baza de date .

Pentru crearea bazei de date, am utilizat editor -ul disponibil în SQL Server pentru a face
acest lucru. Query -ul prin care am creat baza de date, este disponibil in Figura 4.34 .

Figura 4 .34 Crearea Bazei de date Android

Baza de date Android are în componență patru tabele cu care aplicația poate funcționa,
tabelele ProfSchedule, SemigrupaSchedule și SalaSchedule care sunt responsabile să rețină
numele, link -ul și codul html a fiecărui element in funcție de categorie. Și ma i avem tabela
Usertbl în care sunt memorate datele despre utilizatori cum ar fii numele, username -ul, e-mail-ul,
parola sau semigrupa. Un astfel de înregistrare este ilustrată in Figura 4.35 .

Figura 4 .35 Exemplu de înregistrare în baza de date

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
58
5.Concluzii ș i dezvoltări ulterioare

Scopul acestei lucrării a fost de a implementa prin intermediul acestei tehnologii foarte
des folosită la momentul actual, o aplicație care sa vină în sprijinul studenților sau profesorilor,
fără a avea nevoie de dispozitive separate fața de cele pe care le folosim zilnic. Având în vedere
că aplicația se poate folosi diferit în două situații, putem spune că avem două tipuri de aplicații în
cadrul uneia singure. De exemplu, aplicația poate fi utilizată atât de utili zatorii care au cont
personal cât și de cei fără cont pentru a vizualiza orarele. Indiferent de tipul utilizatorului, acesta
poate accesa două pagini pentru a căuta orare. Indiferent de utilizator, el poate accesa
următoarele opțiuni:
 Să caute după profeso ri
 Să caute după săli
 Să caute după semigrupe

Utilizatorul care este conectat la contul personal, are funcțio nalități în plus, cum ar fii să
poată vizualiza propriul orar sau sa își actualizeze datele contului.

Utilizatorul poate fii asigurat ca datele din cadrul aplicației sunt corecte datorită faptului
că datele sunt actualizate o dată la 24 ore prin intermediul serviciului care este programat să se
ruleze automat prin intermediul TaskScheduler -ului.

Versiunea curentă a aplicației poate fi consider ată ca fiind una venită în sprijinul
studenților, care folo sește o tehnologie de ultimă oră și care ar putea fi pusă in funcțiune .

Având în vedere că este un proiect care se va dezvolta în continuare, pe viitor am să îi
aduc funcționalități în plus cum ar fii atunci când îți creezi un cont sa poți alege ce tip de
utilizator ești, student sau profesor. De asemenea voi continua sa caut metode de optimizare a
aplicației pentru o rulare mai rapidă. Elementele de securitate ar trebui să le îmbunătățesc și aic i
mă refer la metodele de preluare a datelor din baza de date. Aș putea crea un web service pe care
să îl pun pe server -ul facultății prin care să fac conexiunea la baza de date și să îl configurez să

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
59
returneze datele pe care le caut prin intermediul unor request -uri în cadrul aplicației sau pentru
adăugarea datelor în baza de date.

De asemenea, doresc să studiez platforma Xamarin creată de Microsoft prin care aș putea
să creez aplicații cross -platform, astfel pot crea aplicații pentru sistemul de operar e Android cât
și aplicații pentru sistemul de operare iOS sau Windows.

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
60
6.Webliografie si Bibliografie

Site-uri Web Accesate:

[1] Informații despre Android SO https://en.wikipedia.org/wiki/Android_(operat îng_system)
(Ultima accesare: 28.05.2017)
[2] Arhitectura Android https://developer.android.com/guide/platform/ îndex.html (Ultima
accesare: 04.06.2017)
[3] Android http://www.tutorialspoint.com/android/android_tutorial.pdf (Ultima accesare:
04.06.2017)
[4] Layout Android https://developer.android.com/guide/topics/ui/declaring -layout.html (Ultima
accesare: 04.06.2017)
[5] Limbajul Java https://en.wikipedia.org/wiki/Java_(programming_language) (Ultima accesare:
08.06.2017)
[6] Limbajul C# https://en.wikipedia.or g/wiki/C_Sharp_(programming_language) (Ultima
accesare: 08 .06.2017)
[7] HTML https://www.w3schools.com/html/html_intro.asp (Ultima accesare: 10 .06.2017)
[8] HTML https://en.wikipedia.org/wiki/HTML (Ultima accesare: 10 .06.2017 )
[9] MSSQL https://www.tutorialspoint.com/ms_sql_server/ (Ultima accesare: 13 .06.2017 )
[10] MSSQL https://technet.microsoft.com/en -us/library/bb264565(v=sql.90).aspx (Ultima
accesare: 13 .06.2017 )
[11] TaskScheduler
https://msdn.microsoft.com/enus/library/windows/desktop/aa383614(v=vs.85).aspx (Ultima
accesare: 13 .06.2017 )
[12] Android Studio https://en.wikipedia.org/wiki/Android_Studio (Ultima accesare: 13 .06.2017 )
[13] Android Studio https://developer.android.com/studio/features.html (Ultima accesare:
13.06.2017 )
[14] Visual Studio https://en.wikipedia.org/wiki/Microsoft_Visual_Studio (Ultima accesare:
14.06.2017 )
[15] SQL Server https://en.wikipedia.org/wiki/Microsoft_SQL_Server (Ultima accesare:
14.06.2017 )

Tudorică Paul Ștefan Aplicație Android – Sistem de afișare a orarului
61
Cărți despre tehnologii

[16] Wei -Meng Lee, Beginning Android 4 Application Development , Editura Wrox, ISBN: 978 –
1-118-19954 -1 , 2012 ,USA, In dianapolis ,Indiana
[17] Jeff Friesen , Learn Java for Android Development, 2nd Edition , Editura Apress , ISBN:
978-1-4302 -5722 -6 ,2013 ,California
[18] Andrew Stellman, Jennif er Greene , Head First C#, 2nd Edition A Learner's Guide to Real –
World Programming with Visual C# and .NET, Editura O'Reilly Media, 2010
[19] Bert Bates, Kathy Sierra, Head First Java , 2nd Edition, Editura O'Reilly Media, 2003

Similar Posts