Upload
others
View
31
Download
0
Embed Size (px)
Citation preview
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
ZAVRŠNI RAD br. 6191
APLIKACIJA ZA ZAPRIMANJE NARUDŽBI I
REZERVACIJA ZA OPERACIJSKI SUSTAV
ANDROID
David Buntak
Zagreb, lipanj 2019.
Sadržaj
1. Uvod ................................................................................................................... 1
2. Korištene tehnologije .......................................................................................... 2
2.1. Android ........................................................................................................ 2
2.2. Firebase ....................................................................................................... 2
2.3. Android Studio IDE ...................................................................................... 4
2.4. Elementi Android aplikacije .......................................................................... 4
3. Korisnički pogled ................................................................................................ 7
3.1. Dijagrami ...................................................................................................... 7
3.1.1. Dijagrami obrazaca uporabe ................................................................. 8
3.1.2. Sekvencijski dijagrami ........................................................................... 9
3.2. Autentifikacija ............................................................................................. 11
3.3. Zasloni narudžbe ....................................................................................... 13
3.3.1. Odabir kategorije ................................................................................. 13
3.3.2. Odabir proizvoda ................................................................................. 14
3.3.3. Potvrda narudžbe ................................................................................ 14
3.3.4. Pregled narudžbi ................................................................................. 15
3.4. Zasloni rezervacije ..................................................................................... 17
3.4.1. Kreiranje rezervacije ............................................................................ 17
3.4.2. Pregled rezervacija .............................................................................. 19
4. Implementacijski detalji..................................................................................... 21
4.1. Izvedba funkcionalnosti narudžbe .............................................................. 21
4.1.1. Odabir kategorije ................................................................................. 22
4.1.2. Odabir proizvoda ................................................................................. 22
4.1.3. Potvrda narudžbe ................................................................................ 23
4.1.4. Pregled narudžbi ................................................................................. 25
4.2. Izvedba funkcionalnosti rezervacije ........................................................... 26
4.2.1. Kreiranje rezervacije ............................................................................ 26
4.2.2. Pregled rezervacija .............................................................................. 28
4.3. Baza podataka ........................................................................................... 28
4.3.1. Autentifikacija ...................................................................................... 28
4.3.2. Struktura baze podataka ..................................................................... 30
5. Zaključak .......................................................................................................... 34
6. Literatura .......................................................................................................... 35
1
1. Uvod
Svi smo svjedoci sve ubrzanijeg načina života. Iz tog razloga često nemamo
vremena za čekanje na neku uslugu, nego ju želimo moći dobiti kada i kako nama
odgovara. Zbog toga nam možda u nekoj situaciji neće odgovarati rezervacija neke
usluge osobno, a mi nemamo vremena za otići do objekta, ili telefonski, a linija je
zauzeta ili se nitko ne javlja. Također, vjerojatno se većina osoba našla u situaciji
da ih u uslužnom objektu (npr. restoran ili kafić) osoblje ne dolazi uslužiti dinamikom
kojom bi oni htjeli. U nekim drugim objektima, kao što su lanci brze prehrane,
konobari koji bi uzimali narudžbe i nosili hranu ne odgovaraju poslovnoj politici tih
objekata zbog smanjivanja troškova koji omogućavaju niže cijene u odnosu na
restorane s punom uslugom. Oni su jednim dijelom tom problemu doskočili na način
da su postavili uređaje s ekranima na dodir putem kojih se mogu obaviti narudžbe.
Ovaj rad će, inspiriran navedenim, biti orijentiran na stvaranje aplikacije za uređaje
pokretane operacijskim sustavom Android koja će svojim korisnicima omogućiti
praktičniji način za kreiranje narudžbi i rezervacija u ugostiteljskim objektima, a
osoblju zaprimanje istih. Nakon uvoda i upoznavanja s ključnim tehnologijama koje
su korištene za razvoj aplikacije biti će predstavljen postupak stvaranja svake od
dostupnih funkcionalnosti. Pregled će sadržavati informacije o grafičkom sučelju,
poslovnoj logici te interakciji s bazom podataka.
U svrhu toga korišteni su IDE Android Studio za razvoj aplikacije u programskom
jeziku Java, te Firebase baza podataka za pohranu podataka. Detaljniji opis
navedenih tehnologija slijedi u idućem poglavlju.
2
2. Korištene tehnologije
U ovom poglavlju biti će predstavljene tehnologije korištene u ovom projektu. Te
tehnologije su Android, Firebase i Android Studio. Također će biti riječi i o općenitoj
strukturi Android aplikacija.
2.1. Android
Android je mobilni operacijski sustav razvijen od strane Googlea. Zasnovan je na
modificiranoj verziji Linux jezgre i drugim open source programima i dizajniran je
primarno za uređaje s ekranima osjetljivim na dodir kao što su pametni telefoni i
tableti.[1] Kroz godine je Android imao mnogo verzija, a trenutna je Android 9 „Pie“.
Android je najbolje prodavani operacijski sustav za pametne telefone od 2011., a na
tabletima od 2013. godine.[1] U svibnju 2017. je imao preko 2 milijarde korisnika,
najviše od svih operativnih sustava, a u prosincu 2018. je Google Play trgovina
imala preko 2.6 milijuna aplikacija.[1]
Aplikacije su pisane koristeći Androidov alat za razvoj programske potpore (engl.
Software development kid, SDK) i često programski jezik Java. Java se može
kombinirati s C-om i C++-om, a podržani su i jezik Go, te od 2017. i Kotlin.[1]
SDK uključuje mnogo razvojnih alata kao što su debugger, programske biblioteke,
emulator baziran na QEMU, dokumentaciju, primjere koda i tutoriale.[1]
Android ima rastući izbor aplikacija trećih strana kojima korisnici mogu pristupiti
skidanjem i instaliravanjem njihovih Android aplikacijskih paketa (engl. Android
application package, APK) ili skidanjem putem trgovine aplikacija, a najčešće se
koristi Google Play Store.
2.2. Firebase
Firebase je razvojna platforma za mobilne aplikacije i web-stranice koju je razvila
tvrtka Firebase Inc. 2011. godine, a preuzeo Google 2014. godine. U listopadu
2018. godine platforma je imala 18 proizvoda koje je koristilo više od 1.5 milijuna
aplikacija. Prvi proizvod je bio baza podataka u stvarnom vremenu (engl. Realtime-
3
database), aplikacijsko programsko sučelje (engl. Application programming
interface, API) koje usklađuje podatke aplikacije na iOS, Android i Web uređajima i
pohranjuje ih na Firebaseov oblak. Proizvod pomaže razvojnim inženjerima u
kreiranju aplikacija prilagodljivih u stvarnom vremenu.[3]
Neki od značajnijih Firebase proizvoda su :
Firebase Analytics – Besplatan alat koji omogućava uvid u korištenje
aplikacije i korisničke aktivnosti.
Firebase Cloud Messaging – Višeplatformsko rješenje za slanje poruka i
obavijesti za Android, iOS i web-aplikacije, koje se od 2016. može koristiti
besplatno.
Firebase Auth – Usluga za autentifikaciju korisnika koristeći samo kod na
klijentskoj strani. Omogućava prijavu putem Facebooka, GitHuba, Twittera i
Googla. Također, moguća je i autentifikacija pomoću emaila i lozinke koji se
spremaju na Firebaseu.
Firebase Realtime Database – Usluga koja sadrži bazu podataka u
stvarnom vremenu koja omogućava sinkronizaciju podataka kod svih
klijenata aplikacije i pohranu na Firebase oblaku. Dostupne su klijentske
biblioteke koje omogućavaju integraciju s Android, iOS, JavaScript, Java,
Objective-C, Swift i Node.js aplikacijama. Bazi podataka se također može
pristupiti preko API-a reprezentativnog prijenosa stanja (engl.
Representational state transfer, REST) i ima podršku za nekoliko JavaScript
radnih okvira (AngularJS, React, Ember.js i Backbone.js).
Firebase Cloud Firestore – Naslijednik Realtime Databasea koji
omogućava gniježđenje dokumenata i polja za razliku od stablaste strukture
kod Realtime Databasea.
Firebase Storage – Usluga sigurnog učitavanja i skidanja datoteka za
Firebase aplikacije uz potporu Google Cloud Storagea.
Firebase Hosting – Statička i dinamička usluga poslužitelja koja podržava
statičke datoteke kao što su kaskadni stilski listovi (engl. Cascade Style
Sheets, CSS) , prezentacijski jezik za izradu web stranica (engl. HyperText
Markup Language, HTML) , JavaScript, isto kao i podrška kroz funkcije u
oblaku (engl. Cloud Functions). Usluga isporučuje datoteke preko mreže
dostave sadržaja (engl. Content delivery network, CDN), kroz sigurni
4
hipertekst prijenosni protokol (engl. Hiper Text Transfer Protocol, HTTP) i
enkripciju sigurnog sloja priključnice (engl. Secure Sockets Layer, SSL).
ML Kit – Mobilni sustav strojnog učenja s mogućnostima kao što su
prepoznavanje teksta, detekcija lica, skeniranje barkodova, označavanja
slika i prepoznavanja znamenitosti. Dostupan je za iOS i Android, a može se
koristiti na uređaju ili na oblaku.
Crashlytics – Alat za kreiranje detaljnih izvještaja o pogreškama u aplikaciji.
Pogreške se grupiraju u grupe po sličnosti tragova stoga (engl. Stack trace)
i utjecaja na korisnika. Razvojni inženjer ima mogućnost zapisa proizvoljnih
događaja koji pomažu u otkrivanju događaja koji su doveli do pada aplikacije.
Performance – Pruža uvid u performanse aplikacije i kašnjenje (latenciju)
kod korisnika.
Firebase Test Lab for Android And iOS – Pruža infrastrukturu za testiranje
Android i iOS aplikacija baziranu na oblaku. Omogućava iniciranje testova
aplikacije na raznim uređajima. Rezultati su dostupni u projektu u Firebase
konzoli u obliku logova, videa i snimki zaslona.[3]
2.3. Android Studio IDE
Android Studio je službena integrirana razvojna okolina za Android, razvijena je na
JetBrainsovom Intelij IDEA programu i dizajnirana isključivo za razvoj u Androidu.
Moguće ga je skinuti za operacijske sustave Windows, macOS i Linux. Zamjena je
za Eclipse Android razvojne alate (engl. Android Development Tools, ADT) kao
primarni IDE za razvoj nativnih Android aplikacija.
Android Studio je predstavljen 2013. godine, prva stabilna verzija izlazi krajem 2014.
godine. [2]
2.4. Elementi Android aplikacije
Android aplikacije mogu se pisati koristeći programske jezike Kotlin, Javu i C++.
Android SDK-ovi alati prevode kod uključujući sve podatke i resurse koji se nalaze
unutar Android paketa, koji je arhivska datoteka sa sufiksom .apk. Jedna APK
datoteka sadrži sav sadržaj Android aplikacije i Android uređaji ju koriste za
instaliravanje aplikacije.
5
Komponente aplikacije
Komponente aplikacije ključni su gradivni elementi svake aplikacije. Svaka
komponenta ulazna je točka kroz koju sustav ili korisnik mogu pristupiti aplikaciji.
Komponente mogu biti međuovisne.
Postoje četiri različita tipa komponenti:
Aktivnosti (engl. Activity)
Usluge (engl. Service)
Primatelji prijenosa (engl. Broadcast Receiver)
Pružatelji sadržaja (engl. Content Provider)
Svaki tip služi različitoj svrsi i ima različit životni ciklus koji određuje načine stvaranja
i uništavanja komponenti.[4]
Aktivnosti
Aktivnost je ulazna točka za interakciju s korisnicima. Predstavlja jedan zaslon s
korisničkim sučeljem. Iako rade zajedno da bi pružile povezano korisničko iskustvo,
one su zapravo neovisne jedna o drugoj. Aktivnost olakšava slijedeće ključne
interakcije između sustava i aplikacije:
Praćenje trenutnih akcija korisnika kako bi se osiguralo izvođenje procesa
koji su zaduženi za trenutnu aktivnost
Održavanje u pozadini procesa s podacima kojima bi se korisnik mogao
vratiti
Upravljanje uništavanjem procesa kako bi se korisnik mogao vratiti na
aktivnost sa sačuvanim prethodnim stanjem
Pružanje načina na koji aplikacije mogu implementirati korisničko
prebacivanje među njima.
Aktivnosti se implementiraju kao podklase klase Activity.[4]
6
Usluge
Usluga je općenito korištena ulazna točka za održavanje izvršavanja aplikacije u
pozadini zbog raznih razloga. To je komponenta koja je pokrenuta u pozadini kako
bi izvršila dugotrajne operacije ili obavila posao za udaljene procese. Ne pruža
korisničko sučelje. Na primjer, može se koristiti za puštanje glazbe i kad korisnik
napusti samu aplikaciju. Postoje dvije vrste usluga u pozadini i različite su u tome
kako sustav njima upravlja:
Glazba u pozadini je nešto čega je korisnik izravno svjestan pa aplikacija to
govori susavu zahtjevom da bude u prvom planu te notifikacijom koja o njoj
obavještava korisnika. Kod ove vrste usluga se sustav trudi održati njihovu
funkcionalnost jer bi prekid imao izravan utjecaj na korisnika.
Regularna pozadinska usluga je nešto čega korisnik nije direktno svjestan,
pa sustav ima više slobode u upravljanju njome. Može biti uništena (i
pokrenuta kasnije) ukoliko sustavu treba memorije s nasumičnim pristupom
(engl. Random Access Memory, RAM) za neke trenutne korisničke zahtjeve.
Povezane usluge su usluge pokrenute zato što ih koristi neka druga aplikacija (ili
sustav). Usluga se implementira kao podklasa klase Service.[4]
Primatelji prijenosa
Primatelj prijenosa je komponenta koja omogućava sustavu dostavu događaja
aplikaciji izvan uobičajnog korisničkog toka, omogućavajući aplikaciji da odgovori
na objave prijenosa na razini sustava. Zbog toga što je primatelj prijenosa dobro
definiran ulaz u aplikaciju, sustav može dostaviti prijenos i do aplikacija koje trenutno
nisu pokrenute. Na primjer, aplikacija može zakazati alarm koji će prikazati obavijest
koja korisniku govori o nadolazećem događaju. Dostavljanjem tog alarma primatelju
prijenosa (engl. BroadcastReceiver) aplikacije nema potrebe da aplikacija nastavi
raditi do okidanja alarma. Aplikacije također mogu inicirati prijenos, na primjer kada
žele obavijestiti druge aplikacije da su neki podaci skinuti na uređaj i dostupni za
upotrebu. Primatelj prijenosa je implementiran kao podklasa od klase
BroadcastReceiver.[4]
7
Pružatelj sadržaja
Pružatelj sadržaja upravlja dijeljenim skupom aplikacijskih podataka koji mogu biti
pohranjeni u datotečnom sustavu, u bazi podataka SQLite, na Internetu ili bilo kojoj
drugoj trajnoj lokaciji za pohranu kojoj aplikacija može pristupiti. Kroz pružatelja
sadržaja druge aplikacije mogu dohvaćati ili mijenjati podatke ukoliko imaju dozvolu.
Sustavu je pružatelj sadržaja ulazna točka u aplikaciju za objavljivanje imenovanih
stavki podataka, identificiranih pomoću sheme jedinstvenih identifikatora resursa
(engl. Uniform Resource Identifier, URI).
Također su vrlo korisni za čitanje i pisanje podataka koji su privatni. Implementiran
je kao podklasa od klase ContentProvider i mora implementirati standardni skup
API-a koji omogućava drugim aplikacijama izvođenje transakcija.[4]
Namjere
Namjera se kreira pomoću objekta namjere koji definira poruke za aktivaciju, ili
specifične komponente (eksplicitna namjera), ili specifičnog tipa komponente
(implicitna namjera). Za aktivnosti i usluge namjera definira akcije koje se trebaju
izvesti i može specificirati URI podataka nad kojima će se akcija obaviti uključujući
ostale stvari koje bi komponenta trebala znati. Za primatelje prijenosa namjera
definira objavu koja se prenosi. Pružatelji sadržaja se ne aktiviraju pomoću
namjera.[8]
3. Korisnički pogled
Ovo poglavlje sadrži pogled na razvijenu aplikaciju iz perspektive korisnika. Pritom
obuhvaća prikaze zaslona i objašnjava akcije koje se na njima mogu napraviti.
Također, sadrži prikaz sustava kroz dijagrame obrazaca uporabe te sekvencijske
dijagrame.
3.1. Dijagrami
U ovom poglavlju biti će prikazan sustav kroz dijagrame obrazaca uporabe i
sekvencijske dijagrame.
8
3.1.1. Dijagrami obrazaca uporabe
U ovom podpoglavlju biti će prikazan sustav kroz dijagrame obrazaca uporabe.
Sadržavati će pogled kroz dva dijagrama, a to su dijagram za korisnika i dijagram
za konobara.
Iz korisničkog dijagrama vidljivo je da korisnik ima tri grupe akcija koje može izvršiti,
a to su prijava i odjava, narudžba i rezervacija. Da bi korisnik izvršio narudžbu mora
odabrati proizvode i pritom odabrati kategoriju proizvoda koje bira. Obvezan je i
odabir stola za koji se narudžba vrši, a potvrdom narudžbe ona se sprema u bazu
podataka Firebase koja je drugi aktor u ovom prikazu. Za rezervaciju je obvezno
odabrati termin, stol i broj osoba, a prilikom potvrde rezervacije, ako je validacija
prošla uspješno, podaci se spremaju u bazu podataka. Dijagram je prikazan na slici
1.
Slika 1. – Dijagram obrasca uporabe Korisnik
Drugi dijagram prikazuje pogled konobara na sustav. Njegov pogled se također
sastoji od tri grupe akcija, a to su prijava i odjava, pregled aktivnih narudžbi i pregled
aktivnih rezervacija. Prilikom pregleda aktivnih narudžbi konobar može pregledavati
detalje narudžbe i arhivirati ih što podrazumijeva promjenu atributa narudžbe u bazi
podataka, a ista funkcionalnost je dostupna i kod pregleda aktivnih rezervacija.
Dijagram je prikazan na slici 2.
9
Slika 2. – Dijagram obrasca uporabe Konobar
3.1.2. Sekvencijski dijagrami
U ovom podpoglavlju biti će prikazani sekvencijski dijagrami za proces narudžbe i
rezervacije. Oni slijedno prikazuju akcije koje izvode korisnik ili konobar i aktivnosti
koje sustav izvršava na temelju njih.
Prvi je sekvencijski dijagram procesa narudžbe. U njemu je vidljivo da se korisnik
prvo mora prijaviti kako bi mogao izvršiti narudžbu. Nakon što korisnik odabere
kategoriju proizvoda oni se dohvaćaju iz baze podataka i prikazuju. Promjene u vidu
dodavanja i brisanja proizvoda iz narudžbe se bilježe u aplikaciji i korisniku prikazuje
što je trenutno odabrano. Nakon što je završio s odabirom proizvoda korisnik otvara
zaslon s detaljima o narudžbi. Pritom se dohvaćaju raspoloživi stolovi iz baze
podataka i pružaju na odabir, a prikazani su skupa s odabranim proizvodima. U
slučaju da narudžba nije prazna i stol je odabran ona se po potvrdi sprema u bazu
podataka i prikazuje konobaru u popisu aktivnih narudžbi. Konobar ju zatim može
pregledavati i izvršiti. Dijagram je prikazan na slici 3.
10
Slika 3. – Sekvencijski dijagram Narudžba
Drugi dijagram na slici 4. prikazuje proces rezervacije stola. Korisnik za rezervaciju
treba biti prijavljen. Nakon uspješne prijave otvara zaslon za rezervaciju gdje unosi
potrebne podatke. Provjerava se da su svi podaci uneseni i da se termin rezervacije
ne preklapa s već postojećom rezervacijom. Ako to nije slučaj rezervacija se sprema
u bazu podataka i postaje vidljiva konobaru u listi rezervacija. Nakon toga postaje
dostupna konobaru za pregledavanje.
11
Slika 4. – Sekvencijski dijagram Rezervacija
3.2. Autentifikacija
Da bi se moglo izvršiti narudžbu ili rezervaciju potrebno se registrirati u sustav. To
se vrši na zasebnom zaslonu za registraciju. Taj zaslon sadrži polja za unos traženih
podataka. Ti podaci su ime, prezime, adresa, telefon, te email i lozinka koji će služiti
za prijavu u sustav, a prikaz možemo vidjeti na slici 5.
12
Slika 5. – Registracija
Za prijavu se koristi jednostavan zaslon na kojem se unose email i lozinka čija se
ispravnost potom provjerava u bazi podataka Firebase, a možemo ga vidjeti na slici
6.
Slika 6. – Prijava
13
3.3. Zasloni narudžbe
U ovom poglavlju biti će opisana izvedba funkcionalnosti narudžbe. Kroz to će biti
obuhvaćen zaslon odabira kategorije jela s menija iz koje želimo dodati proizvod,
popisi proizvoda po kategorijama za koje imamo mogućnost dodavanja i brisanja iz
narudžbe te sam pregled narudžbe s opcijom naruči koja bilježi korisnikovu
narudžbu i prikazuje ju konobaru u njegovom sučelju.
3.3.1. Odabir kategorije
Da bi se narudžba mogla izvršiti potrebno je odabrati proizvode koje želimo naručiti.
Proizvodi su podijeljeni po kategorijama čiji zaslon za odabir je prikazan na slici 3.
Slika 7. – Odabir kategorije
14
3.3.2. Odabir proizvoda
Nakon odabira kategorije potrebno je odabrati proizvode koji će biti uvršteni u
narudžbu. Odabir se vrši na zaslonu prikazanom na slici 8. na kojem su izlistani
proizvodi s njihovom slikom, nazivom i gumbima koji omogućavaju dodavanje
proizvoda u narudžbu i brisanje proizvoda iz narudžbe. Prilikom svakog dodavanja
ili brisanja proizvoda iz narudžbe pri dnu zaslona piše koliko proizvoda je odabrano
i kolika je ukupna cijena narudžbe. Klik na taj dio zaslona vodi na zaslon s detaljnim
prikazom narudžbe.
Slika 8. – Proizvodi za odabranu kategoriju
3.3.3. Potvrda narudžbe
Kako bi se narudžba spremila u bazu podataka i bila vidljiva konobaru potrebno ju
je potvrditi. To se može napraviti na zasebnom zaslonu koji prikazuje sve odabrane
proizvode, količinu odabranog proizvoda, cijene svih pojedinačnih artikala i ukupnu
15
cijenu. Također treba odabrati i stol za koji se narudžba vrši. Prikaz zaslona je vidljiv
na slici 9.
Slika 9. – Zaslon za naručivanje
3.3.4. Pregled narudžbi
Za ispunjenje narudžbi potrebna je i druga strana koja će ih obraditi. Tu ulogu ima
druga vrsta korisnika u sustavu, a to su konobari. Oni imaju mogućnost pregleda
narudžbi u svom sučelju te njihovog arhiviranja po završetku.
Kada konobar ode na zaslon za pregled narudžbi tamo ga dočeka popis trenutno
aktivnih narudžbi vidljiv na slici 10.
16
Slika 10. – Lista aktivnih narudžbi
Klikom na pojedinu narudžbu otvara mu se iskočni prozor u kojem su prikazani
detaljni podaci. Oni sadrže sve podatke vezane uz tu narudžbu koji su zapisani u
bazu podataka. Klikom na gumb arhiviraj konobar označava narudžbu izvršenom i
ona mu se miče iz pregleda aktivnih narudžbi. Iskočni prozor je moguće zatvoriti
klikom na njega ili područje zaslona oko njega. Prikaz iskočnog prozora možemo
vidjeti na slici 11.
17
Slika 11. – Detaljan prikaz narudžbe
3.4. Zasloni rezervacije
U ovom poglavlju biti će obrađena implementacija podsustava za rezervaciju stola
u restoranu. Rezervaciju može izvršiti registrirani korisnik, a pregledavati ju može
konobar u svojem sučelju.
3.4.1. Kreiranje rezervacije
Za kreiranje rezervacije unose se podaci potrebni za tu akciju. U ovom slučaju su to
datum, vrijeme, broj osoba, te broj stola na koji se rezervacija odnosi.
18
Za odabir datuma i vremena su korišteni DatePickerDialog i
TimePickerDialog koji omogućavaju odabir kroz grafičko sučelje i ispis u za to
predviđeno tekstualno polje. Postavljeni su tako da prilikom klika na njih prikazuju
trenutni datum i vrijeme. DatePickerDialog je vidljiv na slici 12.
Slika 12.- DatePickerDialog
Slika 13. prikazuje TimePickerDialog.
Slika 13. – TimePickerDialog
Odabir broja osoba i broja stola se odvija kroz padajuće izbornike koji sadrže
stolove unešene u sustav (uz napomenu za koliko osoba je pojedini stol) te broj
osoba s najvišom vrijednošću jednakom stolu s najvećim kapacitetom. Klikom na
gumb „Rezerviraj“ se obavlja validacija unesenih podataka, ispisuje odgovarajuća
poruka ovisno o ishodu te u slučaju ispravnosti obavlja željena rezervacija. Cijeli
zaslon sa svim navedenim elementima je vidljiv na slici 14.
19
Slika 14. – Zaslon rezervacije
3.4.2. Pregled rezervacija
Pregled rezervacija za konobara uvelike nalikuje pregledu narudžbi pa stoga opis
neće biti toliko detaljan i opsežan nego će biti istaknute samo ključne stavke.
Zaslon se sastoji od rezervacija poredanih jedna ispod druge cijelom širinom
zaslona prikazanih na slici 15.
20
Slika 15. – Popis aktivnih rezervacija
Klikom na pojedinu rezervaciju se otvara iskočni prozor u kojem su prikazane sve
bitne informacije o rezervaciji, a to su naziv, datum i vrijeme, stol, korisnik te
korisnikov broj telefona. Također postoji mogućnost za arhiviranje rezervacije po
njenom izvršenju. Iskočni prozor je prikazan na slici 16.
21
Slika 16. – Detaljan prikaz rezervacije
4. Implementacijski detalji
U ovom poglavlju biti će opisani detalji implementacije funkcionalnosti koje korisnici
imaju na raspolaganju, a opisane su u prethodnom poglavlju. Opisi će biti
potkrijepljeni isječcima koda. Također će biti opisana i struktura baze podataka sa
svim bitnim detaljima vezanim uz nju.
4.1. Izvedba funkcionalnosti narudžbe
U ovom poglavlju biti će opisana implementacija procesa narudžbe. Ona
obuhvaća odabir kategorije, odabir proizvoda u kojem će biti opisano dohvaćanje
podataka iz baze podataka i način prikaza podataka u listi, potvrdu narudžbe i
pregled narudžbi za konobara.
22
4.1.1. Odabir kategorije
Prilikom klika na željenu kategoriju izvršava se kod prikazan na slici 17. koji stvara
novu namjeru koja predstavlja apstraktni opis operacije koja će se izvršiti. Njoj
predajemo trenutnu lokaciju u aplikaciji i aktivnost koju želimo pokrenuti. U namjeru
je dodan i naziv odabrane kategorije kako bi ga mogli ispisati na vrhu nove aktivnosti
i dohvatiti odgovarajuće proizvode. Nakon toga pokrećemo pripremljenu novu
aktivnost.
Slika 17. – Akcija kod klika na kategoriju
4.1.2. Odabir proizvoda
Dohvat proizvoda je ostvaren upotrebom funkcije addValueEventListener koja
se poziva nad objektom tipa DatabaseReference. Funkciji se predaje instanca
ValueEventListenera i nadjačavaju se njegove metode OnDataChange koja
kao argument prima podatke na zadanoj lokaciji u bazi podataka, i metodu
onCancelled koja se izvršava ako nije moguće dohvatiti podatke iz baze
podataka. Kako bismo dobili referencu nad bazom podataka pozivamo statičku
metodu getInstance nad klasom FirebaseDatabase. Na slici 18. je prikazan
dohvat proizvoda iz određene kategorije te spremanje njegovog naziva i slike u listu
koja će pomoću jednostavnog prilagodnika (engl. SimpleAdapter) biti prikazana u
prikazu liste (engl. ListView).
Slika 18. – Dohvat proizvoda
23
SimpleAdapter se koristi za povezivanje statičkih podataka i pogleda definiranih
u XML datoteci.[5] Lista podataka za prikaz se definira kao ArrayList koji sadrži
mape. Svaki unos u ArrayListi odgovara jednom retku u prikazu. Mape sadrže
podatke koji se prikazuju u svakom retku. Također, u XML datoteci se definiraju
pogledi koji se povezuju s ključevima iz mape i služe za prikaz povezanih podataka.
ListView se koristi za prikaz vertikalno pomične kolekcije pogleda gdje je svaki
pogled postavljen netom ispod prethodnog u listi.[6] Za prikaz liste potrebno je
uključiti pogled liste u XML datoteci, a to činimo oznakom <ListView />. To je
adapterski pogled koji ne zna detalje kao što su tip i sadržaj pogleda koje sadrži.
Umjesto toga dobiva podatke na zahtjev od ListAdaptera. Za prikaz stavki u listi
poziva se funkcija setAdapter(android.widget.ListAdapter) koja
povezuje adapter s listom.
S obzirom da za različite kategorije imamo različite zaslone te odabrane proizvode
trebamo prikazati u zasebnom zaslonu za narudžbu, bilo je potrebno upotrijebiti
način spremanja tih podataka o odabranim proizvodima na način da budu dostupni
kroz sve zaslone u kojima se koriste. U tu svrhu odabran je oblikovni obrazac
jedinstveni objekt. Klasa OrderInformations sastoji se od privatnog
podrazumijevanog konstruktora koji onemogućava njeno vanjsko instanciranje,
metode getInstance koja pri prvom pozivu instancira primjerak klase, a pri
svakom slijedećem vraća već kreiranu instancu. Također, prisutne su i metode
getOrderProducts i setOrderProducts koje služe za dohvaćanje i spremanje
kolekcije s informacijama o proizvodima u košarici.
4.1.3. Potvrda narudžbe
Ukoliko stol ili niti jedan proizvod nije odabran naručivanje se neće dopustiti i biti će
ispisana odgovarajuća poruka. Identifikatori stolova se dohvaćaju dinamički iz baze
podataka ovisno o stolovima koji su uneseni u sustav. Odabir stola je izveden preko
padajućeg izbornika koji u androidu odgovara elementu Spinner. Narudžba je
spremljena u bazu podataka pod nasumično generiranim identifikatorom (metoda
push), a uz podatke o odabranim proizvodima i stolu još se spremaju podatak o
vremenu kreiranja narudžbe i podatak o id-u korisnika koji je napravio narudžbu.
Korisnik se dohvaća preko metode getCurrentUser klase FirebaseAuth, a
24
zatim njegov id metodom getUid klase FirebaseUser. Također, sprema se i
podatak o aktivnosti narudžbe koji je u početku false, a konobar ga mijenja u true
po izvršenju narudžbe. Kod koji izvršava upravo opisanu logiku prikazan je na slici
19.
Slika 19. – Potvrda narudžbe
Po potvrdi korisniku se ispisuje poruka o uspješnosti obavljanja operacije, odabrani
artikli se poništavaju, a u u bazi podataka će biti vidljiv novi objekt koji predstavlja
upravo stvorenu narudžbu sa svim elementima spomenutim ranije, a možemo ga
vidjeti na slici 20.
25
Slika 20. – Narudžba u bazi podataka Firebase
4.1.4. Pregled narudžbi
S obzirom da su do sada već prikazani neki od elemenata korištenih i u ovom dijelu
kao što su dohvat i manipulacija podacima iz baze podataka i spremanje istih u
ovom dijelu će naglasak biti stavljen na kreiranje iskočnog prozora s podacima o
narudžbi.
Prozor je kreiran u zasebnoj XML datoteci, a za „ubacivanje“ sadržaja te XML
datoteke u iskočni prozor, kojeg ćemo prikazati unutar iste aktivnosti pregleda
narudžbi, korišten je LayoutInflater. On služi za instanciranje XML datoteke s
prikazom u njezin pripadajući objekt pogleda.[7] Pomoću njega je kreiran novi
pogled (engl. View) koji kao resurs sadrži prikaz u XML datoteci pod nazivom
dialog_order. Taj pogled se zatim, uz dodatne postavke veličine iskočnog zaslona
26
i mogućnosti fokusiranja, predaje konstruktoru razreda PopupWindow. Nakon toga
novokreiranom se prozoru namješta lokacija na zaslonu te kreira slušač koji
omogućava povratak na popis narudžbi klikom na iskočni prozor. Izvedba
navedenog prikazana je na slici 21.
Slika 21. – Kreiranje iskočnog prozora
4.2. Izvedba funkcionalnosti rezervacije
U ovom poglavlju biti će obrađena implementacija postupka rezervacije, a ona
obuhvaća kreiranje rezervacije i pregled rezervacija za konobara.
4.2.1. Kreiranje rezervacije
Prije nego što se rezervacija spremi u bazu podataka obavlja se već spomenuta
validacija. U sklopu validacije se ispituje ima li stol dovoljno velik kapacitet za prihvat
željenog broja osoba, stanu li svi za neki stol manjeg kapaciteta te preklapa li se
rezervacija s već postojećom rezervacijom u sustavu. U slučaju da neki od
validacijskih kriterija nije zadovoljen pripremljene su odgovarajuće poruke za svaki
od njih, a ako su svi zadovoljeni poziva se funkcija koja obavlja rezervaciju.
Implementaciju možemo vidjeti na slici 22.
27
Slika 22. – Validacija rezervacije
Funkcija za rezervaciju prima objekt klase Reservation koji sadrži sve potrebne
podatke koji se spremaju u bazu podataka. Nakon spremanja se ispisuje
odgovarajuća poruka te se resetiraju svi podaci u formi za unos rezervacije. To je
prikazano na slici 23.
Slika 23. – Spremanje rezervacije i reset forme
28
4.2.2. Pregled rezervacija
Iskočni prozor stvara se na isti način opisan kod narudžbi preko
LayoutInflatera, a na slici 24. biti će prikazano dohvaćanje korisnika koji je
napravio rezervaciju te upisivanje njegovih podataka u odgovarajući element na
zaslonu. Nadalje, biti će prikazano što se događa klikom na gumb arhiviraj, odnosno
kako se vrši izmjena postojećeg podatka u bazi podataka.
Slika 24. – Dohvat korisnika i arhiviranje
4.3. Baza podataka
Kao što je već spomenuto u poglavlju 2. u aplikaciji je korištena baza podataka
Firebase. Od konkretnih proizvoda korišteni su Firebase RealtimeDatabase za
spremanje podataka koje aplikacija koristi i Firebase Authentication za
autentifikaciju prilikom prijave korisnika i konobara.
4.3.1. Autentifikacija
Za autentifikaciju se koriste email adresa i lozinka. Njih korisnik unosi prilikom
ispunjavanja obrasca za registraciju. Nakon uspješne registracije registriranom se
korisniku dodjeljuje jedinstvena šifra pod nazivom User UID. Također, za svakog se
29
korisnika vodi evidencija o datumu kreiranja računa i datumu posljednje prijave u
sustav. Prikaz sučelja za autentifikaciju je na slici 25.
Slika 25. – Pohrana korisnika
Za registraciju se koristi funkcija createUserWithEmailAndPassword razreda
FirebaseAuth koja prima email i password unesen u formi za registraciju. Na tu
funkciju stavljamo slušača pomoću funkcije addOnCompleteListener koji po
završetku registracije dohvaća jedinstveni ključ (engl. Unique Identifier, UID)
kreiranog korisnika i tom UID-u dodjeljuje dodatne podatke koji su se ispunjavali u
formi i pohranjuje ih u bazu podataka. Izvedba je prikazana na slici 26.
Slika 26. – Logika registracije
Za prijavu je korištena funkcija signInWithEmailAndPassword razreda
FirebaseAuth koja prima unesene email i lozinku te provjerava njihovu ispravnost
u bazi podataka. U slučaju da su podaci ispravni dohvaća se kategorija prijavljenog
30
korisnika i na temelju nje smješta ga se u odgovarajuće sučelje u sustavu. Za odjavu
se koristi funkcija signOut koja se poziva nad instancom razreda FirebaseAuth.
Prikaz je na slici 27.
Slika 27. – Logika prijave
4.3.2. Struktura baze podataka
Baza podataka sastoji se od 5 tablica. To su Orders, Products, Reservations, Tables
i Users. Tablica Orders prikazana na slici 28. kao svoje elemente ima automatski
generirane ključeve koji predstavljaju pojedinu narudžbu. Svaka narudžba ima
atribute:
archived - je li narudžba izvršena
items - sadrži proizvode i količinu svakog od njih u narudžbi
table - stol naružbe
time - vrijeme kad je narudžba izvršena
userID - predstavlja jedinstvenu šifru korisnika koji je narudžbu izvršio
31
Slika 28. – Tablica Orders
Tablica Products sadrži proizvode koji su dostupni za narudžbu, a oni su podijeljeni
po kategorijama (npr. Meat, SideDish, Salad…). Svaka kategorija sadrži proizvode
koji u nju spadaju (npr. pomfrit, blitva…), a proizvodi imaju atribute:
category - kategorija kojoj pripada
id - identifikator
name - naziv proizvoda
price - cijena proizvoda
Tablica Reservations sadrži rezervacije unesene u sustav. Rezervacije su
jedinstveno određene automatski generiranim ključem, a svaka ima atribute:
archived - je li rezervacija izvršena
date - datum za koji je stol rezerviran
32
persons - broj osoba
table - broj stola koji se rezervira
time - vrijeme za koje je stol rezerviran
userID - id korisnika koji je obavio rezervaciju
Tablice Products i Reservations prikazane su na slici 29.
Slika 29. – Tablice Reservations i Products
Nadalje, slijedi tablica Tables prikazana na slici 30. sa stolovima unešenima u
sustav koji imaju atribute:
capacity - kapacitet stola
33
table_num - oznaka stola
Slika 30. - Tables
Posljednja je tablica Users koja sadrži podatke o korisnicima koji se unose prilikom
registracije. Atributi su:
address - adresa korisnika
category - kategorija korisnik/konobar
email – email adresa
name - ime korisnika
password - lozinka za prijavu u sustav
surname - prezime korisnika
telephone - broj telefona
Slika 31. – Tablica Users
34
5. Zaključak
Na kraju rada zaključujem da su ispunjene glavne točke ovog projekta, a to su
funkcionalnosti narudžbe i rezervacije. Razvijen je zaokružen sustav koji
korisnicima nudi dodatne mogućnosti u planiranju posjete i samoj posjeti omiljenom
restoranu, a konobare oslobađa posla zaprimanja narudžbi i rezervacija. To dovodi
do veće efikasnosti obavljanja tih radnji pa ima i svoju ekonomsku isplativost.
Također, uspješno je implementiran dio sustava za registraciju i prijavu korisnika
koji je nužan za funkcioniranje ovakve aplikacije jer osigurava korisnicima da
pristupaju samo dozvoljenim dijelovima sustava i štiti sustav od zlouporabe. Osim
razvoja spomenutih funkcionalnosi za operacijski sustav Android u programskom
jeziku Java, usvojena su i nova znanja u radu s platformom Firebase. Njezin sustav
za autentifikaciju i baza podataka u stvarnom vremenu su uvelike utjecali na razvoj
ove aplikacije i olakšali ga.
Neke od nadogradnji koje bi se mogle implementirati u budućnosti su omogućavanje
kreiranja narudžbe za dostavu na željenu adresu. Također bi sustav upotpunio i dio
u kojem se može ocjenjivati restoran i osoblje, te ostavljati komentari.
35
6. Literatura
[1] Android Wikipedia, Datum pristupa: 15.05.2019.
https://en.wikipedia.org/wiki/Android_(operating_system)
[2] Android Studio Wikipedia, Datum pristupa: 15.05.2019.
https://en.wikipedia.org/wiki/Android_Studio
[3] Firebase Wikipedia, Datum pristupa: 15.05.2019.
https://en.wikipedia.org/wiki/Firebase
[4] Android Documentation Guides, Datum pristupa: 15.05.2019.
https://developer.android.com/guide/components/fundamentals?hl=en
[5] Android Documentation Reference Simple Adapter, Datum pristupa: 17.05.2019.
https://developer.android.com/reference/android/widget/SimpleAdapter
[6] Android Documentation Reference List View, Datum pristupa: 17.05.2019.
https://developer.android.com/reference/android/widget/ListView
[7] Android Documentation Reference Layout Inflater, Datum pristupa: 17.05.2019.
https://developer.android.com/reference/android/view/LayoutInflater
[8] Android Documentation Guides Intents and Intent Filters Datum pristupa: 17.05.2019.
https://developer.android.com/guide/components/intents-filters
36
Aplikacija za zaprimanje narudžbi i rezervacija za
operacijski sustav Android
Sažetak
Ovaj završni rad opisuje izradu aplikacije za uređaje s operacijskim sustavom
Android u razvojnoj okolini Android Studio i programskom jeziku Java te su
objašnjeni temeljni dijelovi Android aplikacije. Razvijene su funkcionalnosti
narudžbe i rezervacije koje izvršava korisnik sustava, a zaprima i obrađuje konobar.
U tu svrhu su razvijeni korisnički zasloni za odabir kategorije proizvoda, prikaz i
odabir proizvoda, kreiranje narudžbe, kreiranje rezervacije, i zasloni za pregled
aktivnih narudžbi i rezervacija koje koristi konobar. Također, postoje i zasloni za
registraciju i prijavu u sustav. Za autentifikaciju i spremanje podataka korištena je
platforma Firebase.
Ključne riječi: Android; aplikacija; Android Studio; restoran; narudžba; rezervacija;
Java; Firebase
Application for taking orders and reservations for
Android operating system
Abstract
This final work describes the creation of application for devices with Android
operating system in Android Studio IDE and Java programming language, with
explanation of Android application fundamentals. Functionalities that have been
developed are taking orders and reservations which are executed by system user,
and received and processed by waiter. For that purpose are developed user screens
for category picking, showing and picking products, creating order, creating
reservation, and screens for showing active orders and reservations that are used
by waiters. There are also screens for registration and login into system. Firebase
platform is used for authentication and data storage.
Keywords: Android; application; Android Studio; restaurant; order; reservation;
Java; Firebase