Final Licenta Frangu Stefanica 01.07 Copy [305506]
PROIECT DE DIPLOMĂ
Îndrumător proiect/[anonimizat]. Luminița DUMITRIU
Absolvent: [anonimizat]
2017
SPECIALIZAREA: [anonimizat]. Luminița DUMITRIU
Absolvent: [anonimizat]
2017
Anexa 1
Nr. _____/__________________
Aprobat,
[anonimizat], absolvent: [anonimizat], Calculatoare, [anonimizat] „Dunărea de Jos” [anonimizat], specializarea (licență) [anonimizat] 2017, [anonimizat] 2017.
Am ales proiectul de diplomă cu titlul „Sistem de comenzi aplicație taxi” sub îndrumarea Prof. dr. ing. Luminița Dumitriu.
Am citit cu atenție REGULAMENTUL DE ÎNTOCMIRE A PROIECTELOR DE DIPLOMĂ ȘI LUCRĂRILOR DE DISERTAȚIE și l-am respectat integral.
Data: __________________________ Semnătura ____________________________
Viza îndrumătorului proiectului __________________________
Viza Directorului de departament ce coordonează programul __________________
Anexa 2
[anonimizat]: [anonimizat], Calculatoare, [anonimizat] „Dunărea de Jos” [anonimizat] 2017, [anonimizat] „Sistem de comenzi aplicație taxi” este elaborat de mine și nu a mai fost prezentat niciodată la o altă facultate sau instituție de învățământ superior din țară sau străinătate. [anonimizat], [anonimizat], cu respectarea regulilor de evitare a plagiatului.
“Plagiatul: [anonimizat], procedurilor, tehnologiilor, [anonimizat], prezentându-le drept creație proprie.”
Am luat la cunoștință că prezentarea unui proiect plagiat va conduce la anularea diplomei de licență.
Data: ________________ Semnătura ____________________________
Anexa 3
ACORD PRIVIND TRANSFERUL REZULTATELOR PROIECTULUI DE DIPLOMĂ/[anonimizat], absolvent: [anonimizat], Calculatoare, [anonimizat] „Dunărea de Jos” [anonimizat] 2017, specializare Calculatoare și Tehnologia Informației, (NU) SUNT DE ACORD * [anonimizat]– [anonimizat], [anonimizat] „Dunărea de Jos” [anonimizat] a facultății și în folosul exclusiv al studenților.
Proiectul/lucrarea conține următoarele:
Partea hardware compusă din:
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Partea software compusă din:
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Data: ________________ Semnătura ____________________________
Notă:
* Se taie (bifează), după caz
REZUMAT
În prezentul proiect de diplomă cu titlul „Sistem de comenzi aplicație taxi”, am prezentat aplicația TaxiApp, în cadrul căreia am implementat un sistem de comenzi cu ajutorul cărora putem simula o comandă dată unui taxi din apropiere sau a unui taxi selectat de către utilizator.
Aplicația este proiectată pentru dispozitivele care folosesc un sistem de operare Android (telefoane mobile, tablete), ce au o versiune a sotfware-ului mai mare decât Android 4.4.4 (KitKat), având o interfață user-friendly, astfel încât, oricărei persoane care va dori să o folosească, nu îi va fi greu să înțeleagă conceptele dezvoltate prin intermediul acestei aplicații.
TaxiApp folosește o conexiune la server, conexiune care ne ajută să verificăm informațiile utilizatorului care se loghează la aplicație (dacă utilizatorul are un cont valid pentru a avea permisiunea de a accesa interfața aplicației) și posibilitatea de crea un cont, în eventualitatea în care utilizatorul accesează această aplicație pentru prima dată și nu are un cont creat. Aplicația cuprinde o bază de date care conține tabela cu utilizatori, în care vor fi salvate informații despre persoanele care folosesc aplicația, tabelă ce va fi populată cu informații despre utilizatori, datele fiind preluate din formularul completat în momentul creării unui cont nou.
Am realizat că dezvoltarea unei aplicații pe o platformă Android prezintă numeroase avantaje și dezavantaje, lucru pe care îl putem observa parcurgând această lucrare de diplomă.
Principalele propuneri pentru dezvoltarea ulterioară a aplicației sunt:
Inserarea unei funcționalități în aplicația taximetristului prin intermediul căreia șoferul taxiului să poată să seteze dacă este disponibil sau dacă este ocupat;
Implementarea unei pagini HTML pentru monitorizarea taxiurilor, în care să fie afișate traseele curselor curente, locațiile utilizatorilor care au plasat comenzi pentru taxiuri, intervalele de timp necesare taximetriștilor pentru parcurgerea distanței dintre locația curentă a taxiului în momentul plasării comenzii până la locația utilizatorului și dintre locația utilizatorului până la destinație;
Crearea de formulare care să conțină informații despre toți taximetriștii și toate taxiurile din baza de date sau pentru fiecare șofer de taxi în parte la selectarea acestuia din pagina HTML. Formularele să fie zilnice și informațiile generate să facă referire la:
Consumul efectuat de fiecare șofer;
Distanța parcursă de fiecare taximetrist;
Banii încasați de fiecare șofer;
Timpul pe care la petrecut taximetristul staționând;
Recenziile acumulate la sfârșitul zilei;
Implementarea unui sistem care să salveze distanța parcursă de fiecare mașină și la atingerea numărului de kilometri să notifice șoferul de taxi că este necesară schimbarea uleiului sau a distribuției, informații ce ar trebui să fie regăsite și în formulare.
LISTA FIGURILOR
Fig. 1 Pictogramă aplicație Uber 4
Fig. 2 Pictogramă aplicație Star Taxi 4
Fig. 3 Pictogramă aplicație Taxi As Client 5
Fig. 4 Ierarhia claselor 6
Fig. 5 Cale către fișierele php apelate 7
Fig. 6 Url-uri apelate pentru accesarea fișierelor serverului 7
Fig. 7 Diagrama cazurilor de utilizare 8
Fig. 8 Reprezentarea modelului conceptual 9
Fig. 9 Fereastră afișată la apăsarea click-ului stânga pe pictograma WampServer 10
Fig. 10 Nume server localhost 11
Fig. 11 Accesare server global 11
Fig. 12 Exemplu port forwarding 11
Fig. 13 Reguli inbound firewall pentru server 12
Fig. 14 Proprietăți regulă inboud creată 12
Fig. 15 Acordare priorități fișier httpd.conf (1) 12
Fig. 16 Acordare priorități fișier httpd.conf (2) 12
Fig. 17 Acordare priorități fișier httpd-vhosts.conf 13
Fig. 18 Fereastră login bază de date 13
Fig. 19 Script PHP logare 14
Fig. 20 Exemplu de AsyncTask folosit pentru logarea la aplicație 17
Fig. 21 Rezultat interogare utilizator 19
Fig. 22 Rezultat interogare prenume Alina 19
Fig. 23 Rezultat inserare utilizator 19
Fig. 24 Rezultat interogare utilizator cu id-ul 6 20
Fig. 25 Script PHP pentru verificarea existenței utilizatorului în baza de date 20
Fig. 26 Script PHP de test a logării utilizatorului 20
Fig. 27 Răspuns server utilizator existent 21
Fig. 28 Răspuns server utilizator inexistent 21
Fig. 29 Script PHP de verificare a inserării datelor înregistrării contului în baza de date 21
Fig. 30 Răspuns server inserare reușită 22
Fig. 31 Răspuns server inserare nereușită 22
Fig. 32 Metodă de verificare a conexiunii internetului și a datelor din fereastra de logare 22
Fig. 33 Mesaj de eroare pentru câmpurile necompletate 23
Fig. 34 Mesaj de eroare pentru email pentru nerespectarea formatului 23
Fig. 35 Metodă de verificare a datelor din fereastra de înregistrare 24
Fig. 36 Mesaj de atenționare pentru introducerea unui număr de telefon care nu este format din 10 cifre 25
Fig. 37 Mesaj de atenționare pentru introducerea unei parole care nu conține o literă mare 25
Fig. 38 Mesaj de atenționare a lipsei conexiunii la internet în momentul logării 26
Fig. 39 Fereastra de logare 30
Fig. 40 Fereastra de înregistrare 31
Fig. 41 Fereastra Google Maps 32
Fig. 42 Vizualizare locație curentă 33
Fig. 43 Inserare destinație 34
Fig. 44 Estimare traseu până la destinație 35
Fig. 45 Mesaj atenționare buton estimare 36
Fig. 46 Apăsare acțiune comandă din fereastra estimare 37
Fig. 47 Mesaj de atenționare la introducerea unei destinații apropiate de locația utilizatorului 38
Fig. 48 Generare traseu 39
Fig. 49 Afișare taxiuri apropiate 40
Fig. 50 Lansare comandă taxi selectat 41
Fig. 51 Apăsare buton anulare 42
Fig. 52 Diagrama claselor 45
INTRODUCERE
Societatea actuală oferă perspective nelimitate în toate industriile existente. Tehnologia informației a cunoscut o evoluție spectaculoasă în ultimele decenii, analizându-se în detaliu fiecare element component al acesteia.
Lucrarea de față, bazată pe tehnologia informației, descrie modul de implementare a unei aplicații pe platformă Android. Aplicația permite utilizatorului să se conecteze la aplicație prin intermediul unui cont pe care îl poate crea cu ajutorul interfeței aplicației, aplicație ce comunică cu un server care verifică utilizatorul care se conectează la aplicație și îi permite acestuia în cazul în care acesta nu are un cont creat să își genereze unul, informațiile fiind trimise serverului și introduse în baza de date, rezultând o arhitectură de tip client – server.
În prezent, telefoanele mobile (smartphones) ce au la bază o platformă Android sunt cele mai răspândite în lume, acaparând un sector mare de piață, ceea ce susține utilitatea implementării aplicației pe această platformă.
Am ales implementarea aplicației pe platformă Android deoarece este o platformă open – source, bine documentată, iar dezvoltarea unei aplicații nu necesită cumpărarea unei licențe.
Am început lucrarea printr-o scurtă analiză a unor aplicații similare în cadrul primului capitol, urmând să dezvolt modalitatea în care a fost proiectată această aplicație având în vedere necesitățile aplicației, în cadrul celui de-al doilea capitol.
În capitolul 3 am descris tehnologiile utilizate în implementarea aplicației; am pus în evidență caracteristicile și resursele aplicației și am prezentat eventualele probleme ce au survenit pe parcursul dezvoltării și implemetării aplicației, însă care nu au fost un impediment atât de mare încât să nu mai pot parcurge celelalte task-uri pe care mi le-am propus.
Pentru a putea verifica stabilitatea aplicației a fost nevoie de o serie de teste, câteva dintre ele fiind prezentate în capitolul 4, care m-au ajutat să îmi dau seama de probleme care apăreau pe parcursul dezvoltării aplicației.
Concluziile pe care mi le-am format pe parcursul studiului la lucrarea de diplomă le-am expus în capitolul 5, unde am prezentat și ideile eventualelor direcții de dezvoltare ale aplicației
Descrierea aplicației este însoțită de pasaje de cod pentru a evidenția, în mod practic, modul în care aceasta a fost implemetată.
Alegerea acestei teme a fost motivată de interesul personal către dezvoltarea de aplicații și de dorința de a realiza o lucrare cât mai practică, de actualitate.
Capitolul 1. ANALIZA APLICAȚIILOR SIMILARE
1.1 Uber
Fig. 1 Pictogramă aplicație Uber
Uber este o aplicație similară de taxiuri prin intermediul căreia poți comanda un taxi, șoferul fiind unul dintre participanții la trafic, nu o persoană cu licență de taximetrist.
Prin intermediul acestei aplicații, orice participant la trafic poate deveni taximetrist, dacă îndeplinește termenii și condițiile de bază ale aplicației pentru a putea intra în baza de șoferi Uber și anume:
să aibă minim 21 de ani;
să dețină permis de conducere categoria B, obținut cu cel puțin 1 an în urmă;
să nu aibă cazier judiciar;
autovehiculul să nu fie mai vechi de 10 ani și să nu aibă mai mult de 7 locuri;
să nu dețină puncte de penalizare.
Această aplicație permite utilizatorului să:
Plaseze o comandă unui participant la trafic care este înregistrat în baza de date Uber și se află în zonă, prin selectarea acestuia;
Facă plăți doar prin intermediul cardului bancar;
Lase o recenzie șoferului care l-a condus la destinație.
1.2 Star Taxi
Fig. 2 Pictogramă aplicație Star Taxi
Star Taxi este o altă aplicație similară care este folosită doar de șoferi atestați.
Această aplicație prezintă următoarele funcționalități:
Clienții sunt localizați în mod automat sau își pot seta manual locația;
Plasarea comenzii se face apăsând pe butonul Comandă Taxi;
Clienții au posibilitatea de a vedea detalii legate de șofer și anume:
Nume;
Poză;
Mașină;
Tarif;
Rating;
Recenzii.
Clienții își pot alege șoferul;
Clienții pot comunica direct cu șoferul prin intermediul aplicației și la sfârșitul cursei pot lăsa o recenzie șoferului și au posibilitatea de a adăuga șoferul ca favorit sau de a-l bloca.
1.3 Taxi As Client
Fig. 3 Pictogramă aplicație Taxi As Client
Taxi As Client este o aplicație similară cu ajutorul căreia poți plasa o comandă pentru chemarea unui taxi și care prezintă următoarele funcționalități:
Posibilitatea de a verifica un taxi;
Clienții pot trimite mesaje dispecerului sau șoferului prin intermediul aplicației;
Posibilitatea de a trimite o reclamație cu nemulțumirile pe care le au clienții;
Salvarea adreselor favorite;
Comandarea unui taxi prin apăsarea unui buton.
CAPITOLUL 2. PROIECTAREA APLICAȚIEI
Proiectarea aplicației constă în:
Arhitectura aplicației;
Proiectarea aplicației – diagrame;
Proiectarea bazei de date.
2.1 Arhitectura aplicației
Arhitectura aplicației va fi discutată pe baza ierarhiei claselor aplicației (figura 4), explicând modalitatea proiectării acestora și funcționalitatea pe care le au acestea în rularea aplicației.
Fig. 4 Ierarhia claselor
Clasele se află în pachetul de bază generat de către aplicație și anume com.example.nafepc.taxiapp.
Pentru a putea înțelege mai bine cum rulează acestă aplicație vom lua fiecare clasă în parte și vom face o scurtă prezentare a acestora, după cum urmează:
BackgroundWorker – această clasă conține un AsyncTask care ne ajută să decongestionăm main thread-ul în momentul în care un utilizator se loghează sau își crează un cont, generând un nou thread în momentul apelării acestei clase. Request-ul se face către un fișier php (figura 5) din serverul creat, prin intermediul unui url (figura 6) pentru fiecare acțiune în parte și anume: logare și înregistrare.
Fig. 5 Cale către fișierele php apelate
Fig. 6 Url-uri apelate pentru accesarea fișierelor serverului
LoginView – această clasă conține fereastra de logare și metodele care verifică dacă informațiile introduse de către utilizator se regăsesc în baza de date, prin apelarea clasei BackgroundWorker și metoda deschiderii ferestrei ce conține harta Google, dacă utilizatorul este regăsit în baza de date.
MapsActivity – această clasă conține fereastra cu harta Google și metodele care creează taxiuri, generează rute, calculează distanțe, generază estimări, manipulează API-ul Google Maps cu privire la actualizarea informațiilor referitoare la locația utilizatorului. La rândul ei, această clasă mai cuprinde următoarele clase:
ReadTask – prin intermediul căreia creăm un thread pentru citirea informațiilor link-ului generat de către clasa Map HttpConnection;
MapHttpConnection – cu ajutorul căreia generăm linkul pe care îl vom accesa în vederea preluării informațiilor necesare;
PathJSONParser – această clasă conține listă de string-uri în care salvăm informațiile referitoare la obiectele de tip JSON (rute dimensiuni) primite din request-ul făcut către Google Maps API și o listă de latitudini și longitudini ce primește ca parametru string-ul returnat de catre PathJson în vederea transformării obiectului de tip JSON într-un format ce poate fi înțeles de către IDE;
ParserTask – clasă cu ajutorul căreia creăm un thread nou pentru citirea obiectelor primite de la clasa PathJSONParser și returnarea punctelor generate între două locații (locația1 (latitudine, longitudine), locația2 (latitudine, longitudine)), pentru a putea genera linia ce va trece prin punctele generate pentru a crea o rută pe harta Google Maps;
Register – clasă ce conține fereastra de înregistrare și metodele care verifică dacă informațiile introduse de către utilizator pentru crearea unui cont nou îndeplinesc condițiile necesare (lungime parolă, format email corect, etc.) și face un request serverului pentru a introduce informațiile în baza de date.
2.2 Proiectarea aplicației – diagrame
2.2.1 Use-cases
Diagrama use-case sau a cazurilor de utilizare este reprezentată de o serie de cazuri de utilizare și de actori prin intermediul căreia:
Se evidențiază intercțiunea sistemului cu un anumit număr de actori;
Se descrie amplu modul de utilizare al sistemului;
Se prezintă funționalitățile oferite de sistem.
Diagrama cazurilor de utilizare creată pentru aplicația prezentată în cadrul acestui proiect de diplomă are ca principali actori clientul (utilizatorul aplicației) și serverul, care conține baza de date.[2]
Prin intermediul acestei diagrame am prezentat relațiile dintre principalele cazuri de utilizare ale aplicației ce rezultă din diagrama prezentă în figura 7:
Fig. Diagrama cazurilor de utilizare
2.2.2 Diagrama de clase
Diagrama de clase descrie sitemul structural, evindențiindu-se clasele care stau la baza aplicației, atributele acestora, metodele și relațiile dintre clase.
Pentru reprezentarea diagramelor este necasară folosirea specificatorilor de acces. Specificatorii de acces se clasează în:
Public – fiind reprezentat prin caracterul „+”;
Private – fiind reprezentat prin caracterul „-”;
Protected – fiind reprezentat prin caracterul „#”;
Acces de pachet – fiind reprezentat prin caracterul „~”.
Diagrame de clase realizată pentru aplicația TaxiApp este reprezentată în figura 52 din Anexa 3. Diagrame.
2.3 Proiectarea bazei de date
2.3.1 Construirea Modelului Conceptual al Datelor (MCD)
Modelul conceptual al datelor este reprezintă o structură logică a bazei de date, o structură care nu depinde de software-ul utilizat sau de modalitatea de stocare a datelor. Pentru crearea unui model conceptual este nevoie de o serie de instrumente care ne ajută la modelarea datelor, cel mai folosit fiind diagrama entitate-relație.
Aplicația prezentă are o bază de date formată dintr-o singură tabelă și anume users_data prezentată în figura 8:
Fig. 8 Reprezentarea modelului conceptual
2.3.2 Construirea Modelului Logic al Datelor (MLD)
Modelul logic al datelor reprezintă descrierea datelor ținând cont de condițiile impuse și de tehnicile de stocare. Proiectul logic al unei baze de date relaționale creează și validează modelul logic de date local. Se dorește să costruim un model logic al datelor ce are ca bază modelul conceptual al datelor creat, validarea modelului logic al datelor realizându-se prin intermediul tehnicii normalizării.
Modelul logic al datelor este reprezentant în rândurile ce urmează:
USERS_DATA:[idU,firstName, lastName, email, phoneNumber, password];.
CAPITOLUL 3. IMPLEMENTAREA APLICAȚIEI
3.1 Tehnnologii folosite
3.1.1 WampServer
Pentru a putea folosi o bază de date la care utilizatorii să se conecteze global, am folosit WampServer cu o bază MySQL.
WampServer este un mediu de dezvoltare web ce rulează pe platforma Windows. Acesta vă permite să creați aplicații web cu Apache, PHP și baza de date MySQL. De asemenea, vine cu PHPMyAdmin pentru a vă gestiona cu ușurință bazele de date. WampServer este singura soluție care vă permite să reproduceți serverul de producție. Odată ce WampServer este instalat, aveți posibilitatea să adăugați cât mai multe versiuni de Apache, MySQL și PHP așa cum doriți. WampServer are, de asemenea, o pictogramă pentru a gestiona serverul și setările acestuia.[1]
Funcționalități
Gestionarea serviciilor Apache și MySQL;
Comutarea online/offline;
Instalarea și comutarea versiunilor de Apache, MySQL și PHP;
Gestionarea setărilor serverelor;
Accesarea fișirelor de sistem;
Crearea unui alias; [3]
Toate aceste funcționalități sunt disponibile la apăsarea click-ului stânga pe pictograma WampServer (figura 9).
Fig. 9 Fereastră afișată la apăsarea click-ului stânga pe pictograma WampServer
Configurarea serverului și conectarea la baza de date MySQL
Pentru configurarea serverului este nevoie să modificăm fișierele httpd.conf și httpd–vhosts.conf, pentru a seta prioritățile și a-i oferi serverului persimiunile necesare rulării acestuia și anume:
Introducerea adresei prin intermediul căreia să fie accesat serverul;
Pentru accesarea serverului din localhost este necesar să setăm ip-ul calculatorului din clasa de adrese a routerului și apoi să o inserăm în fișierul httpd.conf (figura 10).
Fig. 10 Nume server localhost
Pentru accesarea serverului la nivel global, este necesară schimbarea portului la care este ascultat serverul, deoarece pot apărea conflicte cu serviciile web, implicit fiind folosit portul 80;
Pentru accesarea la nivel global a serverului, poate fi utilizată adresa externă a calculatorului care este ascultată la portul 1234 în această aplicație (figura 11).
Fig. 11 Accesare server global
Este necesar să ținem cont că, dacă dorim să schimbăm portul la care este ascultat un serviciu, trebuie să efectuăm un port forwarding.
În figura 12 este prezentat un exemplu de port forwarding:
Fig. 12 Exemplu port forwarding
Nu trebuie să omitem faptul că, pentru a putea permite calculatorului să trimită date, sau să primească date de la programe, servicii sau alte dispozitive, trebuie să adaugăm reguli firewall-ului calculatorului pentru a putea comunica cu dispozitivele care încearcă să comunice cu serverul prin intermediul portului creat și anume portul 1234. În figurile 13 și 14 sunt prezentate exemple de creare de reguli firewall.
Fig. 13 Reguli inbound firewall pentru server
Fig. 14 Proprietăți regulă inboud creată
Acordarea priorităților pentru a putea fi accesat global;
Acordarea priorităților în fișierul httpd.conf sunt exemplificate în figurile 15 și 16.
Fig. 15 Acordare priorități fișier httpd.conf (1)
Fig. 16 Acordare priorități fișier httpd.conf (2)
Acordarea priorităților în fișierul httpd-vhosts.conf sunt exemplificate în figura 17:
Fig. 17 Acordare priorități fișier httpd-vhosts.conf
Punerea serverului online pentru a putea fi accesat de oriunde (după schimbarea portului adresei de accesare a serverului);
Pentru a pune serverul online, este necesară apăsarea pe iconița aplicației și apăsarea pe Put Online.
Pentru conectarea la baza de date este necesară introducerea utilizatorului și parolei în fereastra phpMyAdmin a serverului (figura 18).
Fig. 18 Fereastră login bază de date
3.1.2 MySQL
Pentru implementarea bazei de date am utilizat MySQL, pus la dispoziție de către mediul de dezvoltare WampServer.
MySQL este un sistem de gestiune a bazelor de date relaționale, produs de compania suedeză MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală, fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP).
Deși este folosit foarte des împreună cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum ar fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip specific API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL, cum ar fi ASP sau Visual Basic. În sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul cărora respectivele limbaje să poată folosi acest SGBD mult mai ușor decât prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale. [4]
Manipularea datelor MySQL:
INSERT – inserează un articol într-o tabelă:
INSERT INTO tabel (câmp1, câmp2, camp3, etc.) VALUES (valoare1, valoare2, valoare3, etc).;
UPDATE – actualizează un set de articole:
UPDATE tabel SET câmp = valoare [WHERE condiție];
DELETE – șterge un set de articole:
DELETE FROM tabel [WHERE condiție];
3.1.3 PHP
Pentru interogarea bazei de date am folosit scripturi PHP (figura 19):
Fig. 19 Script PHP logare
PHP este un limbaj de programare. Numele PHP provine din limba engleză și este un acronim recursiv: Php: Hypertext Preprocessor. Folosit inițial pentru a produce pagini web dinamice, este folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web. Se folosește în principal înglobat în codul HTML, dar începând de la versiunea 4.3.0 se poate folosi și în mod „linie de comandă” (CLI), permițând crearea de aplicații independente. Este unul din cele mai importante limbaje de programare web open-source și server-side, existând versiuni disponibile pentru majoritatea web serverelor și pentru toate sistemele de operare. Conform statisticilor este instalat pe 20 de milioane de site-uri web și pe 1 milion de servere web. Este disponibil sub Licenṭa PHP ṣi Free Software Foundation îl consideră a fi un software liber.[5]
Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici:
Familiaritatea: sintaxa limbajului este foarte ușoară combinând sintaxele unora din cele mai populare limbaje Perl sau C;
Simplitatea: sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executându-se între marcajele speciale;
Eficiența: PHP-ul se folosește de mecanisme de alocare a resurselor, foarte necesare unui mediu multiutilizator, așa cum este web-ul;
Securitate: PHP-ul pune la dispoziția programatorului un set flexibil și eficient de măsuri de siguranță;
Flexibilitate: fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a ține pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache, IIS, Zeus, server, etc.;
Gratuitate: este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă a PHP-ului la nevoile web-ului, eficientizarea și securizarea codului.[5]
3.1.4 Android Studio
Pentru implementarea aplicației am utilizat Android Studio.
Android Studio este IDE-ul oficial pentru platforma Android.
Android este un sistem de operare pentru telefoane mobile și alte dispozitive dezvoltată de Google, bazat pe nucleul Linux și conceput inițial pentru dispozitive cu touchscreen, cum ar fi telefoanele sau tabletele. Platforma Android permite utilizatorilor să scrie cod în limbajul Java, Google punând la dispoziție bibliotecile dezvoltate de aceștia.[6]
Java este un limbaj de programare orientat-obiect, puternic tipizat, conceput de către James Gosling la Sun Microsystems (acum filială Oracle) la începutul anilor ʼ90, fiind lansat în 1995. Cele mai multe aplicații distribuite sunt scrise în Java, iar noile evoluții tehnologice permit utilizarea sa și pe dispozitive mobile (telefon, agendă electronică, etc.). În felul acesta se creează o platformă unică, la nivelul programatorului, deasupra unui mediu eterogen extrem de diversificat. Acesta este utilizat în prezent cu succes și pentru programarea aplicațiilor destinate intranet-urilor.[7]
3.1.5 AsyncTask
Pentru preluarea rutelor și a punctelor în format JSON, interogarea și conectarea la baza de date, am folosit task-uri asincrone.
Task-ul asincron ajută la eficientizarea rulării aplicației, creând un fir de execuție care decongestionează main thread-ul. Task-ul asincron este reprezentat de clasa AsyncTask, acesta fiind un wrapper parametrizat, ce pune la dispoziție o serie de metode ce ușurează interacțiunea dintre thread-ul creat și thread-ul principal.
AsyncTask-ul trebuie folosit pentru operații de scurtă durată, nefiind recomandată folosirea acestuia dacă este necesară folosirea unui thread o perioadă mai lungă de timp.
AsyncTask-ul este caracterizat de către 3 tipuri generice și anume: Params, Progress și Result și de 4 metode.
Dezvoltarea tipurilor generice ale AsyncTask-ului:
Tipul Params – face referire la parametrii pe care îi primește AsyncTask-ul
Prin intermediul acestui tip, îi specificăm task-ului tipul parametrilor pe care acesta îi va primi în funcție de scopul utilizării acestuia și anume, dacă task-ul trebuie să verifice date din baza de date, tipul parametrilor va fi de tip String.
Tipul Progress – face referire la progresul rulării task-ului asincron
Tipul Progress ne ajută să informăm utilizatorul asupra progresului făcut de task-ul creat returnând o valoare pe care o evaluăm pentru a ne da seama în ce stadiu este task-ul și cât mai durează până la finalizarea acestuia.
Tipul Result – returnează rezultatul obținut în urma rulării task-ului
În momentul finalizării rulării task-ului prin intermediul acestui tip este returnat un obiect de tipul result, care conține rezultatul operațiilor efecuate de task.
În momentul în care o clasă extinde clasa AsyncTask, sunt generate cele 4 metode ale clasei extinse, prezentate în rândurile ce urmează:
metoda onPreExecute
După cum spune și numele metodei, codul din această metodă este executat înainte ca task-ul să înceapă execuția, fiind invocat în main thread. În general este folosită pentru a genera progresul task-ului.
metoda doInBackground
Această metodă execută task-ul fiind apelată imediat după metoda onPreExecute. Parametrii pe care îi primește task-ul îi transmite aceastei metode, cu ajutorul cărora va fi generat un obiect de tipul specificat.
metoda onProgressUpdate
Pentru a afișa progresul prin intermediul metodei publishProgress, este apelată metoda onProgressUpdate, actualizând progresul unui progress bar.
metoda onPostExecute
După cum sugerează și numele metodei, onPostExecute este apelată în momentul în care un task este terminat și primește parametru argumentul returnat de metoda doInBackground.
Un exemplu de folosire al AsyncTask-ului pentru a trimite serverului datele introduse de utilizator în fereastra de logare, poate fi observat în figura 20:
Fig. 20 Exemplu de AsyncTask folosit pentru logarea la aplicație
Ce trebuie știut la folosirea AsyncTask-ului?
Metodele onPreExecute, doInBackground și onPostExecute nu se apelează manual, ele se apelează automat de către sistem;
Pentru a apela un alt AsyncTask este necesar să inserăm codul task-ului în metoda onPostExecute;
Parametrii pe care îi poate primi AsyncTask-ul pot fi de tipul Object și anume un vector de obiecte;
AsyncTask-ul nu poate fi apelat în interiorul altui AsyncTask, apelarea se face doar din thread-ul principal.
Impedimente AsyncTask:
Nu poate fi repornit dacă acesta și-a terminat execuția. Acesta poate rula doar o singură dată;
Nu poate fi folosit pentru rularea îndelungată ale unor thread-uri sau a unor thread-uri la care nu cunoaștem timpul de rulare al acestora;
Pentru a putea reporni AsyncTask-ul este necesară instanțierea acestuia ori de câte ori este nevoie să fie refolosit.
3.2 Probleme de implementare
La implementarea aplicației am întâmpinat următoarele probleme:
Testarea Google Maps-ului nu poate fi facută pe emulator, primind un mesaj de eroare de forma: „TaxiApp won’t run unless you update Google Play services”;
Conectarea globală la server nu putea fi efectuată deoarece erau necesare permisiuni suplimentare în fișierul httpd-vhosts.conf;
Oprirea handler-ului care ajută la simularea deplasării taxiului genera o eroare care oprea aplicația, deoarece handler-ul se termina după ce se făcea actualizarea hărții Google, el nefiind văzut null după actualizare.
CAPITOLUL 4. TESTAREA APLICAȚIEI
Testarea aplicației este bazată pe:
Testarea bazei de date;
Testarea conexiunii aplicației cu serverul prin intermediul scripturilor PHP;
Validarea datelor;
Testarea mesajelor de atenționare.
4.1 Testarea bazei de date
Testarea bazei de date constă în testarea interogărilor pe care aplicația le utilizează și interogărilor verificării informațiilor din baza de date;
Afișarea utilizatorul identificat de emailul și parola introduse:
Rezultatul interogării SELECT * FROM `users_data` WHERE email like 'ilie443@yahoo.com' and password like 'Ilie443' este prezentat în figura 21:
Fig. 21 Rezultat interogare utilizator
Preluarea informațiilor referitoare la utilizatorii care au prenumele Alina:
Rezultatul interogării SELECT * FROM `users_data` WHERE lastName like 'Alina' este prezentat în figura 22:
Fig. 22 Rezultat interogare prenume Alina
Inserarea datelor în tabela utilizatorilor:
Rezultatul interogării INSERT INTO `users_data` (`idU`, `firstName`, `lastName`, `email`, `phoneNumber`, `password`) VALUES (NULL, 'Popescu', 'Maria', 'maria25@gmail.com', '0756423231', 'Maria02') este prezentat în figura 23:
Fig. 23 Rezultat inserare utilizator
Preluarea informațiilor inserate anterior:
Rezultatul interogării SELECT * FROM `users_data` WHERE idU=6 este prezentat în figura 24:
Fig. 24 Rezultat interogare utilizator cu id-ul 6
4.2 Testarea conexiunii aplicației cu serverul prin intermediul scripturilor PHP
Testarea conexiunii aplicației cu serverul constă în verificarea răspunsului de la server în vederea rulării unui task cu succes.
Verificarea dacă utilizatorul există în baza de date pentru a avea acces la interfața apicației:
Scriptul PHP pentru verificarea utilizatorului este prezentat în figura 25:
Fig. 25 Script PHP pentru verificarea existenței utilizatorului în baza de date
Pentru a face verificarea prin intermediul unui browser direct la calea scriptului am creat un script de test prezentat în figura 26:
Fig. 26 Script PHP de test a logării utilizatorului
Informațiile introduse de utilizator în fereastra de înregistrare sunt verificate cu ajutorul acestui script. Dacă utilizatorul există în baza de date, scriptul va returna mesajul succes (figura 27), iar dacă acesta nu există scriptul va returna mesajul failed (figura 28).
Fig. 27 Răspuns server utilizator existent
Fig. 28 Răspuns server utilizator inexistent
Verificarea dacă informațiile înregistrării contului au fost introduse în baza de date:
Scriptul PHP pentru verificarea inserării datelor înregistrării contului în baza de date este prezentat în figura 29:
Fig. 29 Script PHP de verificare a inserării datelor înregistrării contului în baza de date
Asemeni scriptului de verificare a utilizatorului, scriptul de inserare a informațiilor înregistrării contului va returna mesajul insert succesful (figura 30) dacă au fost inserate datele în baza de date și mesajul insert failed (figura 31) dacă datele nu au fost inserate.
Fig. 30 Răspuns server inserare reușită
Fig. 31 Răspuns server inserare nereușită
4.3 Validarea datelor
Validarea datelor constă în verificarea tuturor datelor introduse de către utilizator în formularele completate.
Verificarea informațiilor introduse în câmpurile ferestrei de logare și a conexiunii internetului sunt efectuate prin intermediu metodei prezentată în figura 32:
Fig. 32 Metodă de verificare a conexiunii internetului și a datelor din fereastra de logare
Această metodă verifică dacă internetul este pornit și dacă sunt îndeplinite condițiile de completare ale câmpurilor ferestrei de logare și anume:
Câmpurile nu trebuie sa fie goale;
Emailul nu trebuie să conțină caractere speciale;
Emailul trebuie sa fie de forma: exemplu@domeniu.com.
Dacă unul dintre câmpuri nu este completat, aplicația va afișa un mesaj de eroare exemplificat în figura 33:
Fig. 33 Mesaj de eroare pentru câmpurile necompletate
Dacă emailul conține caractere speciale și nu respectă formatul: exemplu@domeniu.com va fi afișat un mesaj de eroare prezentat în figura 34:
Fig. 34 Mesaj de eroare pentru email pentru nerespectarea formatului
Verificarea informațiilor introduse în câmpurile ferestrei de înregistrare sunt efectuate prin intermediu metodei prezentată în figura 35:
Fig. 35 Metodă de verificare a datelor din fereastra de înregistrare
Această metodă verifică dacă sunt îndeplinite condițiile de completare ale câmpurilor din fereastra de înregistrare și anume:
Câmpurile nu trebuie sa fie goale;
Emailul nu trebuie să conțină caractere speciale;
Emailul trebuie sa fie de forma: exemplu@domeniu.com;
Numărul de telefon trebuie să fie format din cifre și să aibă 10 cifre;
Numărul de telefon trebuie să înceapă cu 07;
Parola trebuie să conțină minim 5 caractere și o literă mare.
Dacă numărul de telefon nu conține 10 cifre va fi afișat mesajul de eroare prezentat în figura 36:
Fig. 36 Mesaj de atenționare pentru introducerea unui număr de telefon care nu este format din 10 cifre
Dacă numărul de parola nu conține o literă mare va fi afișat mesajul de eroare prezentat în figura 37:
Fig. 37 Mesaj de atenționare pentru introducerea unei parole care nu conține o literă mare
4.4 Testarea mesajelor de atenționare
Testarea mesajelor de atenționare presupune verificarea dacă mesajele sunt afișate în momentul în care aplicația nu respectă condițiile impuse și anume:
Apăsarea pe butonul de logare fără a avea conexiune la internet;
Logarea în aplicație fără a avea locația activă;
Afișare mesaj de întâmpinare la logare;
Apăsarea butonului comandă fără a avea un taxi selectat;
Apăsarea butonului estimare fără a avea o destinație selectată;
Apăsarea acțiunii comandă din pop-ul estimării având destinația apropiată de locația curentă a utilizatorului.
În momentul în care se apasă pe butonul de logare fără a avea o conexiune la internet va fi afișat un mesaj de atenționare de tip toast (figura 38) deoarece nu se poate face conexiunea la server pentru interogarea bazei de date.
Fig. 38 Mesaj de atenționare a lipsei conexiunii la internet în momentul logării
CAPITOLUL 5. CONCLUZII ȘI DIRECTIVE VIITOARE
5.1 Concluzii
Am realizat că dezvoltarea unei aplicații pe o platformă Android prezintă numeroase avantaje și dezavantaje, lucru pe care îl putem observa parcurgând această lucrare de diplomă.
Avantajul dezvoltării unei aplicații cu sistem de operare Android, este acela că nu este necesar să achiziționezi o licență, IDE –ul putând fi folosit gratuit.
Aplicația dezvoltată și prezentată în cadrul acestei lucrări, poate fi îmbunătățită în mai multe direcții, prezentate în directive viitoare, impedimentul fiind doar buna cunoștință a tehnologiilor noi ce vor fi folosite pentru implementarea ideilor.
Dezavantajul acestei aplicații este acela că utilizatorul nu poate observa informații referitoare la șoferul taxiului pe care îl comandă și la rândul său să lase un review în care să prezinte experiența pe care a avut-o în timpul deplasării către destinație.
5.2 Directive viitoare
Aplicația prezentată poate fi îmbunatățită și dezvoltată în continuare prin:
Crearea unei baze de date cu taximetriști și cu mașinile pe care le deține firma de taxiuri;
Posibilitatea de a vizualiza oricând data la care expiră: ITP-ul, asigurarea, trusa de prim ajutor, extinctorul și implementarea sistemului de a trimite notificări tuturor șoferilor de taxi prin intermediul aplicației de taximetrist;
Implementarea unui aplicații pentru taximetrist, prin intermediul căreia taximetristul să primească notificări despre comenzile care se află într-o zonă apropiată locului său de staționare și posibilitatea acestuia de a accepta/refuza o comandă într-un interval de timp stabilit de către dezvoltator;
Inserarea unei funcționalități în aplicația taximetristului prin intermediul căreia șoferul taxiului să poată să seteze dacă este disponibil sau dacă este ocupat. În momentul în care un taximestrist este ocupat, utilizatorul nu trebuie să poată să mai selecteze acel taxi și taximetristul nu trebuie să primească notificări despre comenzile plasate;
Implementarea unui sistem în care clientul să poată lăsa un review la sfârșitul cursei taximetristului care i-a preluat comanda;
Implementarea unui sistem în care șoferul să poată lăsa un review clientul la sfârșitul cursei;
Implementarea unei pagini HTML pentru monitorizarea taxiurilor, în care să fie afișate traseele curselor curente, locațiile utilizatorilor care au plasat comenzi pentru taxiuri, intervalele de timp necesare taximetriștilor pentru parcurgerea distanței dintre locația curentă a taxiului în momentul plasării comenzii până la locația utilizatorului și dintre locația utilizatorului până la destinație;
Crearea de formulare care să conțină informații despre toți taximetriștii și toate taxiurile din baza de date sau pentru fiecare șofer de taxi în parte la selectarea acestuia din pagina HTML. Formularele să fie zilnice și informațiile generate să facă referire la:
Consumul efectuat de fiecare șofer;
Distanța parcursă de fiecare taximetrist;
Banii încasați de fiecare șofer;
Timpul pe care l-a petrecut taximetristul staționând;
Recenziile acumulate la sfârșitul zilei;
Implementarea unui sistem care să salveze distanța parcursă de fiecare mașină și la atingerea numărului de kilometri să notifice șoferul de taxi că este necesară schimbarea uleiului sau a distribuției, informații ce ar trebui să fie regăsite și în formulare;
Implementarea unui sistem care să îi permită utilizatorului să selecteze zona în care dorește să comande un taxi.
BIBLIOGRAFIE
[1]. http://download.cnet.com/WampServer-64-Bit/3000-10248_4-75544590.html – traducere, 17 – 06 – 2017;
[2]. http://inf.ucv.ro/~mihaiug/courses/is/lab/lab3-4.pdf, 02.07.2017.
[3]. https://ro.wikipedia.org/wiki/Android_(sistem_de_operare), 25 – 06 – 2017;
[4]. https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare), 25 – 06 – 2017;
[5]. https://ro.wikipedia.org/wiki/MySQL, 25 – 06 – 2017;
[6]. https://ro.wikipedia.org/wiki/PHP, 25 – 06 – 2017;
[7]. http://www.wampserver.com/en/ – traducere, 17 – 06 – 2017;
ANEXE
ANEXA 1. MANUAL DE UTILIZARE
Utilizarea aplicației se face pe baza unui cont, cu ajutorul căruia utilizatorul se poate conecta la aplicație.
Pornirea aplicației ne direcționează către fereastra de logare, unde suntem nevoiți să introducem datele contului pe care l-am creat anterior (emailul, cu ajutorul căruia am creat contul și parola pe care am asignat-o acestuia) (figura 39).
Fig. 39 Fereastra de logare
În cazul în care nu aveți un cont de utilizator creat, este necesară crearea acestuia pentru a vă putea conecta la aplicație. Pentru a crea un cont este necesară apăsarea butonului Creare cont, de unde veti fi redirectionat către fereastra de logare (figura 40), unde sunteți nevoiți să completați câmpurile necesare creării contului și anume:
nume;
prenume;
email;
număr de telefon;
parolă.
Fig. 40 Fereastra de înregistrare
Apăsarea butonului Înregistrare se face după ce toate câmpurile au fost completate și toate condițiile completării acestor câmpuri au fost îndeplinite pentru a putea crea un cont nou, altfel vom primi mesaje de eroare referitoare la:
necompletarea câmpurilor;
nerespectarea formatului emailului;
introducerea unui număr de telefon invalid (nu conține 10 cifre) sau a unui număr care nu aparține rețelelor de telefonie din România (07…);
introducerea unui parole scurte sau care nu conține litere mari și cu o lungime mai mare de 5 caractere.
La apăsarea butonului Logare, dacă nu sunt greșite emailul sau parola, se va efectua conectarea la aplicație și redirecționarea către o altă fereastră în care se va încărca Google Maps (figura 41).
Fig. 41 Fereastra Google Maps
Prin intermediul acestei ferestre avem posibilitatea de a:
vizualiza locația curentă a utilizatorului în timp real, actualizată (cerculețul albastru) (figura 42);
Fig. 42 Vizualizare locație curentă
introduce o locație spre care dorim să ne deplasăm la apăsarea unei zone pe harta Google (reprezentată printr-un pin de culoare albastru deschis) (figura 43); la apăsarea oricărei zone din harta Google se va marca zona selectată.
Fig. 43 Inserare destinație
genera o estimare a distanței până la locația dorită, a consumului pe care l-ar face taximetristul pentru a parcurge acea distanță și a costului pe care o să-l efectuăm la finalizarea comenzii (figura 44). Dacă a fost inserată o locație, la apăsarea butonului Estimare va fi afișată o fereastră în care vor fi afișate: distanța până la destinație, consumul de combustibil al taxiului și costul cursei.
Fig. 44 Estimare traseu până la destinație
În caz contrar, dacă nu a fost inserată o destinație pe hartă, pe ecran va fi afișat un mesaj de atenționare precum că nu ați introdus locația reprezentat în figura 45:
Fig. 45 Mesaj atenționare buton estimare
Fereastra deschisă la apăsarea butonului estimare, conține două acțiuni posibile și anume: Anulare și Comandă (figura 46).
Dacă vom apăsa Anulare estimarea generată va fi închisă și avem posibilitatea recalculării estimării, sau generarea unui traseu nou și implicit o estimare nouă.
comanda un taxi după generarea estimării;
observa intervalul estimativ de timp necesar taximetristului pentru a putea ajunge la locația utilizatorului din locația în care acesta se află în momentul plasării comenzii;
Prin apăsarea acțiunii Comandă, din fereastra generată de butonul estimare, pe hartă va apărea cel mai apropiat taxi care va porni către locația utilizatorului în scurt timp și va fi generat un mesaj pe ecran cu intervalul de timp estimativ pe care îl va efectua taximetristul până la poziția persoanei care a plasat comanda, mesaj ce se va actualiza la fiecare secundă.
Fig. 46 Apăsare acțiune comandă din fereastra estimare
Nu putem plasa o comandă dacă locul de destinație este apropiat de locația utilizatorului sau chiar locația acestuia, fapt prezentat în figura 47:
Fig. 47 Mesaj de atenționare la introducerea unei destinații apropiate de locația utilizatorului
observa traseul optim (cel mai scurt) pe care îl va parcurge taximetristul din zona din care este generată estimarea, până în zona în care a fost marcată destinația pe hartă. După selectarea destinației pe hartă și apăsarea butonului estimare se va genera un traseu (cel mai scurt) din zona în care a fost generată estimarea și până în zona marcată pe hartă (figura 48).
Fig. 48 Generare traseu
observa taxiurile din aproprierea zonei în care vă aflați;
Prin apăsarea butonului Taxiuri, pe hartă vor apărea cele mai apropiate taxiuri din zonă, fapt exemplificat în figura 49:
Fig. 49 Afișare taxiuri apropiate
selecta un taxi care este în zona învecinată locației utilizatorului, în vederea preluării comenzii;
Putem selecta orice taxi generat la apăsarea butonului taxi și putem plasa o comandă prin apăsarea butonului comandă, din colțul din stânga al ecranului, unde am regăsit butonul Taxiuri (figura 50).
Fig. 50 Lansare comandă taxi selectat
anula comanda efectuată;
Orice comandă activă efectuată, poate fi anulată prin apăsarea butonului anulare (figura 51).
Fig. 51 Apăsare buton anulare
ANEXA 2. PLAN DE TESTE
Aplicația TaxiApp va fi supusă următoarelor teste:
Testarea bazei de date:
Verificarea datelor prin intermediul interogărilor bazei de date ce constau în:
Selectarea informațiilor dintr-o tabelă;
Inserarea datelor într-o tabelă;
Actualizarea datelor dintr-o tabelă;
Ștergerea informațiilor din baza de date.
Testarea aplicației:
Fereastra de autentificare:
Testarea mesajelor de eroare generate prin:
Necompletarea câmpurilor;
Completarea câmpurilor cu informații care nu respectă regulile impuse de către dezvoltator;
Testarea conexiunii la internet;
Testarea conexiunii la server;
Verificarea dacă utilizatorul există în baza de date.
Fereastra de înregistrare:
Testarea mesajelor de eroare generate prin:
Necompletarea câmpurilor:
Completarea câmpurilor cu informații care nu respectă regulile impuse de către dezvoltator;
Testarea conexiunii la internet;
Testarea conexiunii la server;
Verificarea dacă informațiile creării contului au fost inserate în baza de date.
Fereastra Google Maps:
Testarea conexiunii la internet;
Verificarea conexiunii la locația dispozitivului;
Verificarea încărcării hărților Google;
Testarea accesării și afișării locației curente;
Testarea inserării destinației la atingerea hărților Google;
Testarea afișării taxiurilor apropiate;
Testarea generării estimării;
Testarea anulării comenzii;
Testarea comandării unui taxi din popup-ul ferestrei de estimare;
Testarea comandării unui taxi selectat;
Testarea mesajelor de atenționare:
În momentul în care plasăm o comandă fără a fi vreun taxi selectat;
În momentul în care plasăm o comandă a cărei destinație este foarte apropiată de locația utilizatorului;
Dacă harta Google pornește fără locația activată.
Verificarea afișării textului în care este afișat intervalul de timp în care va ajunge taximetristul;
Verificarea simulării deplasării taxiului după plasarea comenzii.
Testarea pe diferite dispozitive:
Testarea pe diferite telefoane cu platformă Android;
Testarea pe dferite tablete cu platformă Android.
ANEXA 3. DIAGRAME
Fig. Diagrama claselor
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Final Licenta Frangu Stefanica 01.07 Copy [305506] (ID: 305506)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
