diplomski rad tema: višeslojna web aplikacija za ... · sledi programiranje koje rezultuje radnom...
TRANSCRIPT
Univerzitet u Novom Sadu
Tehnički fakultet »Mihaj-
loPupin«
Zrenjanin
DIPLOMSKI RAD
Tema: Višeslojna web aplikacija za evidentiranje robe u prodavnici
računarske opreme
N-Tier Web Application for Computer Store Merchandise Records
Mentor: Student:
Doc. dr Ljubica Kazi Nemanja Šerfeze, IT69/14
Smer:
Informacione tehnologije –
inženjerstvo
Broj indeksa:
IT69/14
Zrenjanin, 2018. godina
2 | P a g e
Sadržaj:
1. Uvod 4
2. Teorijske osnove 5
2.1. Web aplikacija 5
2.2. Metodologije razvoja softvera 7
2.3. Višeslojna arhitektura softvera 10
2.4. Web servis 14
3. Analiza semantičke oblasti 16
3.1. Materijalno knjigovodstvo 16
3.1.1. Kratkotrajna materijalna imovina 16
3.1.2. Dugotrajna materijalna imovina 16
3.2. Robno knjigovodstvo 19
4. Postojeća rešenja 20
4.1. Softek 20
4.2. Program za knjigovodstvo SORS 21
4.3. FlipSoft web aplikacija za knjigovodstvo 23
5. Opis korišćene tehnologije 24
5.1. C# programski jezik 24
5.2. .NET framework 24
5.3. SQL baza podataka 25
6. Realizovan primer 27
6.1. Opis posla 27
6.2. Snimak stanja 27
6.3. Specifikacija zahteva korisnika 28
6.4. Modeli opsteg dizajna softvera 30
6.4.1. Model poslovnih procesa 30
6.4.2. USE CASE dijagram 34
6.4.3. Konceptualni model podataka 35
6.4.4. Dijagram komponenti 36
6.4.5. Dijagram razmeštaja 37
6.4.6. Dijagram klasa 38
6.4.7. Dijagram sekvenci 39
7. Korisničko uputstvo 40
8. Opis implementacije 50
8.1. SQL script i šema baze podataka 50
8.2. Tabelarni prikaz višeslojne arhitekture softvera sa
obrazloženjem implementiranih podslojeva 54
8.3. Delovi koda sa objašnjenjima 55
8.3.1. Sloj podataka 55
8.3.2. Sloj poslovne logike 59
3 | P a g e
8.3.3. Sloj servisa 59
8.3.4. Prezentacioni sloj 60
8.3.4.1. Prezentaciona logika 60
8.3.4.2. Korisnički interfejs 62
8.3.5. Sadržaj XML 64
9. Zaključak 65
10. Literatura 66
4 | P a g e
1. Uvod
Web aplikacije danas predstavljaju značajnu klasu softvera bez kojih se današnjica ne može za-
misliti.
Sa njihovom pojavom početkom devedesetih godina 20. veka pa do danas doživele su vrtoglav
rast kada je u pitanju broj korisnika koji ih svakodnevno koristi.
Razvojem internet i web tehnologija, web aplikacije predstavljaju ozbiljnog konkurenta uo-
bičajnim desktop aplikacijama kada je u pitanju izbor platforme na čijim osnovama će se imple-
mentirati ideja nekog softverskog rešenja.
Savremeni razvoj softvera uključuje u velikoj meri razvoj web aplikacija različitih namena.
Danas je uobičajeno da se celokupan softver ne razvija u jednoj firmi, već se neki delovi ap-
likacije koriste od strane drugih proizvođača i kao moduli – dinamičke biblioteke ili servisi
uključuju u nekom delu u funkcionisanje osnovne aplikacije. Jedan od motiva za izbor teme
ovog diplomskog rada je upravo teorijsko i praktično izučavanje problematike modularnog
razvoja web aplikacija kroz primenu servisno-orjentisane arhitekture.
Radi lakšeg evidentiranja opreme i skladištenja podataka o njoj, kreirana je ova web aplikacija.
Cilj je da administratoru i običnom korisniku olaksa vodjenje evidencije o samoj robi u
prodavnici računarske opreme. Aplikacija takodje moze biti korišćena u bilo kojoj ustanovi gde
postoji potreba za sličnim funkcijama. Bilo koja ustanova kojoj je potreban softver za eviden-
tiranje opeme, materijala, odnosno stvari vezanih za njenu delatnost, moze naći ovu aplikaciju
veoma korisnom.
Posetilac sajta moze brzo i efikasno putem logovanja na profil proveriti stanje opreme. Takođe
ubrzava proces štampanja stanja, nalaženja željene, pojedinačne opreme kao i unos, brisanje i
izmenu postojeće. Sajt je dostupan svima koji su korisnici ili administratori u određenoj usta-
novi, tako da mogu da vode evidenciju i od kuće uz samo računar i pristup Internetu.
Ideja je da se olakša način vođenja evidencije preko raznih softvera koji se koristi u različitim
ustanovama, a korišćenjem web aplikacije smatram da dobijamo na vremenu i efikasnosti, sto se
smatra najbitnijim. Radnici bi mogli da dobar deo obavljaju od kuće, takođe uz ovlašćenja ad-
ministratora dodaju, rashoduju i menjaju podatke o opremi. Rešenje koje je predstavljeno jos
uvek se moze smatrati verzijom koju je moguće nadograditi i unaprediti.
5 | P a g e
2. Teorijske osnove
2.1. Web aplikacija
Prvobitni koncept Web-a je sadržao nekoliko hiljada hipertekst dokumenata koji su međusobno
mogli biti povezani. Sadržaj tih dokumenata je obično bio sačinjen od teksta statičke
sadržine koji se mogao izmeniti samo ručno. Već u početnoj fazi razvoja Web-a softver inženjeri
su uvideli da klijent-server arhitektura pruža moćnu platformu u okviru koje bi korisnici pomoću
pretraživača pokretali aplikacije na lokalnom ili udaljenom serveru.
Na primer, korisnik bi mogao na klijent računaru pomoću web pregledača da pošalje zahtev za
određenim podacima server računaru. Server računar bi mogao, pomoću određenog programskog
koda, da prikupi zahtevane podatke iz baze podataka, te podatke da formatira u okviru HTML
dokumenta i isti prosledi klijent računaru.
Ideja da pomoću prosleđenog URL-a klijent poziva određeni programski kod, tаčnije skriptu,
koja se potom izvršava na server računaru, i koji, kao rezultat obrađenog zahteva vraća HTML
dokument dinamične sadržine, uslovila je razvoj web aplikacija i skript jezika.
Za izgradnju web aplikacija uglavnom se koriste skript jezici. Osnovna razlika između skript
jezika i programskih jezika (C, C++, C#, Java, Visual Basic…) leži u tome što programski kod
koji je napisan u programskim jezicima mora prvo biti kompajliran (tj. preveden u mašinski kod)
da bi se mogao izvršavati [1].
Kod skriptnih jezika programski kod se izvršava u trenutku njegovog pokretanja i to pomoću
posebnog programa (interpretera) koji istovremeno interpretira i izvršava napisani programski
kod. Skriptni jezici koji služe za izgradnju web aplikacija su podeljeni u dve velike grupe.
Skriptni jezici koji se izvršavaju na klijent računarima – (npr. JavaScript, VB script) – njihov
ugnježđeni kod u HTML dokumentu se izvršava u okviru pretraživača na klijent računarima.
Pretežno se koriste za struktuiranje prikaza sadržaja i uređivanje interfejsa web aplikacija, inter-
akciju sa korisnikom i drugo.
Skriptni i programski jezici koji se izvršavaju na server računarima – (npr. PHP) – grupa jezi-
ka koji uglavnom služe izgradnji glavnih funkcionalnosti web aplikacija. Dakle, pomoću njih se
najčešće realizuje poslovna logika same aplikacije. Naredna ilustracija prikazuje tipičan način
funkcionisanja web aplikacija.
Tipičan ciklus izvršavanja neke funkcionalnosti web aplikacija započinje akcijom korisnika koji
putem web čitača okida neki link (funkcionalnost) web aplikacije.
Dati zahtev se, putem razgranate internet mreže, upućuje Web serveru (posebna klasa softvera
i/ili računara namenjenih usluživanju web stranica) na kojem je web aplikacija instalirana.
Zahtev za određenim sadržajem obično izvršava skriptu (kod) koja u, zavisnosti od prirode
zahteva a pre vraćanja krajnjeg sadržaja (HTML stranice) web čitaču, može da uputi dodatne
6 | P a g e
zahteve kao što je npr. učitavanje podataka sa servera baze podataka koji je lociran na istom ili
udaljenom serveru.
Po izvršavanju logike skirpte obično se kao odgvor na upućeni zahtev generiše HTML dokument
koji se putem internet mreže dostavlja klijentu (web čitaču) koji obrađuje dati dokument i pri-
kazuje ga krajnjem korisniku.
Najčešća podela web aplikacija se vrši po kriterijumu namene zbog kojih se koriste. Tako na
primer imamo neke od sledećih tipova web aplikacija [3]:
društvene mreže (Facebook, MySpace, Twitter)
aplikacije za uređivanje i deljenje slika (Snapfish, Flickr, Photobucket, Shutterfly)
kalendari (Google Calendar, O2 Calendar, Yahoo! Calendar)
aplikacije za dopisivanje (chat-avenue, omgpop, czateria, Meebo)
aplikacije za kupovinu putem interneta (Amazon)
adresari (Yellow.com, White Pages, AnyWho)
CMS (Content Management System) aplikacije i aplikacije za uređivanje
blogova (Blogger, Word Press, Tumbir)
webmail servisi (Gmail, Yahoo Mail, HotMail)
aplikacije geografskih mapa (Google Maps, MapQuest)
internet pretraživači (Google, Bing, Yahoo)
web aplikacije drugih namena…
Sama arhitektura web aplikacija je višeslojne prirode zbog čega implementacija ovakvih rešenja
zahteva poznavanje značajnog broja web i internet tehnologija, skriptnih i programskih jezika,
mrežne arhitekture, baza podataka i drugo [2].
S obzirom da se pozivaju i koriste u okiru web čitača mogu da postoje međusobne razlike u pri-
kazu i funkcionisanju iste web aplikacije u različitim web čitačima.
Reč je o međusobnoj nekompatibilnosti web čitača. Iako je ovaj problem danas u većini
slučajeva rešiv zahvaljujući međusobnom usaglašavanju standarda rada web čitača i sve većoj
primeni opšteprihavćenih biblioteka koda u razvoju web aplikacija (npr. JavaScript biblioteka) te
razlike su danas značajno umanjene, ipak postoje slučajevi u kojima je korišćenje web aplikacija
u određenim web čitačima na neki način degradirano, jer se obično starije verzije određenih web
čitača ne uzimaju u obzir pri implementaciji nekog web rešenja iako se ima na umu što veća
pokrivenost web čitača i njihovih verzija.
Kako se arhitektura web aplikacija zasniva na klijent-server arhitekturi time se web aplikacije
najčešće opslužuju sa jednog (ili više) udaljenog server računara. Ukoliko dođe do bilo kakve
7 | P a g e
opstrukcije u radu servera, web aplikacija postaje neupotrebljiva za vreme dok je server iz bilo
kog razloga nedostupan [3].
Takođe, ugodnost korišćenja web aplikacije zavisiće i od performansi mrežne arhitekture i samih
server računara i njihovih mogućnosti usluživanja klijenata koji zahtevaju određene funkcional-
nosti web aplikacije.
2.2. Metodologije razvoja softvera
Razvoj bilo kakve složenije aplikacije danas nije posao koji se prepušta slučaju. U pitanju je proc
es koji sve više podleže standardizaciji i kome se i te kako ozbiljno i planski pristupa.
Sam tok razvoja softvera može se podeliti na nekoliko etapa, a jedna podela bila bi na:
planiranje,
analizu zahteva,
dizajn,
programiranje,
testiranje i
korišćenje u realnim uslovima.
Prve tri etape predstavljaju pripremne faze, kojima se određuju plan i metodologija rada i obliku-
je koncept aplikacije. Sledi programiranje koje rezultuje radnom verzijom programa.
Program se tada testira i ispravljaju mu se greške, da bi potom počelo njegovo korišćenje u prob-
nom periodu, tokom koga se ocenjuje koliko program odgovara početnim zahtevima. Čak i kad
program potpuno odgovara zahtevima, angažman programera se nastavlja na održavanju i un-
apređenju softvera. Suštinski, ove etape predstavljaju 4 faze klasičnog razvoja – definisanje šta
program radi, definisanje kako program to treba da radi, programiranje i korišćenje.
Metod vodopada predstavlja metodologiju prema kojoj etape u razvoju softvera doslovno prate
jedna drugu, počev od analize zahteva, preko dizajna, programiranja, testiranja, pa do instalacije
i održavanja. Svaka faza se kompletira i predstavlja osnov za sledeću. Pri tome se svaka etapa
realizuje veoma pazljivo kako se ne bi desile greške koje bi bile skupo plaćene u kasnijim
fazama. Metod vodopada predstavlja klasičan, disciplinovani način razvoja softvera, koji se u
velikoj meri oslanja na detaljnu dokumentaciju u svakoj etapi [4].
8 | P a g e
Slika 1. Metoda vodopada [4]
Agilno razvijanje softvera se bazira na postepenom pristupu koji se ponavlja. Agilnost se odnosi
na bilo koji proces koji se podudara sa konceptima Agile Manifesto. Priča datira još pre više od
petnaest godina. U februaru 2001. godine, 17 programera koji su se bavili razvojem softvera sas-
tali su se u gradu Juta, kako bi razgovarali o lakšim metodama razvoja software-a.
Nakon toga, oni su objavili Manifest agilnog razvoja softvera, uključujući četiri norme i 12 prin-
cipa, koji objašnjavaju kako su došli do boljih načina za razvoj softvera i kako pomoći drugima
da ih sprovedu. Agilni manifest inače predstavlja veliki kontrast tradicionalnom “Project Manag-
er’s Body of Knowledge (PMBOK)” koji sadrži vodič i standarde.
Agilna metodologija, umesto detaljnog planiranja na početku projekta, je zapravo otvorena za
promenu zahteva tokom vremena trajanja projekta i podstiče stalne povratne informacije od
krajnjih korisnika. Timovi koji učestvuju u projektu, rade na ponavljanju tokom određenog
vremenskog perioda, a ovaj rad je organizovan na osnovu backlog-a. Backlog predstavlja listu
karakteristika ili tehničkih zadataka koje tim održava i oni su neophodni i dovoljni da se završi
projekat. Prioriteti backlog-a se zasnivaju na vrednostima biznisa ili zahtevima klijenata. Cilj
svakog ponavljanja je da se napravi radni proizvod [4].
U agilnoj metodologiji, menadžment kompanije podstiče timski rad, odgovornost i komu-
nikaciju, pre svega licem u lice. Oni moraju da rade zajedno sa programerima kako bi uskladili
proizvod sa potrebama korisnika i ciljevima kompanije.
9 | P a g e
Agilni manifest navodi 12 principa kako bi pomogli timovima. Principi su:
1. Najveći prioritet je zadovoljstvo klijenta, to se ostvaruje što redovnijom isporukom
boljeg, korisnijeg i kvalitetnijeg softvera.
2. Zahteve prihvataju čak i tokom kasne faze razvoja. Agilni procesi omogućavaju uspešno
prilagođavanje izmenjenim zahtevima što za rezultat ima prednost klijenata u odnosu na
konkurenciju.
3. Česte su dostave radnog softvera, od nekoliko nedelja do nekoliko meseci, daje se pred-
nost kraćem vremenskom roku.
4. Menadžeri i programeri moraju svakodnevno da sarađuju tokom celog projekta.
5. Projekti se grade oko motivisanih pojedinaca. Pruža se ambijent i podrška koja im je po-
trebna i posao se prepušta sa poverenjem.
6. Najefikasniji i delotvorniji metod prenošenja informacije do i unutar razvojnog tima je
razgovor licem u lice.
7. Radni softver je primarna mera napretka.
8. Agilni procesi promovišu održivi razvoj. Sponzori, programeri i korisnici bi trebalo da
budu u stanju da održavaju konstantan tempo nezavisno od perioda trajanja projekta.
9. Kontinuirana pažnja na tehničkom kvalitetu i dobar dizajn pospešuju agilnost.
10. Jednostavnost – umetnost dovođenja do najvišeg stepena posla koji nije potrebno uraditi
je od suštinske važnosti.
11. Najbolje arhitekture, zahtevi i dizajn proizilaze iz timova koji su samoorganizovani.
12. U redovnim intervalima, timovi razmišljaju o tome kako da postanu što efikasniji, a
shodno tome prilagođavaju dalje postupke.
10 | P a g e
Slika 2. Metoda agilnog programiranja [5]
2.3. Viseslojna arhitektura softvera
Sredinom 1990-ih godina, kada su aplikacije u preduzećima postajale sve složenije i izvršavale
se na računarima nekoliko stotina ili hiljada krajnjih korisnika, klijentska strana u tradicionalnom
dvoslojnom klijent-server modelu predstavljala je problem koji je sprečavao izmene i proširenja
iz više razloga:
zahtevana je znatna količina resursa na klijentskoj mašini kako bi se aplikacije uspešno
izvršavale, uključujući procesorsku snagu, prostor na disku i RAM memoriju;
poslovna logika je bila distribuirana između servera i klijentskih mašina što je otežavalo
ažuriranje aplikacije;
značajni administrativni napori su bili potrebni na klijentskoj strani;
11 | P a g e
Slika 3. Troslojna arhitektura [6]
Varijacija dvoslojnog modela koja je rešila problem skalabilnosti u velikim sistemima pojavila se
1995. godine. Nova arhitektura sastojala se iz tri sloja (tier), od kojih se svaki mogao nalaziti na
drugoj platformi. Ovi slojevi su:
prezentacioni sloj koji je smešten na računaru krajnjeg korisnika - klijenta;
sloj poslovne logike i obrade podataka koji je smešten na serveru (aplikativni server);
sloj za pristup podacima koji je smešten na serveru baze podataka;
Slika 4. Trosloja arhitektura [5]
12 | P a g e
Prednosti troslojne arhitekture su brojne:
smanjenje troškova za hardver klijentskih mašina;
zbog izdvajanja poslovne logike, kojoj pristupa veliki broj korisnika, na poseban sloj u
vidu aplikativnog servera, ažuriranje i održavanje aplikacije je centrirano. Ovim se elim-
iniše problem distribucije softvera koji je bio prisutan u dvoslojnom klijent-server mod-
elu;
sa dobijenom modularnošću moguće je lako zameniti neki od slojeva bez uticaja na
ostale;
balansiranje opterećenja je mnogo lakše usled razdvajanja poslovne logike od servisa ba-
ze podataka;
Slika 5. Prikaz svih slojeva viseslojne arhitekture [6]
Slika 6. Prikaz slojeva višeslojne aplikacije i njihova povezanost [6]
13 | P a g e
Model-View-Controller (MVC) je arhitekturalni patern koji se koristi u razvoju softvera. U
složenim aplikacijama koje prikazuju korisniku ogromne količine podataka programeri često žele
da razdvoje kod koji se bavi podacima od onog koji se bavi interfejsom, tako da razvoj oba
postane lakši i jednostavniji [7].
MVC rešava ovaj problem razdvajanjem podataka i biznis logike od njihovog prikaza i interakci-
je sa korisnikom, uz to uvodeći i komponentu zaduženu za koordinisanje prve dve.
MVC deli sve ono što jedna aplikacija radi na tri dela.
Model — sadrži podatke u obliku pogodnom za konkretnu primenu. Mnoge aplikacije koriste
mehanizme za trajno čuvanje podataka (bazu podataka, na primer). U okviru MVC se u okviru
modela enkapsuliraju operacije za rad sa podacima iz baze podataka ili drugih izvora podataka.
View — prikazuje podatke iz modela u formatu pogodnom za interakciju, najčešće kao kompo-
nentu korisničkog interfejsa. U okviru jedne aplikacije može postojati više view-ova prilagođe-
nih različitim situacijama koji prikazuju podatke iz istog modela.
Controller — osnovni zadatak je da koordinise modele i view-ove, reagujuci na dogadjaje ini-
cirane korisnikovim akcijama.
Slika 7. MVC patern [7]
14 | P a g e
2.4. Web servisi
Prema W3C (WWW consortium), web servis je definisan kao softverski sistem koji je dizajniran
da podrži interoperabilnu interakciju mašine sa mašinom posredstvom računarske mreže [8].
Prilikom komunikacije koriste se standardi World Wide Web-a, kao što je HTTP. Za razmenu
podataka koriste se formati datoteka kao što su XML i JSON. U okviru Visual studio .NET
okruženja, web servis je poseban tip projekta. Kreiranjem ovog projekta, automatski se web ser-
vis kreira kao klasa. Funkcionalnost web servisa opisuje se kroz javne metode koje ova klasa da-
je na korišćenje javnosti. Web servis se može dodati u okviru projekta ASPX web aplikacije u
Visual Studio .NET okruženju tako što se najpre mora pokrenuti. Aktivan URL web servisa
dodaje se kao „Service Reference“ u okviru projekta ASPX web aplikacije.
Slika 8. Prikaz toka komunikacije web servisa [8]
SOAP - (Simple Object Access Protocol) je protokol kojim se specificira razmena strukturiranih
informacija u implementaciji web servisa u računarskim mrežama. Ovaj protocol promoviše
proširivost, neutralnost i nezavisnost od konkretnih tehnologija. Koristi XML kao format za
razmenu poruka i zasniva se na protokolima aplikacionog sloja OSI modela, kao što je HTTP.
SOAP omogućava izvršavanje web servisa na različitim operativnim sistemima, s obzirom da je
zasnovan na HTTP koji je podržan na svim operativnim sistemima [15].
REST - Representational state transfer (REST) ili RESTful web servisi su jedan od načina
obezbeđivanja interoperabilnosti između računarskih sistema i Interneta. Termin “representation-
al state transfer” je prvi put definisan 2000. godine u doktorskoj disertaciji Roy Fieldinga. Rest-
bazirani web servisi omogućavaju “stateless” operacije za tekstualnu reprezentaciju web resursa.
Na ovaj način, REST omogućava bolje performanse izvršavanja (brži rad), pouzdanost i ponovnu
iskoristivost komponenti [15].
16 | P a g e
3. Analiza semantičke oblasti
3.1. Materijalno knjigovodstvo
Robno – materijalno knjigovodstvo u suštini predstavlja evidenciju i praćenje robe u veleprodaji
i maloprodaji po vrsti, količini i vrednosti. Evidencijom robe po vrsti, količini i vrednosti,
komitentu je omogućeno konstantno praćenje i uvid u stanje zaliha robe, materijala. Robno mate-
rijalno knjigovodstvo podrazumeva obračun nabavke robe (kalkulacija), prodaje robe (fak-
turisanje), kao i praćenje stanja zaliha. Izradom jednog dokumenta (npr. kalkulacija), vrši se
istovremeno knjiženje u odgovarajuće knjige (KEPU, KPR), formiranje lager liste, generisanje
robne kartice posebno za svaki artikal, i vrši automatsko knjiženje u glavnu knjigu finansijskog
knjigovodstva.
3.1.1. Kratkotrajna materijalna imovina
Kratkotrajna ili tekuća imovina sastavni je deo ukupne imovine koja učestvuje u radnom procesu
neprestano tokom godine i kraće. Učestvovajući u proizvodnom procesu, menja svoj oblik
odjednom ili u nekoliko uzastopnih trošenja, pri čemu prelazi u vrednost poluproizvoda, gotovog
proizvoda ili usluge [11].
Kratkotrajna (tekuća) imovina pojavljuje se u obliku:
novca (u blagajni, na računima u banci, vredni papiri)
stvari (zaliha kratkotrajne imovine)
prava (potraživanja na osnovi kratkotrajne imovine)
Kratkotrajnu imovinu čini:
novac u banci i blagajni
zajmovi za nabavku kratkotrajne imovine
potraživanja
finansijska imovina
unapred plaćeni troškovi u budućim periodima [10]
3.1.2. Dugotrajna materijalna imovina
Dugotrajna materijalna imovina predstavlja vrednost uloženu u nabavku ili proizvodnju imovine
za trajnu upotrebu u procesu proizvodnje, poslovanje robom i pružanju usluga. Ima materijalni
oblik, odosno oblik stvari. Dugotrajnu materijalnu imovinu čine: nekretnine, postrojenja, oprema
itd. [11].
17 | P a g e
Slika 10. Prikaz robe [10]
Da bi detaljnije objasnili knjigovodstveno evidentiranje troškova materijala neophodno je prvo
objasniti šta ovaj termin predstavlja u menadžmentu računovodstva. Materijal u knjigovod-
stvenoj terminologiji označava stvar koja se u procesu proizvodnje troši kao predmet rada. U
najširem smislu pod materijalom se pored sirovina, osnovnog i pomocnog materijala tj. predmeta
rada podrazumevaju i pomocni neproizvodni materijal, gorivo i maziva, sitan inventar, ambalaža,
auto gume i otpaci.
SIROVINE – su proizvodi primarne proizvodnje koji u promet dolaze u neprerađenom stanju
(npr. ruda, nafta, poljoprivredni proizvodi kao što su vuna, šecerna repa...).
OSNOVNI MATERIJAL – su proizvodi prerađivačke industrije koji zajedno sa sirovinama
čine osnovnu sadržinu nekog proizvoda.
POMOCNI PROIZVODNI MATERIJAL – ulazi u sastav novog proizvoda, ali ne čini nje-
govu osnovnu sadržinu. U ovu vrstu materijala možemo kao primer navesti boju, lepak, lak...
POMOCNI NEPROIZVODNI MATERIJAL – su materijali koji ne ulaze u sastav novog pro-
izvoda ali omogućavaju normalno odvijanje procesa proizvodnje i poslovne aktivnosti u celini.
GORIVO – takode ubrajamo u materijal koji je shvaćen u širem smislu definicije i koji može
biti tehnološko, energetsko i gorivo za ogrev.
SITAN INVENTAR – čine sva ona sredstva za rad čiji je vek trajanja kraći od jedne godine ili
im je pojedinačna nabavna vrednost manja od propisanog limita.
AMBALAŽA – predstavlja materijal ali i stvari koje služe za pakovanje proizvoda radi očuvanja
njihovog kvaliteta i kvantiteta kako pri skladištenju tako i pri transportu. Sa gledišta funkcije
može se podeliti na: ambalažu koja ima karakter osnovnog sredstva i ambalažu koja ima karakter
obrtnog sredstva [10].
18 | P a g e
U svakom preduzeću postoje komisije za kvalitativan i kvantitativan prijem materijala. Pored
članova komisije koju obicno cine 2-3 člana prisustvuje i magacioner koji prima materijal na
skladištenje. Ako je pošiljka ispravna sastavlja se prijemnica materijala u 3 primerka: jedna
ostaje magacioneru radi magacinske evidencije (kartoteke), druga se daje nabavnoj službi za
praćenje izvršenja ugovora a treća se pripaja uz ulaznu fakturu dobavljača kao dokaz da je po
fakturi preuzet materijal i da se može knjižiti i isplatiti.
Po obavljenom kvalitativnom i kvantitativnom prijemu materijala i usaglašavanja isporuke sa
otpremnicom pristupa se knjigovodstvenom obuhvatanju nabavke materijala.
Evidencija o materijalu, sitnom inventaru, ambalaži i auto gumama vodi se u finansijskom, mate-
rijalnom i magacinskom knjigovodstvu. U finansijskom knjigovodstvu vodi se sintetička evi-
dencija po vrednosti. Na sintetičkom kontu materijala evidentira se stanje i kretanje materijala
samo po vrednosti i to zbirno na osnovu dokumenata. Pored sintetičke vodi se i analitička evi-
dencija materijala, sitnog inventara, ambalaže i auto guma po vrsti, količini i vrednosti. Takvu
analitičku evidenciju nazivamo materijalno knjigovodstvo. U njemu se pojavljuje onoliko računa
koliko se vrsta materijala koristi u datom preduzeću, a račun se pokazuje ne samo vrednosno već
pokazuje količinsko stanje i kretanje zaliha konkretne vrste materijala [10].
Magacinska evidencija je takode analitička evidencija, ali se od materijalnog knjigovodstva
razlikuje po tome što se u njoj iskazuju promene i stanje pojedinih vrsta zaliha samo u vidu pri-
rodnih pokazatelja. Takav tip evidencije vodi se samo po vrsti i količini, a ne i po vrednosti.
Evidencija materijala, sitnog inventara, ambalaže i auto guma može se voditi po: stvarnim nab-
avnim vrednostima, kombinovanim nabavnim vrednostima, planskim (obračunskim) nabavnim
vrednostima, što ima veliki uticaj na knjigovodstveno obuhvatanje ulaganja finansijskih sred-
stava u pomenute oblike obrtnih sredstava.
Slika 11. Primer materijalnog knjigovodstva (prema [11])
19 | P a g e
3.2. Robno knjigovodstvo
Delatnost trgovinskih preduzeća odvija se kroz kupovinu i prodaju dobara. Trgovci zarađuju na
razlici u ceni po kojoj kupe i prodaju robu, po pravilu u neizmenjenom obliku.
Dešava se da trgovac robu proda i pre nego što je uskladišti u svom magacinu ili prodavnici
(prodaja robe u tranzitu), ali je ipak mnogo prisutniji slučaj u kome postoje zalihe robe.
Nabavka, skladištenje zaliha i prodaja robe, kao i druge poslovne promene u vezi sa vrednošću
robe beleže se u knjigovodstvu u okviru finansijskog i robnog knjigovodstva.
Knjigovodstvena evidencija robe u finansijskom knjigovodstvu podrazumeva beleženje povećan-
ja i smanjenja ukupne vrednosti robe na kontu robe [16]. Konto je svojevrsna tabela u koju se
upisuju sve promene vrednosti ove imovine. Za svu robu vodi se jedan konto, pa se ova evidenci-
ja naziva sintetička. U njoj se ne vrši razdvajanje artikala, niti postoji informacija o količinama
robe.
Trgovinska preduzeća pored finanijskog, vode i posebno robno knjigovodstvo. U njemu se vodi
analitička evidencija po vrednosti i količini za svaki artikal. Može se reći, radi ilustracije, da je
robno knjigovodstvo sistem tabela u koji se unose promene koje se dešavaju na robi [16].
Svaki artikal vodi se posebno, tako da u svakom trenutku, iz robnog knjigovodstva, knjigovođa
može da pruži informaciju koliko je količinski i vrednosno nekog artikla nabavljeno, prodato, ili
koliko ga trenutno ima na stanju.
Svaka promena u količini i vrednosti robe evidentira se i u finansijskom i u robnom knjigovod-
stvu i stanje robe u ove dve evidencije uvek mora biti isto. Razlika je u tome što robno
knjigovodstvo pruža mnogo više informacija od finansijskog.
Osnova za beleženje promena je vrednost robe. Ona predstavlja proizvod količine i cene robe. U
zavisnosti od toga koju cenu uzmete u obzir prilikom obračuna, javljaju se nabavna i prodajna
vrednost robe. Prodajna cena može biti bez PDV i sa PDV.
20 | P a g e
4. Postojeća resenja
4.1. Softek
Softek je firma koja od 1997. godine uspešno posluje u oblasti savremenih informacionih
tehnologija. Njihovi programi su projektovani za Windows operativne sisteme, koriste moderne
relacione baze podataka i predviđeni su za rad u računarskim mrežama ili preko interneta. Pro-
grami imaju zajedničko jezgro, platformu koja je razvijana više godina i koristi se kod svih
korisnika. To im omogućava da se svako poboljšanje direktno uključi u više njihovih programa,
tako da korist imaju svi korisnici. U ispunjavanju korisničkih zahteva uvek teže praktičnim i od-
rživim rešenjima, koja će na duži vremenski rok zadovoljiti potrebe korisnika.
U okviru softvera firme Softek koje je namenjeno podršci evidenciji magacinskog poslovanja
moze se formirati više različitih magacina ili grupa materijala. Šifarnik artikala je prvi i osnovni
deo materijalnog knjigovodstva u kom se najpre moraju definisati šifre. U programu postoji
mogućnost izrade i štampe različite magacinske dokumentacije kao što su domaće i ino prijem-
nice materijala, trebovanja, računi i interne otpremnice, evidencija viška i manjka, povraćaj u
magacin, reversi za alati i inventar kao i više različitih izveštaja (lageri, kartice, promet količin-
ski i finansijski, količine po mestu troška).
Slika 12. Prikaz interface-a SOFTEK-ovog softvera [12]
21 | P a g e
Slika 13. Prikaz lagera magacina [12]
4.2. Sors
Program za računovodstvo Sors omogućava evidenciju poslovnih promena po sistemu dvojnog
knjigovodstva kao i evidenciju prometa robe, odnosno robno-materijalno knjigovodstvo.
Rad službe knjigovodstva značajno olakšava automatizacija knjiženja, odnosno prenos podataka
iz robnog u finansijsko knjigovodstvo i izrada šema za knjiženje. Sistematsko arhiviranje po-
dataka omogućava detaljnu analizu poslovanja i pravljenje niza značajnih izveštaja [13].
Program funkcioniše po sistemu server/klijent što znači da su svi podaci centralizovani u jednu
bazu podataka kojoj može da pristupa više korisnika, sa više različitih računara. Omogućen je i
pristup podacima sa udaljene lokacije putem interneta.
Program je napravljen tako da robno i finansijsko knjigovodstvo mogu da se koriste kao jedna
celina, odnosno kao jedan knjigovodstveni program ili nezavisno jedan od drugog, odnosno kao
posebne celine.
22 | P a g e
Slika 14. Prikaz interface-a Sors-a [13]
Program za knjigovodstvo Sors je podeljen na dve celine: robno i finansijsko knjigovodstvo. Ove
dve celine su dizajnirane tako da mogu da funkcionišu kao jedan knjigovodstveni program ili
mogu da se koriste odvojeno. To znači da korisnik može da se opredeli za korišćenje kompletnog
programa ili, u skladu sa svojim potrebama, može da odluči da koristi samo jednu od ove dve
celine: robno ili finansijsko knjigovodstvo.
Može da ga upotrebljava neograničen broj korisnika pri čemu postoji mogućnost da se određen-
im korisnicima ograniči pristup podacima. Tako, na primer, jedan korisnik može da vrši izmene i
pregled u delu za finansijsko knjigovodstvo, ali ne može da pristupa robnom knjigovodstvu.
Drugom korisniku može da se odobri da pregleda sve podatake ali može da mu se uskrati pravo
da unosi nove ili menja postojeće podatke.
U potpunosti je prilagođen za rad u mrežnom okruženju. Napravljen je po principu server/klijent,
što znači da više korisnika koji koriste progam na više različitih računara imaju pristup istoj bazi
podataka.
Omogućen je i pristup podacima sa računara koji se nalaze na udaljenim lokacijama. To znači
znači da podacima možete da pristupite sa bilo koje lokacije na svetu pod uslovom da imate
pristup internetu.
23 | P a g e
4.3. FipoSoft
Web aplikacija za knjigovodstvo FipoSoft predstavlja online aplikaciju koja omogućava logo-
vanje za različite firme i korisnike radi vršenja robnog knjigovodstva. Dostupnost i obrada
poslovnih informacija na svakom mestu i u svako doba, veoma je važan segment poslovanja. U
svetu je već odavno standard, kod nas se tek očekuje da web servis online dostupnosti i obrade
informacija baze podataka preuzme primat u odnosu na klasične poslovne aplikacije.
Bez obzira na operativni sistem (Windows, Linux, MacOS...) ili platformu (PC, laptop, tablet,
mobile phone...) može se pristupiti poslovnim informacijama 24 sata dnevno sa bilo kog
računara koristeći jedino web-browser.
Svaka izmena na programu automatski je vidljiva svim korisnicima istog momenta za razliku
od klasičnih instalacija kada je potrebno za svaki računar posebno update-ovati program ili čak
ponovo instalirati.
Sa svakim padom operativnog sistema, kod klasičnih aplikacija, neophodno je ponovo instali-
rati i licencirati program što zahteva vreme i dodatne troškove, za razliku od web servisa koji je
u potpunosti imun na te promene. Web servisom moguće je definisati dostupnost informacija
svakom korisniku ili grupi. Veliki broj radnji, velika terenska dinamika i česta putovanja
svakako zahtevaju što bolju i brži pristup obrđenim informacijama. Velikom spisku prednosti
treba dodati i jednostavnost, dostupnost i drastično smanjenje knjigovodstvenih troškova.
Slika 15. Prikaz interface-a FipoSoft-ove web aplikacije [14]
24 | P a g e
5. Opis korišćene tehnologije
5.1. C# programski jezik
Programski jezik C# (C - Sharp) je programski jezik potpuno baziran na principima OOP – Ob-
ject Oriented Programming – objektno orjentisanog programiranja i familijaran je sa C i C++
programskim jezicima. Nastao je zahvaljujući Anders Hejlsberg-u, Scott Wiltamuth-u i Peter
Golde-u u julu 2000 godine kao deo .NET projekta, ali je prvi put predstavljen javnosti 2002
godine od strane korporacije Microsoft. Najbolji je pre svega zbog svoje jednostavnosti,
čitljivosti, lakoći učenja i neverovatnim mogućnostima programiranja ovim programskim
jezikom.
Primer C# dela koda:
{
Console.WriteLine("Hello World");
Console.ReadLine();
}
5.2. .NET framework
Operativni sistem Windows se može predstaviti kao biblioteka, tj. skup svih funkcijskih poziva
u interfejsu Windows API-ja koje se koriste u programima, poput prikazivanja okvira za dija-
log, prozora za interfejse višestrukih ili pojedinačnih dokumenata, bezbednosni funkcija,
funkcija za pristup bazama podataka ili servisa. Uloga .NET Framework-a je da obezbedi svoje
.NET runtime okruženje, upravlja nitima, obezbeđuje različite pozadinske usluge i jednostavno
pruža izvestan nivo samostalnosti od operativnog sistema, iako .NET Framework nije opera-
tivni sistem. On je jedan sloj između Windows-a i aplikacije. Takođe uloga .NET Framework-a
je da obezbedi savremeno, objektno-orijentisano jednostavno okruženje za sve jednostavnije
programiranje i izvršavanje programa. Danas je .NET Framework toliko napredovao da sadrži i
okruženja koja omogućavaju emulatore za programiranje mobilnih aplikacija [9].
25 | P a g e
Slika 16. Prikaz verzija .NET framework-a [9]
5.3. ASP.NET
Kasnije poznatiji kao classic ASP datira još iz 1996. godine, prva je verzija ASP-a, Microsoft-
ove tehnologije za pisanje skriptova pomoću VisualBasicScript, JScript i PerlScript jezika koji se
izvršavaju sa strane servera. Klasični ASP je namenjen samo Windows platformi. Inicijalno je
bio predstavljen kao dodatak Internet Information Services (IIS) u okviru Windows Server-a sve
do 2000.godine. Postojale su ukupno tri verzije Classic ASP-a.
ASP 1.0 verzija, predstavljena Decembra 1996. godine kao deo IIS 3.0
ASP 2.0 verzija, predstavljena Septembra 1997. godine kao deo IIS 4.0
ASP 3.0 verzija, predstavljena Novembra 2000. godine kao deo IIS 5.0
ASP.NET stranice se izvršavaju na serverskoj strani i generišu HTML, WML ili XML koji se
šalje desktop ili mobilnim pretraživačima. ASP.NET koristi „event-driven“ model programiranja
koji poboljšava performanse i omogućava sepraciju korisničkog interfejsa od logike aplikacije.
ASP.NET radi na vrhu HTTP protokola koristeći HTTP komande i pravila kako bi omogućio
obostranu komunikaciju izmedju klijenta i servera. Kod je moguće pisati u C#, VisualBasic,
JScript ili J# jezicima.
Danas se koriste Visual Studio 2017 i Windows 10. Poslednja verzija .NET framework-a je 4.7.2,
a sa njim i ASP.NET verzije 4.7 kao poslednja verzija zvaničnog ASP.NET Framework. Pored
26 | P a g e
novih tehnologija u okviru .NET 4.7 framework-a tu je HTTP/2.0 podrška za Windows 10 i
asinhroni task-returning API za ASP.NET.
Web aplikacija realizovana u ovom radu je implementirana primenom .NET framework-a verzije
4.0 i ASP.NET verziji 4.0
ASP.NET omogućava 3 metode razvoja:
Slika 17. Prikaz ASP.NET-a [15]
• Web Forms (tradicionalni ASP.NET)
• Web Pages
• MVC (Model View Controller)
Web Pages: Najjednostavniji metod, HTML i kod se nalaze u istom fajlu, lak je za učenje,
Web Forms: Omogućavaju separaciju HTML-a i ostalog UserInterface koda od logike aplikaci-
je, pristup podacima, korisni data binding, podršku za skripting sa klijentske strane kao i ostale
mogućnosti kao što su rutiranje, bezbednost... Najstariji je ASP programski model sa „event-
driven“ web stranama pisanih u kombinaciji HTML-a, serverskih kontrola i serverskog koda.
MVC (Model View Controller): Omogućava poboljšan pattern-orijentisan razvoj u 3 sloja.
Model: na ovom sloju je biznis logika, načešće za komunikaciju sa bazom, View: omogućava
prikaz i najčešće prikazuje podatke iz modela, Controller: je deo aplikacije koji čita sa View-a,
kontroliše korisničke input-e, i prosledjuje input podatke modelu.
27 | P a g e
6. Realizovan primer
6.1. Opis posla
Opis posla predstavlja tekst opisa životnog ciklusa osnovnog objekta obrade u sistemu. U ovom
slučaju, osnovni ciklus se odnosi na životni ciklus robe u odredjenoj prodavnici računarske
opreme.
Ciklus robe počinje prijemom robe od dobavljača. Roba se smešta u magacinski prostor
prodavnice na određeno smestajno mesto. Knjigovodstveno se evidentira i odredjuje nabavna i
prodajna cena, kao i količina. Nakon svake prodaje robe, količina robe na lageru se smanjuje, a
nakon nabavke povećava. Bitno je napomenuti da pojedini tipovi robe imaju garanciju određeni
vremenski period izražen u godinama.
Tu se životni ciklus robe u pojedničnoj prodavnici računarske opreme završava.
6.2. Snimak stanja
Snimak stanja predstavlja prikaz postojećeg stanja informacionog sistema u svim osnovnim ele-
mentima. U ovom radu realizovan je snimak stanja za izmišljenu prodavnicu računara.
HARDWARE - Magacinski prostor računarske prodavnice poseduje desktop računar savremenih
performansi.
SOFTWARE - U računarskoj prodavnici roba se evidentira u okviru MS Excel tabela.
ORGWARE - Ne postoji poseban pravilnik o informacionom sistemu računarske prodavnice.
LIFEWARE - Radnik prodavnice istovremeno je zadužen i za prijem robe u magacinski prostor i
evidentiranje podataka u računaru.
U okviru ovog rada prikazana je lista robe i smeštajnih mesta, preuzetih iz jedne prodavnice [17].
28 | P a g e
Slika 18. Presek stanja jedne prodavnice [17]
6.3. Specifikacija zahteva korisnika
U okviru ovog rada za primer je uzeta izmišljena prodavnica računarske opreme.
Specifikacija zahteva korisnika obuhvata:
Realizacija web aplikacije za evidentiranje robe – unos, brisanje, izmena, tabelarni pri-
kaz, štampa spiska/izveštaja o opremi
Logovanje sa različitim ograničenjima pristupa
Specifikacija zahteva za izradu web aplikacije koja se bavi vođenjem evidencije odnosi se na
spisak svih funkcionalnih mogućnosti koje aplikacija nudi, podeljenih prema profilima različitih
korisnika koji koriste aplikaciju – korisnik i administrator. U nastavku cemo prikazati tabelarno
funkcionalne zahteve ONLINE APLIKACIJE ZA EVIDENTIRANJE ROBE U PRODAVNICI
RAČUNARSKE OPREME. Tabelarni prikaz je odabran radi boljeg prikaza svih aktivnosti.
Spisak specifikacija aktivnosti korisnika:
29 | P a g e
(Tabela 1. Specifikacija mogucnosti ADMINISTRATORA)
POSLOVNA AKTIVNOST SOFTVERSKA PODRSKA I DETALJI POSLOVNE AK-
TIVNOSTI
Pregled inventara Tabelarni prikaz sve robe ili prikaz filtrirane robe
Korekcije inventara Unos, izmena i brisanje pojedinacne robe
Provera proizvođaca Tabelarni prikaz svih proizvodjace
Korekcija proizvođaca Unos, izmena i brisanje pojedinacnih proizvođaca
Štampa izvestaja Štampanje XML-a
(Tabela 2. Specifikacija mogucnosti KORISNIKA)
POSLOVNA AKTIVNOST SOFTVERSKA PODRSKA I DETALJI POSLOVNE AK-
TIVNOSTI
Pregled inventara Tabelarni prikaz sve robe ili prikaz filtrirane robe
Štampa izvestaja Štampanje XML-a
30 | P a g e
6.4. Modeli opsteg dizajna softvera
6.4.1. Model poslovnih procesa
Primarni cilj modela poslovnih procesa (BPM) je da obezbedi jedinstveno grafičko obeležavanje
koje će moći da razumeju svi poslovni korisnici. To uključuje poslovne analitičare koji prave
prvobitnu šemu procesa, programere koji ih implementiraju u odgovarajućoj tehnologiji, kao i
poslovne korisnike koji izvršavaju i kontrolišu procese. Na osnovu toga se kaže da BPMN pred-
stavlja standardizovanu vezu kojom se prevazilazi jaz između modeliranja i implementacije
poslovnih procesa. Važna karakteristika BPMN notacije je da podržava samo koncepte mod-
eliranja koji se odnose na poslovne procese.
Slika 19. Izgled BPM modela i okruzenja Power Designer
32 | P a g e
Ovde će biti predstavljena tabela u kojoj se nalaze primitvni procesi na osnovu BPM (Business
Process Model) i softverske funkcije vezane za te procese. Funkcije su sortirane prema važnosti i
prema redosledu dešavanja.
Primitivni procesi su procesi administratora i korisnika.
Radnu ulogu predstavlja izvršilac samog primitivnog poslovnog procesa.
Softverske funkcije su podeljene u dve kategorije prema prioritetu:
-Uloge prvog direktno podržavaju process
-Uloge drugog prioriteta proširuju funkcionalnost
Lista prikazuje preduslove koji moraju biti ispunjeni da bi mogle osnovne funkcije da se
primenjuju
U tabeli Aktor se nalaze vrednosti uloge korisnika za dati process
Pod tipom softvera mislimo na platformu na kojoj će se odigravati process
(Tabela 3. – BPM primitivnih procesa)
Primitivni
poslovni pro-
cesi
Radna uloga
izvršioca
primitivnog
poslovnog
procesa
Softverska
funkcija I
prioriteta
Softverska
funkcija II
prioriteta
Preduslov za
uspešno
izvršavanje
funkcija I
prioriteta
Aktor (pro-
fil korisnika
softverske
funkcije)
Tip
softvera
Prijem robe Prodavac Unos po-
dataka o
primljenoj
robi
Tabelarni pri-
kaz podataka
dospele robe,
Filter podataka
prema datumu
dospele robe,
parametarska
stampa
Unos nar-
udzbenice za
dobavljaca
Dobavljac c/s
LAN, WEB
Kreiranje
naloga Prodavac Unos pro-
izvoda za
takalog,
Stampanje
kataloga
Tabelarni pri-
kaz proizvoda
kojic e se koris-
titi u katalogu
Unos po-
dataka o
primljenoj
robi
Prodavac c/s LAN, WEB
Narucivanje Kupac Unos po-
dataka u pro-
izvodima za
narucivanje
Tabelarni
prikaz nar-
udzbenice
koja sadrzi
podatke o
proizvodima
i o kupcu,
Filter po-
dataka po
datumu pri-
jema i
parametarska
stampa nar-
udzbenice
Unos pro-
izvoda za
katalog
Kupac WEB
33 | P a g e
Prijem nar-
udzbenice Prodavac Tabelarni pri-
kaz nar-
udzbenica
Filter unetih
podataka prema
rednim bro-
jevima nar-
udznenice
Unos po-
dataka o pro-
izvodima za
narucivanje
od kupca
Kupac c/s LAN, WEB
Placanje Kupac Unos po-
dataka o
placanju
Tablerani pri-
kaz real-
izovanih
placanja
Tabelarni
prikaz nar-
udzbenica
WEB
Evidentiranje
uplata Prodavac Unos po-
dataka o pot-
vrdi izvrsenja
uplate kupca
(uporedjivan-
je sa
bankarskim
izvodom)
Tabelarni pri-
kaz potvrdjenih
uplata, Filter
podataka o
dospelim up-
latama prema
datumu placan-
ja
Unos po-
dataka o
placanju od
strane kupca
Kupac c/s LAN, WEB
Slanje
porucene robe Prodavac Unos po-
dataka o
slanju pro-
izvoda
Tabelarni pri-
kaz podataka o
posiljkama,
Filter podataka
o slanju prema
broju nar-
udzbenice i
datumu
Unos po-
dataka o pro-
izvodima za
narucivanje
od kupca Unos po-
dataka o pot-
vrdi izvrsenja
uplate kupca
Prodavac c/s LAN, WEB
34 | P a g e
6.4.2. Use case dijagram
Dijagram slučajeva korišćenja je UML dijagram visokog nivoa koji se koristi za analizu zahteva
i ponašanja sistema. Umesto da prikaže detalje pojedinih funkcionalnosti sistema, on se koristi
da prikaže same funkcionalnosti koje su dostupne u posmatranom sistemu. Koristi se da grafički
modeluje funkcionalnosti sistema u formi slučajeva korišćenja i kako spoljašnji korisnici, koji se
nazivaju učesnici, reaguju sa sistemom. Dijagram slučajeva korišćenja ne pokušava da prikaže
redosled ili broj koliko puta akcije ili podakcije sistema treba da budu izvršene. Pomoću di-
jagrama slučajeva korišćenja se odmah vidi prikaz funkcionalnosti sistema. Dodatni detalji se
mogu kasnije dodati u dijagram ako je potrebno da se razjasne tačke od interesa u ponašanju
sistema. Dijagrami slučajeva korišćenja su pogodni za opisivanje svega što se može uraditi
pomoću posmatranog sistema od strane bilo koje osobe koja mu pristupa. Ove aktivnosti nisu na
dovoljno visokom nivou da bi se predstavile kao posebni slučajevi korišćenja.
Slika 21. Power Designer USE CASE dijagram (prodavnica računarske opreme)
35 | P a g e
6.4.3. Konceptualni model podataka
U nastavku je prikazan konceptualni data model koji odgovara specifikaciji zahteva, koja je
prethodno prikazana u tabeli. Data je struktura podataka koja je bitna za samo evidentiranje robe
i može se koristiti u više slucajeva. Na osnovu konceptualnog modela podataka, koji je dat u nas-
tavku, je realizovan SQL upit i baza podataka koja se koristi u softveru.
Slika 22. Power Designer konceptualni data dijagram (prodavnica računarske opreme)
36 | P a g e
6.4.4. Dijagram komponenti
Dijagram prikazuje strukturne relacije izmedju softverskih komponenti sistema. On ilustruje de-
love softvera, ugrađene kontrolere i slicno, i ima veći stepen apstrakcije od dijagrama klasa.
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ćoj
slici je prikazan izgled dijagrama komponenti aplikacije realizovane u ovom radu razvrstanu po
slojevima.
Slika 23. Power Designer dijagram komponenti
37 | P a g e
6.4.5. 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 srednju sloj koj se koristi za povezivanje
međusobno razdvojenih mašina.
Slika 24. Power Designer dijagram razmeštaja
38 | P a g e
6.4.6. Dijagram klasa
Dijagram klasa nam daje mogućnost pregleda svih klasa unutra svakog sloja pojedinačno kao i
način na koji su klase međusobno povezane.
Slika 25. Power Designer dijagram klasa
39 | P a g e
6.4.7. Dijagram sekvenci
Dijagram sekvenci se koristi za specifikaciju zahteva u opisu složenih scenarija – opis toka
poruka između objekata kojima se realizuje odgovarajuća operacija u sistemu. Korisiti se za
modelovanje dinamičkih aspekata sistema. Identifikuju se sistemski dogadjaji i sistemske
operacije za odgovarajući slučaj upotrebe. On je jedan od dijagrama interakcije.
Slika 26. Power designer opšti dijagram sekvenci
Slika 27. Power designer dijagram sekvenci za konkretan slučaj korišćenja (Unos podataka o no-
voj robi)
40 | P a g e
7. Korisničko uputstvo
Opcije korisnika nakon otvaranja web stranice:
Slika 28: Prikaz početnog ekrana sa potvrdom konektovanja na bazu podataka
Pritiskom na dugme “PRIJAVA” korisnik otvara Login stranu:
Slika 29: Logovanje na određeni profil
41 | P a g e
Nakon unosa korisničkog imena i šifre, otvara se administratorska stranica ili stranica posetioca
sajta:
Slika 30: Početna stranica posetioca sajta
Posetilac sajta moze tabelarno prikazati željenu opremu:
Slika 31: Prikaz sve opreme na stanju
42 | P a g e
Takođe, posetilac moze filtrirati opremu po nazivu:
Slika 32: Filtriranje(pretraga) po nazivu opreme
U slučaju logovanja kao administrator, otvara se druga web stranica sa opcijama za unos, prikaz,
brisanje i izmenu opreme i proizvođaca:
Slika 33: Administratorska početna stranica
43 | P a g e
Mozemo tabelarno prikazati sve proizvođace:
Slika 34: Tabelarni prikaz svih proizvođaca
Kao dodatak, administrator moze filtrirati proizvođace po nazivu:
Slika 35: Filtriranje po nazivu proizvođaca
44 | P a g e
Administrator ima pristup i opciju unošenja novog proizvođaca:
Slika 36: Unos novog proizvođaca
Vidljiv je status snimanja da bi korisnik znao da li je snimanje uspešno ili postoji problem kao
sto je duplikat proizvođaca ili nesto drugo sto nije u skladu sa poslovnim pravilima koja se
nalaze u poslovnoj logici.
Slika 37: Potvrda o snimljenom novom proizvodjacu
Administrator može birati narednu funkciju, sto je brisanje i izmena proizvođaca:
Slika 38: Brisanje i izmena proizvođaca
45 | P a g e
I ovde postoji potvrda o uspešno izvršenoj funkciji:
Slika 39: Potvrda o uspešno obavljenoj željenoj funkciji
Administrator takođe ima pristup prikazu sve opreme, sto je jedino zajedničko sa običnim
korisnikom web stranice.
Unos opreme je najbitnija funkcija koju administrator koristi, jer koristi poslovna pravila i
ograničenja sa web servisa:
Slika 40: Administratorski deo za unos opreme/robe
46 | P a g e
Preko poslovne logike proverava da li vec postoji oprema sa unetom sifrom, da ne bi bilo
duplikata:
Slika 41: Poruka administratoru da ne moze dodati određenu robu jer već postoji oprema sa
istom šifrom
I kao poslednja, tu je naravno i provera da li su sva polja popunjena:
Slika 42: Poruka administratoru da nije popunio sva potrebna polja
47 | P a g e
Padajući meni nam daje izbor izbor proizvođaca:
Slika 43: Izbor u padajućem meniju o poreklu proizvođaca
Padajući meni takođe služi za izbor tipa robe:
Slika 44: Izbor u padajućem meniju o tipu robe
48 | P a g e
Nakon izbora određenog proizvođaca i tipa robe, preko web servisa i XML-a kombinacijom ove
dve vrednosti automatski dobijamo dužinu garancije za selekciju:
Slika 45: Automatsko popunjavanje polja “Garancija” preko web servisa
Opcija za izmenu količine i šifre robe je dodata, i može se izmeniti koristeći aktivnu šifru robe za
određenu robu:
Slika 46: Izmena količine i šifre robe koristeći aktivnu šifru robe
49 | P a g e
U slučaju odjave, vraćamo se na početnu stranu (Default):
Slika 47: Povratak na pocetnu stranicu nakon odjave
Poslednje, ali ne i najmanje bitno, mozemo klikom na “Autor” biti prebačeni na stranicu koja
pokazuje ko je sajt napravio:
Slika 48: Prikaz autora web aplikacije
50 | P a g e
8. Opis implementacije
8.1. SQL script i šema baze podataka
USE [master]
GO
CREATE DATABASE [EvidencijaOpreme]
GO
USE [EvidencijaOpreme]
GO
CREATE TABLE [dbo].[OPREMA](
[SIFRA] [nvarchar] (40) NOT NULL,
[NAZIV] [nvarchar](40) NOT NULL,
[IDProizvodjaca] [nvarchar](10) NOT NULL
)
GO
ALTER TABLE [dbo].[OPREMA]
ADD CONSTRAINT [PK_OPREMA] PRIMARY KEY CLUSTERED
(
[SIFRA] ASC
)
GO
CREATE TABLE [dbo].[PROIZVODJAC](
[ID] [Char] (10) NOT NULL,
[NAZIV] [nvarnvarchar](40) NOT NULL,
)
GO
ALTER TABLE [dbo].[PROIZVODJAC]
ADD CONSTRAINT [PK_PROIZVODJAC] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
GO
51 | P a g e
ALTER TABLE [dbo].[OPREMA] ADD CONSTRAINT
[FK_OPREMA_PROIZVODJAC] FOREIGN KEY([IDProizvodjaca])
REFERENCES [dbo].[PROIZVODJAC] ([ID])
ON UPDATE CASCADE
GO
Stored procedure u SQL-u koriscene u izradi:
KORISNIK:
CREATE PROCEDURE [DajKorisnikaPoKorisnickomImenuISifri]
( @KorisnickoIme nvarchar(20),
@Sifra nvarchar(30)
)
AS
select * from Korisnik where Korisnik.KorisnickoIme=@KorisnickoIme and
Korisnik.Sifra=@Sifra
GO
OPREMA:
CREATE PROCEDURE [DajSvuOpremu]
AS
Select * from OPREMA
GO
CREATE PROCEDURE [DajOpremuPoNazivu] @OpremaNaziv nvarchar(30)
AS
select OPREMA.SIFRA, OPREMA.NAZIV, OPREMA.IDProizvodjaca from
OPREMA inner join PROIZVODJAC on PROIZVODJAC.ID = OPRE-
MA.IDProizvodjaca where OPREMA.NAZIV = @OpremaNaziv
CREATE PROCEDURE [DajOpremuPoSifri] @OpremaSifra nvarchar(30)
AS
select OPREMA.SIFRA, OPREMA.NAZIV, OPREMA.IDProizvodjaca from
OPREMA inner join PROIZVODJAC on PROIZVODJAC.ID = OPRE-
MA.IDProizvodjaca where OPREMA.Sifra = @OpremaSifra
CREATE PROCEDURE [DodajNovuOpremu](
@Sifra nvarchar(40),
52 | P a g e
@Naziv nvarchar(40),
@IDProizvodjaca nvarchar(40))
AS
BEGIN
Insert into Oprema(Sifra, Naziv, IDProizvodjaca) values (@Sifra, @Naziv,
@IDProizvodjaca)
END
GO
CREATE PROCEDURE [DajBrojOpremeZaProizvodjaca]
AS
Select OPREMA.Sifra, OPREMA.Naziv, Proizvodjac.Naziv as NazivProizvodjaca,
Proizvodjac.ID as SifraProizvodjaca from OPREMA inner join PROIZVODJAC
on OPREMA.IdZvanja = PROIZVODJAC.Sifra
GO
CREATE PROCEDURE [DodajNovuOpremu](
@Sifra nvarchar(40),
@Naziv nvarchar(40),
@TipRobe nvarchar(40),
@NabavnaCena nvarchar(40),
@Kolicina nvarchar(40),
@Garancija nvarchar(40),
@IDProizvodjaca nvarchar(40))
AS
BEGIN
Insert into Oprema(Sifra, Naziv, Tip Robe, Nabavna Cena, Kolicina, Garancija,
IDProizvodjaca) values (@Sifra, @Naziv, @Tip Robe, @Nabavna, @Kolicina,
@Garancija, @IDProizvodjaca)
END
GO
CREATE PROCEDURE [IzmeniOpremu](
@StaraSifra nvarchar(40),
@Sifra nvarchar(40),
@Kolicina nvarchar(40))
AS
BEGIN
Update OPREMA set Sifra=@Sifra, Kolicina=@Kolicina where
Sifra=@StaraSifra
53 | P a g e
END
GO
PROIZVODJAC:
CREATE PROCEDURE [DajProizvodjacaPoNazivu]
( @NazivProizvodjaca nvarchar(40)
)
AS
select * from PROIZVODJAC where Proizvodjac.Naziv = @NazivProizvodjaca
GO
CREATE PROCEDURE [DajProizvodjacaPoID]
( @IDProizvodjaca nvarchar(40)
)
AS
select * from PROIZVODJAC where Proizvodjac.ID = @IDProizvodjaca
GO
CREATE PROCEDURE [DajSveProizvodjace]
AS
select * from Proizvodjac
GO
CREATE PROCEDURE [DajProizvodjacaPoNazivu]
( @NazivProizvodjaca nvarchar(40)
)
AS
select * from PROIZVODJAC where PROIZVODJAC.Naziv =
@NazivProizvodjaca
GO
CREATE PROCEDURE [DodajNovogProizvodjaca]
(
@ID nvarchar(10),
@Naziv nvarchar(40)
)
AS
BEGIN
Insert into PROIZVODJAC(ID, Naziv) values (@ID, @Naziv)
END
GO
54 | P a g e
CREATE PROCEDURE [ObrisiProizvodjaca](
@ID nvarchar(10))
AS
BEGIN
Delete from PROIZVODJAC where ID=@ID
END
GO
8.2. Tabelarni prikaz viseslojne arhitekture softvera sa obrazloženjem im-
plementiranih podslojeva
(Tabela 4. Opis implementacije preko podslojeva)
GLAVNI SLOJ MVC
dizajn
patern
PODSLOJ TEHNOLOŠKA IMPLE-
MENTACIJA
PREZENTACIONI
SLOJ
View Korisnički interfejs Ekranska forma
CONTROL Klase prezentacione
logike
Kod za pripremu podataka
i prikaz na ekranskoj formi
SERVISNI SLOJ Web servis Pristup podacima sa servi-
sa, klasa Web servis
SLOJ POSLOVNE
LOGIKE MODEL Poslovni objekti Proizvođac, roba
Poslovna pravila Ograničenja za garanciju
SLOJ ZA RAD SA
PODACIMA
MODEL Rad sa relacionom
bazom podataka
- Klase modela
i repository
za rad sa
podacima iz
tabela
relacione
baze
podataka
- DBMS sa
bazom
podataka
Klase podataka
Rad sa drugim
formatima podataka
– XML, XLS, JSON
XML fajlovi sa ograničen-
jima
55 | P a g e
8.3. Delovi koda sa objašnjenjima
Deo koda za prikljucivanje biblioteka klasa
Prikljucivanje standardnih biblioteka klasa:
using System;
using System.Data;
using System.Windows.Forms;
Prikljucivanje sopstvenih biblioteka klasa:
using KlasePodataka;
using KlaseMapiranja.
using PoslovnaLogika;
using PrezentacionaLogika;
8.3.1. Sloj podataka
Deo koda za konekciju na bazu podataka:
namespace KorisnickiInterfejs { public static class Parametri { public static string stringKonekcije = "Data Source=FULLTILT; Initial Catalog=EvidencijaOpreme; Integrated
Security=True;"; public static string putanjaXML = Application.StartupPath + "\\eksport.XML"; public static string stringKonekcijeEnt = "metada-
ta=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection
string="Data Source=Data Source= FULLTILT\\GAMORA;Initial Catalog=EvidencijaOpreme;Integrated
Securi-
ty=True;multipleactiveresultsets=True;App=EntityFramework"providerName=System.Data.EntityClient"; } }
Deo koda iz klase clsOprema:
namespace KlasePodataka { public class clsOprema { private string pSifra; private string pNaziv; private string pIDProizvodjaca; private clsProizvodjac objProizvodjac;
public clsProizvodjac ObjProizvodjac
56 | P a g e
{ get { return objProizvodjac; } set { objProizvodjac = value; } }
public string Sifra { get { return pSifra; } set { pSifra = value; } }
public string Naziv { get { return pNaziv; } set { pNaziv = value; } }
public string IDProizvodjaca { get { return pIDProizvodjaca; } set { pIDProizvodjaca = value; } } public clsOprema() { pSifra = ""; pNaziv = ""; pIDProizvodjaca = ""; } } }
Deo koda iz klase clsOpremaDB:
public bool DodajNovuOpremu(clsOprema objNovaOprema)
{
int brojSlogova = 0;
SqlConnection Veza = new SqlConnection(pStringKonekcije);
Veza.Open();
SqlCommand Komanda = new SqlCommand("DodajNovuOpremu", Veza);
Komanda.CommandType = CommandType.StoredProcedure;
Komanda.Parameters.Add("@Sifra", SqlDbType.NVarChar).Value = objNovaOprema.Sifra;
Komanda.Parameters.Add("@Naziv", SqlDbType.NVarChar).Value = objNovaOprema.Naziv;
Komanda.Parameters.Add("@TipRobe", SqlDbType.NVarChar).Value = objNovaOprema.TipRobe;
Komanda.Parameters.Add("@Kolicina", SqlDbType.NVarChar).Value = objNovaOprema.Kolicina;
Komanda.Parameters.Add("@NabavnaCena", SqlDbType.NVarChar).Value = objNovaOpre-
ma.NabavnaCena;
Komanda.Parameters.Add("@Garancija", SqlDbType.NVarChar).Value = objNovaOprema.Garancija;
Komanda.Parameters.Add("@NazivProizvodjaca", SqlDbType.NVarChar).Value = objNovaOpre-
ma.NazivProizvodjaca;
brojSlogova = Komanda.ExecuteNonQuery();
Veza.Close();
Veza.Dispose();
57 | P a g e
return (brojSlogova > 0);
}
public bool IzmeniOpremu(string SifraStareOpreme, clsOprema objNovaOprema)
{
int brojSlogova = 0;
SqlConnection Veza = new SqlConnection(pStringKonekcije);
Veza.Open();
SqlCommand Komanda = new SqlCommand("IzmeniOpremu", Veza);
Komanda.CommandType = CommandType.StoredProcedure;
Komanda.Parameters.Add("@StaraSifra", SqlDbType.NVarChar).Value = SifraStare-
Opreme;
Komanda.Parameters.Add("@Sifra", SqlDbType.NVarChar).Value = objNovaOpre-
ma.Sifra;
Komanda.Parameters.Add("@Kolicina", SqlDbType.NVarChar).Value = objNovaOprema.Kolicina;
brojSlogova = Komanda.ExecuteNonQuery();
Veza.Close();
Veza.Dispose();
return (brojSlogova > 0);
}
Deo koda iz klase clsProizvodjacDB
public class clsProizvodjacDB
{
private string pStringKonekcije;
public string StringKonekcije
{
get
{
return pStringKonekcije;
}
set
{
if (this.pStringKonekcije != value)
this.pStringKonekcije = value;
}
}
// konstruktor
public clsProizvodjacDB(string NoviStringKonekcije)
{
pStringKonekcije = NoviStringKonekcije;
}
public DataSet DajSveProizvodjace()
{
DataSet dsPodaci = new DataSet();
58 | P a g e
SqlConnection Veza = new SqlConnection(pStringKonekcije);
Veza.Open();
SqlCommand Komanda = new SqlCommand("DajSveProizvodjace", Veza);
Komanda.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = Komanda;
da.Fill(dsPodaci);
Veza.Close();
Veza.Dispose();
return dsPodaci;
}}
public bool DodajNovogProizvodjaca(clsProizvodjac objNoviProizvodjac)
{
int brojSlogova = 0;
SqlConnection Veza = new SqlConnection(pStringKonekcije);
Veza.Open();
SqlCommand Komanda = new SqlCommand("DodajNovogProizvodjaca", Veza);
Komanda.CommandType = CommandType.StoredProcedure;
Komanda.Parameters.Add("@ID", SqlDbType.Char).Value = objNoviProizvodjac.ID;
Komanda.Parameters.Add("@Naziv", SqlDbType.NVarChar).Value = objNoviProizvodjac.Naziv;
brojSlogova = Komanda.ExecuteNonQuery();
Veza.Close();
Veza.Dispose();
return (brojSlogova > 0);
}
public bool ObrisiProizvodjaca(string SifraProizvodjacaZaBrisanje)
{
int brojSlogova = 0;
SqlConnection Veza = new SqlConnection(pStringKonekcije);
Veza.Open();
SqlCommand Komanda = new SqlCommand("ObrisiProizvodjaca", Veza);
Komanda.CommandType = CommandType.StoredProcedure;
Komanda.Parameters.Add("@ID", SqlDbType.Char).Value = SifraProizvodjacaZaBrisanje;
brojSlogova = Komanda.ExecuteNonQuery();
Veza.Close();
Veza.Dispose();
return (brojSlogova > 0);
}
public bool IzmeniProizvodjaca(string StariID, clsProizvodjac objNoviProizvodjac)
{
// LOKALNE PROMENLJIVE UVEK NA VRHU
int brojSlogova = 0;
// 1. varijanta - skolska
59 | P a g e
//bool uspehSnimanja= false;
SqlConnection Veza = new SqlConnection(pStringKonekcije);
Veza.Open();
SqlCommand Komanda = new SqlCommand("IzmeniProizvodjaca", Veza);
Komanda.CommandType = CommandType.StoredProcedure;
Komanda.Parameters.Add("@StaraSifra", SqlDbType.Char).Value = StariID;
Komanda.Parameters.Add("@Sifra", SqlDbType.Char).Value = objNoviProizvodjac.ID;
Komanda.Parameters.Add("@Naziv", SqlDbType.NVarChar).Value = objNoviProizvodjac.Naziv;
brojSlogova = Komanda.ExecuteNonQuery();
Veza.Close();
Veza.Dispose();
return (brojSlogova > 0);
}
8.3.2. Sloj poslovne logike
Deo koda iz PoslovneLogike:
public class clsPoslovnaPravila
{
private string pStringKonekcije
public clsPoslovnaPravila(string NoviStringKonekcije)
{
pStringKonekcije = NoviStringKonekcije;
}
public int DajDuzinuGarancije(string NazivProizvodjaca, string TipOpreme)
{
// instanciranje web servisa
Garancija.Garancija objWebServisGarancija = new Garancija.Garancija();
return objWebServisGarancija.DajDuzinuGarancije(NazivProizvodjaca, TipOpreme); }
}
8.3.3. Sloj servisa
Deo koda iz WebServisa:
[WebMethod]
public int DajDuzinuGarancije(string pomNazivProizvodjaca, string pomTipRobe)
{
int DuzinaGarancije = 0;
DataSet dsOgranicenja = new DataSet();
dsOgranicenja.ReadXml(Server.MapPath("~/") + "XML/OgranicenjaGarancije.XML");
// filtriranje dataset-a
DataRow[] result = dsOgranicenja.Tables[0].Select("Proizvodjac='" + pomNazivProizvodjaca + "' AND Ti-
pRobe='" + pomTipRobe + "'");
60 | P a g e
DuzinaGarancije = int.Parse(result[0].ItemArray[2].ToString());
return DuzinaGarancije;
}
8.3.4. Prezentacioni sloj
8.3.4.1. Prezentaciona logika
Deo koda za snimanje podataka u tabelu u bazi podataka iz prezentacione logike:
public bool SnimiPodatke() { bool uspehSnimanja = false;
clsOpremaDB objOpremaDB = new clsOpremaDB(pStringKonekcije);
clsOprema objNovaOprema = new clsOprema(); objNovaOprema.Sifra = pSifra; objNovaOprema.Naziv = pNaziv; objNovaOprema.IDProizvodjaca = pIDProizvodjaca;
clsProizvodjac objProizvodjac = new clsProizvodjac();
clsProizvodjacDB objProizvodjacDB = new clsProizvodjacDB(pStringKonekcije); objProizvodjac.Naziv = objProizvodjacDB.DajNazivProizvodjacaPremaID(pIDProizvodjaca); objProizvodjac.ID = pIDProizvodjaca;
objNovaOprema.ObjProizvodjac = objProizvodjac;
uspehSnimanja = objOpremaDB.DodajNovuOpremu(objNovaOprema);
return uspehSnimanja;}
Deo koda za dobijanje vrednosti garancije iz poslovne logike: public int KojeJeTrajanjeGarancije(string NazivProizvodjaca, string TipRobe)
{
int TrajanjeGarancije = 0;
clsPoslovnaPravila objPoslovnaPravila = new clsPoslovnaPravila(pStringKonekcije);
TrajanjeGarancije = objPoslovnaPravila.DajDuzinuGarancije(NazivProizvodjaca, TipRobe);
return TrajanjeGarancije;
}
Deo koda za validaciju unetih podataka:
bool JedinstvenZapis = objFormaOpremaUnos.DaLiJeJedinstvenZapis();
string porukaStatusaSnimanja = "";
if (SvePopunjeno)
{
if (JedinstvenZapis)
{
61 | P a g e
objFormaOpremaUnos.SnimiPodatke();
porukaStatusaSnimanja = "USPESNO SNIMLJENI PODACI!";
}
else
{
porukaStatusaSnimanja = "VEC POSTOJI OPREMA SA ISTOM SIFROM!";
}
}
else
{
// priprema teksta poruke o gresci
porukaStatusaSnimanja = "NISU SVI PODACI POPUNJENI!";
txbSifra.Focus();
}
lblStatus.Text = porukaStatusaSnimanja;
}
Deo koda za proveru jedinstvenosti unosa:
public bool DaLiJeJedinstvenZapis()
{
bool JedinstvenZapis = false;
DataSet dsPodaci = new DataSet();
clsOpremaDB objOpremaDB = new clsOpremaDB(pStringKonekcije);
dsPodaci = objOpremaDB.DajOpremuPoSifri(pSifra);
if (dsPodaci.Tables[0].Rows.Count == 0)
{
JedinstvenZapis = true;
}
else
{
JedinstvenZapis = false;
}
return JedinstvenZapis;
}
62 | P a g e
8.3.4.2. Korisnički interfejs
Deo koda za pražnjenje kontrola:
private void IsprazniKontrole() { txtID.Text = ""; txtNazivOpreme.Text = ""; txtProizvodjac.Text = ""; txtTehnickeKarakteristike.Text = ""; }
Deo koda za aktiviranje kontrola:
private void AktivirajKontrole() { txtID.Enabled = true; txtNazivOpreme.Enabled = true; txtProizvodjac.Enabled = true; txtTehnickeKarakteristike.Enabled = true; }
Deo koda za deaktiviranje kontrola:
private void DeaktivirajKontrole() { txtID.Enabled = false; txtNazivOpreme.Enabled = false; txtProizvodjac.Enabled = false; txtTehnickeKarakteristike.Enabled = false; }
Deo koda za odustajanje od unosa:
protected void btnOdustani_Click(object sender, EventArgs e) { Response.Redirect("Default.aspx");}
Deo koda za filtriranje:
public DataSet DajOpremuPoNazivu(string NazivOpreme) { DataSet dsPodaci = new DataSet();
SqlConnection Veza = new SqlConnection(pStringKonekcije); Veza.Open(); SqlCommand Komanda = new SqlCommand("DajOpremuPoNazivu", Veza); Komanda.CommandType = CommandType.StoredProcedure; Komanda.Parameters.Add("@OpremaNaziv", SqlDbType.NVarChar).Value = NazivOpreme; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = Komanda; da.Fill(dsPodaci); Veza.Close(); Veza.Dispose();
63 | P a g e
return dsPodaci; }
Deo koda za prikazivanje svih podataka u tabeli:
protected void btnSvi_Click(object sender, EventArgs e) { NapuniGrid(objFormaOpremaSpisak.DajPodatkeZaGrid("")); }
Deo koda za dobijanje trajanja garancije na osnovu tipa robe i proizvođača:
protected void ddlTipRibe_SelectedIndexChanged(object sender, EventArgs e)
{
string Proizvodjac = ddlProizvodjac.Text;
string TipRobe = ddlTipRobe.Text;
// prezentacionoj logici se obratimo sa zahtevom
lblGarancija.Text = objFormaOpremaUnos.KojeJeTrajanjeGarancije(Proizvodjac, TipRobe).ToString();
}
Deo koda za snimanje i validaciju opreme pozivanjem metode iz prezentacione logike:
protected void btnSnimi_Click(object sender, EventArgs e)
{
objFormaOpremaUnos.Sifra = txbSifra.Text;
objFormaOpremaUnos.Naziv = txbNaziv.Text;
objFormaOpremaUnos.Kolicina = txbKolicina.Text;
objFormaOpremaUnos.NabavnaCena = txbNabavnaCena.Text;
objFormaOpremaUnos.NazivProizvodjaca = ddlProizvodjac.Text;
objFormaOpremaUnos.Garancija = lblGarancija.Text;
objFormaOpremaUnos.TipRobe = ddlTipRobe.Text;
bool SvePopunjeno = objFormaOpremaUnos.DaLiJeSvePopunjeno();
bool JedinstvenZapis = objFormaOpremaUnos.DaLiJeJedinstvenZapis();
string porukaStatusaSnimanja = "";
if (SvePopunjeno)
{
if (JedinstvenZapis)
{
objFormaOpremaUnos.SnimiPodatke();
porukaStatusaSnimanja = "USPESNO SNIMLJENI PODACI!";
}
else
{
porukaStatusaSnimanja = "VEC POSTOJI OPREMA SA ISTOM SIFROM!";
}
}
else
{
porukaStatusaSnimanja = "NISU SVI PODACI POPUNJENI!";
txbSifra.Focus();
}
lblStatus.Text = porukaStatusaSnimanja;}
64 | P a g e
Deo koda za izmenu opreme pozivanjem metode iz prezentacione logike:
protected void btnIzmeni_Click(object sender, EventArgs e)
{
string StariID;
StariID = txbStaraSifra.Text;
objNovaOprema.Sifra = txbSifra.Text;
objNovaOprema.Kolicina = txbKolicina.Text;
objFormaOpremaUnos.IzmeniOpremu(StariID, objNovaOprema);
lblStatus.Text = "Izmenjeno";
}
8.3.5. Sadržaj XML-a
XML fajl se nalazi u web servisu i sam web servis ga koristi za dobijanje informacije o trajanju
garancije. Postoje 3 polja: tip robe, proizvođač i garancija. Nakon sto se odabere odgovarajući tip
robe i proizvođač u korisničkom interfejsu, web servis uzima trajanje garancije i prosleđuje
vrednost dalje.
<?xml version="1.0" standalone="yes"?>
<SpisakOgranicenja>
<OgranicenjeGarancije>
<TipRobe>Monitor</TipRobe>
<Proizvodjac>Samsung</Proizvodjac>
<Garancija>5</Garancija>
</OgranicenjeGarancije>
<OgranicenjeGarancije>
<TipRobe>Mis</TipRobe>
<Proizvodjac>Sensei</Proizvodjac>
<Garancija>3</Garancija>
</OgranicenjeGarancije>
<OgranicenjeGarancije>
<TipRobe>Laptop</TipRobe>
<Proizvodjac>Acer</Proizvodjac>
<Garancija>2</Garancija>
</OgranicenjeGarancije>
<OgranicenjeGarancije>
<TipRobe>Tastatura</TipRobe>
<Proizvodjac>RedDragon</Proizvodjac>
<Garancija>4</Garancija>
</OgranicenjeGarancije>
<OgranicenjeGarancije>
<TipRobe>Kuciste</TipRobe>
<Proizvodjac>Aoc</Proizvodjac>
<Garancija>7</Garancija>
</OgranicenjeGarancije>
</SpisakOgranicenja>
65 | P a g e
9. Zaključak
Cilj ovog diplomskog rada je bio da se na primeru razvoja web aplikacije za evi-
dentiranje prikaze razvoj softvera sa višeslojnom arhitekturom. Pojedinačni slučaj
u ovom radu uzima prodavnicu računarske opreme, iako bi ovakav tip aplikacije
bio koristan u bilo kojoj branši prodajnog sektora.
Prikazane su teoretske osnove koje se odnose na razvoj web aplikacija, višeslojnu
arhitekturu, kao i opis tehnologije .NET (C#, ASP.NET), SQL i IIS servis. Kombi-
nacijom navedenih tehnologija, došli smo do realizovanja primera jedne kom-
pleksne višeslojne web aplikacije.
Dalji razvoj aplikacije bi uključio online poručivanje, plaćanje direktno sa računa
fakulteta i recikliranje (uklanjanje) nepotrebne opreme. Takođe, moguće je
obuhvatiti ostale delove robnog knjigovodstva, kao sto je porez, amortizacija,
troškovi transporta, marže, rabat itd. Pored toga, tu su uvek neophodne validacije
prilikom unošenja i izmena, koji su neizostavni deo svake aplikacije.
Savremeni trendovi prate razvoj aplikacija, ali isto tako i razvoj tehnologija. Kod
višeslojnih aplikacija akcenat je na brzini razvoja, kvalitetu koda i omogućavanju
timskog rada. Timski rad je ključni deo savremenog programiranja i rada na ve-
likim projektima, jer je aplikacija uvek pouzdanija, više puta testirana i daleko
kvalitetnija.
66 | P a g e
10. Literatura
Korišćena literature za realizaciju ovog seminarskog rada:
[1] Standardni web sajt Microsoft MSDN: https://msdn.microsoft.com/en-
us/default.aspx
[2] Skripte(materijal) sa vezbi predmeta Softversko inzenjerstvo II
[3] https://programirajmozajedno.wordpress.com/2015/01/09/kratak-uvod-u-world-
wide-web-i-web-aplikacije/
[4] https://dusanmilosevic.com/agilna-metodologija/
[5] https://blog.capterra.com/the-ultimate-guide-to-agile-software-
development/agile-methodology/
[6] Zdravko Ivanković i Dejan Lacmanović, Softversko inženjerstvo 2 (skripta),
Tehnički fakultet Mihajlo Pupin, Zrenjanin
[7] https://startit.rs/dizajn-paterni-mvc/
[8] https://www.slideshare.net/taraslytvyn/testing-web-services
[9] http://www.manuelradovanovic.com/2015/11/uvod-u-c-programski-jezik.html
[10] http://www.asmracunovodstvo.rs/robno-materijalno-knjigovodstvo/
[11] http://www.netkontakt.biz/nkm_materijalno.html
[12] https://www.softek.rs/knjigovodstveni-programi/program-za-
knjigovodstvo/materijalno-knjigovodstvo/
[13] http://www.softkom.rs/program-za-knjigovodstvo/
[14] http://www.fiposoft.com/home/
[15] http://orbnerd.com/2018/01/23/asp-net-uncovered/
[16] https://www.mojafirma.rs/baza-znanja/zalihe-robe-i-robno-knjigovodstvo/
[17] http://www.abcsoft.co.rs/programi_rez.html