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