Sistem de Recomandare a Produselor

Cuprins

Introducere

Context general

Principala problemă cu care se confruntă multe întreprinderi din ziua de astăzi nu este reprezentată de lipsa de bunuri, ci de deficitul de clienți. Majoritatea firmelor produc mai multe bunuri decât ar putea să cumpere consumatorii.

Încă din cele mai vechi timpuri, astfel de probleme apăreau în domeniul marketingului. În general, marketingul reprezintă „arta și știința de a convinge posibilii clienți să cumpere”. Totodată acesta este definit ca fiind și „un proces social și managerial prin care indivizi sau grupuri de indivizi obțin ceea ce le este necesar și doresc prin crearea, oferirea și schimbul de produse și servicii având o anumită valoare”. Simplist marketingul reprezintă „arta și știința de a vinde”. [1]

Istoria este la fel de lungă ca și a omului pe pământ. Omul dintotdeauna s-a confruntat cu multe schimbări pentru a-și satisface nevoile, dorințele sau pentru a-și înlătura stările de disconfort generate de acestea. Putem identifica trei mari perioade:

Era producției( 1930 ): dirijarea fluxului de bunuri sau servicii de la producător la consumator(informație, comenzi, distribuire);

Era vânzărilor( 1930-1960 ): marketing definit ca fiind un sistem de activități pentru promovarea și distribuirea produselor în așa fel încât să satisfacă cerințele consumatorilor actuali și potențiali( reclame, responsabili cu vânzările, comenzi, distribuire );

Era marketingului total( 1960+ ): eforturi intensificate a tuturor departamentelor din firmă spre a putea satisface cerintele consumatorului( cercetare de piață, promovare, responsabili cu vânzări, luare comenzi, distribuire produse). [2]

Majoritatea indivizilor consideră că știu cam ce este marketingul. Acesta este frecvent considerat ca fiind un sinonim cu vânzarea, publicitatea sau cu unele metode utilizate de firme pentru a convinge consumatorii să cumpere produsele acestora. De fapt, marketingul este considerat ca fiind un proces mult mai complex și dinamic.

Unele strategii sunt sau se dovedesc extrem de eficiente în a promova produsele, serviciile, afacerile, imaginea și reputația pe care se bazeaza succesul în mediul de afaceri. În tot acest timp, unele strategii de marketing sunt investiții nerentabile, investiții în cazul cărora ROI( Return On Investment ) nu mai apare niciodată.

În limbaj profesional, marketingul are un spectru mult mai mare de întelesuri având ca element comun, punerea clienților în centrul atenției. Produsele sunt de obicei dezvoltate pentru a satisface dorințele clienților sau în anumite cazuri, chiar a unor grupuri de clienți anume. Astfel, marketingul s-a împărțit în patru segmente de activitate. Setul de 4P a devenit un termen al limbajului. Cei 4P sunt:

Produs: aspectele de Managementul produsului și Marketing de produs se ocupă de specificațiile bunului sau produsului în cauză, și la modul în care relaționează la nevoile și dorințele utilizatorului final;

Preț: se referă la procesul de stabilire a prețului pentru un produs, inclusiv reducerile de preț.

Promovare: include reclama, relațiile publice, publicitatea și vânzările personale, și se referă la diferite metode de promovare a unui produs, brand sau companie;

Plasament( distribuție ): se referă la modul în care produsul ajunge la client; spre exemplu, plasamentul la locul vânzării sau desfacerii cu amănuntul. Acest al patrulea P face referință la locul unde produsul sau serviciul este vândut, exemplu regiune geografică sau ramura industrială, și segmentul căruia se adreseaza( tineri adulți, familii, companii, oameni de afaceri, femei, barbați, etc ). [3]

Motivația alegerii acestui proiect

Având în vedere că majoritatea oamenilor se simt importanti când le este cerută opinia în anumite aspecte, am ales o temă de proiect care ar putea oferii această oportunitate.

În prezent, clienții sunt mult mai informati și raționali în decizia de cumpărare ca în trecut. Potențialii clienți sunt lăsați să spună ce doresc, iar agentul de vânzări caută o soluție la acea problema. În mod normal, agentul va aloca un anumit timp pentru a rezolva doleanțele clienților. Toate acestea nu mai sunt necesare, deoarece cu ajutorul aplicației, clienții se ajută „între ei” într-un mod foarte ușor și accesibil oricui, făcând alegerea în cunoștiință de cauză.

În acest fel, aplicația ajută clientul să proceseze ce îsi dorește, se simte respectat și satisfăcut de modalitatea în care a fost „tratat”. În oferirea unei posibilități utile și eficiente pentru alegerea mărfii dorite, acesta va putea da un feed-back pozitiv sau negativ prietenilor, partenerilor de afaceri, etc în funcție de cât de mulțumit a fost de serviciile oferite, fapt ce va spori afluxul de clienți și posibiliățile crescute de vânzări ale magazinelor care beneficiază de această aplicație.

Obiectivele Proiectului

Obiective generale

Obiectivul principal al acestui proiect este acela de a studia, de a defini și de a se implementa o aplicație mobile care reduce timpul, stresul, aglomerația și mulți alți factori care împiedică o persoană de a se informa și de a cumpăra un produs.

În contextul în care activitatea de vânzări în toate domeniile vieții economice este orientată către piață, tehnicile moderne de marketing trebuie să satisfacă clienții și să păstreze o legătură puternică cu aceștia. În această direcție se înscrie și aplicația aleasă. În conceperea acestei tehnici de prezentare și vânzare a produselor, am pornit de la premiza creării unei baze de date tocmai de către client, pentru client, care e capabil să vizualizeze sau să recomande un produs. Cu aceasta aplicație în domeniul vânzărilor, se construiește o relație de tip câștig-câștig, în ambele părți implicate în obținerea beneficiilor(client-magazin).

Planul proiectului

Pentru început, pentru dezvoltarea proiectului și pentru a îndeplini toate cerințele necesare implementării, vom fi nevoiți să concepem un plac pe care trebuie ulterior să-l urmăm.

Planul proiectului constă în împărțirea obiectivului principal al acestui proiect în mai multe etape: etapa în care ne definim cerințele, o etapă de cercetare, etapa de analiză, etapa de proiectare a aplicației, etapa de implementare a aplicației, testarea funcționalității și rezultatele experimentale.

Definirea cerințelor

Această etapă trebuie să reprezinte începutul oricărui proiect. Pentru a putea începe cercetarea, cerința proiectului trebuie să fie formulată concis, cât se poate de clar. Totodată, metodele esențiale gândite pentru aplicație trebuie identificate din contextul problemei, elemente ca tipul de logare, modul de vizualizare a produselor, modul de recomandare a unui produs, etc.

Cercetare

Aici ar trebui să avem ca rezultat studiul nostru despre anumite tehnici necesare implementării unei aplicații cât mai dezvoltată, și totodată cât mai simplă de folosit pentru orice utilizator. Astfel, am adunat informații despre Android, marketing și metodele acestuia pentru succes, tipuri de servere, baze de date, toate acestea axându-se pe cerințele problemei prezentate. Studierea acestor lucruri și compararea lor cu alte articole din domeniu, care s-au mai confruntat cu probleme de genul, a dus la identificarea unor avantaje, ceea ce reprezintă un pas important pentru dezvoltarea aplicației. De aceea, dupa toate studiile, ar trebui făcute comparații între metodele existente pentru a identifica care dintre acestea sunt mai apropiate de cerințele noastre.

Analiza

În această etapă am ales să fac un rezumat al tuturor informațiilor adunate în etapa precedentă. Scopul poate fi atins ușor daca se va parcurge documentele identificate în etapa de cercetare, de unde se va extrage elementele importante, care ulterior vor fi folosite pentru o bună implementare. Prin reluarea informațiilor, se vor putea identifica metode noi, idei noi care putem de asemenea să le folosim în continuare.

Proiectare

Această etapă reprezintă proiectarea propriu-zisă a aplicației. Primul lucru care trebuie verificat este acela de a verifica dacă pot fi îndeplinie toate cerințele stabilite anterior. Această etapă constituie etapa cea mai importantă deoarece face legătura dintre partea teoretică studiată și partea practică ce urmează a fi creată. În momentul proiectării, noțiunile generale ce țin de Android trebuie să fie destul de bine cunoscute pentru o dezvoltare cât mai bună. Un pas important îl constituie folosirea cât mai multor instrumente puse la dispoziție de Android, ceea ce face posibil o dezvoltare amplă a proiectului. Rezultatul etapei ar trebui să conțină un pseudo-cod al metodelor folosite. Pe lângă acestea, diferite metode asemănătoare cu cele folosite ar trebui să fie extrase, deoarece putem face o mai bună analiză prin a găsi diferențele și asemănările dintre acestea, subliniind metodele alese.

Tool-urile folosite pentru implementare este ultimul pas din această etapă. Există numeroase modalități de concepere a unui proiect. Unele tipuri de aplicații sunt create în așa fel încât nu pot fi testate decât pe platforme reale mobile. Android pune la dispoziție două tipuri de testare a aplicației: testare printr-un emulator virtual, care are aproape toate caracteristicile unui dispozitiv real; testare propriu-zisă pe un dispozitiv real.

Implementare

În etapa de implementare se pun în aplicare toate cunoștiințele adunate și stabilite anterior. Astfel, crearea proiectului se va face la 0. Acest lucru constă în alegerea mediului de dezvoltare a aplicației, implementarea acesteia într-un limbaj de programare, care poate fi folosit pentru rularea pe dispozitive existente din ziua de azi. Abordarea unui proiect este foarte complexă, deoarece trebuie luați în considerare foarte mulți factori.

Alt pas al implementării ce trebuie luat în considerare este acela că va fi necesar să ne folosim de anumiți algoritmi deja existenți. Prin implementarea lor asigurăm buna funcționare a proiectului și totodată putem face o comparație cu alte modele create de către noi. Tot ceea ce trebuie făcut este să se implementeze algoritmii și să se integreze în aplicație.

Testare

Obiectivul acestei etape este de a testa aplicația și de a decide dacă respectă sau nu cerințele impuse. Cu ajutorul acestei etape putem verifica daca aplicația noastră funcționează optim, dacă este superioară altor aplicații sau dacă aduce unele îmbunătățiri.

Aplicația este necesar a fi testată deoarece astfel identificam defectele ce pot apărea pe parcursul folosirii acesteia. Ne asigurăm de asemenea că aplicația îndeplinește toate cerințele inițiale. Testele sunt multiple, în diferite moduri sau chiar testate de diferiți utilizatori. Daca apar bug-uri sau rezultatele nu coincid cu cerințele, se va face o reanalizare a aplicației. Această analiză constituie repararea defectelor întâlnite, după care se va face din nou o serie de teste. Acești pași se vor executa până când nu se va mai găsi nici o problemă de comportament.

Rezultate

Această etapă constituie ultima etapă din proiect. Dupa rezultatele testelor din etapa anterioară, aplicația trebuie comparată cu alte aplicații similare deja existente pe piață. Un rezultat important al proiectului ar fi compararea testelor făcute pe aplicațiile existente cu testele făcute pe aplicația curentă. Astfel, mai multi utilizatori îsi pot da cu părerea și să-și impună punctul de vedere, având oportunitatea de a-și impune punctul de vedere.

În final, sunt adunate toate datele experimentale și sunt făcute îmbunătățiri dacă este nevoie. Sunt determinate condiții de funcționare optimă, deci, concluziile finale vor trebui să fie trase.

Studiu Bibliografic

Acest capitol prezintă principalele concepte teoretice care stau la baza implementării aplicației propuse.

Android

Sistemul de operare Android

Android este un sistem de operare pentru dispozitive și telefoane mobile construit în jurul nucleului Linux, dezvoltat inițial de Google, iar apoi de Open Handset Alliance. Android permite programatorilor să scrie cod Java și să controleze dispozitivul prin intermediul unor biblioteci dezvoltate de Google. Sistemul de operare a fost lansat de Google sub licența Apache, o licență de tip free software și open source.

Principalele avantaje ale sistemului de operare Android sunt următoarele:

Suport pentru multi-tasking: Android poate rula mai multe aplicații în același timp(în contrast cu iOS folosit de iPhone care oferă suport limitat pentru aplicații native, gen Mail). Cu alte cuvinte, folosind Android poți naviga pe internet, înregistra date cu ajutorul tehnologiei GPS și asculta muzică;

App marketul din Android este superior celui deținut de Apple: deși nu sunt la fel de multe aplicații pentru Android în Market în comparație cu iPhone, marketul Android este open și aplicațiile se pot adăuga fără acordul Google. În contrast, Apple trece prin lupă orice aplicație, acestea putând fi incluse în market doar cu acordul lor. De asemenea, în Android se pot instala sute de mii de aplicații din Marketuri alternative sau postate de alți utilizatori pe Internet fără nici o problemă;

Utilizatorul poate alege platforma hardware pe care să ruleze Android: sistemul Android este suportat de o sumedenie de telefoane mobile, tablete și alte dispozitive asemănătoare. Alegerea rămâne în mâna utilizatorului care îsi poate alege platforma hardware în funcție de buget și performanțele dorite.

Pentru Android există ROM-uri customizate: există un nucleu de utilizatori care dezvoltă ROM-uri(imagini ale sistemului de operare Android) customizate, ce pot fi instalate și rulate pe majoritatea dispozitivelor. Aceste ROM-uri aduc fie schimbări de design și funcționalitate, fie chiar versiuni noi ale sistemului de operare care în mod normal nu mai sunt dezvoltate de producătorul dispozitivului;

Android include integrarea cu Google și rețelele de socializare: search în Google direct de pe Home Screen, integrare cu Gmail, Facebook, Twitter, etc.

De asemenea sunt și unele dezavantaje:

Chiar dacă configurațiile tehnice ale dispozitivelor ce rulează Android sunt mult peste cele ale concurenței, asta înseamnă că acest sistem de operare „mănâncă resurse cât îi dai”. Mereu vor exista aplicații în background care nu se vor sfii să folosească orice resursă disponibilă pe moment, așa cum și un angajat Google a declarat asta cu ceva vreme în urmă.

Un sistem de operare open source întotdeauna va avea avantaje care îl vor promova ca fiind foarte bun, pentru ca acest aspect e strict legat de noțiunea de libertate, dar va avea și dezavantaje precum bug-urile software legate de această libertate. Trebuie să recunoaștem că există destule crash-uri la acest sistem de operare pe care fanaticii le vor trece cu vederea.

Un alt dezavantaj îl prezintă utilizarea sistemului. Pentru un utilizator mai puțin inițiat, accesarea tuturor facilităților pe care le oferă Android poate constitui o adevărată provocare uneori. Are multe opțiuni de utilizare, dar uneori sunt structurate pur și simplu deficitar. [4]

Versiuni ale sistemului de operare Android

Google este în mod constant pus pe dezvoltarea de noi versiuni ale software-ului Android. Lansarea acestora este de obicei rară, la momentul de față ei lansând o dată la șase luni câte o versiune.

Tabel 3.1

Versiunile vin de obicei cu un cod numeric și cu un nume, care până acum a fost cam „dulce, Google folosind în ultimul timp tematica dulciurilor și deserturilor. De asemenea se poate observa că numele versiunilor(inițiala de fapt) este pus în ordine alfabetică. [5]

Arhitectura Android

Android este o platformă open source pentru dezvoltare, un pachet complet ce include de la sistemul de operare până la mulțimea de aplicații variate.

Arhitectura sistemului Android cuprinde cinci secțiuni grupate pe patru nivele

Kernel Linux

Acesta este folosit pentru interfața dintre componenta software și componenta hardware. Pentru a putea utiliza platforma Android pe noi dispozitive hardware, în prima etapă se va instala Linux, iar apoi driverele necesare.

Este folosit Linux deoarece oferă un mediu stabil, cu drivere deja existente:

Afișaj;

Camera;

Memoria flash;

Binder(IPC);

Tastatura;

WiFi;

Audio.

Oferă de asemenea:

Gestionarea memoriei;

Gestionarea procesoarelor;

Securitatea modelului;

Gestiunea rețelelor.

Librării de bază + Rutina Android

Acest nivel conține toate librăriile de bază:

Surface Manager:

Responsabil de compunerea diferitelor ferestre și afișarea acestora pe ecran;

Se asigură că pixelii sunt afișați pe ecran atunci când trebuie.

OpenGL ES(librarie 3D)

Conține o implementare software care poate fi folosită la accelerarea hardware, daca dispozitivul are atașat un cip de procesare 3D.

Fonturi

Cuprinde toate fonturile folosite.

MediaFramework

Poate înregistra și utiliza majoritatea formatelor de date audio și video;

Cuprinde toate codecurile ce alcătuiesc experiența media MPEG4, MP3, AAC, AMR, JPG, PNG, etc.

SQLite

Librăria folosită pentru a stoca date.

WebKit

Motor open source folosit pentru navigare web, același browser ce este folosit de Safari(Apple);

Optimizat pentru o funcționare foarte bună pe ecrane mici, pentru telefoane mobile.

Acest nivel este reprezentat de Android RunTime:

Mașina virtuală Dalvik

Aceasta este componenta principală a nivelului RunTime;

Permite ca fiecare aplicație să poată rula într-un proces propriu;

A fost proiectat special pentru ca Android să poată rula într-un mediu în care avem baterie limitată, memorie limitată, putere de procesare limitată;

Dalvik folosește fișiere .dex(format special pentru sisteme ce au constrângeri în memorie și viteza procesorului).

Core Libraries

Acestea sunt scrise în limbaj JAVA;

Oferă majoritatea funcționalității oferite de limbajul JAVA;

Conține toate clasele utilizare și toate uneltele necesare unui utilizator pentru a le folosi în aplicație.

Aplicații FrameWork

Acest nivel este scris în întregime în limbajul Java. Acesta reprezintă o sumă de unelte ce pot fi folosite de orice aplicație precum cele care vin cu telefonul, aplicația-home, aplicația-telefon(aplicații scrie de Google) sau aplicații scrise de utilizator.

Nivelul aplicațiilor FrameWork conține:

Gestiunea activității(ActivityManager)

Coordonează ciclul de viață al aplicațiilor;

Conține un back-stack comun astfel încât aplicațiile ce ruleaza în procese diferite să aibă o navigare cât mai lină.

Gestionarea pachetelor(PackageManager)

Ține cont ce aplicații sunt instalate pe dispozitiv.

Gestiunea ferestrelor(WindowManager)

Gestionează ferestrele și cuprinde funcții Java ce se adaugă la gestiunea oferită de către SurfaceManager.

Gestiunea telefonului(PhoneManager)

Conține API folosit pentru a construi mai ușor aplicațiile Android.

Sistemul de vizualizare(ViewSystem)

Reprezintă o librărie de butoane, liste, etc, toate componentele ce pot fi folosite în aplicații;

Aplicații

Acest nivel cuprinde aplicațiile ce folosesc interfața „prietenoasa” a utilizatorului:

Home

Aplicație de bază, precum o pagină de start.

Contacte

O bază de date ce cuprinde informații despre fiecare contact.

Telefon

Aplicația prin care putem apela alți utilizatori.

Browser

Accesează pagini web, descarcă, salvează informații, etc. [5]

Componentele unei aplicații Android

Principalele componente ale unei aplicații Android sunt:

Activity(Activitate)

Reprezintă o interfață cu utilizatorul, fereastră sau formular;

Fiecare activitate are propriul său ciclu de viață, independent de ciclul de viață al procesului asociat aplicației;

Fiecare activitate are propria stare și datele acesteia pot fi salvate sau restaurate;

Activitățile pot fi pornite de aplicații diferite(daca este permis);

Are un ciclu de viață complex deoarece aplicațiile pot avea activități multiple și doar una este în prim-plan; utilizând managerul de activități, sistemul Android gestionează o stivă de activități care se găsesc în diferite stări(pornire, în execuție, întreruptă, oprită, distrusă);

În SDK, activitatea este implementată folosind o subclasă a clasei „Activity” care extinde clasa „Context”.

Intent(Intenție)

Reprezintă o entitate folosită pentru a descrie o operațiune care urmează să fie executată; este un mesaj transmis către o altă componentă pentru a anunța o operațiune;

Oarecum similar cu conceptul de event – handler din .NET sau Java;

Un mesaj asincron utilizat pentru a activa activități sau servicii;

Service(Serviciu)

Un task care se execută în fundal, fără interacțiunea directă cu utilizatorul;

Gestionată de o instanță a clasei „Service”.

Content provider(Furnizor sau manager de conținut)

Un API folosit pentru a gestiona datele private ale aplicației;

Un sistem de management de date ce descrie o alternativă la sistemul de fișiere, baze de date SQLite sau orice altă soluție de stocare persistentă;

Implementată de o subclasă a clasei „ContentProvider”;

O soluție pentru a partaja și controla(pe bază de permisiuni) transferul de date între aplicații(de exemplu, sistemul Android oferă un furnizor de conținut pentru datele de contact).

Broadcast receiver

O componentă care răspunde la anunțuri difuzate(propagate) la nivel de sistem;

Oarecum similar cu conceptul de handler global(sau evenimente de sistem);

Implementată de o subclasă a clasei „BroadcastReceiver”. [6]

Mediile de dezvoltare folosite

Android Studio

Android Studio este oficial mediul de dezvoltare(Integrated Development Environment sau IDE pe scurt) pentru sistemul de operare Android. Acesta este bazat pe popularul IntelliJ IDEA(Community Edition) Java IDE.

Obiectivul principal al noului Google Android Studio este de a oferi un mediu de dezvoltare Android SDK integrat ca un singur IDE pentru a facilita procesul de dezvoltare extrem de ușor. Google Android Studio înlocuiește Eclipse ca standard pentru dezvoltarea de aplicații Android.

Noul IDE se bazează in întregime pe editorul IntelliJ și oferă completare avansată de cod, refactorizare, linting si analiză de cod. Noile API-uri și serviciile noi sunt ușor utilizabile in cadrul proiectelor Android. Android Studio conține șabloane suport extinse pentru serviciile Google, integrare GitHub și mecanisme de integrare simplificate pentru serviciile de Cloud Platform Google, cum ar fi Cloud Mesaje și App Engine. Android Studio oferă mai multe caracteristici:

Grandle: sistemul de „build”;

Utilitare Lint pentru performantă;

Șabloane de cod;

Capabilități ProGuard și app-signing;

Multiple variante de generare a fișierelor .apk;

Editor bogat cu multe opțiuni pentru editare;

Și multe altele.

Android Studio oferă o gamă de template-uri de cod, în functie de dezvoltarea pe telefon, tabletă, TV, portabile sau mașină, și merge dincolo de codificare, incluzând indicatori de performanță pentru consumul de memorie proiectat și emulație pe o varietate de dispozitive. [7]

Sublime text

Sublime Text este un editor de text care e folosit destul de des in ultima perioadă, datorită faptului că reușește să îmbine o mulțime de aspecte pe care orice programator și le-ar dori de la un editor într-un program mic, dar foarte puternic. Sublime Text folosește un sistem de API Python pentru pluginuri și teme care sunt incredibil de folositoare.

Acest IDE este programul ce poate fi folosit cu ușurința și de un începător și de un programator, poate fi folosit și la editarea unor fișiere simple, dar și la lucrul cu proiecte mari ce conțin zeci sau sute de fișiere. Sublime Text vine cu o interfață minimalistă ce ascunde o infinitate de opțiuni ce pot fi modificate sau chiar adăugate altele noi, deoarece cu Sublime Text este foarte ușor să instalezi plugin-uri noi sau chiar teme pentru program ce pot spori viteza de lucru. Acesta funcționează pe Windows, Mac dar si Linux. El conține niște features ce nu se găsesc la alte editoare de text:

Istorie persistentă: dacă închidem editorul/fișierul, în momentul în care îl redeschidem putem face undo până la prima versiune;

Branched history: dacă edităm un fișier, facem câteva undo-uri, continuăm să edităm și după un moment ne dăm seama că ce am început să modificăm este greșit, dăm din nou undo până la un punct comun, iar când facem un redo, un popup ne va întreba pe ce “branch” dorim să continuăm.

Pe lângă cele două aspecte pe care le-am considerat mai importante, Sublime Text mai are următoarele caracteristici:

Este stabil;

Este rapid;

Are foarte multe plugin-uri. În plus, realizarea unui plugin nou este extrem de simplă, chiar daca nu cunoaștem destul de bine limbajul Python;

Este cross platform, iar aceeași licența se poate folosi pe toate platformele.

Cu toate acestea, sunt și câteva lucruri care îi lipsesc:

Tooltip API: lipsa acestui API limitează o grămadă de plugin-uri;

Sidebar API: de exemplu un file browser custom(FTP client);

Code folding pe bază de sintaxă, nu pe baza de indent. [8]

Analiză și Fundamentare Teoretică

Specificațiile sistemului impun o aplicație de tip client și o aplicație de tip server. Pentru partea de client voi dezvolta aplicația în mediul Android. Pentru partea de server, voi folosi XAMPP cu MySQL si PHP.

XAMPP este un pachet gratuit de server web, constând dintr-un server HTTP, baza de date și interpretoare pentru scripturile scrise in limbajele de programare PHP și Perl. Acronimul vine de la :

X pentru orice tip de sistem de operare;

A pentru Apache;

M pentru MySQL;

P pentru PHP;

P pentru Perl.

În mod oficial, designerii au avut intenția de a utiliza XAMPP numai ca utilitar de dezvoltare, pentru a permite programatorilor să-și testeze munca pe calculatoarele proprii, înainte de a le urca pe serverul de hosting. Pentru a face posibil acest lucru, multe caracteristici de securitate importante sunt dezactivate în mod implicit. Totuși, pentru a putea fi folosit pe servere care găzduiesc site-uri, după instalarea pachetului de aplicații trebuie operate unele configurări, mai ales pentru ameliorarea securității.

XAMPP de asemenea asigură suport pentru crearea și manipularea bazelor de date în MySQL și SQLite între utilizatori.

Pentru partea de client, am folosit Android Studio. Acesta este un mediu de dezvoltare integrat(IDE) pentru dezvoltarea aplicațiilor pe o platformă android. Am ales acest mediu de dezvoltare deoarece are mai multe caracteristici care mi-au fost de ajutor. Printre ele se numără:

Grandle care este un instrument de automatizare a proiectului;

Smart shortcuts care a înlocuit referințele la resursele fișierelor cu valorile lor reale;

Previzualizare grafică îmbunătățită deoarece putem construi scheme și avem posibilitatea să observăm schimbările în timp real;

Este destul de rapid în comparație cu alt mediu(de exemplu Eclipse).

Android Studio este conceput în special pentru dezvoltarea Android. Acesta este disponibil atât pentru sistemul de operare Windows, cât și pentru Mac și Linux. El înlocuiește de asemenea Instrumentele de Dezvoltare Android din Eclipse(ADT) fiind IDE primar pentru aplicațiile Android.

Ca și o vedere de ansamblu, o schiță a sistemului o putem vedea în figura 4.1:

Baza de date

Stocarea datelor

Un punct important al aplicației este acela de memorare a datelor într-un loc sigur pentru a putea face o gestiune și o prelucrare cât mai ușoară. Pentru simplul fapt că avem două părți în aplicația descrisă, este nevoie să creăm o legătură între ele. Cu ajutorul unei baze de date se poate îndeplini ușor acest lucru. Este un lucru foarte important să adunăm informațiile într-o bază de date care poate să fie accesată de fiecare dată când este folosită aplicația și să ofere datele necesare oricărui utilizator. Aplicația propusă este astfel concepută încât orice utilizator are posibilitatea de a introduce câte un „produs” în baza de date. De asemenea, baza de date este utilizată și când se înregistrează sau se autentifică un client. În funcție de dorințe, utilizatorul poate să-și creeze sau să-și șteargă contul, astfel se fac modificări în baza de date.

Partea serverului

MySQL este un sistem de management a bazei de date adecvat pentru partea de server datorită ușurinței sale de utilizare și cost redus.

Pachetul conține instrumentul phpMyAdmin scris în PHP pentru o manipulare mai ușoară și acces la bazele de date. Acest instrument este format dintr-o interfață grafică ce permite o multitudine de operații. Operațiile comune care pot fi efectuate includ vizualizarea, modificarea și stergerea bazelor de date existente, adăugarea, eliminarea și actualizarea tabelelor, importul și exportul de baze de date, efectuarea de interogări SQL și multe altele. PhpMyAdmin oferă, de asemenea o vizualizare grafică a entității diagrama de relații, împreuna cu tipurile rânduri, chei primare și chei străine.

PHP(Hypertext Preprocessor) este un limbaj utilizat pentru a construi pagini web dinamice. PHP poate fi introdus în codul HTML sub forma unor script-uri, reprezentând o mare flexibilitate care este imposibilă utilizând doar HTML.

Avantajele utilizării PHP:

Este server-side, adică nu vor fi probleme între browserul utilizat și codul PHP;

Permite accesul la fișiere și baze de date stocate pe server. [9]

PHP are trei moduri diferite prin care se poate conecta și interacționa cu baza de date MySQL: extensia MySQL originală(cu funcții), MySQL Improved(MySQLi, obiect-orientat) și PHP Data Objects(PDO, obiect-orientat).

Ele nu pot fi amestecate în același script. Extensia originală MySQL nu mai este activ dezvoltată și nu este recomandat pentru proiecte PHP-MySQL noi. Documentația PHP descrie MySQLi ca fiind opțiunea preferată recomandată de MySQL pentru proiecte noi. De aceea am ales să utilizez această extensie pentru aplicația mea.[10]

Partea clientului

Platforma Android conține un API pentru bazele de date MySQL de a crea, șterge, execută interogări și îndeplinește orice alte sarcini comune. Cea mai răspândită metodă pentru a ne conecta la o bază de date de la distanță, de la un dispozitiv Android, este de a pune un fel de „serviciu” la mijloc. Deoarece MySQL este utilizat de obicei împreună cu PHP, cea mai ușoară și cea mai evidentă modalitate este de a scrie un script PHP pentru a gestiona baza de date și a-l rula folosind protocolul HTTP de la sistemul Android.[11]

Pentru a face posibilă conexiunea dintre Android și Web Service, a fost nevoie de o librărie corespunzătoare. Astfel am folosit librăria Volley.

Volley este o librărie HTTP care face conexiunea pentru aplicațiile Android mult mai ușoară, dar cel mai important, mult mai repede. Această librărie este disponibilă prin intermediul AOSP deschis.

Volley oferă următoarele beneficii:

Conexiuni concurente de rețea;

Suport pentru prioritizarea cererilor;

Anularea cererilor API. Putem anula doar o singură cerere sau putem seta blocuri de cereri pentru anulare;

Personalizare ușoară;

Comanda puternică care ușurează popularea interfeței cu datele aduse de la rețea;

Depanare și instrumente de urmărire.

Pentru a putea folosi Volley, a fost necesară importarea acesteia în proiectul Android. Înainte de toate, librăria .jar a fost downloadată și copiată în folderul „libs” din proiect.

Volley funcționează pe trei nivele diferite, unde fiecare nivel operează pe firul lui propriu. O idee a funcționalității o puteți vedea în figura 4.3 .

Main Thread. Pe firul principal, în mod constant ne este permis să facem request-ul și să-i manipulăm răspunsul. Volley gestionează automat tranzacțiile HTTP și erorile de rețea de care trebuie să avem grijă înainte.

Cache și Network Threads. Când adăugăm o cerere în „coada”, au loc mai multe lucruri. În primul rând, Volley verifică dacă cererea poate fi deservită din cache. Dacă se poate, răspunsul cache este citit, analizat și livrat. În caz contrar, se trece la firul de rețea. Pe acest fir, o coada cu o serie de fire este în mod constant în lucru. Primul fir de rețea disponibil, ia cererea din coada, face o cerere HTTP, analizează răspunsul și îl scrie în cache. Pentru a finaliza, se expediează răspunsul analizat înapoi la firul principal. [12]

Server

Serverul trebuie să interacționeze cu userii săi cu informațiile din baza de date. XAMPP oferă un server Apache care suportă scripturi PHP și Perl. Deoarece nu este nevoie de o soluție complexă, voi pune in aplicare partea de server în PHP. Acest server va trebui să suporte următoarele interacțiuni cu userul:

Să primească o cerere de înregistrare;

Să primească o cerere de verificare a userilor;

Să primească o cerere de returnare a produselor din anumite categorii;

Să primească o cerere de inserare produs.

Această interacțiune între client și server se poate face prin cereri HTTP. PHP oferă acces la cererea HTTP prin intermediul unor rețele de variabile. De exemplu, atunci când o cerere de POST se face la server, PHP poate interpreta datele prin accesarea $_POST. Următoarele variabile ar putea fi folosite pentru cereri HTTP:

$_GET – request GET venit prin HTTP;

$_POST – request POST venit prin HTTP;

$_FILES – request de Upload Fisier venit prin HTTP;

Ca și server pentru aplicația noastră, am creat un script PHP care rulează ca un Web Service. Acesta trebuie introdus în XAMPP ca să poată rula pe serverul de Apache folosit. XAMPP are un folder anume pentru acest lucru, folderul numindu-se „htdocs”.

Un serviciu Web(Web Service) este o aplicație Web de tip client-server, unde un server furnizor de servicii este accesibil unor aplicații client(care nu sunt de tip browser) pe baza adresei URL a serviciului. Serviciul Web și clientii săi pot rula pe platforme diferite și pot fi scrise în limbaje diferite, deoarece comunică prin protocoale standard HTTP, XML, SOAP, JSON, etc. De aceea principalul merit al serviciilor Web este acela că asigură interoperabilitatea unor aplicații software implementate pe platforme diferite și cu instrumente diferite.

Funcționarea unui serviciu Web o puteți vizualiza în figura 4.4 . [13]

Aplicația mobile

SDK

Un SDK este un kit de dezvoltare software care permite dezvoltatorilor să creeze aplicații pentru un anumit pachet software, cadru software, platformă hardware, sistem informatic, consolă de jocuri video sau orice platformă similară de dezvoltare.

SDK-ul Android include proiecte de proba cu codul sursă, instrumente de dezvoltare, un emulator și bibliotecile necesare pentru a construi aplicații Android. Acestea sunt scrise folosind limbajul de programare Java și sunt rulate pe Dalvik, o mașină virtuală personalizată pentru o utilizare încorporată rulând pe partea de sus a unui LinuxKernel.

Trebuie avut grijă ce SDK-uri dorim să folosim, deoarece unele pot avea atașat o licență, astfel făcându-l incompatibil cu aplicația construită cu alt gen de licență(sau fără). De exemplu un SDK de proprietate va fi probabil incompatibil cu dezvoltarea unui software gratuit. Dar de obicei, dezvoltatorul software-ului pune la dispoziție SDK-urile necesare pentru orice utilizator al produsului.

În Android Studio beneficiem și de un manager SDK. Acest manager separă instrumentele SDK, platformele și alte componente în pachete de acces și de gestionare ușoară. De asemenea, putem personaliza ce site-uri verifică managerul pentru pachete noi sau actualizări. Spre exemplu, putem configura managerul SDK pentru a verifica automat daca sunt actualizări și să ne anunțe atunci când un pachet de instrumente instalat este actualizat(putem decide dacă vrem sau nu acea instalare). [14]

Din propria inițiativă, am ales să instalez toate instrumentele SDK, deoarece poate într-o anumită fază a dezvoltării aplicației, mă decid să schimb nivelul API, și să nu fie nevoie să mai downloadez sau instalez pe moment SDK-ul necesar.

Android SDK include totodata un emulator virtual de dispozitiv mobil care ruleaza pe computer. Emulatorul permite dezvoltarea și testarea aplicației Android fără a utiliza un dispozitiv fizic. Acesta imită toate caracteristicile hardware și software ale unui dispozitiv tipic mobil, cu excepția faptului că nu se pot efectua apeluri telefonice reale.

Cu toate acestea, m-am decis să folosesc un dispozitiv real, deoarece este un emulator destul de complex și necesită multe resurse care îmi încetineau munca. Am folosit un telefon mobil având ultima versiune de Android. Specificațiile acestuia sunt:

Tabel 4.1

Conectarea dispozitivului este relativ simplă. Suntem nevoiți doar să activăm opțiunea „USB debugging” din setările telefonului și instalarea unui driver(OEM USB Driver) corespunzător dispozitivului utilizat.

În mod implicit, pe dispozitivele Android fizice, opțiunile de dezvoltare sunt ascunse pentru versiunile mai noi de Android. Pentru a le face vizibile, dezvoltatorul trebuie să meargă la Settings -> About phone și să apese „Build number” de 7 ori. Astfel se va face vizibil meniul cu opțiunile pentru dezvoltator.

De asemenea, driverul pentru sistemul de operare sunt necesare pentru a se putea executa conexiunea cu telefonul. Din motive de securitate, începând de la Android 4.2 în sus, la prima rulare a unei cereri, telefonul va afișa un mesaj care indică dacă se acceptă sau nu o cheie RSA pentru depanare. Acest lucru asigură că orice comenzi vor fi efectuate numai după ce dispozitivul a fost deblocat, iar dezvoltatorul a recunoscut dialogul.

Opțiunile din meniul pentru dezvoltator permit:

Lansarea „Debugging mode” când USB-ul este conectat;

Păstrarea ecranului pornit atât timp cât suntem conectați;

Vizualizarea limitelor schemei, utilizarea procesorului, etc.

Proiectul unei aplicații Android va fi construit într-un fișier .apk pentru a putea fi instalat pe un dispozitiv. Fiecare proiect are o structură standard, cu foldere, subfoldere și fișiere specifice. Acest lucru se poate observa în figura 4.7:

Main Project

Acest lucru ar fi întregul context al proiectului. Un proiect este o unitate organizațională care reprezină o soluție software completă. Un proiect în Android Studio este ca un spațiu de lucru în Eclipse. Proiectele pot conține mai multe module. Un modul în Android Studio este ca un proiect în Eclipse. Acest lucru înseamnă că, în teorie, este posibil să se construiască mai multe aplicații în cadrul aceluiași proiect. Nu este recomandat acest lucru, deoarece crearea mai multor aplicații în același proiect nu funcționează relativ bine. Este o idee mai bună de a crea un singur app pe un singur proiect.

.idea

Acest „.idea” din Android Studio face același lucru ce îl face Eclipse cu ajutorul fișierului project.properties. Astfel, Android Studio este capabil să stocheze metadatele specifice proiectului.

Project Module(app)

Acesta este folderul actual de proiect în care se află codul de aplicare. Folderul are următoarele subdirectoare:

Build: acesta are ieșirea completă a procesului de construcție, spre exemplu clasele compilate, resursele, etc;

Libs: acesta este un folder care opțional poate deține biblioteci sau fișiere .jar;

Src: folderul src poate avea atât cod de aplicații cât și script de unitate de testare Android. Veți găsi două foldere numite „androidTest” și „Main”. Folderul Main conține două subfoldere „Java” și „res”. Folderul Java conține toate codurile java, iar res conține drawables, layouts, etc.

Grandle

Aici este locul unde se află fișierele „grandler-wrapper” și se construiește „jar wrapper”-ul sistemului. Acest jar reprezintă modul în care Android Studio comunică cu Grandle instalat în sistemul de operare.

Interfața User

Este dificil să ne gândim la un concept de aplicație Android care nu are nevoie de o anumită formă de interfață cu utilizatorul. Cele mai multe dispozitive Android sunt dotate cu un ecran tactil și o tastatură(fie virtuală sau fizică). Invariabil, aceste interacțiuni au loc prin interfața cu utilizatorul aplicației.

O interfață de utilizator bine concepută și pusă în aplicare, un factor important în crearea unei aplicații de succes, poate varia de la simplu la extrem de complex, în funcție de cerințele de proiectare ale fiecărui caz în parte. Indiferent de nivelul de complexitate, instrumentul Android Studio simplifică în mod semnificativ sarcina de proiectare și implementare a interfețelor de utilizator Android.

Termenii care reprezintă elementele de bază ale unei interfețe sunt:

Orientare: rotația fizică a dispozitivului(poate fi privit fie în mod portret, fie în mod peisaj);

Dimensiune ecran: dimensiunea fizică a ecranului, masurată de obicei în inci. Android grupează dimensiunile în mici, normale, mari și foarte mari;

Densitate ecran: numărul de pixeli pe lungimea fizică, de obicei dpi. Android grupează densitățile în scăzut, mediu, ridicat și foarte ridicat. Acestea sunt traduse în aplicație ca ldpi, mdpi, xhdpi și xxhdpi;

Rezoluția: numărul de pixeli pe ecran. Acest lucru este irelevant atunci când proiectarea se face pentru mai multe ecrane;

Densitate-pixel independent sau dp: o unitate virtuală care ar trebui să fie utilizată pentru definirea aspectului, indiferent de densitatea ecranului.

Când sunt utilizate în mod corespunzator unități dp, o aplicație va arată identic pe două dispozitive având aceeași dimensiune a ecranului și densități diferite. Când sunt utilizate unități de pixel, rezultatul va fi diferit.

Elementul central al unei interfețe este „activitatea”, reprezentând o instantă a unui ecran. Pentru o navigare mai ușoară, vă voi prezenta o schema în figura 4.11, care permite mai usor vizualizarea activităților din cadrul aplicației:

Activități

O activitate este una dintre cele mai importante componente ale unei aplicații Android. Aceasta afișează un ecran, generat de elemente de aspect, cu care utilizatorii pot interacționa. O aplicație de obicei are mai multe activități care pot interacționa între ele. Orice activitate poate începe o alta. Când este pornită o nouă activitate, cea anterioară este oprită și pusă într-o stivă(„backstack”). Această stivă este un mecanism LIFO.

O activitate constă dintr-o clasă care extinde activitatea sau o subclasă a acesteia. Poate implementa metode care să fie apelate atunci când au loc tranzițiile de activitate dintre etapele ciclului de viață. Ciclul de viață al unei activități, împreuna cu metodele pot fi văzute în figura 4.12. Stările sunt reprezentate prin cutii, iar tranzițiile cu metodele corespunzătoare prin săgeți.

În fiecare tranziție, o metodă de apel invers este apelată. Metodele prezentate:

Tabel 4.2

Activitatea este creată pentru prima dată de catre o altă activitate sau de începerea aplicației, în cazul în care este declarată ca implicit. Metoda onCreate() este apelată în aceastaă etapă. Aceasta este singura metodă de apel invers care trebuie să fie pusă în aplicare în mod explicit. Ar trebui să conțină inițializarea de componente esențiale. Metoda SetContentView() trebuie apelatp pentru a definii aspectul interfeței pentru utilizator. Aspectul este un fisier XML definit în res/layout/directory.

Un exemplu simplu de creare a unei activități ar fi:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

}

Metoda onStart() este apelată dupa ce metoda onCreate() s-a finalizat. Aceasta este apelată înainte ca UI să devină vizibil, dar utilizatorul poate interactiona doar in starea de reluare. În cazul in care o alertă sau un obiect asemănător va pune accent pe ecran, activitatea va intra în starea de pauză apelând metoda onPause(). Aici, activitatea este vizibila în fundal, dar nu este focalizată. În acest punct, există două posibilități: fie activitatea se focalizează pe ecran din nou, caz în care metoda onResume() este apelată, fie dispare de pe ecran și intră în starea de stop apelînd metoda onStop().

O activitate oprită este pusă într-o stivă, dar este complet ascunsă. Atât în starea de pauză cât și în cea de stop, există un risc. În cazul în care sistemul are nevoie de memorie în altă parte, atunci activitatea va fi „ucisă”. Când activitatea este recreată, se va întoarce și va parcurge toate stările din nou.

Când este în starea de stop, activitatea reia de obicei focusarea. În acest fel, metoda onRestart() este apelată. Aspectul trebuie să fie pronunțat din nou pe ecran și să permită interacțiunea cu utilizatorul, astfel sistemul va apela metodele onStart() și onResume().

Fiecare activitate trebuie să fie declarată în manifestul aplicației, prin adăugarea unui tag <activity>. Un exemplu poate fi văzut mai jos:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.firzennn.aplicatietest" >
<application

<activity
android:name=".MainActivity"
</activity>

</application>
</manifest>

În manifest, fiecare activitate poate conține filtre „intent” pentru a declara cum sistemul ar trebui să se ocupe de ele din afara aplicației. Activitatea de pornire a aplicației trebuia să conțină elemetul <action> și elementul <category> în filtrul „intent” pentru a specifica că este punctul de intrare „principal” în aplicație. În cazul în care aplicația nu permite startarea activităților din afară, atunci nu mai sunt necesare alte filtre „intent”.

<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

O activitate poate fi pornită apelând metoda startActivity(). Intentul poate să specifice activitatea care va fi pornită sau să descrie un tip de acțiune care va fi executată. Intentul poate de asemenea să stocheze date care poate să le trimită altor activități.

Pornirea unei activități fără trimitere de date:

Intent i = new Intent(First.this, Second.class);
startActivity(i);

Pornirea unei activitati cu trimitere de date:

Intent i = new Intent(MainActivity.this, Intro.class);
i.putExtra("Username", struser);
startActivity(i);

Proiectare de Detaliu și Implementare

În acest capitol se vor explica amănunte despre implementarea funcționalității prezentate în capitolele anterioare, oferind detalii tehnice amănunțite despre acestea.

Prezentarea mediului de dezvoltare Android Studio

Prezentare generală

Android Studio este IDE(mediu de dezvoltare integrat)-ul oficial pentru dezvoltarea de aplicații Android, bazat pe IntelliJ IDEA. În vârful așteptărilor de la IntelliJ, Android Studio oferă:

Sistem flexibil de construire bazat pe Grandle;

Generarea multiplă a fișierelor .apk;

Template-uri de cod pentru a ajuta la construirea unor caracteristici comune aplicației;

Editor bogat al layout-ului cu suport de „drag and drop”;

Multe altele.

Android Studio include de asemenea tot ce este necesar pentru a începe dezvoltarea unei aplicații:

IntelliJ IDEA + plugins-uri Android Studio;

Instrumente SDK;

Instrumente de platformă;

O versiune a platformei;

O versiune a imaginii sistemului pentru emulator.

Crearea unui proiect

La prima rulate a mediului de dezvoltare Android Studio, ne sunt prezentate opțiunile de creare, deschidere sau importare a unui proiect. Am ales să creez un proiect nou(Start a new Android Studio Project).

În următoarea fereastră, trebuie să configurăm proiectul:

Application Name: trebuie să introducem numele proiectului;

Company Domain: de obicei se setează automat, în funcție de pachet;

Package name: numele pachetului care se setează automat;

Project location: locul în care este salvat proiectul pentru utilizări ulterioare.

Fereastra următoare conține caracteristicile de rulare pe care trebuie să le alegem pentru aplicația noastră(Phone/Tablet, Minimum SDK, etc). Apoi selectăm ce tip de activitate dorim, îi dăm un nume, după care se creează proiectul.

Implementare parte client

Interfața utilizator

După crearea proiectului, o vedere de ansamblu a acestuia o putem vedea în figura 5.1:

În acest fel, am trecut la etapa următoare, care constă în crearea interfeței de logare. Aici am început prin a seta tipul de layout(felul în care putem aranja butoanele, textul, imaginile etc pe ecran). Am ales tipul „RelativeLayout” deoarece mi s-a părut mai ușor ca eu să decid exact locul unde inserez ceea ce am nevoie(nu ca și în cazul „LinearLayout” în care se aranjează aproape automat totul pe ecran”.

Pentru aspectul aplicației, am ales să pun și un background(fundal). Poza dorită trebuie să se afle în folderul drawable, sub formă de .png, deoarece doar așa este recunoscută imaginea în interfață. Mai departe am inserat două componente EditText reprezentând câmpul de introducere a username-ului, respectiv câmpul de introducere a parolei. În dreptul lor, am pus două componente ImageView, în care am introdus poze corespunzătoare fiecărei componente(username și password). Aceste imagini trebuie să se afle tot în folderul drawable și sub forma de .png, exact cum am descris mai sus. Pentru butonul de Login și Sign up am folosit componenta Button. Tuturor acestor componente le-am dat câte un id specific ca să ne putem folosi ulterior de ele.

Tot în această activitate, am folosit și un Checkbox pentru afisarea/ascunderea parolei pentru ca utilizatorul să o poată vizualiza daca este nevoie. Acest lucru l-am făcut pentru început prin:

Declararea unor atribute: CheckBox mCbShowPwd și EditText mEtPwd ; și referire:

Referire: mEtPwd = (EditText) findViewById(R.id.ETpass); și CheckBox mCbShowPwd = (CheckBox) findViewById(R.id.CBshowpass);, ETpass și CBshowpass reprezentând EditText-ul în care se introduce parola, respectiv Checkbox-ul pentru afișare/ascundere parolă;

Folosirea următoarelor metode:

if (!isChecked) {
mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
} else {
mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}

De asemenea, am pus acțiuni și pe butonul de Sign Up și butonul de Login.

În cazul butonului de Sign Up, apăsarea acestuia implică următoarele funcționalități:

Verifică dacă câmpul Username este gol;

Verifică dacă numele de utilizator există sau nu în baza de date;

Verifică dacă câmpul Password este gol;

Introduce numele și parola în baza de date.

În funcție de acestea, după apăsarea butonului ne va fi afișat un mesaj. Dacă utilizatorul îndeplinește toate condițiile de logare(Username-ul să nu existe în baza de date și să existe o parolă), atunci contul utilizatorului va fi creat și va primi un mesaj de confirmare. Pentru acest lucru am folosit un Toast:

Toast usercreate = Toast.makeText(MainActivity.this, "Account created", Toast.LENGTH_SHORT);
usercreate.show();

Dacă nu sunt îndeplinite condițiile, vor fi afișate de asemenea mesaje: ”Username already exists” sau ”Please enter username or password”.

În cazul butonului de Login, apăsarea acestuia implică următoarele funcționalități:

Verifică dacă câmpul Username este gol;

Verifică dacă numele de utilizator există sau nu în baza de date

Verifică dacă câmpul Password este gol;

Daca username-ul există, verifică dacă parola corespunde acelui nume;

Ne trimite în activitatea următoare.

De asemenea, există și în aceste cazuri mesaje corespunzătoare: ”Invalid username or password” sau ”Welcome”.

Următoarea activitate, în care ajungem prin apăsarea butonului de Login, este activitatea de „Intro”. Trecerea dintr-o activitate în alta se face cu ajutorul unui Intent.

Intent i = new Intent(MainActivity.this, Intro.class);
startActivity(i);

În această activitate, suntem întâmpinați de un mesaj de „Welcome”, acestuia alăturându-i-se numele utilizatorului care se loghează. Totodată avem mai multe CheckBox-uri cu care putem selecta categoria produselor care ne intereseaza, respectiv un CheckBox pentru selectarea tuturor categoriilor.

Butonul de „Done” are două întrebuințări: verificarea daca cel puțin o categorie a fost aleasă(în caz contrar, se afișeaza un mesaj de avertizare) și trimiterea utilizatorului în următoarea activitate, daca este îndeplinită prima condiție.

Există și un buton de Logout. Când este apăsat, utilizatorul este întrebat înca o dată dacă chiar dorește să iasă din aplicație.

new AlertDialog.Builder(this)
.setTitle("Do you want to logout?")

În continuarea acestei metode, o să avem două variante de răspuns:

YES: utilizatorul a decis să iasă din aplicație, astfel am folosit un intent pentru a se reveni în activitatea de Login;

NO: utilizatorul a decis să rămână în aplicație, astfel el va putea continua din activitatea curentă.

Butonul „Delete your account” are aproape aceleași întrebuințări ca și butonul de Logout. Dupa apăsarea butonului de Delete, va apărea pe ecran un AlertDialog:

new AlertDialog.Builder(this)
.setTitle("Do you want to delete your account?")

Avem de asemenea două variante de răspuns:

YES: utilizatorul a decis să-și șteargă contul, acesta fiind eliminat și din baza de date, revenind în activitatea de Login;

NO: utilizatorul a decis să-și păstreze contul.

Activitatea First, care pornește după ce este apăsat butonul Done și dacă sunt îndeplinite condițiile, reprezintă activitatea principală, dupa cum îi zice și numele. Aici avem un buton de Logout, la fel ca și cel descris mai sus, un buton de Recommend Product, un ListView, un ImageView și mai multe TextView-uri.

ListView-ul din centrul activității l-am folosit pentru a ne afisa rezultatul selectat din activitatea anterioară. Aici putem vedea lista cu produsele din categoriile selectate/dorite. Pentru a putea fi posibil acest lucru, am început prin a-mi construi un array în care avem categoriile selectate. Apoi, folosind un intent, am transmis datele din activitatea anterioară(în care am selectat categoriile dorite) în activitatea curentă(în care avem ListView-ul).

Intent i = new Intent(Intro.this, First.class);
i.putExtra("CheckboxArray", cbArray);

Am preluat informatțile folosind următoarea metodă:

checkboxArray = getIntent().getStringArrayExtra("CheckboxArray");

A urmat să fac un query care returnează produsele pentru categoriile selectate. Răspunsul primit este sub forma unui JSON. Am extras din JSON câmpul „name”, pe care l-am folosit pentru a construi lista de produse.

public void onResponse(String s) {
. . . .
response = new JSONArray(s);
for(int i=0; i<response.length(); i++){
o = response.getJSONObject(i);
produse.add(name);

Am ales să pot vizualiza doar ultimele 15 produse adăugate, pas care l-am făcut prin query-ul următor:

dbRequest("SELECT * FROM Products JOIN product_type ON Products.typeId=product_type.Id WHERE Type IN (" + types + ") ORDER BY Products.Id DESC LIMIT 15", listener);

TextView-urile utilizate sunt de două feluri:

Cele care le-am folosit doar pentru denumirea unui câmp;

Cele care le-am folosit pentru a prelua date în ele(Store, Type, Price și Description);

Diferența între aceste 2 tipuri constă în tipul de text pe care l-am folosit. Pentru primul caz am folosit text implicit(doar pentru denumire)

android:text="STORE: "

,iar în cel de-al doilea caz am folosit un string gol, pentru a putea prelua date necesare.

android:text="@string/emptyStringStore"

În aceste string-uri, datele vor fi afișate doar când utilizatorul selectează un produs din lista de produse. Acestea se modifică cu datele corespunzătoare produsului selectat. Un exemplu cum funcționează acest lucru îl avem prezentat mai jos(pentru tipul și prețul produsului):

public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Product p = produseObj.get(position);
TextView typeProd = (TextView) findViewById(R.id.FTVtypeProd);
typeProd.setText(p.getType());
TextView priceProd = (TextView) findViewById(R.id.FTVpriceProd);
priceProd.setText(p.getPrice());

}

ProduseObj reprezintă o listă formată din obiecte de tipul Product. Clasa Product a fost creeată pentru a reprezenta un produs având toate atributele necesare(name, store, type, price, description, imageStr), fiecare având metode pentru „Get” și „Set”.

ImageView-ul folosit este necesar pentru a putea vizualiza poza facută de utilizator produsului recomandat. De asemenea, aici va apărea doar imaginea corespunzătoare produsului selectat din lista cu produse.

Toate aceste lucruri sunt preluate din baza de date.

Butonul de Recommend Product are ca scop, după cum îi spune și numele, recomandarea unui produs. Acesta ne duce în activitatea de recomandare, fiind ultima activitate din aplicație. Aici avem de asemenea trei butoane, patru EditText, un Spinner și un ImageView.

EditText-ul l-am folosit pentru ca utilizatorul să poată introduce numele produsului, magazinul în care se află produsul, prețul produsului și o scurtă descriere. El trebuie să aleagă și categoria din care face parte produsul, astfel am folosit un Spinner. Acest Spinner reprezintă un fel de lista, care se deschide doar la apăsarea acestuia, fiind posibil să selectăm doar un element(în cazul nostru, o categorie), după care lista „se închide”. Astfel se poate vizualiza doar elementul selectat de noi.

Cele trei butoane sunt reprezentate de: Logout, Recommend și Take a Photo. Butonul de Logout este la fel ca celelalte prezentate anterior.

Butonul Take a Photo are rolul de face o fotografie. Apăsand acest buton, se va deschide camera web a telefonului. Utilizatorul va putea face poza produsului dorit, după care fotografia va fi pusă în ImageView-ul corespunzător. Acest lucru a necesitat mai multe etape:

În manifestul aplicației a fost necesar să adaug o permisiune care face posibilă deschiderea aparatului de fotografiat al telefonului;

<uses-feature android:name="android.hardware.camera" android:required="true" />

Am verificat dacă telefonul este dotat cu o cameră web;

public boolean hasCamera(){
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)}

Pornirea camerei web;

public void launchCamera(View v){
. . . . .
startActivityForResult(i, REQUEST_IMAGE_CAPTURE);}

Preluarea imaginii și punerea ei în ImageView-ul corespunzător, dupa ce poza este facută;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_IMAGE_CAPTURE)
{ result_photo = (ImageView)findViewById(R.id.SIWimage);
Bundle extras = data.getExtras();
Bitmap photo = (Bitmap)extras.get("data");
result_photo.setImageBitmap(photo);}
}

Butonul Recommend are mai multe funcționalități. Acesta verifică dacă toate câmpurile necesare recomandării unui produs sunt completate. În caz contrar, ne este afișat un mesaj. Recomandarea unui produs se bazează cel mai mult pe poza facută de utilizator. Butonul verifică și acest lucru, dacă utilizatorul a făcut poza produsului și dacă aceasta se află în ImageView-ul corespunzător. În ultima instantă, daca toate acestea sunt îndeplinite, vom primii de asemenea un mesaj de confirmare, că produsul a fost recomandat, adică adăugat în baza de date și vom fi redirecționați în activitatea anterioară(activitatea principală). Produsul recomandat va apărea primul în lista de produse.

Comunicarea cu baza de date

Comunicarea clientului Android cu baza de date a fost posibilă cu ajutorul clasei DBaccess. Această clasă se folosește de librăria Volley pentru a trimite request-uri HTTP POST către Web Service, request-uri care conțin query-uri ce trebuie executate de către DB.

Metoda care face request-uri POST are următoarea semnătura:

private void dbRequest(String query, Listener listener){}

query: acest parametru reprezintă query-ul SQL;

listener: acest parametru reprezintă o metodă care va fi apelată când vine răspunsul de pe request-ul HTTP POST. Ea va conține ca parametru rezultatul query-ului în format JSON.

Această metodă creează un StringRequest(o clasă din librăria Volley), care pasează parametrul „query” ca parametru în mesajul de POST și trimite requestul către Web Service.

StringRequest jsObjRequest = new StringRequest
(Request.Method.POST, "http://192.168.1.13/DB.php", listener , new ErrorListener() {

. . . .})

După cum se observă în metodă, trebuie dat tipul mesajului, în cazul nostru POST, adresa către scriptul de PHP care face query-ul in DB, listener-ul în caz de succes și ErrorListener-ul în caz că request-ul eșuează.

La sfârșit, se folosește conexiunea Volley pentru a transmite request-ul.

MySingleton.getInstance(this.context).addToRequestQueue(jsObjRequest);

MySingleton este o clasă ce se asigură că este folosită aceeași conexiune pentru a face request-ul HTTP.

public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);}
return mInstance;
}

Query-urile SQL propriu-zise sunt ținute în metode precum: getUser, addUser, deleteUser, getProducts, addProduct. Un exemplu de metodă:

public void deleteUser(String user, Listener listener){
dbRequest("DELETE FROM Users WHERE User = '" +user +"'", listener);

Prezentare XAMPP

Prezentare generală

Pachetul de aplicații XAMPP:

Este un program gratuit și open source cross-platform;

Constituie infrastructura software necesară găzduirii site-urilor web;

Pachet stiva constând în principal din server de web Apache, server de baze de date MySQL, interpretoare pentru scripturi scrise în limbajele PHP și PERL

XAMPP a fost creat și pentru a pune la dispoziția dezvoltatorilor un instrument eficient de testare.

Odată instalat pe calculatorul propriu, pachetul de aplicații va face ca acesta să aibă comportamentul unui server conectat la internet, permițând testarea aplicațiilor scrise înainte de a le copia pe serverul firmei care va găzdui în final produsul software realizat. De aceea am ales folosirea lui pentru aplicația mea proprie.

Prezentare Web Service

Pentru partea de Web Service, se folosește o pagină PHP care preia date de pe request-ul de POST venit de la aplicația Android. Apoi se creează o conexiune către baza de date, se extrag datele din request-ul de POST, date care reprezintă un query în limbaj SQL, după care se rulează query-ul în baza de date. După toate acestea, se afișează rezultatul obșinut.

Pentru conectarea la baza de date:

$con = mysqli_connect('localhost' , 'root' ,'' ,'ProductsDB');

Localhost: adresa serverului de DB;

Root: userul folosit pentru conectarea la baza de date;

'': parola folosită pentru conectarea la baza de date(în cazul nostru este nulă);

ProductDB: numele bazei de date.

Daca acest lucru eșueză, se afișează mesajul de eroare corespunzător:

if (!$con) {

die('Could not connect: ' . mysqli_error($con));

}

Pentru preluarea datelor:

$sql=$_POST['query'];

Sql: în această variabilă se ia de pe request-ul de POST parametrul cu numele query.

Pentru executarea query-ului în baza de date:

$result = mysqli_query($con,$sql);

Result: rezultatul query-ului;

Con: conexiunea la baza de date;

Sql: query-ul in limbaj SQL.

În cazul în care se face un query de INSERT sau DELETE, adică pentru a insera un produs sau un user, respectiv de a șterge un produs sau un user, se returnează doar un raspuns de „succes”:

if(strpos($sql,'INSERT') !== false || strpos($sql,'DELETE') !== false){

echo "[{success: true}]";

Altfel, daca se face un query de SELECT, adică dacă utilizatorul dorește să se logheze în aplicație sau dorește să vadă un anumit produs, atunci se returnează fiecare linie „cerută”:

while($row = mysqli_fetch_array($result)) {

$output[] = $row;

Rezultatul obținut se va pune în variabila „output”, după care se convertește în format JSON și se returnează:

echo json_encode($output);

După toate acestea, se închide conexiunea cu baza de date:

mysqli_close($con);

Prezentare Baza de date

Mediul de dezvoltare în care este concepută baza de date și care l-am folosit este MySQL. Astfel, folosind XAMPP, am accesat http://localhost/phpmyadmin/ unde putem observa în stânga paginii o listă cu mai multe opțiuni. Din acea listă selectăm „New” pentru a crea o nouă bază de date. Urmează apoi să introducem numele bazei de date, iar la final apăsăm butonul „Create”.

După ce baza de date a fost creată, o sa fim întâmpinați de o fereastră în care putem deja adăuga tabele. Tot aici putem observa că numele ce l-am ales pentru baza de date o să apară în lista din stânga, lucru ce îl putem vedea în figura 5.3. Numele introdus este „productsdb”.

Aici introducem numele unei tabele, după care alegem numărul aproximativ de coloane a tabelei(nu este necesar un număr exact de la început. Acesta se poate modifica între timp). La sfârșit apăsăm butonul „Go” din dreapta jos a paginii.

Pasul următor este de a introduce coloanele tabelei. O vedere de ansamblu cum ar arăta introducerea coloanelor o puteți vedea în figura 5.4.

O să descriu câmpurile mai importante pentru o tabelă:

Name : se introduce numele coloanei;

Type : reprezintă tipul de dată corespunzător coloanei;

Length/Values: e lungimea maximă a șirului de caractere;

Null: este posibil ca în câmp să nu existe date;

A_I(Auto-Increment): incrementeaza automat câmpul respectiv.

După introducerea acestora, după apăsarea butonului „Save” ar trebui să avem tabela cu câmpurile introduse.

La final, pentru a introduce date propriu-zise în tabelă, trebuie să selectăm meniul „Insert”, iar apoi completăm câmpurile necesare.

O vedere de ansamblu a bazei de date a aplicației este prezentată în figura…….

Tabela „users” cuprinde datele esențiale despre user-ul care s-a înregistrat în aplicație, având câmpurile: Id, User și Password.

Tabela „products” include mai multe câmpuri referitoare la produsul sau produsele recomandate. Acestea sunt: Id, Name, Store, TypeId, Price, Description, Picture. În câmpul Id găsim id-ul produsului, Name reprezintă numele prudusului recomandat, Store este magazinul în care putem găsi produsul respectiv, TypeId este cheia străină spre tabela „product_type” pe care o prezentăm ulterior, Price este prețul produsului, Description este descrierea, iar Picture reprezintă poza facută de utilizator produsului dorit.

Tabela „product_type” conține câmpurile Id și Type. Această tabelă conține tipurile de produse.

Diagrame

Diagrama Use Case

Diagrame secvențiale

In figura 5.9 este prezentată diagrama de secvență ce ilustrează interacțiunea cu baza de date și serviciul web, pentru cazul în care utilizatorul se înregistrează în aplicație. Totul se face printr-o clasă ajutătoare denumită DBaccess. Aceasta se foloseste de librăria Volley pentru a face un request către Web-Service, care la rândul lui face un request către baza de date. Răspunsul dat de baza de date este apoi înaintat de către Web Service la aplicație, prin librăria Volley. La sfârsit, se afișează un mesaj de succes în aplicație

In figura 5.10 se prezinta diagrama de secvență pentru cazul în care utilizatorul vede produsele recomandate și apoi face o recomandare a unui produs. Totul începe cu logarea userului în aplicație, urmată de tranziția către primul ecran unde trebuie să aleagă ce produse dorește să vizualizeze. După ce iși alege categoriile de produse dorite, utilizatorul este dus la ecranul de “View products”. Aici se face un apel către baza de date pentru a se afișa produsele selectate. Utilizatorul poate vedea detalii despre fiecare produs. De aici se poate naviga către ecranul de recomandare produs. După completarea datelor necesare, se face un apel la baza de date care stocheaza noua recomandare, iar utilizatorul este condus către ecranul de vizualizare produse. Aici este afișat și un mesaj care informează utilizatorul că recomandarea produsului s-a făcut cu succes.

Diagrama de clase

Testare și Validare

Testarea sistemului se face pentru o bună funcționare a acestuia. Clientul testat rulează pe un dispozitiv mobil real, un smartphone cu o versiune API 21, Android 5.0 Lollipop.

Dupa conectarea dispozitivului și rularea pentru prima dată a aplicației Android pe dispozitivul mobil, aplicația este instalată și poate fi accesată ori de câte ori este nevoie. Voi prezenta rezultatele experimentale obținute de-a lungul analizelor dezvoltării aplicației. Voi încerca să prezint de asemenea procesele prin care aplicația a fost testată.

Procesul de înregistrare, logare si ștergere

Primul pas in utilizarea aplicației este acela de înregistrare în baza de date. Acest lucru constă în introducerea unui nume de utilizator, respectiv o parolă. Pentru ca salvarea informațiilor în baza de date să fie făcută cu succes, utilizatorul trebuie să îndeplinească unele condiții:

Este necesar ca toate câmpurile să fie completate, altfel utilizatorul va fi atenționat de acest lucru;

Utilizatorul trebuie să-și aleagă un nume de utilizator unic(să nu fie deja utilizat de alt utilizator), în caz contrar va fi atenționat printr-un mesaj;

O condiție importantă o constituie accesul la internet. Avem nevoie de conexiune la internet deoarece ca întreg procesul de înregistrare, logare sau ștergere să aibă succes, trebuie să avem legătura cu baza de date în care se stocheaă sau se șterg datele utilizatorului(baza de date putând fi accesată doar prin intermediul internetului).

Pasul doi îl constituie autentificarea utilizatorului, astfel putând accesa interfața principală a aplicației. Pentru ca autentificarea să se realizeze cu succes, utilizatorul aplicației va trebui să îndeplinească câțiva pași:

Să aibă acces la internet, deoarece și în acest pas se va face o interogare a bazei de date pentru a verifica daca datele introduse de către utilizator coincid cu vreo valoare din baza de date.

Să introducă numele și parola corespunzătoare, în caz contrar primește un mesaj de atenționare;

Daca toate condițiile sunt îndeplinite, utilizatorul este direcționat în interfața principală și va primii un mesaj de „welcome”.

Ultimul pas din acest proces îl constituie ștergerea contului, care este posibilă doar după autentificare. Acest pas este posibil doar după ce utilizatorul se află deja în interfața principală a aplicației(unde se află butonul de ștergere).

Dacă utilizatorul dorește să-și șteargă contul, i se va afișa un mesaj de confirmare pentru a fi sigur de alegere.

Procesul de alegere a categoriei și vizualizare a produselor

În această interfața avem posibilitatea de alegere a categoriei produselor căutate. În acest fel, putem alege una, două sau toate categoriile pentru vizualizare. Cu toate acestea, utilizatorul este nevoit să aleagă cel puțin o categorie, deoarece în caz contrar i se va afișa un mesaj și nu poate să ajungă în interfața următoare.

Aici am testat de asemenea și butonul de Logout. Utilizatorul va primii un mesaj de confirmare despre alegerea facută. În caz afirmativ, acesta va primi un mesaj de „logout” și va fi trimis în interfața de login.

În următoarea interfață putem vedea lista cu produsele recomandate și detalii despre acestea. Am „testat” mai multe produse, selectându-le din lista de produse, dorind să văd detalii despre acestea.

Procesul de recomandare a unui produs

Procesul de recomandare îl constituie ultima interfață. Acesta este reprezentat prin adăugare de informații despre produs, respectiv o poză cu produsul respectiv, ca recomandarea să poată fi făcută cu succes.

Astfel am ales ca și testare recomandarea unor produse necompletând unele informații.

Din câte se observă, nu am completat câmpul „Price” sau câmpul „Store”. După încercarea de a recomanda, prin apăsarea butonului de „Recommend”, utilizatorului i se va afișa un mesaj, prin care este anunțat că nu a completat toate câmpurile.

De asemenea am încercat să recomand un produs fără a-i face o poză.

După recomandare, vom primii și aici mesajul prin care suntem anunțați că nu sunt complete toate câmpurile necesare unei recomandări.

Manual de Instalare si Utilizare

Aplicația este dezvoltată în IDE-ul Android Studio, IDE specializat în dezvoltarea aplicațiilor Android. Limbajul folosit pentru scrierea aplicației este Android, limbaj ce se bazează pe limbajul de programare Java.

Instalarea aplicației

Instalarea aplicației este destul de simplă. Utilizatorul este nevoit doar să-și instaleze .apk-ul pe dispozitivul lui, după care poate să-și ruleze aplicația.

Cerințele de sistem pentru rularea cu succes a aplicației constau în:

Dispozitiv mobil care are un sistem de operare bazat pe Android.

Dispozitiv mobil dotat cu cameră de fotografiat;

Conexiune la internet pentru a trimite și primii informații de la server.

Utilizarea aplicației

Aplicația are un ecran principal care apare atunci când user-ul pornește aplicația. Această fereastră conține câmpurile și butoanele necesare unui utilizator care dorește să folosească aplicația.

Aici, utilizatorul îsi creează mai întai un cont prin completarea câmpurilor de nume și parolă, apăsând apoi pe butonul de „Sign Up”. După ce s-a înscris, acesta este capabil să se autentifice introducând acele date și apăsând butonul de „Login”.

După autentificare, utilizatorul va intra în fereastra principală. În această fereastră, se observă categoriile produselor, un buton de ștergere a contului, un buton de „Done” și un buton de „Logout”. Prin selectarea categoriilor, utilizatorul va putea vizualiza în lista din fereastra următoare, doar produsele dorite de el. Prin butonul de „Done”, utilizatorul este trimis în fereastra următoare.

În următoarea fereastră, se observă lista cu produsele dorite. Tot aici mai avem câmpuri pentru descrierea unui produs și un buton de recomandare a unui produs. Câmpurile pentru descrierea unui produs sunt necesare, deoarece când utilizatorul selectează un produs despre care dorește să afle mai multe, informațiile despre acestea apar în câmpurile corespunzătoare.

Când utilizatorul dorește să recomande și el un produs, va apăsa butonul „Recommend product” și va fi trimis în fereastra de recomandare. Aici avem de asemenea câmpuri pentru descrierea unui produs, dar de data sunt câmpuri în care introducem informații despre produsul recomandat. Avem un buton de „Take a Photo”, un buton de „Logout” și un buton de „Recommend”.

Butonul „Take a Photo” va porni aparatul de fotografiat pentru ca utilizatorul să poată face o poză produsului. Această poză va fi afișată tot aici în fereastra de recomandare, deasupra câmpurilor pentru descrierea produsului.

Butonul de „Recommend” face posibilă adăugarea produsului în lista de produse, daca toate condițiile pentru descrierea produsului sunt îndeplinite.

Concluzii

Această lucrare se concentrează pe implementarea unei aplicații proiectată pentru dispozitivele cu sistem de operare Android. Pentru aceasta s-a realizat un studiu asupra sistemelor de operare pentru dispozitivele mobile. Acest studiu a dus la alegerea mediului de dezvoltare. Pentru a realiza implementarea acestui sistem s-a studiat în detaliu tehnologiile: Android, baze de date și aplicații client-server.

Aplicația a fost construită cât mai simplu, dar să respecte obiectivele stabilite și să beneficieze de o interfața cât mai ușor de înteles de către utilizator. Astfel, această realizare vine ca și o solutie alternativă pentru cumpărarea unui produs sau informarea despre anumite produse căutate de utilizator. Consider că este totodată și o metodă modernă și foarte eficientă de promovare, nu numai a produselor expuse vânzării, dar și a creșterii imaginii Mall-ului care, prin acest procedeu, pune mai presus de toate respectarea timpului clientului și posibilității crescute de alegere.

Proiectul propus are multe avantaje, însă întotdeauna vor exista idei care pot fi aduse în plus pentru a îmbunătății funcționalitatea aplicației. Avantajele sau îmbunătățirile datorate aplicației ar fi:

Perfecționarea tehnicii de vânzare;

Dezvoltarea și creșterea activității de prospectare prin atragerea de noi cumpărători;

Creșterea oportunității în alegerea produsului dorit;

Creșterea vânzărilor;

Fidelizarea cumpărătorilor datorită eficienței aplicației;

Obținerea satisfacției clienților;

Scurtarea timpului de căutare și în care clienții pot obține un produs.

În viitor, se urmărește ca aplicația să fie dezvoltată din mai multe puncte de vedere.

Prima îmbunătățire ar fi de fapt o adăugare care constă dintr-un chat-room cu o listă de posibili prieteni. Acest chat-room ajută la comunicarea între clienți, informarea sau chiar recomandarea unor produse live. Acest lucru presupune și o interfață sau un tip de logare mai securizat.

O îmbunătățire importantă o constituie adăugarea contului de administrator. Administratorul are acces „interior” în aplicație. El poate să gestioneze produsele, să verifice dacă acestea au fost introduse corect. De asemenea să poată șterge conturile inactive.

O alta îmbunătățire ar fi prezentarea unei liste de produse mult mai elaborata, cu informații detaliate despre produs. De asemenea, o gamă mai largă de categorii pentru împarțirea produselor mult mai ușor.

Un rating al produselor ar fi totodată o îmbunătățire folositoare. În acest fel, putem diferenția produsele între ele, în funcție de calitate-preț.

Bibliografie

[1] http://roxannevoicu.blogspot.ro/

[2] http://www.preferatele.com/docs/marketing/1/introducere-in-marke16.php

[3] https://mksblog.wordpress.com/2008/12/07/cei-4p-din-seria-marketing-mix/

[4] http://moisilonesti.licee.edu.ro/reviste/rogvaiv/index.php?option=com_content&view=article&id=22:sistemul-de-operare-android&catid=9&Itemid=112

[5] http://ocw.cs.pub.ro/courses/pdsd/labs/00

[6] http://www.itcsolutions.eu/2011/09/08/android-tutorial-concepte-activitati-si-resurse-ale-unei-aplicatii-android/

[7] http://www.smartnews.ro/software/18729.html

[8] http://www.iamntz.com/3932/frontend-developer/sublime-text-introducere/

[9] http://www.dponline.ro/articol.php?idarticol=111

[10] http://www.marplo.net/php-mysql/php-mysql-utilizare-mysqli.html

[11] http://www.helloandroid.com/tutorials/connecting-mysql-database

[12] http://code.tutsplus.com/tutorials/an-introduction-to-volley–cms-23800

[13] revistaie.ase.ro/content/28/timofte.pdf

[14] http://www.webopedia.com/TERM/A/Android_SDK.html

Acronime

ADT – Android Development Tool

API – Application Programming Interface

HTTP – Hyper Text Transfer Protocol

IDE – Integrated development environment

JSON – JavaScript Object Notation

OS – Operating system

PHP – Personal Home Page(Hypertext Proprocessor)

SDK – Software Development Kit

Anexa 1

Codul sursă sau aplicația propriu-zisă impreună cu documentația se poate găsi pe CD-ul atașat pe coperta lucrării scrise.

Similar Posts