84
UNIVERZITET U NOVOM SADU TEHNIĈKI FAKULTET «MIHAJLO PUPIN» ZRENJANIN MASTER STUDIJE NASTAVNI PREDMET: INTERNET PROGRAMIRANJE SEMINARSKI RAD Tema: Softverska podrška evidenciji i praćenju realizacije radnih obaveza nastavnog osoblja fakulteta (implementacija: Java programski jezik) NASTAVNIK: STUDENT: Prof. dr Dušan Malbaški Ljubica Kazi Doc. Dr Branko Markoski Zrenjanin, Jun 2009.

UNIVERZITET U NOVOM SADU

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

UNIVERZITET U NOVOM SADUnastavnog osoblja fakulteta
Doc. Dr Branko Markoski
Opis problema
Analiza problema
Realizovati program putem kojeg e se ilustrovati elementi programiranja u programskom jeziku Java.
METODE I ALATI KORIŠENI U REALIZACIJI SEMINARSKOG RADA
U realizaciji seminarskog rada korišene su sledee metode, jezici i alati:
POSLOVNO MODELIRANJE business process model Sybase Power Designer 10
MODELIRANJE SOFTVERA UML Sybase Power Designer 10
MODELIRANJE PODATAKA Konceptualni model
OPIS PROBLEMA
Problem organizacije rada nastavnog osoblja na fakultetu odnosi se pre svega na organizaciju osnovnih i dodatnih aktivnosti
nastavnika i saradnika fakulteta.
1. NASTAVA - Nastavne aktivnosti:
a. Projekti
c. Ueše u radu naunih i strunih organizacija i manifestacija
3. TRANSFER - Aktivnosti strunog rada
a. Projekti
b. Seminari
1. mnoštvu zaposlenih
3. mnoštvu nalogodavaca radnih zadataka
4. mnoštvu obaveza svakog zaposlenog
5. izmenama i dopunama spiska potrebnih aktivnosti
6. razliitim nivoima detaljnosti opisa pri zadavanju zadataka
7. razliitim osobinama aktivnosti – u smislu frekventnosti-periodinosti itd.
8. istovremenim uešem zaposlenih u više radnih aktivnosti
9. neformalnoj formi zadavanja radnih aktivnosti (usmeno)
ZNAAJ programa za evidenciju obaveza nastavnog osoblja fakulteta:
1. potreba da se dokumentuju i prate zaduenja zaposlenih, kao i odgovornosti nalogodavaca (nadreenih) i zaposlenih
2. potreba da se upravlja izvršavanjem aktivnosti – da se prati njihovo zadavanje, izvršavanje i kvalitet uraenog posla....
3. potreba da se poboljša kvalitet uraenog posla sagledavanjem realnog optereenja nastavnog osoblja radnim obavezama i
pravilnijim rasporeivanjem radnih zadataka, u skladu sa optereenjem, kvalitetom prethodno realizovanih aktivnosti i
kompetentnošu.
4
OPŠTI OPIS TOKA IZVRŠAVANJA AKTIVNOSTI
Svaki posao, odnosno poslovni proces moe se organizovati kroz projekat, koji prethodno treba da je opisan na uobiajeni nain za
struktuiranje projekata, meu kojima su najvaniji elementi: ciljevi, resursi i aktivnosti. Povodom realizacije projekta, zaposleni
sklapa ugovor o radu kojim se propisuje opis aktivnosti koje treba da obavlja. Pri tom odreen je i rukovodilac (nadreeni –
zaposleni) koji zadaje radne zadatke i kontroliše njihovo izvršavanje. Radne obaveze mogu biti periodine i kontinuirane tokom cele
godine ili povremene, u skladu sa povremenim dogaajima koji ih iniciraju. Radna obaveza je opisana dokumentom koji nadreeni
dostavlja zaposlenom, a on je duan da te obaveze izvršava u predvienom terminu, periodinim terminima ili predvienom roku i
da o izvršavanju obaveza vodi evidenciju, koju dostavlja na uvid nadreenom radi evaluacije izvršenog posla. Po izvršenju obaveza
nadreeni izvršava uvid u rezultate realizovanih aktivnosti.
Što se tie obaveza nastavnog osoblja na fakultetu, osnovne aktivnosti opisane su sledeom tabelom:
KLJUNI ELEMENTI POSLOVNOG PROCESA
Obaveza – frekvencija, kategorija (nastava, nauka), podaci o zadavanju, izvršenju i evaluaciji kvaliteta
Znaaj obaveze, prioritet obaveze, hijerarhijsko ureenje aktivnosti u okviru obaveze, nivo detaljnosti aktivnosti i opisa
aktivnosti
Obaveza, aktivnosti u okviru obaveze, opis aktivnosti (opis radne operacije, rok izrade, frekvencija)
Obaveza kao ugovor, usklaenost obaveza koje se izvršavaju istovremeno, prioriteti
Pregled obaveza i aktivnosti, rasporeivanje aktivnosti
OBAVEZA FREKVENCIJA RUKOVODILAC
NASTAVA - Nastavne aktivnosti:
Sef katedre – nastavniku
a. Projekti Povremeno Rukovodilac projekta –
ucesniku na projektu
Prodekan za nauku –
rukovodiocu na projektu
Dekan – prodekanu za
institucijama
i manifestacija
a. Projekti Povremeno
predavau na seminaru
7. OSTALE AKTIVNOSTI:
katedre
Modelom poslovnog domena opisujemo poslovni kontekst aktivnosti koje se odvijaju u okviru organizacionog sistema. Postoji vise
pristupa i vrsta modela koji se koriste u oblasti poslovnog modeliranja. U ovom primeru koristimo:
Dijagram klasa - radi opisa kljunih pojmova datog problema naješe se ve u fazi poslovnog modeliranja izrauje
jednostavan dijagram klasa, kojim se predstavljaju kljuni entiteti i procesi datog problema.
BPM – business process model - šema BPM modela predstavlja pregledan prikaz kljunih poslovnih aktivnosti, u skladu sa
prethodno datim tekstualnim opisom toka poslovnih aktivnosti.
Pored ovih pristupa, koristi se i dijagram sluajeva korišenja, gde se sluajevi korišenja odnose na atomarne poslovne aktivnosti u
interakciji korisnika i sistema. U ovom radu dijagram sluajeva korišenja se koristi u svrhu predstavljanja softverskih, a ne
poslovnih funkcionalnih jedinica.
0..1
- ENTITET: rukovodilac, zaposleni, radni zadatak
- PROCES: posao, aktivnosti realizacije
- POSLOVNA PRAVILA
Dokumenti opisuju karakteristike odnosa izmeu kljunih entiteta i zato su predstavljeni kao association class – klase koje opisuju
karakteristike veze izmeu drugih klasa. Na ovom dijagramu izostavljeni su atributi, a veze izmeu entiteta postavljene su
fleksibilno.
6
1. vertikalni odeljci (organization unit) koji imaju nazive u skladu sa osnovnim radnim ulogama procesa: zaposleni i
rukovodilac. Na ovaj nain predstavljena je podela odgovornosti radnih aktivnosti i odgovornosti nad podacima.
2. Ovali (activity) – predstavlja aktivnosti poslovnog procesa.
3. Skladišta podataka (resources) – predstavljaju skupove podataka koji nastaju i koriste se u toku aktivnosti.
4. Tok podataka (flow) – isprekidana linija, koja predstavlja protok podataka u skladiste i iz skladista podataka u toku
izvršavanja aktivnosti
ZAPOSLENI RUKOVODILAC
<<podaci o opisu ugovorenih aktivnosti na projektu>>
<<radni nalog zaposlenog za izvrsenje odredjene aktivnosti>>
<<podaci o radnom nalogu>>
<<podaci o izvrsenoj aktivnosti>>
<<podaci o rezultatima rada>>
<<podaci o nastavnom osoblju>>
<<podaci o uspesnosti projekta>>
sklapa ugovor UGOVOR
Angazuje zaposlenog za realizaciju aktivnosti PROJEKTA Informise se o aktivnostima na PROJEKTU
Zadaje radne zadatke - otvara RADNI NALOG
Izvrsava radni zadatak i belezi rezultate aktivnosti RADNOG NALOGA
Evidentira zavrsetak svih aktivnosti RADNOG NALOGA
Kontrolise rezultate u toku izrade
Procenjuje kvalitet uradjenih rezultata
ZAPOSLENI
7
U nastavku je dat opis strukture podataka prikazanih elemenata dijagrama «business process modela» opisom kroz navoenje
elementarnih podataka. Skup svih elementarnih podataka zajedno sa opisom njihovih meusobnih odnosa u sastavu skladišta
podataka i tokova podataka ini renik podataka ovog modela. Na ovaj nain pripremljen je prikaz informacionih potreba datog
poslovnog procesa, na osnovu ega se dalje razvijaju odgovarajui modeli podataka kao njihova podrška.
ELEMENT NAZIV
Podaci o sklapanju ugovora
Podaci o nastavnom osoblju
Podaci o radnom nalogu
Podaci o kvalitetu realizovanog radnog naloga
Podaci o izvršenoj aktivnosti
Podaci o rezultatima rada
Podaci o uspesnosti projekta
U nastavku je data struktura navedenih elemenata dijagrama, koju ine elementarni podaci:
SKLADIŠTE PODATAKA
PROJEKAT Oznaka projekta, naziv, oblast, opis, datum pocetka, datum planiranog zavrsetka,
rukovodilac, opis realizovanih rezultata, uspesnost zavrsetka, datum zavrsetka, datum
izvestaja, opis izvrsenih aktivnosti, nivo kvaliteta
UGOVOR Oznaka ugovora, Oznaka projekta, JMBG zaposlenog, datum pocetka angazovanja,
datum zavrsetka angazovanja, opis zaduzenja, radna uloga na projektu
ZAPOSLENI JMBG zaposlenog, prezime, ime, radno mesto, zvanje, rukovodeca uloga
RADNI NALOG Oznaka radnog naloga, Oznaka ugovora, JMBG zaposlenog, datum pocetka
angazovanja, datum zavrsetka angazovanja, opis zaduzenja, datum zavrsetka svih
aktivnosti radnog naloga, opis kvaliteta realizacije radnog naloga, nivo kvaliteta
REALIZOVANE
AKTIVNOSTI
aktivnosti
izvestaja, opis izvrsenih aktivnosti
Novi projekat Oznaka projekta, naziv, oblast, opis, datum pocetka, datum zavrsetka, rukovodilac
Podaci o projektu Oznaka projekta, naziv, oblast, opis, datum pocetka, datum zavrsetka, rukovodilac
Podaci o angaovanju
zaposlenog na projektu
angazovanja, opis zaduzenja, radna uloga na projektu
Podaci o sklapanju ugovora Oznaka ugovora, Oznaka projekta, JMBG zaposlenog
Podaci o nastavnom osoblju JMBG zaposlenog, prezime, ime, radno mesto, zvanje, rukovodeca uloga
Podaci o opisu ugovorenih
Radni nalog zaposlenog za
angazovanja, datum zavrsetka angazovanja, opis zaduzenja
Podaci o radnom nalogu Oznaka radnog naloga, Oznaka ugovora, JMBG zaposlenog, datum pocetka
angazovanja, datum zavrsetka angazovanja, opis zaduzenja
Podaci o završetku svih
Podaci o kvalitetu Oznaka radnog naloga, opis kvaliteta realizacije radnog naloga, nivo kvaliteta
8
aktivnosti
Podaci o rezultatima rada Oznaka aktivnosti, Oznaka radnog naloga, datum izvrsenja aktivnosti, opis izvrsene
aktivnosti
aktivnosti
datum izvestaja, opis izvrsenih aktivnosti, nivo kvaliteta
Novi izveštaj Oznaka projekta, opis realizovanih rezultata, uspesnost zavrsetka, datum zavrsetka, nivo
kvaliteta
U ovom radu su, radi jednostavnosti, izostavljen prikaz strukture toka podataka i skladišta podataka sa stanovišta meusobnih
odnosa elementarnih podataka, a takoe i opis samih elementarnih podataka (domen vrednosti i druge karakteristike). Detaljan
prikaz osobina elementarnih podataka dat je u odeljku MODELI PODATAKA.
9
POSLOVNA AKTIVNOST SOFTVERSKA PODRŠKA – funkcionalni
elementi
UESNIK
izvršavanja – definisanje
Angaovanje zaposlenog na projektu Prikaz podataka o zaposlenima
Auriranje podataka o angaovanju zaposlenog na
projektu
Rukovodilac
zaposleni angaovan
projektu
Zaposleni
projekta
rukovodilac odgovoran
zaposlenima na projektu
uesnika projekta
projekta
rezultate aktivnosti RADNOG
Auriranje podataka o rezultatu aktivnosti radnog
naloga
Zaposleni
Kontroliše rezultate u toku izrade Prikaz rezultata aktivnosti radnih naloga
Prikaz rezultata zaposlenih
Prikaz rezultata projekta
radnog naloga
NALOGA
Rukovodilac
projekat
Rukovodilac
projekta
10
U nastavku je dat prikaz dijagrama sluajeva korišenja koji predstavljaju funkcionalne karakteristike budueg softverskog rešenja.
Sluajevi korišenja su grupisani prema uesnicima i na ovaj nain su predstavljeni na pojedinanim dijagramima.
Na prvom dijagramu predstavljamo uesnike i njihov meusobni odnos, u smislu mogunosti ueša u pojedinim sluajevima
korišenja:
Zaposleni
Rukovodilac
Sekretar
Administrator
Na ovom dijagramu je prikazana hijerarhija uesnika, u smislu «nasleivanja» raspoloivih funkcionalnih osobina softvera, odnosno
mogunosti ueša u funkcionisanju sistema, korišenjem raspoloivih opcija. Naime, zaposleni ima najmanje mogunosti, dok
administrator ima najviše mogunosti. U nastavku su prikazani sluajevi korišenja koji se odnose redom na sve profile korisnika,
pri emu profil korisnika koji nasleuje, dobija mogunost korišenja svih opcija prethodnika u ovom nizu nasleivanja.
11
<<extend>>
<<extend>>
<<extend>>
<<extend>>
Tabelarni prikaz podataka o projektima na kojima je zaposleni angazovan
Prikaz opisa pojedinacnog projekta Prikaz podataka o opisu obaveza zaposlenog na projektu
Azuriranje podataka o prihvatanju ucesca na projektu
Tabelarni prikaz radnih naloga zaposlenog
Azuriranje podataka o rezultatu realizacije radnog naloga Azuriranje podataka o zavrsetku realizacije radnog naloga
Dijagram sluajeva korišenja «Zaposleni»
Stampanje radnog naloga
Stampanje
Tabelarni prikaz podataka o projektima gde je dati rukovodilac odgovoran
Prikaz podataka o odabranom projektu
Tabelarni prikaz podataka o angazovanim zaposlenima na projektu
Azuriranje podataka o radnom nalogu odabranog zaposlenog
Prikaz rezultata radnog naloga
Azuriranje podataka o realizacij i projekta
Dijagram sluajeva korišenja «Rukovodilac»
Dijagram sluajeva korišenja «Administrator»
MODELI PODATAKA
Na osnovu renika podataka poslovnog domena, uraen je najpre konceptualni model podataka (odgovara ER modelu podataka), a
zatim i fiziki model podataka (odgovara relacionom modelu podataka), koji je automatski generisan u CASE alatu Sybase Power
Designer 10. Na kraju je dat i objektni model podataka koji odgovara navedenom problemu.
rukovodi
pripada
za period VA100
za period VA100
JMBG = JMBG
Fiziki model podataka (PDM model, Relacioni model podataka)
Izvršeno je automatsko (u okviru CASE alata Sybase Power Designer 10) generisanje OOM modela, odnosno dijagrama klasa, pri
emu je izabran ciljni jezik Java (radi kasnijeg generisanja programskog koda klasa).
14
0..1
Objektni model podataka – generisan u CASE alatu
Prikazane su veze asocijacije i kompozicije. Veze asocijacije i jedan deo veza kompozicije su dobro definisane, meutim jedan deo
veza kompozicije je pogrešno postavljen. Naime, veze IS-A hijerarhije (iz CDM, odnosno ER modela) su prevedene kao veze
kompozicije. Meutim, ovde je potrebno da te veze budu definisane kao veze nasleivanja. Korigovan objektni model dat je u
nastavku:
0..1
15
SLOJ KARAKTERISTIKE KOMPONENTA
KORISNIKI INTERFEJS Ekranske forme sa minimumom koda i vezom ka klasama EvidencijaObavezaDesk.jar
KLASE PREZENTACIONOG
KLASE RADNOG TOKA
ovlašenja
LibWF.jar
pravila
LibBL.jar
KLASE PODATAKA (data layer) Klase koje odgovaraju tabelama iz baze podataka,
odnosno predstavljaju objektni model podataka za dati
problem
LibEntity.jar
semantike
LibDBAccess.jar
DBMS + baza podataka Baza podataka i sistem za upravljanje bazom podataka Evidencija.mdb
Višeslojni pristup u ovom radu odnosi se na strukturu softverskog rešenja, a ne na fiziki raspored komponenti u raunarskoj mrei.
DIJAGRAM KOMPONENTI
Dijagram komponenti ine komponente - paketi i tipovi fajlova i njihova meusobna veza. Ovaj dijagram se moe predstaviti sa 2
stanovišta:
1. imlementacija – nazivi paketa i fajlovi izvornog koda koji ga ine
2. isporuka – izvršna verzija.
Svi fajlovi koji ine navedene komponente – pakete, u obliku izvornog koda imaju ekstenziju *.java, a izvršna kompajlirana verzija
cele biblioteke klasa ima ekstenziju *.jar.
DBMS
LibEntity
LibDBAccess
Evidencija.mdb
LibBL
LibWF
LibApp
EvidencijaObavezaDesk
LibEvidencijaObavezaDesk.jar
LibApp.jar
LibWF.jar
LibBL.jar
LibEntity.jar
LibDBAccess.jar
DIJAGRAM RAZMEŠTAJA
Dijagram razmeštaja odnosi se na prikaz rasporeda komponenti sa aspekta isporuke po vorovima, koje ine raunari sa aspekta
uloge u raunarskoj mrei. S obzirom da je planiran razvoj tzv. desktop aplikacije, razmeštaj se moe odnositi na 2 varijante:
1. baza podataka/DBMS i kompletna aplikacija na 1 raunaru
2. - baza podataka/DBMS na serveru baze podataka
- aplikacija – korisniki interfejs i sve biblioteke klasa – na klijentskom raunaru
Server baze podataka
DIJAGRAMI KLASA
Objektni model koji je dat u odeljku MODELI PODATAKA potrebno je dopuniti opisom metoda svake klase, a takoe je potrebno
dopuniti ovaj model i drugim vrstama klasa. Navedeni objektni model koji je automatski generisan posredstvom CASE alata iz
konceptualnog modela podataka predstavlja samo klase koje opisuju entitete problemskog domena, odnosno po nazivima i strukturi
odgovaraju tabelama relacione baze podataka. Meutim u realizaciji softverskog rešenja uestvuju i druge klase. Kompletan
dijagram klasa koji predstavlja osnov implementacije softvera dat je u nastavku, po pojedinanim dijagramima koji predstavljaju
klase posebnih slojeva višeslojne arhitekture. Tehnološke klase i klase prezentacionog sloja implementirane su u softverskom
rešenju i opisane su detaljnije u odeljku koji se odnosi na opis implementiranog softvera, dok su klase ostalih slojeva date u
konceptualnom obliku – na dijagramima klasa u ovom odeljku.
KLASE PODATAKA (ENTITY CLASS)
Klase podataka nastale su na osnovu objektnog modela koji odgovara prethodnim konceptualnom i fizikom modelu, odnosno
relacionom modelu baze podataka. Svaka od klasa prethodno definisanog modela je transformisana:
atributi su definisani kao private
dodate su set i get metode za svaki atribut
preciznije su ureene osobine veza izmeu klasa – naziv uloga, kardinalitet, vidljivost, navigabilnost, tip containera (kod
veze kompozicije, itd.
Na osnovu dijagrama klasa sa korigovanim odnosima nasleivanja, u okviru CASE alata Power Designer 10 generisan je JAVA kod
klasa podataka (entity klasa). Na osnovu prevoenja elemenata dijagrama klasa u kod, ove klase imaju:
Get i set metode atributa
kao atribute objekte drugih klasa, kod odnosa asocijacije, gde je naziv atributa identian nazivu relacije asocijacije iz
dijagrama
extends kod odnosa nasleivanja
ureenu listu, odnosno niz [0..n] objekata kao tip atributa kod odnosa kompozicije, gde se navodi tip objekta koji je lan
niza, odnosno liste.
Nad generisanim kodom klasa izvršene su sledee korekcije:
tip podatka kod svih atributa svih entity klasa postavljen je String,
postavljene su public metode get i set za atribute koji su dobijeni prevodjenjem asocijacije i kompozicije klasa.
ASOCIJACIJA - nazivi atributa koji su dobili naziv na osnovu uloga u vezama klasa, promenjeni su u skladu sa klasom na
koju ukazuju, npr: Projekat pripada Oblasti :
o generisana verzija: Klasa Projekat ima atribut: private Oblast ima;
o korigovana verzija Klasa Projekat ima atribut: private Oblast mOblast;
KOMPOZICIJA - atributi koji treba da budu tipa ArrayList drugih objekata su generisanjem pogresno postavljeni. Npr.
RadniNalog ima atribut:
o 2. verzija korekcije: private ListaRealizovanihAktivnosti mListaRealizovanihAktivnosti;
o 3. verzija korekcije: private Lista mListaRealizovanihAktivnosti;
pri emu je ListaRealizovanihAktivnosti nova klasa iji privatni atribut predstavlja ArrayList objekata klase Realizovana Aktivnost.
Tanije, napravljena je univerzalna klasa Lista koja za lanove liste ima tip Object. Kljuni atribut je definisan na ovaj nain:
private ArrayList<Object> mLista;
Asocijacija Kompozicija
Sybase Power Designer 10 – dijalog za definisanje osobina veza izmeu klasa
PRIMER GENERISANOG JAVA PROGRAMSKOG KODA KLASE
– ODNOS NASLEIVANJA (EXTENDS) I ASOCIJACIJE:
/***********************************************************************
***********************************************************************/
{
– ODNOS AGREGACIJE
***********************************************************************/
public LongInteger getOznakaUgovora()
}
}
Konani oblik dijagrama klasa koji se odnosi na klase podataka sa svim korekcijama dat je u nastavku:
19
20
Konaan oblik dijagrama klasa – osnov za generisanje JAVA koda klasa
21
Klase poslovne logike opisuju osnovne uesnike poslovnog procesa koji se obrauje: poslovne entitete (pojmovi, radne uloge,
dokumenti), procese, poslovna pravila.
KLASE RADNOG TOKA
Klase radnog toka opisuju radne uloge, radne aktivnosti i ovlašenja. Na ovaj nain vrši se zaštita pristupa pojedinim funkcionalnim
jedinicama softvera, odnosno pristupa bazi podataka, u skladu sa obuhvatom radnih aktivnosti koje su na raspolaganju
odgovarajuoj radnoj ulozi. U toku izvršavanja radnih aktivnosti uestvuju objekti klasa poslovne logike.
RUKOVODILAC
PregledajAktivnosti (Projekat aktivanProjekat, RealizovanaAktivnost realizovanaAktivnost)
U odnosu na planiranu višeslojnu arhitekturu, implementirani su samo pojedini slojevi:
SLOJ KARAKTERISTIKE KOMPONENTA
KORISNIKI INTERFEJS Ekranske forme sa minimumom koda i vezom ka klasama EvidencijaObavezaDesk.jar
KLASE PREZENTACIONOG
TEHNOLOŠKE KLASE (data
podacima iz baze podataka, univerzalan, nezavisan od
semantike
LibDBAccess.jar
DBMS + baza podataka Baza podataka i sistem za upravljanje bazom podataka Evidencija.mdb
Implementacijom softvera na ovaj nain postignuta je univerzalnost programskog koda:
– univerzalne ekranske forme koje se prilagoavaju razliitoj semantici u skladu sa podešavanjima prateih klasa
prezentacionog sloja,
– nezavisnost od vrste DBMS-a, naziva baze podataka, tabela i polja, kao i lokacije baze podataka, kod klasa koje su
zaduene univerzalno za preuzimanje podataka iz DBMS-a na osnovu SQL upita i slanje višim slojevima, kao i prijem
podataka i slanje DBMS-u, radi auriranja.
i na taj nain obezbeena:
1. višestruka upotrebljivost koda – u okviru iste aplikacije koriste se iste klase i ekranske forme za razliitu semantiku, pri
emu je obezbeena i višestruka upotrebljivost i za razvoj drugih aplikacija – nezavisnost od semantike,
2. pouzdaniji razvoj aplikacije – jednom testiran modul-forma-klasa se u drugim sluajevima ne mora ponovo testirati
3. bri razvoj aplikacije – zbog višestruke upotrebljivosti i pouzdanosti modula.
Zadavanje semantike dešava se pri podešavanju osobina klasa prezentacionog sloja kod poziva odgovarajuih tipova formi i to se
pre svega odnosi na zadavanje naziva tabela, SQL upita i naziva polja sa kojima se radi. Ovo podešavanje se dešava podešavanjem
vrednosti atributa odgovarajuih klasa prezentacionog sloja neposredno, nezavisno od ispunjenosti uslova koji zavise od poslovnih
pravila ili od nadlenosti radne operacije ili uloge, odnosno poslovnog entiteta. Taj neposredni pristup formama i podacima
predstavlja nedostatak koji se rešava uvoenjem dodatnih klasa koje postoje izmeu tehnoloških klasa i klasa prezentacionog sloja,
a odnose se na: klase entiteta podataka, poslovne logike i radnog toka.
DIJAGRAM KOMPONENTI
DBMS2
LibDBAccess2
Evidencija2.mdb
LibApp2
EvidencijaObavezaDesk2
LibEvidencijaObavezaDesk2.jar
LibApp2.jar
LibDBAccess2.jar
BAZA PODATAKA
U ovom programu generisana je MS Access 2000 baza podataka u okviru CASE alata PowerSoft PowerDesigner 6.
Struktura baze podataka data je na sledeem dijagramu:
U odnosu na model podataka izvršene su korekcije:
1. Sve vrednosti polja u tabelama su tipa Text
2. Tabele sa pomocnim vrednostima (šifarnici) u nazivu su dobile prefiks «tip»
3. Tabele sa podacima koji opisuju dati poslovni domen u nazivu su dobile prefiks «a»
Tabele koje imaju prefiks «tip» su van domena problema koji se rešava u ovom radu, tako da nee biti obraene u softveru u smislu
softverske podrške auriranju podataka. Ovi podaci e biti dostupni samo u smislu prikaza podataka, dok auriranje podataka u
šifarnicima se pretpostavlja da se vrši iz odgovarajue aplikacije koja pokriva rad kadrovske slube i dekanata fakulteta. Iz tog
razloga, za ovaj rad podaci u šifarnicima su direktno uneti u bazu podataka.
Dakle, u smislu auriranja podataka bie razvijena softverska podrška auriranju sledeih tabela:
1. aProjekat
2. aUgovor
3. aRadni_Nalog
4. aRealizovana_Aktivnost
DIJAGRAMI KLASA
TEHNOLOŠKE KLASE
Univerzalne klase koje omoguuju osnovne operacije sa podacima, nezavisno od konkretne tabele baze podataka na koju se odnose.
Ovim klasama se prosleuje kao parametar naziv tabele i sql upiti putem kojih se izvršavaju odgovarajue operacije auriranja i
pretrage podataka. Ove klase su tehnološki vezane za konkretan tip baze podataka kroz string konekcije koji obezbeuje vezu ka
konkretnom DBMS-u.
ZA potrebe konekcije na MS Access bazu podataka i rad sa osnovnim operacijama sa podacima u tabelama baze podataka razvijena
je biblioteka klasa «LibDBAccess.jar» , koja se sastoji od nekoliko klasa:
NAZIV KLASE NAMENA KLASE
DBTable Rad sa tabelom iz baze podataka
DBResultSet Rad sa resultsetom (memorijska kolekcija podataka) i modelom tabele
DBBTableList Rad sa listom tabela u bazi
DBOutputFile Exportovanje podataka iz tabele, odnosno resultseta u TXT i XML
24
DBConnectionAccess openConnection Otvaranje konekcije
brisanje u skladu sa SQL naredbom
getRecords Vraa ResultSet na osnovu SQL naredbe
DBResultSet getRowCount Vraa ukupan broj redova ResultSet-a
getColumnNamesArrayList Vraa ArrayList sa nazivima kolona ResultSet-a
getColumnNames Vraa niz Stringova sa nazivima kolona ResultSet-a
getDataRow Vraa jedan red podataka u odnosu na redni broj reda
getFirstDataRow Vraa prvi red podataka
getTableModel Vraa model tabele potreban za kreiranje grida (JTable)
DBBTableList setTableList Cita nazive tabela iz baze i postavlja u uredjenu listu
addTable Kreira novu tabelu u bazi podataka, a naziv postavlja u listu
deleteTable Briše tabelu iz baze podataka
getTableList Prikazuje spisak naziva tabela iz baze podataka
DBOutputFile TXT Kreira txt fajl na osnovu sadraja tabele
XML Kreira XML fajl na osnovu sadraja tabele
writeLine Ispisuje jedan red sadraja u fajlu
removeExtension Otklanja ekstenziju u nazivu fajla
getTimeStamp Odreuje vreme povodom snimanja ovog podatka u fajlu
Pored ovih klasa, formirana je još jedna klasa, koja predstavlja interfejs cele ove biblioteke u odnosu na korišenje navedenih klasa.
Ova klasa se zove DBInterface. Namena ove klase je da pojednostavi upotrebu pojedinanih klasa, odnosno da skrati i sakrije kod
koji se odnosi na podešavanje osobina preostalih klasa i na taj nain obezbedi jednostavniji i bri pristup i korišenje biblioteke.
Naravno, ova klasa ne mora biti sastavni deo navedene biblioteke klasa, ve moe biti postavljena u okviru samostalne biblioteke
klasa – interfejs klase – gde bi se izvršilo povezivanje sa prethodno navedenim klasama.
NAZIV KLASE NAZIV METODE NAMENA METODE
DBInterface DajModelTabele Vraa model tabele, potreban za tabelarni prikaz podataka u
korisnikom interfejsu
DajPodatke Vraa resultset sa traenim podacima u skladu sa prethodno
datim SQL upitom
Snimi Snima promene u bazi podataka, koje se odnose na SQL
upit koji je prethodno dat – unos, izmenu ili brisanje
podataka
resultseta koji je definisan na osnovu prethodno
prosledjenog SQL upita
Prethodno navedene klase i njihove veze mogu se predstaviti sledeim dijagramom:
0..1
0..*
0..1
0..*
0..1
0..*
0..1
0..*
0..1
0..*
DBConnectionAccess
Dijagram klasa – tehnološke klase
Na ovom dijagramu izostavljeni su atributi i metode. Odnosi Dbinterface prema ostalim klasama su:
1. Asocijacija – strukturna veza – privatni atributi DBInterface su objekti navedenih ostalih klasa
2. Dependency – u zaglavlju procedura javljaju se kao parametri
25
KORISNIKI INTERFEJS I KLASE PREZENTACIONOG SLOJA
Na osnovu analize zahteva problema i modela softvera datog u prethodnom odeljku, odreena je struktura glavnog menija
aplikacije:
Zaposleni --
Projekat --
realizaciji projekta
-->> stavka menija koja ima podstavke
Kompletan spisak stavki menija sa vrstama ekrana koje otvara je dat u nastavku:
STAVKA PODSTAVKA 1.nivo PODSTAVKA
Zvanje Spisak
Oblast projekta Spisak
Nivo kvaliteta Spisak
Prikaz podataka o odabranom projektu Filter, Analiticki prikaz
Unos podataka o novom projektu Unos
Spisak realizovanih naloga odabranog projekta Filter, Spisak
Unos podataka o završetku projekta Filter, Analiticki prikaz,
Izmena
projektima
Prikaz rezultata realizacije odabranog radnog naloga Filter, Spisak
Unos podataka o kvalitetu realizacije radnog naloga Filter, Analiticki prikaz,
Izmena
REALIZOVANA
AKTIVNOST
SEKRETAR - Stampanje ugovora NIJE PODRZANO
Stampanje radnog naloga NIJE PODRZANO
Stampanje izvestaja o realizaciji projekta NIJE PODRZANO
ZAPOSLENI AKTUELNI
RADNI NALOG
Radni nalozi zaposlenog Spisak
Unos podataka o zavrsetku radnog naloga Filter, Analiticki prikaz,
Izmena
Unos podataka o ucescu na projektu Filter, Analiticki prikaz,
Izmena
ZAVRŠENI
PROJEKAT
26
TIP FORME OPIS
Glavna Glavni meni aplikacije
Spisak Tabelarni prikaz – podaci u skladu sa modelom tabele koji se prosleuje formi
Analiticki
prikaz
Prikaz podataka jednog reda-sloga tabele ili odabranih polja resultseta, u skladu sa prethodnim filterom
Unos Unos novih podataka
Izmena Pristup vrednostima putem filtera i analitickog prikaza, a zatim unos novih vrednosti.
Filter Naziv polja i vrednost, pokretanje akcije prikaza analiticki ili tabelarno rezultata filtriranja
Analiza ulazno-izlaznih podataka za pojedine tipove formi, kao i njihova meuzavisnost prikazana je u nastavku. U nastojanju da se
postigne maksimalna kohezija i minimalna adhezija sa drugim slojevima višeslojnog pristupa, ekranske forme su «osloboene
programskog koda» koji se odnosi na konkretnu semantiku problema. Ekranske forme predstavljaju «ljusku» koja se vezuje sa
konkretnim sadrajem.
- Glavna
Glavna Korisnik Izabrana stavka menija Otvara druge forme Login Druge forme, na osnovu
izbora stavke menija
vrednosti
vrednosti
vrednosti
Tabelarni (filtrirani)
Ekranske forme realizovane su kao univerzalne, odnosno nezavisne od konkretne semantike. Potpuna nezavisnost
semantike postignuta je uvoenjem prateih klasa koje se instanciraju zajedno sa pokretanjem formi i omoguavaju ulazna
podešavanja forme, a takoe i preuzimanje vrednosti koje su unete na formama.
Na narednom dijagramu prikazana je veza formi i prateih klasa koje ih opsluuju, odnosno obezbeuju mogunosti ulazno
izlazne operacije i na taj nain forme ne zavise od konkretne semantike.
27
28
Dijagram sekvenci prikazuje tok izvršavanja pojedinanog sluaja korišenja kroz opis objekata klasa koje uestvuju u realizaciji
sluaja korišenja i opis meusobnih poziva metoda tih klasa (poruke). Za svaki sluaj korišenja potrebno je prikazati dijagram
sekvenci kojim se ilustruje nain implementacije i funkcionisanja klasa u realizaciji zahteva odgovarajueg sluaja korišenja.
Takoe, za jedan sluaj korišenja moe biti više dijagrama sekvenci – u odnosu na mogunost postojanja više scenarija toka
aktivnosti (action steps), odnosno mogunosti alternativnih (sekundarnih) scenarija naina izvršavanja toka aktivnosti sluaja
korišenja. Dakle, preduslov izrade dijagrama sekvenci je:
1. dijagram sluajeva korišenja
2. specifikacija svakog od sluaja korišenja, koja sadri tok aktivnosti, preduslove, postuslove, take proširenja, obradu
izuzetaka itd. Radi se strukturiranim tekstualnim prikazom uz pratei dijagram aktivnosti (activity dijagram).
3. podskup skupa klasa koje uestvuju u implementaciji sluaja korišenja (podšema dijagrama klasa).
U ovom radu izostaviemo specifikaciju sluajeva korišenja. Naravno, zbog velikog obima, nee biti predstavljeni svi sluajevi
korišenja, odnosno svi dijagrami sekvenci, ve samo odabrani, kojim se ilustruje korišenje objekata klasa raznih slojeva, u svrhu
realizacije jednog sluaja korišenja u programu. Na ovaj nain, prethodni prikaz dijagrama klasa dobija svoj oblik integracije i
jasniju sliku naina meusobnih veza i upotrebe u dinamikom smislu – u toku izvršavanja aktivnosti realizacije sluaja korišenja.
Na dijagramima sekvenci je, radi preglednosti, izostavljen prikaz poziva objekata biblioteke klasa LibDBAccess koja neposredno
izvršava operacije sa podacima, posredstvom klase DBInterface. Veza klasa LibApp sa klasama LibAccess je neposredno povezana
radi realizacije svih potrebnih operacija. Nain njigove povezanosti moe se videti iz listinga programskog koda realizacije klasa
biblioteke klasa LibApp.
EKRANSKA FORMA SLUAJ KORIŠENJA I SCENARIO
Forma - LOGIN prijava na sistem – primarni scenario (regularan rad)
Forma – LOGIN prijava na sistem - sekundarni scenario (nisu uneti korektni podaci)
Forma – TABELARNI PRIKAZ tabelarni prikaz svih podataka, bez filtera
Forma – FILTER
Forma – FILTER
Forma – UNOS unos novih podataka, scenario: uspešno snimanje
Forma – IZMENA Izmena (dopuna) podataka, scenario: uspešno snimanje
29
30
Dijagram sekvenci – PRIJAVA NA SISTEM – sekundarni scenario (nisu uneti korektni podaci)
31
32
33
34
35
36
Da bi se mogao koristiti program, potrebno je instalirati odgovarajuu softversku podršku. To moemo uiniti na jedan od 2
osnovna naina:
2. instalacija Application Servera, koji ukljuuje JRE i JDK podršku.
Na prateem CD-u u okviru foldera «Instalacije» nalaze se odgovarajui EXE fajlovi koji predstavljaju instalaciju programske
podrške za oba navedena pristupa.
UPUTSTVO ZA KORIŠENJE
Pokretanje programa, koji predstavlja fajl sa ekstenzijom *jar, moe se izvršiti na nekoliko naina, koji zavise od odabira naina
instalacije softverske podrške.
java -jar "c:\Program\EvidencijaObavezaDesk.jar"
Navodimo kompletnu putanju fajla «*.jar» koji se odnosi na korisniki interfejs.
2. ukoliko je instaliran Application Server, program se pokree sa desktopa klikom na odgovarajuu ikonicu (koja predstavlja
preicu do fajla «EvidencijaObavezaDesk.jar”), ili duplim klikom na JAR fajl programa iz odgovarajueg programa fajl menadera
ili direktno iz foldera gde se jar nalazi (dist podfolder sadri verziju za distribuciju - isporuku).
Nakon pokretanja dobijamo formu za prijavljivanje korisnika pomou korisnikog imena i šifre.
Ekran za prijavu korisnika
Nakon unosa ispravnih podataka, uitava se glavni meni aplikacije, u skladu sa profilom korisnika i njegovim ovlašenjima.
37
U zavisnosti od profila korisnika stavke menija su vidljive i mogu se koristiti. Struktura glavnog menija i opis svih stavki dat je u
delu rada pod nazivom KORISNICKI INTERFEJS.
U nastavku je dat prikaz pojedinih tipova formi i kratak opis naina pokretanja i korišenja:
1. TABELARNI PRIKAZ (SPISAK) – izborom opcije sa menija otvara se direktno forma sa tabelarnim prikazom podataka
2. FILTER – izborom opcije menija otvara se forma za unos parametra filtera. Nakon izbora opcije prikazi podatke mogu se
podaci prikazati tabelarno ili analiticki, u zavisnosti od datog konteksta.
3. ANALITICKI PRIKAZ – nakon unosa podataka o vrednosti kriterijuma i izbora opcije prikazi podatke, ako je reim rada
analitiki prikaz, otvara se forma na kojoj e biti prikazani podaci na analitiki (pojedinani red-slog podataka) nain.
38
4. UNOS – IZMENA – nakon izbora opcije menija, otvara se forma za unos ili izmenu podataka za odgovarajui kontekst.
Nakon izbora opcije snimi, podaci se snimaju u bazi podataka.
39
Klasa – prethodno kreirane klase biblioteke DB (tehnoloske klase – univerzalne klase za rad sa
podacima iz baze podataka)
JSP fajlova-stranica
Što se tie mogunosti koje prua ova aplikacija, implementirane su sledee osnovne funkcije:
Za svaku od navedenih osnovnih softverskih funkcija u nastavku je dat deo koda sa prateim objašnjenjima.
LOGIN
Kljuni deo poetne stranice «login.jsp» ini html deo koda koji se odnosi na formu za unos podataka o sifri i
korisnickom imenu u text boxovima. Da bi se na osnovu ovih vrednosti prosledili parametri fajlu prijava.jsp
koja treba da proveri ove podatke, bitno je napomenuti da se treba postaviti form metod GET.
<FORM METHOD="GET" ACTION ="prijava.jsp">
<table border="0" >
<tr>
<td align="left"><font face="Verdana" size="2">Korisniko ime:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="UserName"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">Šifra:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Password"></font></td>
</tr>
</table>
<blockquote>
<blockquote>
<font face="Verdana" size="1">         
<INPUT TYPE="submit" VALUE="Potvrdi"><INPUT TYPE="reset" VALUE="Ponisti">
</font>
</blockquote>
</blockquote>
</FORM>
Na ovaj nain nakon pritiska na taster «Potvrdi» zapravo se poziva:
40
Zadatak fajla prijava.jsp je da proveri podatke o korisniku i preusmeri ucitavanje odgovarajucih stranica.
<%@ page import="DB.DBInterface" %>
<%@ page import="DB.DBResultSet" %>
<%@ page import="java.sql.ResultSet" %>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<LINK REL="STYLESHEET" TYPE="TEXT/CSS" HREF="design/style.css">
<%
String UPIT="Select * from tipZaposleni where KorisnickoIme='" + KorisnickoIme + "' and Sifra='" + Sifra + "'";
DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "tipZaposleni", UPIT);
int brojSlogova=objDB.DajBrojSlogova();
</body>
</html>
Bitan deo koda je importovanje (page import) klasa iz biblioteke DB koje su prethodno postavljene u WEB-
INF/classes folder. Takoe, bitan deo koda je itanje prethodno prosleenog parametra naredbom
request.getParameter. Nakon toga, na uobiajeni nain se instanciraju i koriste klase, pa ukoliko postoji
korisnik sa datim podacima u bazi, vrši se redirekt (response.sendRedirect) na odgovarajuu jsp stranicu
home.jsp, odnosno neuspeh.jsp ukoliko je neuspesna prijava korisnika.
GLAVNI MENI
Forma sa glavnim menijem (home.jsp) se sastoji od nekoliko segmenata:
podaci o prijavljenom korisniku itamo sa:
String KorisnickoIme = request.getParameter("UserName");%>
<%=KorisnickoIme%>
opcija za odjavu – vraamo na formu za login <A HREF="login.jsp" border="0"> <img src="design/LogOffBela.jpg" border="0"> </A>
meni – razne segmente stranice ukljuujemo iz drugih fajlova opcijom include <%@include file="design/meni.jsp" %>
glavni radni deo – menja se u zavisnosti od aktuelno izabrane opcije menija, na poetnoj formi je
dobrodošlica: <%@include file="dobrodoslica.jsp" %>
TABELARNI PRIKAZ – primer SPISAK RADNIH MESTA
1. Sa menija se poziva pojedinana forma-stranica koja ima slinu strukturu kao i glavni meni, s tim da se u
prostoru za prikaz dobrodošlice prikazuju konkretni rezultati obrade podataka. Pozivanje druge jsp stranice
prosleivanjem parametra radi se na sledei nain: <A HREF="radnomesto.jsp?UserName=<%=KorisnickoIme%>"> Radno mesto </A>
2. jsp stranica koja predstavlja glavni radni deo obino sadri:
a. import klasa na poetku dokumenta
b.povezivanje sa izvorom podataka preko klase DBInterface DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "tipRADNO_MESTO", "select * from tipRADNO_MESTO");
int brSlogova = objDB.DajBrojSlogova();
ResultSet rsPodaci = objDB.DajPodatke();
DBResultSet objRs = new DBResultSet();
<tr>
</tr>
</table>
<tr>
</tr>
</table>
String[] pomVrednosti=objRs.getDataRow(brojPokusaja);
<tr>
</tr>
</table>
KORISNIKA
I kod filtriranja podataka koriste se ekranske forme stranica sline strukture (npr. Aktprojekti.jsp). Glavni
radni deo stranice (npr. Spisakaktproj.jsp) izvršava se u okviru odgovarajue JSP stranice koja se poziva sa
menija uz prosleivanje parametra poziva npr. «?UserName=radulov” Ovako prosleena vrednost
parametra se koristi u okviru SQL upita kojim se izdvajaju i prikazuju eljeni podaci. Naravno, filter se moe
zadavati i direktno sa forme, ali u ovom primeru se koristi indirektno prosleivanje putem korišenja
pozivnog parametra.
Kljuna razlika izmeu tabelarnog prikaza svih podataka i tabelarnog prikaza filtriranih podataka je u
kreiranju SQL upita sa parametrom koji se prosleuje klasi DBInterface.
DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "aPROJEKAT", "select OZNAKAPROJEKTA, NAZIVPROJEKTA, OPIS from aPROJEKAT,
tipZAPOSLENI WHERE aPROJEKAT.JMBG_RUKOVODIOCA=tipZAPOSLENI.JMBG and tipZAPOSLENI.KorisnickoIme='" + KorisnickoIme + "' AND
NOT(aPROJEKAT.DATUMZAVRSETKA<>NULL)");
Ovde treba napomenuti da je jsp stranica glavnog dela ekrana zapravo sastavni deo celine (koristi se include
file) tako da je promenljiva KorisnickoIme vec poznata sa glavne forme koja sadri ovu radnu JSP stranicu,
tako da nema potrebe za dodatnim itanjem parametra i uvoenjem novih promenljivih, ve se koriste iste
promenljive.
Na primeru stranice filterproj.jsp koja predstavlja glavnu radnu stranicu za prikaz podataka o odabranom
projektu, koristi se istovremeni tabelarni prikaz svih podataka, forma sa mogunošu unosa kriterijuma
filtriranja, a nakon izbora tastera Potvrdi prikazuje se u okviru iste stranice na dnu rezultat filtriranja – u ovom
sluaju to je samo jedan slog koji se moe prikazati tabelarno, ali je preglednije – analitiki (vetikalni prikaz
pojedinaih labela sa nazivima polja i vrednostima pored).
<h2>Unesite oznaku projekta:</h2>
<p></p>
42
</form>
%>
<%
DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA from aPROJEKAT where OZNAKAPROJEKTA='" + IDprojekta + "'");
ANALITIKI PRIKAZ PODATAKA: <font color="white"><b> ANALITIKI PRIKAZ </b></font>
<table border=1>
<tr><td width=160> <% out.println (zaglavlje1[0]);%></td> <td> <%out.println (prviRed1[0]); %> </td></tr>
<tr><td width=170> <% out.println (zaglavlje1[1]);%></td> <td> <% out.println (prviRed1[1]); %> </td></tr>
<tr><td width=170> <% out.println (zaglavlje1[2]);%></td> <td> <% out.println (prviRed1[2]); %> </td></tr>
<tr><td width=210> <% out.println (zaglavlje1[3]);%></td> <td> <% out.println (prviRed1[3]); %> </td></tr>
<tr><td width=250> <% out.println (zaglavlje1[4]);%></td> <td> <% out.println (prviRed1[4]); %> </td></tr>
</table>
UNOS
Kod realizacije unosa koriste se na primeru unosa novog projekta 4 JSP fajla:
1. unosprojekat.jsp – forma za unos podataka.
2. snimiprojekat.jsp – snimanje podataka u bazu i redirect na formu za obavestenje o uspesnosti
3. uspeh.jsp – ekran za obavestenje o uspesnosti, sadrzi uspehNoviProjekat.jsp kao deo
4. uspehNoviProjekat.jsp – deo ekrana za obavestenje o uspesnosti sa tekstom poruke
unosprojekat.jsp - Najvaniji deo koda je: <FORM METHOD="GET" ACTION ="snimiprojekat.jsp">
<table border="0" width="100%">
<tr>
<td align="left"><font face="Verdana" size="2">    Oznaka:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Oznaka"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">    Šifra oblasti:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="SifraOblasti"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">    JMBG rukovodioca:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="JMBGrukovodioca"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">    Naziv projekta:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Nazivprojekta"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">    Opis:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Opis"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">    Datum pocetka:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="DatumPocetka"></font></td>
</tr>
<tr>
<td align="left"><font face="Verdana" size="2">    Datum planiranog završetka:</font></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="DatumPlaniranogZavrsetka"></font></td>
</tr>
<tr>
<td align="left"></td>
<td ><font face="Verdana" size="2"><INPUT TYPE="hidden" SIZE=21 NAME="KorisnickoIme" value=<%=KorisnickoIme%>></font></td>
</tr>
</table>
U ovom kodu je vano istai da je realizovano oitavanje podataka o prijavljenom korisniku koje je potrebno
zbog kasnijeg rada sa korisnikim interfejsom nakon uspešnog snimanja podataka. Koristimo input type=
hidden jer se vrednost ne ita sa korisnikog interfejsa, ve se oitava iz promenljive koja je prethodno dobila
vrednost.
43
<%
DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA,
"','" + DatumPlaniranogZavrsetka + "','NEP')";
objDB.Snimi();
PROSLEDJIVANJE REDIRECT NA EKRAN USPEH RADI PRIKAZA PORUKE O USPESNOSTI
response.sendRedirect("uspeh.jsp?UserName=" + KorisnickoIme);
KORISNIKO UPUTSTVO
U nastavku je dat opis uputstva za instalaciju i korišenje implementirane web aplikacije.
UPUTSTVO ZA INSTALACIJU
Da bi se ova aplikacija mogla koristiti, potrebno je instalirati Web server koji omoguava izvršavanje JSP
stranica. Postupak instalacije i pripreme fajlova je sledei:
1. Instalira se JRE
2. Instalira se JDK
4. U folder webapps kreira se podfolder Obaveze
5. U root ovog foldera prekopiraju se JSP fajlovi
6. U okviru ovog foldera kreiraju se podfolderi i kopiraju odgovarajui fajlovi:
a. Design – sadri CSS fajl, fajlove slika i pomonih menija
b. META-INF – sadri fajl MANIFEST.MF
c. WEB-INF – sadri podfolder classes, u kojem se nalazi podfolder sa nazivom paketa gde
pripadaju klase koje se koriste, a u okviru ovog podfoldera se nalaze fajlovi sa ekstenzijom
class, koji ine klase koje se koriste u realizaciji funkcionalnosti JSP stranica
UPUTSTVO ZA KORIŠENJE
Ukoliko je instaliran Web server, aplikacija se sa lokalnog raunara moe pokrenuti iz Internet browsera, npr.
Internet Explorera pomou sledee URL adrese: http://localhost:8080/Obaveze/login.jsp, odnosno sa URL
adrese fakulteta http://www.tf.zr.ac.yu/Obaveze/login.jsp.
Ako je neuspesna prijava, sledeci ekran:
Ako je uspesno prijavljen korisnik, dobijamo sledeci ekran sa glavnim menijem:
45
Na glavnom meniju se nalaze podaci o prijavljenom korisniku, opcija za odjavu (LogOff – vraa na ekran za
prijavu korisnika) i stavke menija, kao linkovi ka preostalim delovima programa.
Izborom stavke menija „ŠIFARNICI” dobijamo sledei ekran:
gde izborom podstavke menija koja se odnosi na konkretni šifarnik (u ovom sluaju „Radna mesta”) dobijamo
tabelarni prikaz podataka navedenog šifarnika:
46
Izborom stavke menija „Aktuelni projekti” dobijamo aktuelne projekte prijavljenog korisnika u smislu
rukovoenja, tj. projekte na kojima je prijavljeni korisnik u ulozi rukovodioca.
47
Nakon izbora opcije „Odabrani projekat”, dobijamo sledei ekran, sa spiskom svih projekata:
Nakon unosa oznake projekta, izdvajaju se podaci o izabranom projektu.
48
Nakon izbora opcije „Novi projekat” dobijamo formu za unos podataka o novom projektu:
49
Nakon unosa podataka, izbora opcije „Potvrdi” i snimanja podataka, prikazuje se sledeci ekran, sa porukom o
uspesnosti snimanja novih podataka.
50
ZAKLJUAK
U ovom radu je obraen problem evidencije i praenja realizacije obaveza, odnosno aktivnosti nastavnog
osoblja fakulteta, sa stanovišta modelovanja i implementacije softverske podrške. Razvijena je desktop
aplikacija višeslojne softverske arhitekture, pri emu je korišen alat NetBeans 6.5 kao razvojno okruenje.
Korišena je MS Access2000 baza podataka. Takoe, razvijena je i web aplikacija, koristei klase koje su
razvijene u toku implementacije desktop aplikacije.
Budui pravci razvoja obuhvataju:
1. kreiranje i konektovanje na MySQL i druge baze podataka
2. realizaciju generisanja reporta, radi omoguavanja štampe dokumenata (npr. Korišenjem freeeware
alata «iReport» ili formiranjem html dokumenta koji bi se štampao iz browsera).
PRILOG
Sybase Power Designer 10 UML dijagrami
Generisani kod Java Generisan Java kod entity klasa iz
Power Designera
Implementacija Java
potrebnih runtime biblioteka klasa
runtime biblioteka klasa
51
Biblioteka klasa LibDBAccess
Biblioteka klasa LibApp
Programski kod najvanijih JSP fajlova web aplikacije «Obaveze»
PROGRAMSKI KOD BIBLIOTEKE «LibDBAccess» package DB; /** * * @author ljubica */ import javax.swing.table.DefaultTableModel; import java.sql.ResultSet; public class DBInterface { private DBConnectionAccess konekcija; private DBTable tabela; private DBResultSet DBrs; private String nazivTabele; private String SQLUpit; // konstruktor public DBInterface (String putanjaBaze, String pomNazivTabele, String pomSQLUpit) throws Exception { nazivTabele = pomNazivTabele; SQLUpit = pomSQLUpit; konekcija = new DBConnectionAccess(putanjaBaze,"", ""); konekcija.openConnection(); tabela = new DBTable(nazivTabele, konekcija.getConnection()); // DBrs= new DBResultSet(); } public DefaultTableModel DajModelTabele() throws Exception { DBrs.setResultSet(tabela.getRecords(SQLUpit)); return DBrs.getTableModel(); } public ResultSet DajPodatke() throws Exception { return tabela.getRecords(SQLUpit); } public void Snimi() throws Exception { tabela.saveDataChange(SQLUpit); } public int DajBrojSlogova() throws Exception { ResultSet rs = this.DajPodatke(); DBrs.setResultSet(rs); int brSlogova=DBrs.getRowCount(); return brSlogova; } } // ----------------------------------------------------------------------------------------------------------------------- package DB; /** * * @author ljubica */ import java.sql.Connection; import java.sql.DriverManager; public class DBConnectionAccess { private static String strDriver = ""; private static String strUserName=""; private static String strPassWord=""; private static Connection databaseConnection=null; // konstruktor public DBConnectionAccess(String putanjaBaze, String pomUserName, String pomPassWord) { strDriver = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + putanjaBaze ; // npr: "c:\\baza.mdb" strUserName=pomUserName; strPassWord=pomPassWord; }
52
53
// // pozicioniramo se na prvi red uspeh=rs.first(); // sad smo na prvom, pa se moze raditi if (uspeh==true) { pomBR=1; // ukupan broj slogova je 1, kada je na prvom while (rs.isLast()==false) { pomBR++; rs.next(); } } else { pomBR=0; // ako je uspeh=false, znaci nema slogova, prazan je! }; return pomBR; } public ArrayList<String> getColumnNamesArrayList() throws Exception { // iz resultseta izdvaja zaglavlje, tj. nazive kolona i stavlja u ArrayList stringova ResultSetMetaData metaData; ArrayList<String> ALista = new ArrayList<String>(); String nazivKolone=""; int i,max; metaData = rs.getMetaData(); max = metaData.getColumnCount(); //get the column names for(i=0;i<max;i++) { nazivKolone=metaData.getColumnLabel(i+1); //adjust for meta data index start at 1 ALista.add(nazivKolone); } return ALista; } public String[] getColumnNames() throws Exception { ResultSetMetaData metaData; String[] pomListaNaziva =null; String nazivKolone=""; String naziviKolona=""; String strIzmedju = ":"; // simbol koji se koristi da odvoji string konstante, // a kasnije se koristi u split int i,max; //boolean uslov; // metaData = rs.getMetaData(); max = metaData.getColumnCount(); //get the column names for(i=0;i<max;i++) { nazivKolone=metaData.getColumnLabel(i+1); //adjust for meta data index start at 1 naziviKolona= naziviKolona + nazivKolone; naziviKolona= naziviKolona + strIzmedju; } // napravljeni string kojem su delovi odvojeni sa : sada se od njega pravi String[] pomListaNaziva= naziviKolona.split(strIzmedju); return pomListaNaziva; } // ------------------------------------------------ // CITANJE I PRIPREMA PODATAKA IZ resultseta // ------------------------------------------------ public String[] getDataRow(int RBSloga) throws Exception { String ceoRow=""; String[] vrednostiRow = null; boolean uspeh=false; int pomRBSloga=0; boolean nadjen=false; // pozicioniramo se na prvi red uspeh=rs.first(); // sad smo na prvom, pa se moze raditi pomRBSloga=0; // prvi rb sloga je nulti // if (RBSloga!=0) { while ((rs.isLast()==false) && (nadjen==false)){ if (pomRBSloga==RBSloga) { nadjen=true; } else { pomRBSloga++; rs.next(); } } }
54
55
56
PROGRAMSKI KOD BIBLIOTEKE «LibApp» package LApp;
57
58
59
60
61
62
63
64
65
public boolean Snimi() { String SQLUpit=""; boolean uspeh=false; try { SQLUpit = "INSERT INTO " + NazivTabele + "(" + nizPolja[0] + "," + nizPolja[1] + "," + nizPolja[2] + "," + nizPolja[3] + "," + nizPolja[4] + "," + nizPolja[5] + "," + nizPolja[6] + ") VALUES ('"+ nizVrednosti[0] + "','" + nizVrednosti[1]+ "','" + nizVrednosti[2] + "','" + nizVrednosti[3] + "','" + nizVrednosti[4] + "','" + nizVrednosti[5] + "','" + nizVrednosti[6] + "')"; DBInterface dbinterfejs = new DBInterface(app.getPutanjaBaze(),NazivTabele, SQLUpit); dbinterfejs.Snimi(); uspeh=true; } catch (Exception ex) { uspeh=false; } return uspeh; } }
PROGRAMSKI KOD KORISNIKOG INTERFEJSA APLIKACIJE «EvidencijaObavezaDesk»
/* * EvidencijaObavezaDeskApp.java */ package evidencijaobavezadesk; import org.jdesktop.application.Application; import org.jdesktop.application.SingleFrameApplication; import LApp.AppHandler; /** * The main class of the application. */ public class EvidencijaObavezaDeskApp extends SingleFrameApplication { /** * At startup create and show the main frame of the application. */ @Override protected void startup() { show(new EvidencijaObavezaDeskView(this)); // } /** * This method is to initialize the specified window by injecting resources. * Windows shown in our application come fully initialized from the GUI * builder, so this additional configuration is not needed. */ @Override protected void configureWindow(java.awt.Window root) { } /** * A convenient static getter for the application instance. * @return the instance of EvidencijaObavezaDeskApp */ public static EvidencijaObavezaDeskApp getApplication() { return Application.getInstance(EvidencijaObavezaDeskApp.class); } /** * Main method launching the application. */ public static void main(String[] args) { launch(EvidencijaObavezaDeskApp.class, args); } } // -------------------------------------------------------------------------------------------------------------------------------
66
67
73
/* * FormFilter.java
74
/* * FormHelp.java * * Created on 29.03.2009., 09.09.48 */ package evidencijaobavezadesk; /** * * @author ljubica */ public class FormHelp extends javax.swing.JFrame { /** Creates new form FormHelp */ public FormHelp() { initComponents(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
75
/ * FormIzmena.java * * Created on 22.04.2009., 13.25.48 */ package evidencijaobavezadesk; /** * * @author ljubica */ import LApp.clsIzmena; public class FormIzmena extends javax.swing.JFrame { private clsIzmena objIzmena; private void PrikaziNazivePolja() { jPolje1Label.setText(objIzmena.getnizNazivaPolja()[0]); jPolje2Label.setText(objIzmena.getnizNazivaPolja()[1]); jPolje3Label.setText(objIzmena.getnizNazivaPolja()[2]); jPolje4Label.setText(objIzmena.getnizNazivaPolja()[3]); jPolje5Label.setText(objIzmena.getnizNazivaPolja()[4]); } private void PrikaziStareVrednosti() { jTextPolje1.setText(objIzmena.getnizStarihVrednosti()[0]); jTextPolje2.setText(objIzmena.getnizStarihVrednosti()[1]); jTextPolje3.setText(objIzmena.getnizStarihVrednosti()[2]); jTextPolje4.setText(objIzmena.getnizStarihVrednosti()[3]); jTextPolje5.setText(objIzmena.getnizStarihVrednosti()[4]); } /** Creates new form FormIzmena */ public FormIzmena(clsIzmena objIzmena) { this.objIzmena=objIzmena; initComponents(); PrikaziNazivePolja(); PrikaziStareVrednosti(); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // // preuzimanje vrednosti iz text boxova String[] nizVrednosti= new String[8]; nizVrednosti[0]=jTextPolje1.getText(); nizVrednosti[1]=jTextPolje2.getText(); nizVrednosti[2]=jTextPolje3.getText();
76
/* * FormTabelarniPrikaz.java * * Created on 28.03.2009., 18.54.13 */ package evidencijaobavezadesk; /** * * @author ljubica */ import java.awt.BorderLayout; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import java.awt.Color; import LApp.clsTabelarniPrikaz; // public class FormTabelarniPrikaz extends javax.swing.JFrame { private JTable table ; /** Creates new form FormTabelarniPrikaz */ // konstruktor public FormTabelarniPrikaz(clsTabelarniPrikaz clsTabela) { // inicijalizacija try { table = new JTable(clsTabela.getmodel()); getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
77
/* * FormUnos.java * * Created on 31.03.2009., 13.52.53 */ package evidencijaobavezadesk; /** * * @author ljubica */ import LApp.clsUnos; public class FormUnos extends javax.swing.JFrame { /** Creates new form FormUnos */ private clsUnos objUnos; private void PrikaziNazivePolja() { jPolje1Label.setText(objUnos.getnizNazivaPolja()[0]); jPolje2Label.setText(objUnos.getnizNazivaPolja()[1]); jPolje3Label.setText(objUnos.getnizNazivaPolja()[2]); jPolje4Label.setText(objUnos.getnizNazivaPolja()[3]); jPolje5Label.setText(objUnos.getnizNazivaPolja()[4]); jPolje6Label.setText(objUnos.getnizNazivaPolja()[5]); jPolje7Label.setText(objUnos.getnizNazivaPolja()[6]); } public FormUnos(clsUnos objUnos) { initComponents(); this.objUnos=objUnos; PrikaziNazivePolja(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); } private void jButtonSnimiActionPerformed(java.awt.event.ActionEvent evt) { String[] nizVrednosti= new String[8]; nizVrednosti[0]=jTextPolje1.getText();
78
/* * MsgBox.java * * Created on 21.04.2009., 17.55.19 */ package evidencijaobavezadesk; /** * * @author ljubica */ public class MsgBox extends javax.swing.JFrame { /** Creates new form MsgBox */ public MsgBox(String naslov, String poruka) { initComponents(); this.setTitle(naslov); jPorukaLabel.setText(poruka); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MsgBox(null, null).setVisible(true); } }); } }
79
Programski kod web aplikacije «Obaveze»
(najvaniji deo) LOGIN.JSP <html> <head><title>EVIDENCIJA OBAVEZA - prijava korisnika</title></head> <META http-equiv=Content-Type content="text/html; charset=windows-1250"> <LINK REL="STYLESHEET" TYPE="TEXT/CSS" HREF="design/style.css"> <table border="0" align="center" height=10%> <tr> <td>  </td> </tr> </table> <table border="0" bgcolor="white" align="center"> <tr> <td align="left"> <%@include file="design/zaglavlje.jsp" %> </td> <td > </td> </tr> <tr> <td><img src="design/linija.jpg"></td> <td></td> </tr> <tr> <td><img src="design/linija1.jpg"></td> <td></td> </tr> <tr> <td> <table border="0" bgcolor="white" align="center"> <tr><td>         </td> <tr><td><font face="Verdana" size="2">PRIJAVA KORISNIKA:</font></td> <tr><td>         </td> <tr><td> <FORM METHOD="GET" ACTION ="prijava.jsp"> <table border="0" > <tr> <td align="left"><font face="Verdana" size="2">Korisniko ime:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="UserName"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">Šifra:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Password"></font></td> </tr> </table> <blockquote> <blockquote> <font face="Verdana" size="1">          <INPUT TYPE="submit" VALUE="Potvrdi"><INPUT TYPE="reset" VALUE="Ponisti"> </font> </blockquote> </blockquote> </FORM> </td> </tr> </table> </td> <td> </td> </tr> <tr> <td><img src="design/linija.jpg"></td> <td></td> </tr> <tr> <td><img src="design/linija1.jpg"></td> <td></td> </tr> </table> </body> </html>
80
81
<tr><td width=15%><%@include file="design/meniSifarnici.jsp" %> </td> <td width=60% bgcolor=""white"> <%@include file="spisakrm.jsp" %></td></tr> </table> </td> </tr> </table> </body> </html> SPISAKRM.JSP <%@ page import="DB.DBInterface" %> <%@ page import="DB.DBResultSet" %> <%@ page import="java.sql.ResultSet" %> <html> <head><title>EVIDENCIJA OBAVEZA</title></head> <META http-equiv=Content-Type content="text/html; charset=windows-1250"> <LINK REL="STYLESHEET" TYPE="TEXT/CSS" HREF="design/style.css"> <body bgcolor="white"> <table border="0" align="center" width=100% height=100% > <tr> <td>         </td> </tr> <tr> <td ALIGN="center"> <font face="Verdana" color="WHITE" size="3">     <b>ŠIFARNIK RADNIH MESTA</B> </font> </td> </tr> <tr> </table> <% // ----------prikaz svih vrednosti------------------ %> <% DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "tipRADNO_MESTO", "select * from tipRADNO_MESTO"); int brSlogova = objDB.DajBrojSlogova(); %> <% // PREUZIMANJE PODATAKA OD DB INTERFEJSA ResultSet rsPodaci = objDB.DajPodatke(); // INICIJALIZACIJA KLASE DBResultSet ZA // OSNOVNE OPERACIJE SA PODACIMA IZ RESULTSETA DBResultSet objRs = new DBResultSet(); objRs.setResultSet(rsPodaci); // CITANJE ZAGLAVLJA String[] zaglavlje= objRs.getColumnNames(); // CITANJE PRVOG REDA String[] prviRed= objRs.getDataRow(0); %> <table border=1 align="center" bgcolor="white"> <tr> <td width=160> <b><% out.println (zaglavlje[0]); %></b> </td> <td width=170> <b><% out.println (zaglavlje[1]); %></b> </td> </tr> </table> <table border=1 align="center" bgcolor="white"> <tr> <td width=160> <% out.println (prviRed[0]); %> </td> <td width=170> <% out.println (prviRed[1]); %> </td> </tr> </table> <% for (int brojPokusaja =1; brojPokusaja < objRs.getRowCount(); brojPokusaja++ ) { String[] pomVrednosti=objRs.getDataRow(brojPokusaja); %> <table border=1 align="center" bgcolor="white"> <tr> <td width=160> <% out.println (pomVrednosti[0]); %> </td> <td width=170> <% out.println (pomVrednosti[1]); %> </td> </tr> </table> <% } %> <table align="center"> <tr> <td> <b><% out.println ("Ukupno:" + brSlogova);%> </b> </td> </tr> </table> </body> </html>
82
UNOSPROJEKAT.JSP <html> <head><title>UNOS PODATAKA O NOVOM PROJEKTU</title></head> <body bgcolor="white"> <table border="0" bgcolor="white" align="center"> <tr> <td>      </td> </tr> <tr> <td> <B><font face="Verdana" size="2">    UNOS NOVOG PROJEKTA</FONT></B> </td> </tr> <tr> <td>      </td> </tr> <tr> <td> <FORM METHOD="GET" ACTION ="snimiprojekat.jsp"> <table border="0" width="100%"> <tr> <td align="left"><font face="Verdana" size="2">    Oznaka:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Oznaka"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">    Šifra oblasti:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="SifraOblasti"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">    JMBG rukovodioca:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="JMBGrukovodioca"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">    Naziv projekta:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Nazivprojekta"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">    Opis:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="Opis"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">    Datum pocetka:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="DatumPocetka"></font></td> </tr> <tr> <td align="left"><font face="Verdana" size="2">    Datum planiranog završetka:</font></td> <td ><font face="Verdana" size="2"><INPUT TYPE="text" SIZE=21 NAME="DatumPlaniranogZavrsetka"></font></td> </tr> <tr> <td align="left"></td> <td ><font face="Verdana" size="2"><INPUT TYPE="hidden" SIZE=21 NAME="KorisnickoIme" value=<%=KorisnickoIme%>></font></td> </tr> </table> <blockquote> <blockquote> <font face="Verdana" size="1">          <INPUT TYPE="submit" VALUE="Potvrdi"><INPUT TYPE="reset" VALUE="Ponisti"> </font> </blockquote> </blockquote> </FORM> </td> </tr> </table> </body> </html> SNIMIPROJEKAT.JSP <%@ page import="DB.DBInterface" %> <%@ page import="DB.DBResultSet" %> <%@ page import="java.sql.ResultSet" %> <html> <head><title>SNIMANJE UNETIH PODATAKA</title></head>
83
84