66
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

DIPLOMSKI RAD Tema: Višeslojna web aplikacija za ... · Sledi programiranje koje rezultuje radnom verzijom programa. Program se tada testira i ispravljaju mu se greške, da bi potom

  • Upload
    others

  • View
    35

  • Download
    2

Embed Size (px)

Citation preview

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].

15 | P a g e

Slika 9. Razlike između SOAP i REST [6]

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

31 | P a g e

Slika 20. BPM Model nabavke i prodaje na primeru prodavnice računarske opreme

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