-diplomski rad- višeslojna web aplikacija za on line ... · internet usluga, odnosno internet...
TRANSCRIPT
Univerzitet u Novom Sadu
Tehnički fakultet „Mihajlo Pupin“
Zrenjanin
-Diplomski rad-
Višeslojna Web aplikacija za on-line prodaju cveća
N-tier web application for on-line flowers selling
Student: Jovana Josić
Smer: Informacione tehnologije
Broj indeksa: IT 65/13
Mentor: Doc.dr Ljubica Kazi
Zrenjanin 2017.
2
Sadržaj
1. UVOD ............................................................................................................................................. 3
2. TEORIJSKE OSNOVE ....................................................................................................................... 4
2.1. On-line prodaja ..................................................................................................................... 4
2.2. Web aplikacije ....................................................................................................................... 5
2.3. Višeslojna arhitektura softvera ............................................................................................. 8
3. ANALIZA SEMANTIČKE OBLASTI .................................................................................................. 12
4. POSTOJEĆA REŠENJA ................................................................................................................... 16
5. OPIS KORIŠĆENE TEHNOLOGIJE .................................................................................................. 22
6. REALIZOVAN PRIMER .................................................................................................................. 24
6.1. Specifikacija zahteva ....................................................................................................... 24
6.2. Modeli opšteg dizajna softvera ....................................................................................... 25
6.3. Modeli implementiranog rešenja višeslojne arhitekture softvera.................................. 32
6.4. Korisničko uputstvo ......................................................................................................... 35
6.5. Opis implementacije ....................................................................................................... 39
7. ZAKLJUČAK .................................................................................................................................. 56
8. Literatura ..................................................................................................................................... 57
3
1. UVOD
Sa napredovanjem tehnologija povećava se upotreba interneta i on postaje jedan od glavnih
vidova komunikacije, ali i sistema prodaje. On-line prodaja je sve zastupljenija u svetu, tako
da je u Americi postala i najpopularniji način kupovine i samim tim je potisnula mnoge
tradicionalne prodavnice. U Srbiji do pre nekoliko godina nije bio popularizovan ovaj način
prodaje, jer je mali broj ljudi imao hrabrosti da se odluči za kupovinu preko interneta, ali iz
godine u godinu raste broj sajtova za kupovinu i kod nas. Glavna prednost ovog načina
kupovine je mogućnost kupovine od kuće, bez odlaska do prodavnica koje su kilometrima
udaljene, a to znači da se slobodno vreme namenjeno kupovini može drugačije iskoristiti.
On-line kupovina zahteva sigurnost i pouzdanost od strane prodavaca, ali i odgovornost od
strane kupaca da će poručenu pošiljku preuzeti. Tako da prilikom kupovine moramo
pročitati uslove i potvrditi saglasnost sa unetim ličnim podacima da bismo garantovali
njihovu ispravnost. Sajt poput „Kupujem Prodajem“ zahteva unošenje podataka sa lične
karte i u slučaju nekog prekršaja ili prevare možete odgovarati.
Život bez mobilnih telefona postao je nezamisliv, tako da danas retko koju osobu možemo
sresti da ne poseduje ili ona ili neko od ukućana bar jedan mobilni uređaj ili tablet. Zbog
ovih podataka Web aplikacije su se vremenom prilagođavale uređajima, tako da sada na
svojim telefonima možemo pristupiti gotovo svim Web aplikacijama i one će biti
prilagođene mobilnom uređaju ili tabletu odnosno njihovim ekranima. Sistem kupovine
preko interneta samim tim je omogućen svima, odnosno osobama koje poseduju bar neki od
uređaja preko kojih se mogu povezati na internet.
U osnovi kreirane Web aplikacije za prodaju cveća nalazi se ljubav prema cveću koja je
ispoljena kroz nenamensku aplikaciju za prodaju. Aplikacija koja je pravljena u radu je
prezentacionog tipa, odnosno nije pravljena namenski za neku firmu. Web prodavnica za
prodaju cveća iz rada je ilustrativna i ne podržava sve opcije on-line kupovine ali postoji
mogućnost za nadogradnju i usavršavanje.
4
2. TEORIJSKE OSNOVE
2.1. On-line prodaja
On-line prodaja je vid elektronske kupovine koja omogućava kupcu da preko interneta
odabere i naruči proizvod koji želi da kupi i da mu proizvod bude dostavljen na kućnu
adresu.
Polovinom 80-ih godina se prvi put spominje pojam internet kupovine i internet poslovanja.
Prvi predmet koji je prodat preko interneta bio je CD Stinga „Ten Summoner's Tales“, koji
je prodala grupa studenata sa Swarthmore College-a iz Amerike. Nakon toga nastao je prvi
web sajt za online prodaju kog je napravio Pjer Omidar 1996., „AuctionWeb“ i on je na svoj
sajt postavio pokvareni laser koji je želeo da proda, čuveni Pjerov laser tada je postigao cenu
od 14.83$ i prvi on-line sajt za prodaju je zaživeo. Pjer je svoj sajt preimenovao u „Echo
Bay“ poznatiji kao „eBay“ i vremenom postao milioner, popularizacijom i razvojem internet
prodaje. Godinama se trgovina preko interneta usavršavala, da bi već danas postala jedna od
vodećih načina trgovine.[17]
Kao začetak elektronskog poslovanja u Srbiji uzima se 29. jun 1993. godine kada je
osnovana Jugoslovenska asocijacija za elektronsku razmenu podataka (Yugoslav
Association for Electronic Data Interchange – YUEDI) sa zadatkom da popularizuje
primenu EDI sistema u tadašnjoj Jugoslaviji. Do pojave prvih računarskih dobavljača
Internet usluga, odnosno Internet provajdera dolazi 1995. godine. [15]
U prvoj fazi elektronske trgovine u Srbiji implementiran je samo proces naručivanja robe
preko Interneta, dok se plaćanje za robu obavlja pouzećem uz fizičku isporuku robe. Do
masovnije pojave prodavnica u SRJ dolazi u julu 1998. kada Eunet u saradnji sa Firmom
YUGate otvara prvi elektronski virtuelni trgovinski centar.
Do pojave većeg broja funkcionalnih e-prodavnica dolazi sa pojavom elektronskih kartica
koje omogućavaju onlajn plaćanje, što predstavlja drugu fazu u razvoju e-trgovine u Srbiji.
1999. osniva se E-Bank.co.yu prvi i do danas jedini Internet payment provajder, namenjen
procesiranju platnih kartica. [16]
Kao treća faza razvoja srpske e-trgovine uzima se period od 2002. godine do danas.
Iz godine u godinu raste broj sajtova u Srbiji koji se bave ovim vidom prodaje. Ne postoji ni
jedan veći i popularniji brend koji nema svoj Web shop. Takođe se popularizuju i mobilne
aplikacije kao vid kupovine i ljudi se polako navikavaju na trgovinu preko interneta.
Svaka on-line kupovina zahteva određene korake koje korisnik mora ispuniti da bi poručio
željeni proizvod. Prvenstveno se mora fokusirati na izbor plaćanja, način isporuke, željeni
proizvod vrstu i sigurnost u izboru vrste proizvoda za dostavu. Neke on-line prodavnice
dozvoljavaju i zamenu robe uz plaćanje troškova transporta koje snosi kupac. Savetuje se
uvek provera podataka pre poručivanja, zbog toga većina on-line prodavnica pri svakom
koraku nudi opciju „Da li ste sigurni“ da bi se korisnik vratio na prethodni korak ako nije
saglasan sa narudžbinom ili ako je došlo do greške pri izboru proizvoda.
5
Slika 1. Ilustracija on-line kupovine[25]
Kupovina putem interneta evoluira iz dana u dan. Sve više firmi želi da proširi svoju prodaju
i sve su veće potrebe za developer-ima web sajtova.
Postoje različite vrste on-line prodaje, a među najpoznatijim su:
B2C (Business-to-Consumer)
B2B (Business-to-Business)
C2C (Consumer-to-Consumer)
B2C vid prodaje podrazumeva da kompanije prodaju robu krajnjim potrošačima preko
softvera za prodaju automatski bez potrebe za dodatnom interakcijom između ljudi.
Najpoznatiji sajt koji funkcioniše po ovom principu je Amazon.
B2B prodaja se odnosi na prodaju između kompanija, kada primera radi velike kompanije
prodaju robu prodavcima na malo.
C2C je vrsta kupovine gde kupac prodaje kupcu. Najverodostojniji primera ovakvog načina
on-line prodaje je eBay.
2.2. Web aplikacije
Web aplikacije su nastale razvojem Web sajtova koji u svojoj osnovi predstavljaju skupove
Web stranica koje su smeštene na određeni Web server. Web aplikacija predstavlja
softverski proizvod koji se izvršava na web serveru, a prikazuje korisniku pomoću Web
čitača. Da bi Web aplikacija funkcionisala potrebno je da se realizuje u programskom jeziku
koji podržava web server kao softverski „engine“ (odnosno hosting web aplikacije koju
tehnologiju podrzava), da bi on mogao datu aplikaciju da prevede i izvrši.
Web aplikacija omogućava korisnicima lakši pristup internetu i interaktivnost između
Interneta i korisnika. Desktop aplikacije moraju biti instalirane na klijent računaru da bi se
uopšte mogle koristiti. Kod web aplikacija to nije slučaj jer se one nalaze na jednom mestu
(serveru ili grupi servera). Ovim se minimizuju mnogi problemi, pre svega problemi sa
distribucijom, nadogradnjom aplikacija i generalno u slučajevima kada kod desktop
6
aplikacija korisnik mora da preuzme i instalira/updatuje aplikaciju. Bitna stvar je da kod
web aplikacija korisnik nikada ne dobija samu aplikaciju, već samo interfejs ka njoj što je u
suštini sve što mu i treba.[1]
Slika 2. Funkcionisanje tipične Web aplikacije[12]
Princip po kome funkcionišu Web aplikacije je prilično jednostavan. Korisnikov web
browser (čitač) šalje zahtev Web serveru, koji podatke prosleđuje Web aplikaciji, ona ih
obradi, a rezultat vraća serveru, pa napokon i browseru. U toj situaciji browser uopšte ne zna
da li ste usluženi statičkom stranicom ili je kod koji vaš browser pikazuje generisan od
strane Web aplikacije. Nije mu ni bitno, dokle god prosleđeni kod razume i može da prikaže.
Uvođenjem programskih elemenata u prikaz Web stranica nastala su dva tipa Web stranica,
a to su:
Statičke – izgled im je definisan već prilikom prve izrade
Dinamičke – izgled im se definiše kroz interakciju sa serverom
Najpoznatije tehnologije – programski jezici za razvoj Web aplikacija su:
ASP/ASP.NET (C#)
Java
PHP [12]
Bitna kvalitativna svojstva samih Web aplikacija i procesa razvoja mogu se povezati sa
opštim standardom evaluacije kvaliteta softvera ISO/IEC 9126-1, čija se svojstva mogu
analizirati na osnovu Slike 3.
Slika 3. Kriterijumi evaluacije Web aplikacija usklađene
sa ISO/IEC 9126-1 standardom[12]
Jedna od osnovnih mera kvaliteta Web aplikacija su preformanse. Glavna preformansa koja
utiče na uspešnost jedne Web aplikacije je vreme odziva, koja prvenstveno utiče na kvalitet
i upotrebnu vrednost aplikacije. Ako je nekoj Web aplikaciji potrebno mnogo vremena da bi
se učitala, korisnik će odustati od datog sajta i potražiti sledeći. Zbog toga je veoma bitno
obratiti pažnju na vreme odziva prilikom kreiranja Web aplikacije da bi naša aplikacija bila
kvalitetna i posećena. Vreme odziva predstavlja period koji prođe od upućenog zahteva
7
korisnika do povratne informacije koju korisnik dobija i ako prođe duže od 8 sekundi,
korisnici najčešće odustaju od datog sajta.
Proces razvoja softverskih proizvoda, pa tako i Web aplikacija je skup metoda, aktivnosti,
prakse i automatizovanih alata koje programeri koriste za razvoj i održavanje sistema i
softvera. Postoje dve osnovne vrste metodologija razvoja softvera, a to su:
Sekvencijalna metoda (metoda vodopada)
Iterativna metoda
Sekvencijalna metoda je stariji pristup razvoja softvera, i upotrebljiv je isključivo na manje
zahtevnim aplikacijama. Ova metoda daje rezultate visokog kvaliteta ali jedan od glavnih
nedostataka joj je veoma veliko trajanje razvoja ovakvog sistema, ali i nemogućnost
naknadnih otklanjanja nedostataka. Iz ovog razloga su razvijene različite varijacije modela
vodopada u kojima se faze dizajna i implementacije u izvesnoj meri preklapaju. Sve ove
metodologije dele nekoliko zajedničkih atributa: broj faza kroz koje prolaze, broj iteracija
koji je potreban da bi se kreirao softver, kao i tipično trajanje jedne iteracije. Sve faze se
izvršavaju sekvencijalno, i uvek postoji bar jedna iteracija koja završava sa kreiranjem
softvera. Razlike između metodologija su u redosledu po kojem se ulazi u određene faze,
broju zahtevanih iteracija i trajanju svake iteracije. Ilustracija metode vodopada prikazana je
na slici 4.[5]
Slika 4. Sekvencijalna metoda[12]
Iterativna metodologija nastoji da se životni ciklus softvera sastoji od nekoliko iteracija koje
mogu da se preklapaju u vremenu. Ovakav tip metedologije omogućava lakše prelaženje sa
procesa na proces ali i vraćanje na prethodne procese ukoliko dođe do greške što omogućava
ispravljenje grešaka, za razliku od sekvencijalne metode kod koje je ovaj postupak dosta
komplikovaniji i ne postoji vraćanje kada se jednom prođe kroz dati korak dok se čitav
proces ne završi. Ova metoda je dosta praktičnija za upotrebu od metode vodopada i
primenjuje se u zahtevnijim Web aplikacijama i softverskim proizvodima. Iterativna metoda
predstavljena je na slici 5.
8
Slika 5. Iterativna metoda – šema [5]
2.3. Višeslojna arhitektura softvera
Softverska arhitektura jednog računarskog sistema predstavlja skup objekata koji su potrebni
za funkcionisanje nekog sistema, a sadrže softverske elemente, odnose između elemenata i
njihove osobine. [2] Softverska arhitektura svoj fokus usmerava na pravilno korišćenje
elemenata i komponenti u okviru aplikacije. Neizostavni pojam uz softversku arhitekturu je
softverski dizajn. Da bi softver bio što boljeg kvaliteta mora se usavršiti i dizajn ali i
arhitektura i ove dve osobine se moraju kombinovati.
Arhitekturu softvera možemo podeliti prema opštim obrascima, a to su:
Monolitna arhitektura
Dvoslojna (klijent-server) arhitektura
Troslojna i višeslojna arhitektura (three – tier /multi – tier)
Servisno orjentisana arhitektura softvera[4]
Višeslojna arhitektura je pojam koji se odnosi na arhitekturu koja se sastoji iz tri glavna
sloja. Troslojna arhitektura je takva arhitektura kod koje je potrebno uvesti još jedan sloj tzv.
srednji sloj u kome se nalazi aplikativni server. Početak razvoja ovakvih arhitektura datira
od 1990 godine i za razvoj ovakve arhitekture moguće je primeniti više različitih
tehnologija. Troslojna arhitektura je generička za višeslojne arhitekture. Ovde se vrši dalja
podela na komponente u okviru srednjeg sloja sa ciljem još većeg povećanja skalabilnosti,
odnosno performansi. Srednji sloj se deli na dva sloja: jedan je namenjen za opsluživanje
Web klijenata, a drugi vrši implementaciju poslovne logike sistema. Nekada se srednji sloj
delio na dva ili više sloja u zavisnosti od aplikacije pa dobijamo višeslojnu (multitier)
arhitekturu. [3]
MVC arhitekturni obrazac deli objektno orjentisanu aplikaciju na tri celine:
1. Model – zadužen za upravljanje podacima
2. View – ima zadatak da upravlja prikazom informacija
3. Controller – predstavlja logiku aplikacije (prenosi zahteve i usmerava ulaze)
9
Na sledećoj slici je islustrovan prikaz MVC arhitekture:
Slika 6. MVC obrazac[30]
Model čuva podatke, Controller zadaje komande modelu za preuzimanje podataka, a zatim
kontroler zadaje komande kojima se podaci prikazuju u View. View generiše novi izlaz
(output) koji je predstavljen korisniku, na osnovu promena koje su se desile u modelu.
Controller može da šalje komande Model-u da promeni stanje modela. Controller može da
šalje komande na View da se izmeni prikaz podataka na osnovu izmena modela ili da se
prikaže druga vrsta ili način ponašanja View. Svaki View ima komponente koje su povezane
sa Controller-om tako da su međusobno usko povezani i ne bi mogli zasebno da
funkcionišu.[6]
MVC zahteva razdvajanje odgovornosti (SoC) jer su model i logika kontrolera razdvojeni od
korisničkog interfejsa. U okviru Web aplikacija, ovo znači da je HTML kod izdvojen od
ostatka aplikacije, što čini održavanje i testiranje jednostavnijim i lakšim.[5]
Objektno orjentisana implementacija MVC modela definiše posebne klase za svaku
komponentu. Ne postoje bilo kakva ograničenja kada je u pitanju implementacija domen
modela. Možemo kreirati model pomoću standardnih C# objekata i implementirati
skladištenje pomoću bilo koje baze podataka, objektno-relacionog mapiranja, ili drugih alata
koji su podržani od strane .NET-a. MVC se takođe može koristiti za izgradnju framework-a
interaktivnih aplikacija.
Sa slike 7. možemo videti da korisnici pristupaju prezentacionom sloju , a taj sloj predstavlja
sam izgled aplikacije i on se može implementirati korišćenjem MVC paterna.
Takođe dodat je sloj servisa koji komunicira sa spoljnim sistemom u cilju poboljšanja
zahteva korisnika i reagovanja na greške aplikacije.
10
Slika 7. Višeslojna arhitektura (ASP.NET aplikacija)[5]
Putem prezentacionog sloja se pristupa sloju servisa, a on dalje obrađuje podatke i šalje
povratne informacije, ali i komunicira sa ostalim delovima aplikacije. Ako je potrebno da
neki sistem komunicira sa aplikacijom, on to radi preko sloja servisa koristeći sopstveni
prezentacioni sloj.
Prednost koja se dobija korišćenjem slojeva u kreiranju neke aplikacije je mogućnost za
razdvajanje nadležnosti delova aplikacije, ali i lakša izmena i ponovna upotreba delova
koda. Kreiranje aplikacije sa slojevima se predlaže kod kompleksnijih aplikacija, ali je sve
zastupljenije i kod manje zahtevnih aplikacija.
Prezentacioni sloj predstavlja korisnički interfejs i nijedna aplikacija ne bi bila upotrebljiva
bez njega, zbog toga ima izuzetnu važnost u slojevitim aplikacijama. Prezentacioni sloj se
dodaje na postojeći srednji sloj aplikacije. Osnovne komponente prezentacionog sloja su:
Korisnički interfejs
Prezentaciona logika
Korisnički interfejs, iako neki smatraju manje bitnom komponentom aplikacije, predstavlja
neophodan deo slojevitog sistema jer on daje korisniku alate pomoću kojih će program
koristiti, tako da bi bez korisničkog interfejsa aplikacija bila neupotrebljiva. Svaka opcija
programa koju korisnik odabere prikazivaće mu se pomoću korisničkog interfejsa. [5]
Prezentaciona logika je povezana sa prikazom podataka na ekranu. Ovaj tip logike odgovara
na korisnikove zahteve, šalje povratne informacije i date zahteve daljim slojevima
aplikacije. Prezentaciona logika ima zadatak da obrađuje informacije koje prosledi
korisnički interfejs i da ih šalje ka srednjem sloju i isto tako povratne informacije od
srednjeg sloja ka korisničkom interfejsu.
11
Sloj servisa se najčešće posmatra kao deo poslovnog sloja. Moglo bi se reći da sloj servisa
predstavlja granicu između prezentacionog sloja i sloja poslovne logike. Zaduženja koja ima
servisni sloj su sledeća:
Obrada zahteva
Održavanje sigurnosti sistema
Komunikacija i razdvajanje zahteva poslovnog i prezentacionog sloja
Obaveštavanje o greškama
Poslovni sloj je zadužen za obradu svih zahteva sistema i sadrži svu logiku i pravila koja
održavaju u celini neku Web aplikaciju. Ovaj sloj obrađuje procese, sadrži algoritme koji
upravljaju sistemom, ali je zadužen i za validaciju zahteva. Kada bismo razložili poslovni
sloj, podela bi bila sledeća:
Objektni model koji modeluje učesnike u poslovnom procesu
Poslovna pravila koja predstavljaju klijentsku politiku i zahteve
Servise koji implementiraju autonomne funkcionalnosti
Proces rada – definiše kako se vrši prenos podataka iz jednog modula u drugi
Sloj za pristup podacima komunicira sa bazom i šalje podatke aplikaciji na osnovu zahteva
koje primi. Sloj za pristup podacima predstavlja jedino mesto u sistemu gde je poznata veza
sa bazom podataka i imenima tabela. Tu je sadržan sav kod koji vrši upis, izmenu i brisanje
u bazi. Sloj za pristup podacima šalje podatke poslovnom sloju koji ne sadrži nikakve
informacije o bazi, on ih samo prosleđuje do određenih delova aplikacije. Slika 7. prikazuje
odnos sloja za pristup podacima sa ostalim slojevima i bazom podataka. [5]
Slika 7. Sloj za pristup podacima[5]
12
3. ANALIZA SEMANTIČKE OBLASTI
Sobno cveće su biljke koje odgajamo u domu zbog lepih cvetova i listova koje su sposobne
da rastu u uslovima koji se svakodnevno menjaju i nisu prvenstveno prilagodjeni zahtevima
biljke.
Prve zapise o odgajanju saksijkih biljaka u kuci nalazimo pre gotovo pet hiljada godina kod
Kineza koji su u svojim palatama uzgajali biljke u posebnim ukrasnim posudama. Viseći
vrtovi Vavilona sastojali su se samo od biljaka odgajanih u saksijama na terasama. Ima
podataka koji ukazuju na promenljive trendove, modu i obicaje, no ipak umetnost
odgajivanja sobnog cveća nije izgubila na svojoj atraktivnosti i na nasu sreću u sve većem
broju se pojavljuju po nasim kancelarijama, holovima većih institucija, šoping centara,
uspevajući ipak da se utkaju u uobičajen deo našeg zivota. Na internetu postoji mnoštvo
priručnika za pravilan uzgoj sobnih biljaka, ali takođe postoje i prodavnice koje se bave
internet prodajom cveća i spremne su da daju savete za svaku biljku pojedinačno. [13]
Slika 8. Ilustracija Vavilonskih vrtova – istorija cvećarstva[24]
Da bi biljka opstala u kućnim uslovima potrebno je posvetiti joj dosta pažnje, u zavisnosti
od vrste koju gajite. Neke biljke vole dosta vode, neke svetlost, a neke jednostavno možete
da kupite i zaboravite kada ste ih poslednji put zalivali kao što je kaktus. Potrebno je takođe
održavati higijenu i čistiti biljke od prašine da bi one mogle uspešno da vrše fotosintezu.
Svaki katalog biljaka sadrži uputstvo za gajenje biljaka, tako da bi najbolje rešenje bilo, pre
nego što se odlučite da kupite i uzgajate neku biljku, pročitate kakve uslove ona zahteva i da
li vi posedujete te uslove.
13
Primer kataloga za prodaju cveća koji sadrži savete o uzgoju datih biljaka:
Slika 9. Primer kataloga cvećare „Mali vrt“ [22]
U nastavku će biti prikazana dva primera specifikacije pojedinih vrsta sobnih biljaka:
Ehmeja
Slika 10. Ehmeja [11]
Opšte informacije i poreklo:
Potiče iz tropskih krajeva i u prirodnom staništu živi kao parazit na drveću. Raste do 50cm u
visinu. Ima tvrdo lišće povijeno na dole, sivo zelene je boje sa belim isprekidanim prugama.
14
Iz središta biljke izbija cvast(klas) ružičaste boje, iz njega se razvijaju mali plavi cvetovi koji
vrlo brzo venu dok ružičasta cvast ostaje i do 6 meseci.
Način uzgajanja:
Može da podnese nekoliko sati direktne sunčeve svetlosti, ali ne i prejako sunce. Minimalna
temperatura na kojoj se gaji zimi je 15C, a leti maksimalna 27C pod uslovom da je visoka
vlažnost. Zalivanje se vrši odstajalom vodom ili kišnicom, u centar biljke. Zemlja tokom leta
treba da bude vlažna, a u toku zime je prepporučljivo pustiti je da se malo prosuši pre
početka zalivanja. Leti se prihranjuje svake dve nedelje.[14]
Adam
Slika 11. Adam [23]
Opšte informacije i poreklo:
Biljka adam je poreklom iz tropskih predela Indije. U svojoj postojbini dostiže veliku visinu,
pa se često ispod njegovih listova odmaraju ljudi. U kontinentalnim zemljama se odavno
gaji kao sobna biljka. Brzo raste i njegovi veliki listovi postaju zanimljiv egzotičan detalj u
enterijeru, a za vreme toplijih dana i u eksterijeru doma.
Cveta leti malim i neuglednim cvetovima zelene boje. Iz cveta se razvija semenka kojom se
može uspešno razmnožiti.
Način uzgajanja:
Treba ga staviti na mesto sa dovoljno sunca. Ne treba ga direktno izlagati sunčevoj svetlosti,
jer listovi mogu da požute i počnu da se suše. Može da napreduje dobro i na senovitim
mestima, ali tada ima daleko duže lisne drške i treba da se zaliva znatno manje. Idealna
temperatura u zimskom periodu za gajenje adama je 15 stepeni, a najmanja koju može da
podnese je 5 stepeni. Lepo raste dok je napolju, i zato u proleće, nakon mrazeva može da se
iznese napolje. Prija mu dosta vode, pa ga treba često zalivati, naročito ako je u sobi
centralno grejanje. [14]
Iz navedenog opisa mogu se izvući podaci za detaljniju evidenciju u bazi podataka, kao što
su:
15
1. Osunčavanje – koliko biljka zahteva svetlosti i kakva mesta se preporučuju za
odgajanje biljke
2. Zalivanje – kolika količina vode je potrebna za zalivanje odgovarajuće vrste cveća
3. Zemljište – da li je biljci potrebno zemljište koje zahteva dodatne prihrane, ili je
dovoljan običan humus
4. Prihrane – da li je potrebno dodavati dodatne supstance tokom cvetanja ili rasta
biljke
5. Presađivanje – koji period je potreban da prođe da bi se vršilo presađivanje biljke
16
4. POSTOJEĆA REŠENJA
On-line cvećara „Teleflora“
On-line cvećara „Teleflora“ je web aplikacija za podršku radu same cvećare koja se takođe
zove Teleflora, koja je nastala 1995. godine, „kao Teleflora d.o.o. preduzeće za cvetni
dizajn, organizaciju i dekoraciju venčanja i dostavu cveća u Beogradu, našoj zemlji i u 185
zemalja širom sveta.“[7]
Na sledećoj slici je prikazana on-line prodavnica cvećara „Teleflora“. U pitanju je srpska
prodavnica koja se bavi prodajom buketa, aranžmana ali i sobnim biljkama i dekorativnim
saksijama. Slika ilustruje osnovni prikaz prodaje sobnog cveća.
Slika 12. Prikaz stranice on-line cvećare „Teleflora“[7]
Sledeća slika ilustruje prikaz korpe i opcije koje nudi prilikom naručivanja proizvoda.
Prilikom dodavanja proizvoda u korpu neophodno je označiti veličinu aranžmana koji
želimo da naručimo da bi se proces kupovine mogao nastaviti.
17
Slika 13. Prikaz korpe cvećare „Teleflora“[7]
Prethodno prikazana Web aplikacija za on-line prodaju cveća poseduje opcije prijavljivanja,
blog na kome se mogu postavljati pitanja zaposlenima, karticu saveti gde se mogu pronaći
saveti o cveću, zatim opciju kontakt gde se nalaze podaci o firmi i telefoni. Cvćara
„Teleflora“ vrši i isporuku cveća širom sveta, tako da je jedna od naših najsavremenijih on-
line cvećara.
Aplikacija sadrži sve potrebne funkcije za pravilno funkcionisanje on-line prodavnice.
Mogla bi se dodati opcija za kreiranje poklon kartice i ispisa željene poruke, da bi se
kompletirala funkcionalnost aplikacije. Takođe se može dodati mapa do tradicionalne
prodavnice sa lokacijom i forma za postavljanje pitanja koja bi automatski prosleđivala
poruke na mail prodavnice.
Link preko koga se može pristupiti aplikaciji je:
http://teleflora.rs/content/kontakt
On-line cvećara „ProFlowers“
Cvećara „ProFlowers“ se nalazi u Kanadi – San Diegu. Poseduje veoma veliki lanac prodaje
i takođe omogućava prodaju svojih proizvoda širom sveta. On-line aplikacija cvećare
podržava PayPal način plaćanja proizvoda što njihovu Web aplikaciju za prodaju čini
besprekornom i pristupačnom ljudima širom sveta. Takođe sadrži prečice do društvenih
mreža i time je stekla popularnost od preko 400 hiljada pratilaca na Facebook-u, što je i
18
jedan od glavnih markentinških zadataka u popularizaciji neke Web aplikacije. Nije bitno
samo kreirati aplikaciju, od izuzetne važnosti je i dobro promovisanje i povezanosti sa
popularnim društvenim mrežama.
Na sledećoj slici je prikazana početna strana aplikacije sa svim opcijama koje nudi.
Slika 14. Prikaz početne stranice Web aplikacije „ProFlowers“[21]
Web aplikaciji se može pristupiti preko sledećeg linka:
http://www.proflowers.com
Na početnoj strani postoji veliki broj kartica koje korisniku omogućavaju lakši pristup i
sortiranje sadržaja. Periodično se pojavljuju i reklame – promocije koje se prostiru preko
celog ekrana, što predstavlja marketinški trik za efikasniju zainteresovanost kupaca. Blog
koji se nalazi na stranici poseduje veliki broj priča i saveta, što je još jedan plus za datu web
aplikaciju i njenu popularnost.
Ova Web aplikacija podržava i mogućnost prijave i kreiranje naloga, što je prikazano na
sledećoj slici.
19
Slika 15. Prikaz opcija za kreiranje naloga i prijavu na Web sajt „ProFlowers“[21]
Prilikom naručivanja proizvoda date cvećare postoji opcija za odabir datuma za isporuku.
Tako da se cveće može naručiti za tačan datum koji kupcu odgovara. Prilikom plaćanja se
moraju ostaviti podaci računa ukoliko niste odabrali plaćanje preko PayPall naloga, jer ne
postoji opcija plaćanja pouzećem kao kod naših aplikacija. Takođe možete odabrati kome
šaljete i napisati specijalnu poruku, ukoliko želite, ako ste naručili cveće za neku posebnu
priliku. Prikaz date opcije je na slici 13.
Slika 16. Prikaz poklon kartice koja se dostavlja uz porudžbinu (ukoliko želite)[21]
Web aplikacija cvećare „ProFlower“ je kompletirana, izmene bi se mogle vršiti u izgledu
aplikacije i u interaktivnosti sadržaja. Mogle bi se dodati animacije koje bi upotpunile
zanimljivost sadržaja. Što se tiče funkcionalnosti, sajt ne zahteva dodatne izmene.
20
On – line cvećara „Dunjin cvet“
Web aplikacija cvećare „Dunjin cvet“ je delimično kompletirana. Dosta je pažnje posvećeno
korisničkom interfejsu i modernizaciji same alikacije. Prethodne dve on-line cvećare nisu
pridavale značaj interfejsu. Sve opcije na sajtu funkcionišu, ali nedostaje još mogućnosti,
kao što su blog, forma za pitanja, mogućnost odabira poklon kartice, informacije o gajenju
cveća.
Slika 17. Početna strana Web aplikacije „Dunjin cvet“[20]
Aplikacija poseduje i opcije za registraciju i prijavu, kao i korpu i sve neophodne funkcije za
poručivanje proizvoda. Pre nego što se prizvod naruči neophodno je izvršii registraciju
korisnika. Ilustracija procesa narudžbine se može videti na sledećoj slici.
Slika 18. Forma za naručivanje Web aplikacije „Dunjin cvet“[20]
Nedostatak aplikacije je to što ne postoji nikakva verifikacija unetih podataka, tako da se
mogu uneti potpuno pogrešni podaci i proizvod će biti dostavljen na tu adresu. Takođe nisu
upotpunili aplikaciju dodatnim sadržajem o biljkama ili nekim najčešćim pitanjima koja im
postavljaju kupci. Sve dodatne izmene koje bi se vršile nisu izmene u samoj aplikaciji, već u
21
funkcionisanju sadržaja i njegovoj usklađenosti. Nekoliko opcija uopšte ne radi ili je u
pripremi, kao što su „Kako poručiti“.
Slika 19. Ilustracija opcije „Kako poručiti“ koja nije završena[20]
Link preko koga se može pristupiti datoj aplikaciji je:
http://www.dunjincvet.com
22
5. OPIS KORIŠĆENE TEHNOLOGIJE
U ovom radu je korišćen PHP programski jezik, a PHP stranice se pokreću korišćenjem
Apache web servera i MySQL sistema za upravljanje relacionom bazom podataka. Oba
servera (web server i server baze podataka) su integrisani u okviru XAMPP softverskog
paketa.
PHP (Hypertext Preprocesor) je open-source server-side skriptni jezik, koji se koristi za dinamčko
prikazivanje HTML koda. Dakle, pomoću PHP-a se može kreirati HTML stranica na serveru i pre
nego što se ona pošalje klijentu. Zbog ovog načina generisanja sadržaja, krajnji korisnik ne može
videti kod odnosno skriptu, koja je generisala sadržaj stranice koji on gleda, već on vidi tj. ima
pristup čistom HTML kodu. [28]
PHP je jedan od najmoćnijih i najpopularnijih skriptnih jezika trenutno na tržištu. Svakim danom
raste i broj sajtova koji su napravljen uz pomoć PHP-a, a i broj kompanija koje žele primeniti ovu
vrstu jezika na svojim sajtovima je sve veći. PHP je pre svega stekao popularnost zbog lakoće kojom
se može stvoriti opširna web stranica sa jako velikim količinama podataka.
Da bi se pokrenula PHP stranica na računaru, potreban je lokalni web server. Najlakši način da se to
uradi je da se preuzme i instalira MAMP za OS X ili XAMPP za Windows i Linux. Kada se instalira
neki od ovih paketa može se početi sa korišćenjem PHP-a. Tako što se postavi fajl index.php u
htdocs direktorijum MAMP ili XAMPP instalacije i poziva se kao localhost/index.php. [27]
Sledeća slika ilustruje primer PHP koda koji poziva različite funkcije.
Slika 20. Prikaz funkcija PHP jezika – primer [29]
23
XAMPP
Ovaj program je u toku izrade ovog rada korišćen za izvršavanje stranica na lokalnom
računaru, a da nam pri tome nije potreban internet. Kada se instalira dati program, računar se
može tretirati kao da je na internetu, jer se mogu koristiti neki internet servisi.[28]
XAMPP je skraćenica od:
X ( cross-platform - znači da je multiplatformski program, odnosno da radi u Linux, Solaris,
Windows i MAC OSX operativnim sistemima),
A (Apache HTTP Server – Web server softver koji se koristi za WWW servis),
M (MySQL),
P (PHP),
P (Perl – Practical Extraction and Report Language – programski jezik kojeg je razvio Larry
Wall 1987. godine. i slobodnog je tipa - nezavisan od platforme)
Slika 21. Prikaz XAMPP programa
24
6. REALIZOVAN PRIMER
6.1. Specifikacija zahteva
Specifikazija zahteva za izradu Web aplikacije koja se bavi on-line prodajom odnosi se na
spisak svih funkcionalnih mogućnosti koje aplikacija nudi, podeljenih prema profilima
korisnika koji će koristiti aplikaciju. U nastavku je dat tabelarni prikaz funkcionalnih
zahteva OPŠTE ONLINE PRODAVNICE. Tabelarni prikaz je odabran kako bi se lakše
prikazale sve funkcije i zaduženja. Nefunkcionalni zahtevi u ovom radu nisu prikazani, zato
što nisu značajno naglašeni (u ovom radu je reč o izradi softvera opšte namene, a ne za
konkretnog korisnika, pa nisu eksplicitno dati nefunkcionalni zahtevi).
Specifikacija poslovnih aktivnosti kupca i odgovarajucih softverskih funkcija:
POSLOVNA
AKTIVNOST
SOFTVERSKA PODRŠKA I DETALJI POSLOVNE
AKTIVNOSTI
Izbor proizvoda Prelistavanje kataloga proizvoda i odabir proizvoda koji kupac
želi da naruči
Narudžbina Kupac je dužan da odabere željeni proizvod i doda u korpu
Plaćanje Prilikom plaćanja (završetka kupovine, tj zatvaranja korpe),
potrebno je da kupac navede način plaćanja
Tabela 1. Specifikacija dužnosti kupca
Specifikacija poslovnih aktivnosti prodavca i odgovarajucih softverskih funkcija:
POSLOVNA
AKTIVNOST
SOFTVERSKA PODRŠKA I DETALJI POSLOVNE
AKTIVNOSTI
Unos robe Prodavac je dužan da unese robu na sajt i omogući kupcima
pregled asortimana prodavnice
Pregled narudžbina Prilikom poručivanja od strane kupca automatski se
narudžbina prosleđuje u bazu podataka prodavnice i prodavac
pred sobom otvara tabelarni prikaz narudžbina koje je
potrebno pripremiti za isporuku
Pregled uplata Pre nego što se narudžbina upakuje potrebno je proveriti
uplate i označiti uplatu pouzećem ako nije izvršena preko
interneta. Pred prodavcem se prikazuje tabelarni prikaz
izvršenih uplata
Provera podataka Da bi se narudžbina isporučila potrebno je da prodavac
proveri podatke i proceni tačnost, takođe može nazvati kupca
koji prilikom registracije ostavlja broj telefona, zbog provere
tačnosti informacija
Slanje narudžbine Ako su informacije tačne i ako je porudžbina proverena,
prodavac vrši slanje pošiljke preko odabrane kurirske službe
Tabela 2. Specifikacija dužnosti prodavca
S obzirom da je u radu stavljen naglasak na prodaju cveća, analizom semantičke oblasti
utvrđeni su specifični podaci koji treba da budu evidentirani u okviru unosa robe. Posebno je
25
značajno prilikom prikaza robe kod naručivanja prikazati sliku i specifikaciju biljke sa
podacima o održavanje.
6.2. Modeli opšteg dizajna softvera
6.2.1. Model poslovnih procesa
Model poslovnih procesa (Business Process Modeling) odnosi se na dizajniranje i
upravljanje poslovnim procesima. Funkcioniše po principu objedinjavanja poslovnih procesa
i služi da lakše prikaže poslovna organizacija. Na sledećoj slici je prikazan dijagram (tipa
Analysis) rađen u Power Designer-u koji prikazuje BPM model opšteg toka poslovnog
procesa bilo koje prodavnice, koji se može podržati softverski.
Slika 22. Izgled BPM modela i okruženja Power Designer-
Detaljniji prikaz BPM modela se može videti na slici 22.
26
Slika 23. BPM model nabavke i prodaje robe u prodavnici opsteg tipa
6.2.2. Use case dijagram
U sledećoj tabeli preslikavanja biće prikazani primitivni procesi (na osnovu BPM) i
softverske funkcije kojima se podrzavaju ti procesi. U narednoj tabeli su podrzani
softverskim funkcijama samo primitivni procesi koji se odnose na prodavca i kupca, a deo
dobavljaca nije podrzan jer taj deo pripada informacionom sistemu dobavljaca i izvan je
domena rada. Softverske funkcije su raspoređene po prioritetima – funkcije prvog prioriteta
direktno podrzavaju poslovni proces, dok drugog prioriteta predstavljaju prosirenja osnovne
funkcionalnosti. Takođe, prikazane su i softverske funkcije preduslovi, koje moraju biti
realizovane u softveru, jer bez njih ne mogu osnovne softverske funkcije da se primenjuju.
Poslednja kolona se odnosi na tip softvera. Najčešće korišćeni tipovi su: c/s LAN (klijent
server u lokalnoj mreži), web aplikacije i mobilne aplikacije. U narednoj tabeli je dat jedan
predlog (za iste primitivne procese može biti više tehnoloških rešenja) kako bi se softverski
mogli podržati primitivni procesi iz BPM.
27
Primitivni
poslovni
proces
Radna
uloga
izvršioca
primitivno
g
poslovnog
procesa
Softverska funkcija
Preduslov
za uspešno
izvršavanje
funkcija 1.
prioriteta
Actor
(Profil
korisnika
softversk
e
funkcije)
Tip
softver
a
1.prioriteta 2.prioriteta
Prijem robe Prodavac Unos podataka
o primljenoj
robi
Tabelarni
prikaz
podataka
dospele
robe, Filter
podataka
prema
datumu
dospele
robe,
parametarsk
a štampa
Unos
narudžbenic
e za
dobavljača
Dobavljač c/s
LAN,
WEB
Kreiranje
kataloga
Prodavac Unos proizvoda
za katalog,
Štampanje
kataloga
Tabelarni
prikaz
proizvoda
koji će se
koristiti u
katalogu
Unos
podataka o
primljenoj
robi
Prodavac c/s
LAN,
WEB
Naručivanje Kupac Unos podataka
o proizvodima
za narucivanje
Tabelarni
prikaz
narudžbenic
e koja sadrži
podatke o
proizvodima
i o kupcu,
Filter
podataka po
datumu
prijem i
parametarsk
a štampa
narudžbenic
e
Unos
proizvoda za
katalog
Kupac WEB
Prijem
narudžbenic
a
Prodavac Tabelarni
prikaz
narudžbenica
Filter unetih
podataka
prema
rednim
brojevima
narudžbenic
Unos
podataka o
proizvodima
za
naručivanje
od kupca
Kupac c/s
LAN,
WEB
28
a
Plaćanje Kupac Unos podataka
o plaćanju
Tabelarni
prikaz
realizovanih
plaćanja
Tabelarni
prikaz
narudžbenic
a
WEB
Evidentiranj
e uplata
Prodavac Unos podataka
o potvrdi
izvrsenja uplate
kupca
(uporedjivanje
m sa
bankarskim
izvodom)
Tabelarni
prikaz
potvrdjenih
uplata, Filter
podataka o
dospelim
uplatama
prema
datumu
plaćanja
Unos
podataka o
plaćanju od
strane kupca
Kupac c/s
LAN,
WEB
Slanje
porucene
robe
Prodavac Unos podataka
o slanju
proizvoda
Tabelarni
prikaz
podataka o
pošiljkama,
Filter
podataka o
slanju prema
broju
narudžbenic
e i datumu
Unos
podataka o
proizvodima
za
narucivanje
od kupca
Unos
podataka o
potvrdi
izvrsenja
uplate kupca
Prodavac c/s
LAN,
WEB
Tabela 3. Tabela preslikavanja procesa
Use Case Diagram služi za prikazivanje informacija o tome kako neki poslovni sistem
funkcioniše trenutno. Sadrži alate koji omogućavaju modelovanje funkcionisanja poslovnih
procesa. [18]
Sledeća ilustracija prikazuje kreiran USE CASE dijagram rađen na osnovu tabele
preslikavanja, gde su predstavljene suštinske softverske funkcije koje treba da budu
podržane softverom.
30
6.2.3. CDM (Conceptual Data Model) i PDM (Physical Data Model)
Konceptualni model podataka (CDM) predstavlja osnov za kasnije generisanje fizickog
modela podataka (relacionog modela sa dodatim osobinama ciljnog DBMS – sistema za
upravljanje bazom podataka) i dijagrama klasa. CDM omogućava lakše predstavljanje i
kreiranje baze podataka. Na sledećoj slici će biti predstavljen CDM softvera za on-line
prodaju cveća kreiranog u radu.
Slika 25. CDM model
31
Kada smo kreirali CDM model, PDM ćemo kreirati automatskom generacijom u programu.
Odabraćemo opciju Tools – Generate Physical Data Model i nakon odabira naziva svog
modela, ako smo sve atribute i primarne ključeve uneli kako treba, dobićemo sledeći izgled:
Slika 26. Izgled PDM-a
32
6.3. Modeli implementiranog rešenja višeslojne arhitekture softvera
6.3.1. Pregled slojeva u višeslojnoj arhitekturi realizovanog primera
Sledeća tabela ilustruje opšti prikaz višeslojne arhitekture softvera. Takođe, prikazan je i
plan podrške pojedinim slojevima u okviru ovog rada.
Tabela 4. Prikaz slojeva i podslojeva višeslojne arhitekture softvera, uz primer podrške u
ovom radu
GLAVNI
SLOJ PODSLOJEVI PLAN IMPLEMENTACIJE U RADU
PREZENTAC
IONI SLOJ
Korisnički
interfejs Ekranska forma
Prezentaciona
logika
Kod za pripremu podataka i prikaz u okviru grafickih elemenata
ekranske forme
Aktivan kod nakon izvršavanja “form action”
SLOJ
SERVISA
Web servis
Mogao bi biti realizovan radi razmene podataka sa dobavljačem
(uvid u katalog dobavljača i cene putem web servisa dobavljaca).
U ovom radu nije realizovano.
Servisni sloj kao
biblioteka klasa
Služi kao posrednik izmedju drugih slojeva, enkapsulira
implementaciju. Ima ulogu interfejsa. U ovom radu nije
realizovano.
SLOJ
POSLOVNE
LOGIKE
Poslovni objekti
Klasa Korpa (naziv Korpa je u skladu sa načinom “razmišljanja”
korisnika i bliska korisničkom interfejsu, a ne zove se kao
nijedna tabela u bazi podataka).
Poslovna pravila Klasa Popust koja implementira mogućnosti popusta za količinu
ili iznos
Radni tokovi Opisuju redosled aktivnosti i poziva odgovarajućih delova
softvera u odnosu na podršku. U ovom radu nisu realizovani.
SLOJ ZA
RAD SA
PODACIMA
Klase modela
Klase koje se kreiraju ili generišu na osnovu tabela baze
podataka. Za svaku tabelu može biti 3 klase: klasa pojedinac (ima
samo atribute I get-set metode), klasa DB (radi sa bazom
podataka putem SQL upita ili pozivom odgovarajućeg pogleda ili
stored procedure), klasa kolekcija (ima uredjenu listu objekata
klase pojedinac).
U ovom radu je podržana klasa pojedinac i klasa tipa DB.
Klasa konekcija i
parametri
Klasa konekcija – univerzalni tehnološki kod kojim se, na osnovu
eksterne datoteke sa parametrima konekcije, uspostavlja veza ka
DBMS i bazi podataka. Omogućava centralizaciju konektovanja,
radi olakšavanja eventualne promene DBMS-a ili parametara
konekcije.
U ovom radu je podržana kao zasebna klasa Konekcija, a
parametri konekcije su u TXT fajlu.
Baza podataka Stored procedure, pogledi, tabele i relacije.
U ovom radu su podržani svi elementi.
33
6.3.2. Dijagram komponenti
Dijagram prikazuje strukturne relacije između softverskih komponenti sistema. On ilustruje delove
softvera, ugrađene kontrolere i slično, i ima veći stepen apstrakcije od dijagrama klasa.[26]
Dijagram komponenti služi za modeliranje izvornog koda, modeliranje izdanja za isporuku,
modeliranje izvršnih izdanja i okruženja, kao i modeliranje fizičkih baza podataka. Na
sledećim slikama će biti prikazan izgled dijagrama komponenti za našu aplikaciju razvrstanu
po slojevima.
Slika 27. Dijagram komponenti
34
6.3.3. Dijagram razmeštaja
Dijagram razmeštaja prikazuje statički pogled run-time hardverske konfiguracije i
softverskih komponenti koje se izvršavaju na tim čvorovima. Dijagram razmeštaja prikazuje
hardver vašeg sistema, softver koji je instaliran na tom sistemu i srednji sloj koji se koristi za
povezivanje međusobno razdvojenih mašina. [26]
Sledeća ilustracija prikazuje dijagram razmeštaja za softver koji je prikazan u radu.
Slika 28. Dijagram razmeštaja
35
6.4. Korisničko uputstvo
U radu je prikazana demonstrativna aplikacija koja nije u potpunosti funkcionalna. Urađen
je primer korpe proizvoda i omogućeno štampanje prikaza ekrana sa korpom. Aplikacija ima
dosta prostora za usavršavanje, a urađen je primer da bi se prikazalo stečeno znanje kreiranja
web aplikacija. Takođe je korisniku omogućeno da se uloguje i odabere proizvode iz liste za
narudžbinu.
LOGIN forma ima dva statusa korisnika, a to su status Admin i status Korisnik (kupac). U
zavisnosti od toga da li se prijavite kao administrator ili kao korisnik, biće omogućen prikaz
odgovarajućeg (različitog) levog menija.
Administrator ima opcije da dodaje proizvod, dok to korisniku neće biti omogućeno.
Korisnik može da vidi podatke i da ih dodaje u korpu, takođe sadržaj korpe (narudžbenicu)
može odštampati.
Prikaz stranice za prijavljivanje korisnika aplikacije je dat na sledećoj slici:
Slika 29. Prikaz stranice za logovanje
Kada korisnik unese svoje korisničko ime i šifru prikazaće se sledeća stranica:
Slika 33. Prikaz prijavljenog korisnika u statusu:Admin
Ulogovani korisnik je u statusu Administrator i može dodavati sadržaj menjati proizvode i
brisati ih.
36
Slika 34. Unos podataka o novom proizvodu
Takođe može prikazati parametarsku štampu proizvoda sa slikom za proizvod koja je
dodata.
Slika 35. Lista proizvoda sa mogućnostima izmene i brisanja
Kada se korisnik (Kupac) uloguje u aplikaciju biće mu omogućen prikaz proizvoda i štampa.
Sledeća slika prikazuje prijavljenog korisnika sa opcijama:
37
Slika 30. Prikaz ulogovanog korisnika sa opcijama i spisak proizvoda
Štampa je dodata zbog mogućnosti kupaca da odštampaju podatke o biljki koju žele da kupe
i tu mogu imati prikazano kako da ih održavaju, koliko da zalivaju i kakvu prihranu da
koriste.
Prilikom dodavanja proizvoda u korpu otvara nam semogućnost dodavanja proizvoda. Kada
kliknemo na dugme „U korpu“ otvara se sledeća forma koja će prikazivati proizvode u korpi
sa cenom.
Slika 31. Prikaz korpe sa dodatim proizvodom – cvetom
38
U korpi postoji opcija za dodavanje popusta ukoliko korisnik poseduje kupon. Prilikom
kodiranja dodato je da postoji popust od 10% unošenjem kupona kup10, zatim popust od
20% unošenjem kup20 i po istom principu popust od 30%. Takođe se nalazi i opcija štampe
koja izvozi prikaz ekrana u formu za direktno štampanje ukoliko korisnik želi da odštampa
narudžbenicu. Narudžbenica će biti prikazana kao celokupni snimak ekrana sa sadrzajem
korpe, što se u daljem razvoju aplikacije može usavršiti.
Kada se odabere dati popust korisniku će se ispisati poruka kao informacija o iznosu popusta
i iznos će se umanjiti za određeni broj procenata.
Sledeća slika ilustruje prikaz narudžbence sa uračunatim popustom.
Slika 32. Prikaz uračunatog popusta
Kada odaberemo željeni popust i odaberemo opciju za štampanje dobijamo sledeći prozor
koji automatski omogućava štampanje date stranice.
Slika 33. Prikaz prozora za direktnu štampu
39
6.5. Opis implementacije
Prilikom opisa implementacije postaviće se akcenat na objašnjenjima elemenata
implementacije po slojevima, počev od baze podataka, do ključnih delova programskog
koda u aplikaciji.
6.5.1. SQL Script – i šema baze podataka
Bazu podataka koju bi trebali da koristimo u radu kreirali smo preko SQL naredbi i pozvali
Script u phpMyAdmin delu koristeći XAMPP. XAMPP će nam omogućiti koričćenje
virtuelnog servera za prikaz aplikacije koju smo kreirali. Sledeća tabela prikazuje fajl sa
SQL naredbama, kao i STORED procedure i POGLED koji je korišćen u radu.
CREATE DATABASE `DIPLOMSKI` CHARACTER SET utf8 COLLATE utf8_general_ci;
create table `DIPLOMSKI`.`BILJKA`
(
IDTIPBILJKE int NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDDOBAVLJACA int,
IDPROIZVODA int,
NAZIVPROIZVODA varchar(50) not null,
GLAVNI
SLOJ PODSLOJEVI PLAN IMPLEMENTACIJE U RADU
PREZENTAC
IONI SLOJ
Korisnički
interfejs Ekranska forma
Prezentaciona
logika
Kod za pripremu podataka i prikaz u okviru grafickih elemenata
ekranske forme
Aktivan kod nakon izvršavanja “form action”
SLOJ
POSLOVNE
LOGIKE
Poslovni objekti
Klasa Korpa (naziv Korpa je u skladu sa načinom “razmišljanja”
korisnika i bliska korisničkom interfejsu, a ne zove se kao
nijedna tabela u bazi podataka).
Poslovna pravila Klasa Popust koja implementira mogućnosti popusta za količinu
ili iznos
SLOJ ZA
RAD SA
PODACIMA
Klase modela
Klase koje se kreiraju ili generišu na osnovu tabela baze
podataka. Za svaku tabelu može biti 3 klase: klasa pojedinac (ima
samo atribute I get-set metode), klasa DB (radi sa bazom
podataka putem SQL upita ili pozivom odgovarajućeg pogleda ili
stored procedure), klasa kolekcija (ima uredjenu listu objekata
klase pojedinac).
U ovom radu je podržana klasa pojedinac i klasa tipa DB.
Klasa konekcija i
parametri
Klasa konekcija – univerzalni tehnološki kod kojim se, na osnovu
eksterne datoteke sa parametrima konekcije, uspostavlja veza ka
DBMS i bazi podataka. Omogućava centralizaciju konektovanja,
radi olakšavanja eventualne promene DBMS-a ili parametara
konekcije.
U ovom radu je podržana kao zasebna klasa Konekcija, a
parametri konekcije su u TXT fajlu.
Baza podataka Stored procedure, pogledi, tabele i relacije.
U ovom radu su podržani svi elementi.
40
SLIKAPROIZVODA longblob not null,
ZALIVANJE varchar(200) not null,
ZEMLJISTE varchar(200) not null,
OSUNCANOST varchar(200) not null,
PRIHRANA varchar(200) not null
);
create table `DIPLOMSKI`.`DOBAVLJAC`
(
IDDOBAVLJACA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAZIVDOBAVLJACA varchar(30) not null,
ADRESADOBAVLJACA varchar(30) not null,
TELEFONDOBAVLJACA varchar(30) not null,
EMAILDOBAVLJACA varchar(40) not null
);
create table `DIPLOMSKI`.`KORISNIK`
(
IDSTATUSA int,
IDKORISNIKA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
IMEKORISNIKA varchar(30) not null,
PREZIMEKORISNIKA varchar(30) not null,
KRISNICKOIME varchar(30) not null,
SIFRA varchar(50) not null
);
create table `DIPLOMSKI`.`KUPAC`
(
IDKORISNIKA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
JMBG int,
ADRESAKUPCA varchar(30) not null,
TELEFONKUPCA varchar(30) not null,
EMAILKUPCA varchar(30) not null
);
create table `DIPLOMSKI`.`MESTO`
(
PTTMESTA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDDOBAVLJACA int,
IDKORISNIKA int,
NAZIVMESTA varchar(100) not null
);
create table `DIPLOMSKI`.`NARUDZBENICADOBAVLJACU`
(
IDNARUDZBENICEPRODAVCA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDKORISNIKA int not null,
IDPROIZVODA int ,
STA_IDNARUDZBENICEPRODAVCA int,
DATUMUPLATE date not null,
DATUMPRIJEMAROBE date not null,
DATUMNARUCIVANJAPRODAVCA date not null
)
create table `DIPLOMSKI`.`NARUDZBENICAKUPCA`
(
IDNARUDZBENICE int NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDKORISNIKA int not null,
IDPROIZVODA int,
STA_IDNARUDZBENICE int,
DATUMUPLATE date not null,
DATUMNARUCIVANJA date not null,
DATUMISPORUKE date not null
);
create table `DIPLOMSKI`.`PRODAVAC`
(
41
IDKORISNIKA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
STRUCNASPREMA varchar(30) not null,
RADNOMESTO varchar(50) not null
);
create table `DIPLOMSKI`.`PROIZVOD`
(
IDPROIZVODA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
IDDOBAVLJACA int,
NAZIVPROIZVODA varchar(50) not null,
SLIKAPROIZVODA longblob not null
);
create table `DIPLOMSKI`.`STAVKA_NARUDZBENICE`
(
IDPROIZVODA int,
IDNARUDZBENICEPRODAVCA int,
KOMADA int
);
create table `DIPLOMSKI`.`STAVKA_NARUDZBENICE_KUPCA`
(
IDPROIZVODA int,
IDNARUDZBENICE int,
KOLICINA int
);
create table `DIPLOMSKI`.`TIPBILJKE`
(
IDTIPBILJKE int NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAZIVTIPBILJKE varchar(30) not null
);
alter table `DIPLOMSKI`.`BILJKA` add constraint FK_JE_TIPA foreign key (IDPROIZVODA)
references `DIPLOMSKI`.PROIZVOD (IDPROIZVODA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`BILJKA` add constraint FK_PRIPADA foreign key (IDTIPBILJKE)
references `DIPLOMSKI`.`TIPBILJKE` (IDTIPBILJKE) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`KUPAC` add constraint FK_STATUS foreign key (IDKORISNIKA)
references `DIPLOMSKI`.`KORISNIK` (IDKORISNIKA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`MESTO` add constraint FK_SE_NALAZI foreign key (IDDOBAVLJACA)
references `DIPLOMSKI`.`DOBAVLJAC` (IDDOBAVLJACA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`MESTO` add constraint FK_ZIVI_U foreign key (IDKORISNIKA)
references `DIPLOMSKI`.`KUPAC` (IDKORISNIKA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`NARUDZBENICADOBAVLJACU` add constraint FK_JE_NAPISAO foreign key
(IDKORISNIKA)
references `DIPLOMSKI`.`PRODAVAC` (IDKORISNIKA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`NARUDZBENICAKUPCA` add constraint FK_JE_KREIRAO foreign key
(IDKORISNIKA)
references `DIPLOMSKI`.`KUPAC` (IDKORISNIKA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`PRODAVAC` add constraint FK_STATUS2 foreign key (IDKORISNIKA)
references `DIPLOMSKI`.`KORISNIK` (IDKORISNIKA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`PROIZVOD` add constraint FK_ISPOROCUJE foreign key (IDDOBAVLJACA)
references `DIPLOMSKI`.`DOBAVLJAC` (IDDOBAVLJACA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`STAVKA_NARUDZBENICE` add constraint FK_JE_NARUCENA foreign key
(IDPROIZVODA)
references `DIPLOMSKI`.`PROIZVOD` (IDPROIZVODA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`STAVKA_NARUDZBENICE` add constraint FK_SADRZI foreign key
(IDNARUDZBENICEPRODAVCA)
42
references `DIPLOMSKI`.`NARUDZBENICADOBAVLJACU` (IDNARUDZBENICEPRODAVCA) on delete
restrict on update cascade;
alter table `DIPLOMSKI`.`STAVKA_NARUDZBENICE_KUPCA` add constraint FK_JE_NARUCENO2 foreign
key (IDPROIZVODA)
references `DIPLOMSKI`.`PROIZVOD` (IDPROIZVODA) on delete restrict on update cascade;
alter table `DIPLOMSKI`.`STAVKA_NARUDZBENICE_KUPCA` add constraint FK_SADRZI1 foreign key
(IDNARUDZBENICE)
references `DIPLOMSKI`.`NARUDZBENICAKUPCA` (IDNARUDZBENICE) on delete restrict on update
cascade;
Tabela 5. Prikaz SQL Script-a koja će kreirati bazu na serveru sa potrebnim tabelama
generisana pomoću PDM-a i prilagođena
U početnoj verziji aplikacije korišćena je sledeća baza podataka:
CREATE DATABASE `DIPLOMSKI` CHARACTER SET utf8 COLLATE
utf8_general_ci;
create table `DIPLOMSKI`.`PROIZVOD`
(
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAZIVPROIZVODA varchar(30) not null,
SIFRAPROIZVODA int not null,
ZALIVANJE varchar(100) not null,
PRIHRANA varchar (100) not null,
NAZIVSLIKE varchar(50) null,
CENA float not null,
IDVRSTAPROIZVODA int not null
);
create table `DIPLOMSKI`.`VRSTAPROIZVODA`
(
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAZIV varchar(100) not null,
UKUPANBROJPROIZVODA int
);
alter table `DIPLOMSKI`.`PROIZVOD` add constraint FK_PRIPADA foreign key (
IDVRSTAPROIZVODA)
references `DIPLOMSKI`.`VRSTAPROIZVODA` (ID) on delete restrict on update
cascade;
create table `DIPLOMSKI`.`KORISNIK`
(
IDKORISNIKA int NOT NULL AUTO_INCREMENT PRIMARY KEY,
PREZIME varchar(50) not null,
IME varchar(40) not null,
EMAIL varchar(60) not null,
KORISNICKOIME varchar(30) not null,
SIFRA varchar(30) not null,
URLSLIKE varchar(250) null,
STATUS varchar(30) not null
43
);
INSERT INTO `DIPLOMSKI`.`KORISNIK` (PREZIME, IME, EMAIL,
KORISNICKOIME, SIFRA, URLSLIKE, STATUS) VALUES ('Jovana', 'Josic',
'[email protected]', 'joca', 'joca', 'Jovana.jpg', 'admin');
INSERT INTO `DIPLOMSKI`.`KORISNIK` (PREZIME, IME, EMAIL,
KORISNICKOIME, SIFRA, URLSLIKE, STATUS) VALUES ('Pavle', 'Pavlovic',
'[email protected]', 'pavle', 'pavle', 'Pavle.jpg', 'korisnik');
INSERT INTO `DIPLOMSKI`.`VRSTAPROIZVODA` (NAZIV,
UKUPANBROJPROIZVODA) VALUES ('Cvetnica', '0');
INSERT INTO `DIPLOMSKI`.`VRSTAPROIZVODA` (NAZIV,
UKUPANBROJPROIZVODA) VALUES ('Drvenasta', '0');
INSERT INTO `DIPLOMSKI`.`VRSTAPROIZVODA` (NAZIV,
UKUPANBROJPROIZVODA) VALUES ('Zbunasta', '0');
Tabela 6. Prikaz SQL Script-a baze korišćene u radu
Kada se kreira baza može se prikazati i dizajn sa relacijama u prozoru phpMyAdmin radi
detaljnijeg prikaza odnosa tabela. Dizajn baze koja se kreira iz PDM modela se prikazuje na
sledećoj slici.
Slika 35. Dizajn baze
Kada kreiramo bazu podataka, u nju dodajemo sledeće naredbe za kreiranje procedure i
pogleda.
Pogled
CREATE VIEW `DIPLOMSKI`.`SVIPROIZVODI` AS SELECT * FROM
`DIPLOMSKI`.`PROIZVOD`;
44
CREATE VIEW `DIPLOMSKI`.`SVIPODACIOPROIZVODIMA` AS select
NazivSlike, SIFRAPROIZVODA, ZALIVANJE, PRIHRANA, CENA, NAZIV AS
NAZIVPROIZVODA from `DIPLOMSKI`.`PROIZVOD` INNER JOIN
`DIPLOMSKI`.`VRSTAPROIZVODA` ON
`DIPLOMSKI`.`PROIZVOD`.`IDVRSTAPROIZVODA`=`DIPLOMSKI`.`VRSTAPR
OIZVODA`.`ID`;
Tabela 6. Prikaz naredbi pogleda iz rada
Stored procedura
Procedura
USE `DIPLOMSKI`;
DROP procedure IF EXISTS `DodajProizvod`;
DELIMITER $$
CREATE PROCEDURE `DodajProizvod` ( IN SIFRAPROIZVODA int, IN
NAZIVPROIZVODA varchar(30), IN ZALIVANJE varchar(100), IN PRIHRANA
varchar(100), IN CENA float, IN IDVRSTAPROIZVODA int, IN NAZIVSLIKE
varchar (50))
BEGIN
INSERT INTO `PROIZVOD`
(`SIFRAPROIZVODA`, `NAZIVPROIZVODA`, `ZALIVANJE`,
`IDVRSTAPROIZVODA`, `PRIHRANA`, `CENA`, `NAZIVSLIKE`)
VALUES (SIFRAPROIZVODA, NAZIVPROIZVODA, ZALIVANJE,
IDVRSTAPROIZVODA, PRIHRANA, CENA, NAZIVSLIKE);
END
$$
DELIMITER ;
Tabela 7. Prikaz koda procedure
6.5.2. Ključni delovi koda sa objašnjenjima
Ključni delovi programskog koda sastoje se iz dva dela:
Deo koda za dizajn korisničkog interfejsa koji je u osnovi HTML i CSS, sa
elementima PHP naredbi kojima se radi sa podacima iz baze podataka. Ovaj deo
programskog koda je prilagođen u odnosu na materijal sa vežbi iz predmeta
Inforamcioni sistemi 2.
Deo koda za rad sa korpom, koji je preuzet sa interneta i prilagođen ovom primeru.
Klasa Konekcija i parametri konekcije Klasa konekcija je univerzalna klasa, kojoj putem parametara konekcije dostavljamo potrebne
podatek za konektovanje.
<?php class Konekcija { // atributi public $UspehKonekcijeNaMYSQL; public $bazapodataka;
45
public $UspehKonekcijeNaBazuPodataka; // konstruktor //public _construct () //{} public function KonektujSe() { require 'kod_parametrikonekcije.php'; //$server = "localhost"; //$user_name = "root"; //$password = ""; //$bazapodataka="diplomski"; $this->bazapodataka=$bazapodataka; $db_handle = mysql_connect($server, $user_name, $password); $this->UspehKonekcijeNaMYSQL=$db_handle; if (!$db_handle) { die(' Greska: ' . mysql_error()); echo "<br/>"; } else { // dodatak da moze da radi sa UTF8 mysql_query('SET NAMES "utf8"',$db_handle); } //KONEKCIJA KA BAZI PODATAKA $db_selected = mysql_select_db($bazapodataka, $db_handle); $this->UspehKonekcijeNaBazuPodataka=$db_selected; if (!$db_selected) { die (' greska ' . mysql_error()); echo "<br/>"; } else { } } public function ZatvoriKonekciju() { mysql_close($this->UspehKonekcijeNaMYSQL); } } ?>
46
PARAMETRI KONEKCIJE:
<?php
$server = "localhost:3309";
$user_name = "root";
$password = "";
$bazapodataka="DIPLOMSKI";
?>
Klase modela Primer klase modela je clsProizvod koji koristi stored proceduru za snimanje novog
proizvoda.
<?php
class clsProizvod
{
// ATRIBUTI
private $bazapodataka;
private $UspehKonekcijeNaDBMS;
//
public $NAZIVPROIZVODA;
public $ZEMLJISTE;
public $PRIHRANA;
public $SIFRAPROIZVODA;
public $ZALIVANJE;
// dodatno
public $NAZIVSLIKE;
public $CENA;
public $IDVRSTAPROIZVODA;
// METODE
// konstruktor
public function __construct($otvorenaKonekcija)
{
// inicijalizacija vrednosti atributa
$this->bazapodataka = $otvorenaKonekcija->bazapodataka;
$this->UspehKonekcijeNaDBMS = $otvorenaKonekcija->UspehKonekcijeNaMYSQL;
}
public function DajKolekcijuSvih()
{
$SQL = "select * from `" . $this->bazapodataka . "`.`PROIZVOD` ORDER BY
SIFRAPROIZVODA DESC";
$result = mysql_query($SQL);
return $result;
47
}
public function DajKolekcijuFiltrirano($filterPolje, $filterVrednost, $nacinFiltriranja,
$Sortiranje)
{
if ($nacinFiltriranja == "like") {
$SQL = "select * from `" . $this->bazapodataka . "`.`PROIZVOD` WHERE
$filterPolje like '%" . $filterVrednost . "%' ORDER BY $Sortiranje";
} else {
$SQL = "select * from `" . $this->bazapodataka . "`.`PROIZVOD` WHERE
$filterPolje ='" . $filterVrednost . "' ORDER BY $Sortiranje";
}
$result = mysql_query($SQL);
return $result;
}
public function DajUkupanBrojSvih($KolekcijaZapisa)
{
$num_rows = mysql_num_rows($KolekcijaZapisa);
return $num_rows;
}
public function JedinstvenZapis()
{
$Jedinstven = false;
$KolekcijaZapisa = $this->DajKolekcijuFiltrirano("SIFRAPROIZVODA", $this-
>SIFRAPROIZVODA, "=", "SIFRAPROIZVODA");
$UkupanBrojZapisa = $this->DajUkupanBrojSvih($KolekcijaZapisa);
if ($UkupanBrojZapisa == 0) {
$Jedinstven = true;
} else {
$Jedinstven = false;
}
return $Jedinstven;
}
public function DodajNovo()
{
// VALIDACIJE
// Ispravnost datuma
// JedinstvenostZapisa
if ($this->JedinstvenZapis()) {
var_dump($this->ZALIVANJE);
$resultNAZIVPROIZVODA = mysql_query('SET @NAZIVPROIZVODA="' .
$this->NAZIVPROIZVODA . '"', $this->UspehKonekcijeNaDBMS);
$resultZALIVANJE = mysql_query('SET @ZALIVANJE="' . $this->ZALIVANJE .
'"', $this->UspehKonekcijeNaDBMS);
48
$resultPRIHRANA = mysql_query('SET @PRIHRANA="' . $this->PRIHRANA .
'"', $this->UspehKonekcijeNaDBMS);
$resultCENA = mysql_query("SET @CENA=" . $this->CENA, $this-
>UspehKonekcijeNaDBMS);
$resultIDVRSTAPROIZVODA = mysql_query("SET @IDVRSTAPROIZVODA="
. $this->IDVRSTAPROIZVODA, $this->UspehKonekcijeNaDBMS);
$resultNAZIVSLIKE = mysql_query("SET @NAZIVSLIKE='" . $this-
>NAZIVSLIKE . "'", $this->UspehKonekcijeNaDBMS);
$resultSIFRAPROIZVODA = mysql_query("SET @SIFRAPROIZVODA='" . $this-
>SIFRAPROIZVODA . "'", $this->UspehKonekcijeNaDBMS);
$sqlCALL = "CALL `DodajProizvod`(
@SIFRAPROIZVODA, @NAZIVPROIZVODA, @ZALIVANJE,
@PRIHRANA, @CENA, @IDVRSTAPROIZVODA,
@NAZIVSLIKE);";
$retval = mysql_query($sqlCALL, $this->UspehKonekcijeNaDBMS);
$greska = mysql_error();
} ELSE {
$greska = "Podaci vec postoje u bazi sa istom sifrom:$this->SIFRAPROIZVODA!";
}
return $greska;
}
// ostale metode
}
?>
Poslovni objekti i poslovna pravila
Poslovni objekat u ovom primeru je korpa, a poslovno pravilo se odnosi na popust, tj.
primenu kupona. U ovom delu prikazana je stranica Korpa koja objedinjuje različite
komponente (poslovni objekat, poslovno pravilo i prezentacioni sloj), koje bi trebalo
odvojiti u posebne klase (Korpa, Popust) i ekranske forme za prikaz korpe i stampu. Ipak, u
ovoj verziji rada realizovano je kao objedinjena stranica Korpa.php koja ima sve funkcije.
Poziv stranice Korpa dešava se na tasteru U KORPU u okviru iscrtavanja tabelarnog prikaza
robe:
// CRTANJE REDA TABELE SA PODACIMA
echo "<tr>";
echo " <td>";
echo " <font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\">$NazivProizvoda</font><br/>";
echo " </td>";
49
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\">$Zalivanje</font><br/>";
echo " </td>";
echo "<td>";
echo "<b><font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\">$Prihrana</font><br/>";
echo "</td>";
echo "<td>";
echo "<b><font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\">$Cena</font><br/>";
echo "</td>";
echo "<td>";
echo "<b><font face=\"Trebuchet MS\" color:#3F4534
size=\"2px\">$SifraProizvoda</font><br/>";
echo "</td>";
echo "<td>";
echo '<a href="/diplomski/korpa.php?akcija=dodaj&id='.$Id.'"><button>U
Korpu</button></a><br/>';
echo "</td>";
echo "</tr>";
U projekat je dodat programski kod stranice korpa.php koja omogućava dodavanje
proizvoda iz baze u formu i prikaz sa cenom koja se inkrementira prilikom dodavanja
svakog proizvoda.
Slika 36. Deo koda korpa.php
Pomoću prethodnog koda, omogućava se upis podataka u korpu i definiše se popust koji će
biti biti obračunat na formi ukoliko se unese. Proizvod se dodaje u korpu preko Id-a i
prilikom svakog dodavanje proverava se Id i inkrementira ako već postoji upisan proizvod.
50
Na sledećoj slici biće prikazan kod koji omogućava pridruživanje proizvoda korpi,
jednostavnom metodom join i taj isti proizvod se preko Id-a upisuje u korpu.
Slika 37. Kod upisa proizvoda u korpu.
U okviru iste stranice Korpa prikazuje se i spisak robe. Da bi se prikazale tabele i delovi sa
ispisom naziva podataka potrebno je uneti sledeći kod koji će kreirati dugmad za unos
popusta, prikaz naziva proizvoda, cene..
Slika 38. Kod za kreiranje dugmeta za Stampu i uklanjanje podataka
Za štampanje prikaza ekrana narudžbenice iskorišćen je kod javaScript koji je u dva koraka
omogućio štampanje podataka sa ekrana. Naravno, kada bi se aplikacija razvijala za realnu
primenu moralo bi se dosta delova izmeniti da bi u potpunosti funkcionisalo sve, ali je u
suštini delimično završena da bi demonstrirala web aplikaciju koja nam je bila potrebna za
rad.
Slika 39. Prikaz aktivacije dugmeta Stampa sa forme korpe koristeći JavaScript
51
Ekranska forma i prezentaciona logika
U nastavku je dat prikaz programskog koda korisničkog interfejsa i prezentacione logike na
primeru liste proizvoda.
Lista.php
<?php
// CITANJE VREDNOSTI O
KORISNIKU IZ SESIJE
session_start();
// kad idemo preko poziva sa URL
promenljivom, onda ovako citamo:
// citanje vrednosti iz sesije
$idkorisnika=$_SESSION["idkorisnika"];
// ako nije prijavljen korisnik, vraca ga
na pocetnu stranicu
if (!isset($idkorisnika))
{
header ('Location:index.php');
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="sr-RS" xml:lang="sr-RS">
<meta charset="UTF-8">
<head>
<title>Cvećara</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css" media="screen">
</head>
<body>
<table class="no-spacing" style="width:100%; padding:0" align="center" cellspacing="0"
cellpadding="0" border="0" style="border-spacing: 0;">
<!-------------------------- ZAGLAVLJE ------->
<?php include 'delovi/zaglavljewelcome.php';?>
<!-------------------------- DONJI DEO ------->
<tr style="padding:0px;">
<td style="width:10%;">
52
</td>
<!------------------------------------------------------------------------------------------->
<!---------------------- SREDINA DONJEG DELA SA SADRZAJEM pocinje ovde ------------
---------->
<td align="center" valign="middle">
<table style="width:100%; padding:0" align="center" cellspacing="0" cellpadding="0"
border="0" bgcolor="#003366">
<tr>
<td style="width:1%;">
</td>
<td style="width:20%;padding:0" cellspacing="0" cellpadding="0" border="0"
valign="top">
<?php include 'delovi/menilevoadmin.php';?>
</td>
<td style="width:2%;">
</td>
<td style="padding:0" cellspacing="0" cellpadding="0" border="0" valign="top">
<!------- GLAVNI SADRZAJ desno ----------->
<?php include 'delovi/desnoproizvodilista.php';?>
</td>
<td style="width:2%;">
</td>
</tr>
</table>
</td>
<!---------------------- SADRZAJ zavrsava ovde ---------------------->
<td style="width:10%;">
</td>
</tr>
<!---------------------- DONJI DEO zavrsava ovde ---------------------->
<tr style="padding:0px;">
<td style="width:10%;"></td>
<td align="center" valign="middle"></td>
<td style="width:10%;"></td>
</tr>
<!--- DONJI DEO sa donjom ivicom zavrsava ovde ------->
<!-- footer panel starts here -->
<?php include 'delovi/footer.php';?>
53
</table>
</body>
</html>
Suštinski deo koji prikazuje podatke je desnoproizvodilista.php. U ovom delu
izostavljen je kod zakonekciju sa bazom podataka, vec je dat deo za prikaz podataka koji je
najvazniji.
<meta charset="UTF-8">
<!--==================================== SADRZAJ STRANICE DESNO pocinje ovde -----------
------------------->
<img src="images/sredinagore.jpg" width="100%" height="3" alt="" class="flt1 rp_topcornn"/>
<table style="width:100%;style=" width:100%;
padding:0" align="center" cellspacing="0" cellpadding="0" border="0" bgcolor="#D8E7F4">
<tr>
<td style="width:5%;">
</td>
<td align="left">
<br/>
<font face="Trebuchet MS" color="darkblue" size="4px">
<b>Proizvodi</br>
<?php
//KONEKCIJA KA SERVERU
//KONEKCIJA KA BAZI PODATAKA
if ($db_selected) {
// dodatak da moze da radi sa UTF8
mysql_query('SET NAMES "utf8"', $db_handle);
$SQL = "select `" . $bazapodataka . "`.`PROIZVOD`.`ID`, NAZIVPROIZVODA,
SIFRAPROIZVODA, PRIHRANA, ZALIVANJE, CENA, NAZIV AS NAZIVRSTEPROIZVODA from `" .
$bazapodataka . "`.`PROIZVOD` INNER JOIN `" . $bazapodataka . "`.`VRSTAPROIZVODA` ON `" .
$bazapodataka . "`.`PROIZVOD`.`IDVRSTAPROIZVODA`=`" . $bazapodataka .
"`.`VRSTAPROIZVODA`.`ID` ORDER BY SIFRAPROIZVODA DESC";
$result = mysql_query($SQL, $db_handle);
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
//$rbvesti=0;
// ------------ zaglavlje ----------------
echo "<table style=\"width:90%; padding:0\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\"
border=\"1\" bgcolor=\"#D8E7F4\">";
echo '<tr>';
echo " <td style=\"width:62%;\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">SIFRA</font><br/>";
echo " </td>";
echo " <td style=\"width:62%;\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">NAZIV</font><br/>";
echo " </td>";
echo " <td style=\"width:62%;\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">CENA</font><br/>";
echo " </td>";
echo " <td style=\"width:62%;\">";
54
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">ZALIVANJE</font><br/>";
echo " </td>";
echo " <td style=\"width:62%;\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">PRIHRANA</font><br/>";
echo " </td>";
echo " <td style=\"width:62%;\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">VRSTA</font><br/>";
echo " </td>";
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">IZMENA</font><br/>";
echo " </td>";
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"3px\">BRISANJE</font><br/>";
echo " </td>";
echo "</tr>";
for ($row = 0; $row < $num_rows; $row++) {
if ($row > $num_rows) {
// nista
} else {
// CITANJE VREDNOSTI IZ MEMORIJSKE KOLEKCIJE $RESULT I DODELJIVANJE
PROMENLJIVIM
$Id = mysql_result($result, $row, "ID");
$NazivProizvoda = mysql_result($result, $row, "NAZIVPROIZVODA");
$Cena = mysql_result($result, $row, "CENA");
$Zalivanje = mysql_result($result, $row, "ZALIVANJE");
$Prihrana = mysql_result($result, $row, "PRIHRANA");
$Sifra = mysql_result($result, $row, "SIFRAPROIZVODA");
$VrstaProizvoda = mysql_result($result, $row, "NAZIVRSTEPROIZVODA");
// CRTANJE REDA TABELE SA PODACIMA
echo "<tr>";
echo " <td>";
echo " <font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\">$Sifra</font><br/>";
echo " </td>";
echo " <td>";
echo " <font face=\"Trebuchet MS\" color:#3F4534
size=\"2px\">$NazivProizvoda</font><br/>";
echo " </td>";
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\">$Cena</font><br/>";
echo " </td>";
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534
size=\"2px\">$Zalivanje</font><br/>";
echo " </td>";
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534
size=\"2px\">$Prihrana</font><br/>";
echo " </td>";
echo " <td>";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534
size=\"2px\">$VrstaProizvoda</font><br/>";
echo " </td>";
echo " <td>";
echo " <form ACTION=\"Izmeniform.php\" METHOD=\"POST\">";
echo " <input type=\"hidden\" name=\"IdProizvoda\" value=\"$Id\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\"><input
TYPE=\"submit\" name=\"izmeni\" value=\"IZMENI\" /></font></b>";
55
echo " </form>";
echo " </td>";
echo " <td>";
echo " <form ACTION=\"obrisi.php\" METHOD=\"POST\">";
echo " <input type=\"hidden\" name=\"IdProizvoda\" value=\"$Id\">";
echo " <b><font face=\"Trebuchet MS\" color:#3F4534 size=\"2px\"><input
TYPE=\"submit\" name=\"obrisi\" value=\"OBRISI\" /></font></b>";
echo " </form>";
echo " </td>";
echo "</tr>";
} // za else kod if row>
} //za for
echo "</table>";
echo "<br/>";
echo "<br/>";
} else {
echo "НЕМА ПОДАТАКА";
} // ZA ELSE
} // ZA IF DB SELECTED
mysql_close($db_handle);
?>
</td>
<td style="width:5%;">
</td>
</tr>
</table>
56
7. ZAKLJUČAK
U radu je prikazan proces razvoja Web aplikacije za online prodaju cveća. Obuhvaćen je
razvoj aplikacije od same specifikacije zahteva i analize semantike rada, pa sve do kreiranja
softvera. Posebno je dat naglasak na elementima višeslojne arhitekture softvera.
Softver je realizovan kao prototip, sa mnogim mogućnostima unapređenja, uključujući
registraciju korisnika, vizualizaciju proizvoda i korpe, kao i pripremu formalnog dokumenta
narudzbenice za printer friendly stranicu. U smislu viseslojnog razvoja, fajl Korpa.php je
zapravo objedinjen rad sa poslovnim objektom, poslovnim pravilom (popust) i prezentacioni
deo za sadržaj korpe. Naravno, u višeslojnom pristupu, trebalo bi odvojiti posebne klase
Korpa, Popust i nekoliko ekranskih formi zasebno.
Takođe, u problematici višeslojnog razvoja aplikacija u okviru PHP programskog jezika,
svakako je značajno izučiti dostupne razvojne okvire (framework) kao što su LARAVEL,
ZEND, Simfony itd.
57
8. Literatura
1. http://download.tutoriali.org/Tutorials/Web_Aplikacije/web_aplikacije.pdf
2. https://www.nasa.gov/pdf/637608main_day_2-david_garlan.pdf
3. http://www.vtsnis.edu.rs/predmeti_2012/klijent_server_sistemi/predavanja_2016/KS
%20Predavanje%209%202016.pdf
4. https://morphological.files.wordpress.com/2011/08/5-layer-architecture-draft.pdf
5. http://www.tfzr.uns.ac.rs/Content/files/0/SE2%20Ivankovic%20Lacmanovic.pdf
6. http://www.laputan.org/pub/papers/POSA-MVC.pdf
7. http://teleflora.rs/content/o-nama
8. George Sepherd, Microsoft ASP.NET 4 Step by Step, Redmond – Washington 2010.
9. http://www.mikroknjiga.rs/Knjige/VBPP/02_VBPP.pdf
10. https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/start-
mvc?tabs=aspnetcore2x
11. http://cvecarstvo.com
12. http://predmet.singidunum.ac.rs/pluginfile.php/5569/mod_folder/content/0/Literatura
%20%28e-test%29/Praktikum%20-
%20Internet%20i%20Web%20tehnologije%20%28Uvod%29.pdf?forcedownload=1
13. http://www.inter-caffe.com/viewtopic.php?p=12012&highlight= (Cvećarstvo, forum)
14. http://www.svetbiljaka.com/Enciklopedija
15. Ivana Stojanović, MR - Elektronska trgovina i kupovina putem Interneta u Srbiji, 2010.
Beograd
16. http://vipos.edu.rs/slike/knjige/elektronsko_poslovanje-9-30.pdf
17. https://www.ebayinc.com/our-company/our-history/
18. https://www.ibm.com/support/knowledgecenter/en/SS6RBX_11.4.3/com.ibm.sa.oomethod.d
oc/topics/c_UML_Use_Case_diag_Gen_Inf.html
19. www.kombib.rs/e-knjige-download.php?id=11
20. http://www.dunjincvet.com
21. http://www.proflowers.com
22. http://www.rasadnikmalivrt.rs/wp-content/uploads/2014/02/Katalog-2014-web.pdf
23. https://www.pinterest.com/pin/570831321500307418/
24. https://www.historicmysteries.com/the-hanging-gardens-of-babylon/
25. https://graphicriver.net/item/web-shopping-concept-illustration-icons-set/7741181
26. http://www.vps.ns.ac.rs/Materijal/mat22111.pdf
27. Steve Prettyman(prevod-Slavica Prudkov), Naučite PHP 7, 2016. Beograd
28. http://www.tfzr.uns.ac.rs/Content/files/0/menadzeri%20IAS%20skripta.pdf
29. https://mojwebsajt.com/web-programiranje/osnove-pisanja-php-koda/
30. http://predmet.singidunum.ac.rs/pluginfile.php/383/mod_folder/content/0/2011-
2012/PRIS%2005%20-
%20Analiza%20i%20projektovanje%20arhitekture%20softverskih%20sistema.pdf?f
orcedownload=1