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 - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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.

Page 2: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

2

SADRŢAJ:

1. UVOD

Zadatak seminarskog rada

Metode i alati korišćeni u realizaciji seminarskog rada

Opis problema

Analiza problema

Modeli poslovnog domena

Reĉnik podataka

2. KONCEPTUALNI MODEL SOFTVERA

Analiza funkcionalnih zahteva programa

Dijagram sluĉajeva korišćenja

Modeli podataka

Višeslojna arhitektura softvera

Dijagram komponenti

Dijagram razmeštaja

Dijagrami klasa

3. DESKTOP APLIKACIJA

OPIS IMPLEMENTIRANOG SOFTVERA

Opis implementacije

Dijagram komponenti

Baza podataka

Dijagrami klasa

Dijagrami sekvenci

KORISNIĈKO UPUTSTVO

Uputstvo za instalaciju

Uputstvo za korišćenje

4. WEB APLIKACIJA

Opis implementacije

Korisniĉko uputstvo

Uputstvo za instalaciju

Uputstvo za korišćenje

5. ZAKLJUĈAK

6. PRILOG

Sadržaj pratećeg CD-a

Listing programskog koda

Page 3: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

3

UVOD

ZADATAK SEMINARSKOG RADA

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 sledeće metode, jezici i alati:

POSLOVNO MODELIRANJE business process model Sybase Power Designer 10

MODELIRANJE SOFTVERA UML Sybase Power Designer 10

MODELIRANJE PODATAKA Konceptualni model

(ER model)

PowerSoft Power Designer 6

Fiziĉki model

(Relacioni model)

PowerSoft Power Designer 6

Sybase Power Designer 10

Objektni model

(za programski jezik Java)

Sybase Power Designer 10

BAZA PODATAKA Relaciona baza podataka MS Access 2000

PROGRAMIRANJE Desktop aplikacija Sun NetBeans IDE 6.5 (Java)

OPIS PROBLEMA

Problem organizacije rada nastavnog osoblja na fakultetu odnosi se pre svega na organizaciju osnovnih i dodatnih aktivnosti

nastavnika i saradnika fakulteta.

Okvirni spisak radnih aktivnosti nastavnog osoblja na fakultetu obuhvata:

1. NASTAVA - Nastavne aktivnosti:

a. Nastavni ĉasovi

b. Ispiti

2. NAUKA - Aktivnosti nauĉno istraživaĉkog rada

a. Projekti

b. Saradnja sa drugim nauĉnim i struĉnim institucijama

c. Uĉešće u radu nauĉnih i struĉnih organizacija i manifestacija

3. TRANSFER - Aktivnosti struĉnog rada

a. Projekti

b. Seminari

4. OSTALE AKTIVNOSTI:

a. Sednice

PROBLEM organizacije rada nastavnog osoblja ogleda se u:

1. mnoštvu zaposlenih

2. mnoštvu radnih uloga koje zaposleni imaju

3. mnoštvu nalogodavaca radnih zadataka

4. mnoštvu obaveza svakog zaposlenog

5. izmenama i dopunama spiska potrebnih aktivnosti

6. razliĉitim nivoima detaljnosti opisa pri zadavanju zadataka

7. razliĉitim osobinama aktivnosti – u smislu frekventnosti-periodiĉnosti itd.

8. istovremenim uĉešćem zaposlenih u više radnih aktivnosti

9. neformalnoj formi zadavanja radnih aktivnosti (usmeno)

ZNAĈAJ programa za evidenciju obaveza nastavnog osoblja fakulteta:

1. potreba da se dokumentuju i prate zaduženja zaposlenih, kao i odgovornosti nalogodavaca (nadreĊenih) i zaposlenih

2. potreba da se upravlja izvršavanjem aktivnosti – da se prati njihovo zadavanje, izvršavanje i kvalitet uraĊenog posla....

3. potreba da se poboljša kvalitet uraĊenog posla sagledavanjem realnog opterećenja nastavnog osoblja radnim obavezama i

pravilnijim rasporeĊivanjem radnih zadataka, u skladu sa opterećenjem, kvalitetom prethodno realizovanih aktivnosti i

kompetentnošću.

Page 4: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

4

ANALIZA PROBLEMA

OPŠTI OPIS TOKA IZVRŠAVANJA AKTIVNOSTI

Svaki posao, odnosno poslovni proces može se organizovati kroz projekat, koji prethodno treba da je opisan na uobiĉajeni naĉin za

struktuiranje projekata, meĊu kojima su najvažniji elementi: ciljevi, resursi i aktivnosti. Povodom realizacije projekta, zaposleni

sklapa ugovor o radu kojim se propisuje opis aktivnosti koje treba da obavlja. Pri tom odreĊen je i rukovodilac (nadreĊeni –

zaposleni) koji zadaje radne zadatke i kontroliše njihovo izvršavanje. Radne obaveze mogu biti periodiĉne i kontinuirane tokom cele

godine ili povremene, u skladu sa povremenim dogaĊajima koji ih iniciraju. Radna obaveza je opisana dokumentom koji nadreĊeni

dostavlja zaposlenom, a on je dužan da te obaveze izvršava u predviĊenom terminu, periodiĉnim terminima ili predviĊenom roku i

da o izvršavanju obaveza vodi evidenciju, koju dostavlja na uvid nadreĊenom radi evaluacije izvršenog posla. Po izvršenju obaveza

nadreĊeni izvršava uvid u rezultate realizovanih aktivnosti.

Što se tiĉe obaveza nastavnog osoblja na fakultetu, osnovne aktivnosti opisane su sledećom tabelom:

KLJUĈNI ELEMENTI POSLOVNOG PROCESA

Zaposleni, Rukovodilac (NadreĊeni)

Hijerarhija zaposlenih, pripadnost zaposlenih grupi, Radne uloge zaposlenih, odgovornosti zaposlenih

Obaveza – frekvencija, kategorija (nastava, nauka), podaci o zadavanju, izvršenju i evaluaciji kvaliteta

Znaĉaj obaveze, prioritet obaveze, hijerarhijsko ureĊenje 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, usklaĊenost obaveza koje se izvršavaju istovremeno, prioriteti

Pregled obaveza i aktivnosti, rasporeĊivanje aktivnosti

OBAVEZA FREKVENCIJA RUKOVODILAC

NASTAVA - Nastavne aktivnosti:

b. Nastavni ĉasovi Periodiĉno Nastavnik – asistentu

Sef katedre – nastavniku

Prodekan za nastavu – sefu

katedre

Dekan – prodekanu za

nastavu

c. Ispiti periodiĉno

5. NAUKA - Aktivnosti nauĉno istraživaĉkog rada

a. Projekti Povremeno Rukovodilac projekta –

ucesniku na projektu

Prodekan za nauku –

rukovodiocu na projektu

Dekan – prodekanu za

nauku

b. Saradnja sa drugim nauĉnim i struĉnim

institucijama

Povremeno Opciono – samostalno ili

neposredni rukovodilac

c. Uĉešće u radu nauĉnih i struĉnih organizacija

i manifestacija

Povremeno Opciono – samostalno ili

neposredni rukovodilac

6. TRANSFER - Aktivnosti struĉnog rada

a. Projekti Povremeno

b. Seminari Povremeno Rukovodilac seminara –

predavaĉu na seminaru

7. OSTALE AKTIVNOSTI:

a. Sednice Periodiĉno ŠEF KATEDRE – ĉlanovi

katedre

DEKAN – ĉlanovi

nastavno-nauĉnog veća

Page 5: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

5

MODELI POSLOVNOG DOMENA

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 kljuĉnih pojmova datog problema najĉešće se već u fazi poslovnog modeliranja izraĊuje

jednostavan dijagram klasa, kojim se predstavljaju kljuĉni entiteti i procesi datog problema.

BPM – business process model - šema BPM modela predstavlja pregledan prikaz kljuĉnih poslovnih aktivnosti, u skladu sa

prethodno datim tekstualnim opisom toka poslovnih aktivnosti.

Pored ovih pristupa, koristi se i dijagram sluĉajeva korišćenja, gde se sluĉajevi korišćenja odnose na atomarne poslovne aktivnosti u

interakciji korisnika i sistema. U ovom radu dijagram sluĉajeva korišćenja se koristi u svrhu predstavljanja softverskih, a ne

poslovnih funkcionalnih jedinica.

DIJAGRAM KLASA – ENTITETI POSLOVNOG DOMENA

0..1

zadaje 0..* 0..1

0..*

prihvata

0..1

0..*

0..1

dobija

0..*

0..10..*

0..1

0..*

0..1

0..*

<<entitet>>

Rukovodilac

<<entitet>>

Zaposleni

<<proces>>

Posao

<<proces>>

Aktivnosti realizacije

<<dokument>>

RadniNalog

<<dokument>>

Ugovor<<dokument>>

Projekat

<<entitet>>

Radni zadatakPoslovna pravila

Razlikujemo nekoliko vrsta entiteta dijagrama klasa:

- ENTITET: rukovodilac, zaposleni, radni zadatak

- PROCES: posao, aktivnosti realizacije

- DOKUMENT: Projekat, Ugovor, Radni nalog

- POSLOVNA PRAVILA

Dokumenti opisuju karakteristike odnosa izmeĊu kljuĉnih entiteta i zato su predstavljeni kao association class – klase koje opisuju

karakteristike veze izmeĊu drugih klasa. Na ovom dijagramu izostavljeni su atributi, a veze izmeĊu entiteta postavljene su

fleksibilno.

Na dijagramu se mogu uoĉiti osnovni elementi BPM modela:

Page 6: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

6

1. vertikalni odeljci (organization unit) koji imaju nazive u skladu sa osnovnim radnim ulogama procesa: zaposleni i

rukovodilac. Na ovaj naĉin 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

5. Tok aktivnosti - kontinuirana podebljana linija koja prikazuje povezanost poslovnih aktivnosti, u hronološkom redosledu.

ZAPOSLENI RUKOVODILAC

<<podaci o sklapanju ugovora>>

<<novi projekat>>

<<podaci o projektu>>

<<podaci o angazovanju zaposlenog na projektu>>

<<podaci o opisu ugovorenih aktivnosti na projektu>>

<<radni nalog zaposlenog za izvrsenje odredjene aktivnosti>>

<<podaci o radnom nalogu>>

<<podaci o zavrsetku svih aktivnosti radnog naloga>>

<<podaci o izvrsenoj aktivnosti>>

<<podaci o rezultatima aktivnosti RADNOG NALOGA>>

<<podaci o rezultatima rada>>

<<novi izvestaj>>

<<podaci o radnom nalogu>>

<<podaci o radnom nalogu>>

<<podaci o projektu>>

<<Podaci o kvalitetu realizovanog radnog naloga>>

<<podaci o nastavnom osoblju>>

<<podaci o uspesnosti projekta>>

<<podaci o rezultatima aktivnosti RADNOG NALOGA>>

sklapa ugovor UGOVOR

Odredjuje aktivnosti i opis nacina izvrsavanja - definise PROJEKAT

Angazuje zaposlenog za realizaciju aktivnosti PROJEKTAInformise 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

PROJEKAT

Radni nalog

REALIZOVANE AKTIVNOSTI

IZVESTAJ O REALIZACIJI PROJEKTA

Izrada izvestaja o realizacij i projekta

ZAPOSLENI

Page 7: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

7

REČNIK PODATAKA

U nastavku je dat opis strukture podataka prikazanih elemenata dijagrama «business process modela» opisom kroz navoĊenje

elementarnih podataka. Skup svih elementarnih podataka zajedno sa opisom njihovih meĊusobnih odnosa u sastavu skladišta

podataka i tokova podataka ĉini reĉnik podataka ovog modela. Na ovaj naĉin pripremljen je prikaz informacionih potreba datog

poslovnog procesa, na osnovu ĉega se dalje razvijaju odgovarajući modeli podataka kao njihova podrška.

ELEMENT NAZIV

Skladište podataka Projekat

Ugovor

Zaposleni

Radni nalog

Rezultati rada

Izveštaj o realizaciji projekta

Tok podataka Novi projekat

Podaci o projektu

Podaci o angažovanju zaposlenog na projektu

Podaci o sklapanju ugovora

Podaci o nastavnom osoblju

Podaci o opisu ugovorenih aktivnosti na projektu

Radni nalog zaposlenog za izvršenje odreĊene aktivnosti

Podaci o radnom nalogu

Podaci o završetku svih aktivnosti radnog naloga

Podaci o kvalitetu realizovanog radnog naloga

Podaci o izvršenoj aktivnosti

Podaci o rezultatima rada

Podaci o rezultatima aktivnosti radnog naloga

Podaci o uspesnosti projekta

Novi izveštaj

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

Oznaka aktivnosti, Oznaka radnog naloga, datum izvrsenja aktivnosti, opis izvrsene

aktivnosti

IZVESTAJ O

REALIZACIJI PROJEKTA

Oznaka projekta, datum zavrsetka projekta, uspesnost zavrsetka projekta, datum

izvestaja, opis izvrsenih aktivnosti

TOK PODATAKA

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 angažovanju

zaposlenog na projektu

Oznaka projekta, JMBG zaposlenog, datum pocetka angazovanja, datum zavrsetka

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

aktivnosti na projektu

Oznaka ugovora, Oznaka projekta, JMBG zaposlenog, datum pocetka angazovanja,

datum zavrsetka angazovanja, opis zaduzenja, radna uloga na projektu

Radni nalog zaposlenog za

izvršenje odreĊene

aktivnosti

Oznaka radnog naloga, Oznaka ugovora, JMBG zaposlenog, datum pocetka

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

aktivnosti radnog naloga

Oznaka radnog naloga, datum zavrsetka svih aktivnosti radnog naloga

Podaci o kvalitetu Oznaka radnog naloga, opis kvaliteta realizacije radnog naloga, nivo kvaliteta

Page 8: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

8

realizovanog radnog naloga

Podaci o izvršenoj

aktivnosti

Oznaka aktivnosti, Oznaka radnog naloga, datum izvrsenja aktivnosti, opis izvrsene

aktivnosti

Podaci o rezultatima rada Oznaka aktivnosti, Oznaka radnog naloga, datum izvrsenja aktivnosti, opis izvrsene

aktivnosti

Podaci o rezultatima

aktivnosti radnog naloga

Oznaka aktivnosti, Oznaka radnog naloga, datum izvrsenja aktivnosti, opis izvrsene

aktivnosti

Podaci o uspesnosti projekta Oznaka projekta, opis realizovanih rezultata, uspesnost zavrsetka, datum zavrsetka,

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 meĊusobnih

odnosa elementarnih podataka, a takoĊe i opis samih elementarnih podataka (domen vrednosti i druge karakteristike). Detaljan

prikaz osobina elementarnih podataka dat je u odeljku MODELI PODATAKA.

Page 9: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

9

KONCEPTUALNI MODEL SOFTVERA

ANALIZA FUNKCIONALNIH ZAHTEVA PROGRAMA

Analizom domena problema i modela poslovnog procesa utvrĊujemo kljuĉne funkcionalne elemente softverskog rešenja:

POSLOVNA AKTIVNOST SOFTVERSKA PODRŠKA – funkcionalni

elementi

UČESNIK

OdreĊivanje aktivnosti i opis naĉina

izvršavanja – definisanje

PROJEKTA

Ažuriranje podataka o projektu Rukovodilac

Angažovanje zaposlenog na projektu Prikaz podataka o zaposlenima

Ažuriranje podataka o angažovanju zaposlenog na

projektu

Rukovodilac

Informisanje o aktivnostima na

projektu

Tabelarni prikaz podataka o projektima na kojima je

zaposleni angažovan

Prikaz opisa pojedinaĉnog projekta

Zaposleni

Sklapanje ugovora Prikaz podataka o opisu obaveza zaposlenog na

projektu

Ažuriranje podataka o prihvatanju uĉešća na projektu

Zaposleni

Štampanje ugovora o uĉešću na projektu Zaposleni – sekretar

projekta

Zadavanje radnih zadataka –

otvaranje RADNOG NALOGA

Tabelarni prijaz podataka o projektima gdje je dati

rukovodilac odgovoran

Prikaz podataka o projektu

Tabelarni prikaz podataka o angažovanim

zaposlenima na projektu

Ažuriranje podataka o radnom nalogu zaposlenog

uĉesnika projekta

Rukovodilac

Štampanje radnog naloga Zaposleni – sekretar

projekta

Izvršava radni zadatak i beleži

rezultate aktivnosti RADNOG

NALOGA

Tabelarni prikaz radnih naloga zaposlenog

Ažuriranje podataka o rezultatu aktivnosti radnog

naloga

Zaposleni

Kontroliše rezultate u toku izrade Prikaz rezultata aktivnosti radnih naloga

Prikaz rezultata zaposlenih

Prikaz rezultata projekta

Rukovodilac

Evidentira završetak svih aktivnosti

RADNOG NALOGA

Ažuriranje podataka o završetku svih aktivnosti

radnog naloga

Zaposleni

Procenjuje kvalitet uraĊenih rezultata Ažuriranje podataka o kvalitetu aktivnosti RADNOG

NALOGA

Rukovodilac

Izrada izveštaja o realizaciji

PROJEKTA

Prikaz podataka o rezultatima radnih naloga za dati

projekat

Ažuriranje podataka o realizaciji projekta

Rukovodilac

Štampanje izveštaja o realizaciji projekta Zaposleni – sekretar

projekta

Page 10: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

10

DIJAGRAMI SLUČAJEVA KORIŠĆENJA

U nastavku je dat prikaz dijagrama sluĉajeva korišćenja koji predstavljaju funkcionalne karakteristike budućeg softverskog rešenja.

Sluĉajevi korišćenja su grupisani prema uĉesnicima i na ovaj naĉin su predstavljeni na pojedinaĉnim dijagramima.

Na prvom dijagramu predstavljamo uĉesnike i njihov meĊusobni odnos, u smislu mogućnosti uĉešća u pojedinim sluĉajevima

korišćenja:

Zaposleni

Rukovodilac

Sekretar

Administrator

Dijagram odnosa uĉesnika

Na ovom dijagramu je prikazana hijerarhija uĉesnika, u smislu «nasleĊivanja» raspoloživih funkcionalnih osobina softvera, odnosno

mogućnosti uĉešća u funkcionisanju sistema, korišćenjem raspoloživih opcija. Naime, zaposleni ima najmanje mogućnosti, dok

administrator ima najviše mogućnosti. U nastavku su prikazani sluĉajevi korišćenja koji se odnose redom na sve profile korisnika,

pri ĉemu profil korisnika koji nasleĊuje, dobija mogućnost korišćenja svih opcija prethodnika u ovom nizu nasleĊivanja.

Page 11: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

11

<<extend>>

<<extend>>

<<extend>>

<<extend>>

<<extend>><<extend>>

Zaposleni

Tabelarni prikaz podataka o projektima na kojima je zaposleni angazovan

Prikaz opisa pojedinacnog projektaPrikaz 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 nalogaAzuriranje podataka o zavrsetku realizacije radnog naloga

Dijagram sluĉajeva korišćenja «Zaposleni»

Sekretar

Stampanje ugovora o ucescu na projektu

Stampanje radnog naloga

Štampanje izveštaja o realizaciji projekta

Stampanje

Dijagram sluĉajeva korišćenja «Sekretar»

Page 12: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

12

<<include>>

<<extend>>

<<extend>>

<<extend>>

<<extend>>

<<extend>>

<<extend>>

<<extend>>

<<extend>>

<<extend>>

Rukovodilac

Azuriranje podataka o projektu

Prikaz podataka o zaposlenima

Azuriranje podataka o angazovanju zaposlenog na projektu

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

Prikaz rezultata zaposlenog

Prikaz rezultata projekta

Azuriranje podataka o kvalitetu realizacije radnog naloga

Azuriranje podataka o realizacij i projekta

Dijagram sluĉajeva korišćenja «Rukovodilac»

<<use>>

Administrator

Azuriranje podataka o zaposlenima

Azuriranje podataka o radnim mestima

Azuriranje podataka o hijerarhiji rukovodjenja

Dijagram sluĉajeva korišćenja «Administrator»

Page 13: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

13

MODELI PODATAKA

Na osnovu reĉnika podataka poslovnog domena, uraĊen je najpre konceptualni model podataka (odgovara ER modelu podataka), a

zatim i fiziĉki 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

je stepena

je nivoa

je rasporedjen

je realizovana

je elaboriran

je angazovaoje sklopio

je rasporedjen na

ima zvanje

radi na

ZAPOSLENI

JMBG A13

Prezime VA40

Ime VA30

PROJEKAT

OznakaProjekta LI

NazivProjekta VA250

Opis TXT250

DatumPocetkaProjekta D

DatumPlaniranogZavrsetkaProjekta D

OpisRealizovanihRezultata TXT250

OpisIzvrsenihAktivnosti TXT250

DatumZavrsetka D

DatumIzvestaja D

RADNO_MESTO

SifraRM VA10

NazivRM VA50

ZVANJE

sifraZvanja VA10

NazivZvanja VA50

RUKOVODECA_ULOGA

sifraRUloge VA10

NazivRUloge VA50

NASTAVNO_OSOBLJE

datum izbora u zvanje D

za period VA100

RUKOVODILAC

datum izbora na funkciju D

za period VA100

UGOVOR

OznakaUgovora LI

DatumPocetkaAngazovanja D

DatumZavrsetkaAngazovanja D

Opis zaduzenja VA250

RADNI_NALOG

OznakaRadnogNaloga LI

DatumPocetkaAngazovanja D

DatumZavrsetkaAngazovanja D

OpisZaduzenja VA250

DatumZavrsetkaSvihAktivnosti D

OpisKvalitetaRealizacije VA250

REALIZOVANA_AKTIVNOST

OznakaAktivnosti LI

datumIzvrsenjaAktivnosti D

OpisIzvrseneAktivnosti TXT250

RADNA ULOGA

SifraRadneUloge VA10

NazivRadneUloge VA30

NIVO_KVALITETA

sifraNivoKvaliteta VA10

NazivNivoKvaliteta VA30

OBLAST PROJEKTA

SifraOblasti VA10

NazivOblasti VA40

NENASTAVNO_OSOBLJE

po ugovoru BL

Konceptualni model podataka (CDM model, ER model)

JMBG = JMBG

JMBG = JMBGJMBG = JMBG

JMBG = JMBG_RUKOVODIOCA

SIFRAOBLASTI = SIFRAOBLASTI

SIFRANIVOKVALITETA = SIFRANIVOKVALITETA

SIFRANIVOKVALITETA = SIFRANIVOKVALITETA

SIFRARADNEULOGE = SIFRARADNEULOGE

OZNAKAPROJEKTA = OZNAKAPROJEKTA

OZNAKAUGOVORA = OZNAKAUGOVORA

OZNAKARADNOGNALOGA = OZNAKARADNOGNALOGA

OZNAKAPROJEKTA = OZNAKAPROJEKTA

OZNAKAUGOVORA = OZNAKAUGOVORA

OZNAKAPROJEKTA = OZNAKAPROJEKTA

JMBG = JMBG

SIFRARULOGE = SIFRARULOGE

SIFRAZVANJA = SIFRAZVANJA

SIFRARM = SIFRARM

ZAPOSLENI

JMBG Text(13)

SIFRARM Text(10)

PREZIME Text(40)

IME Text(30)

PROJEKAT

OZNAKAPROJEKTA LongInteger

SIFRANIVOKVALITETA Text(10)

SIFRAOBLASTI Text(10)

JMBG_RUKOVODIOCA Text(13)

NAZIVPROJEKTA Text(250)

OPIS Memo

DATUMPOCETKAPROJEKTA DateTime

DATUMPLANIRANOGZAVRSETKAPROJEK DateTime

OPISREALIZOVANIHREZULTATA Memo

OPISIZVRSENIHAKTIVNOSTI Memo

DATUMZAVRSETKA DateTime

DATUMIZVESTAJA DateTime

RADNOMESTO

SIFRARM Text(10)

NAZIVRM Text(50)

ZVANJE

SIFRAZVANJA Text(10)

NAZIVZVANJA Text(50)

RUKOVODECA_ULOGA

SIFRARULOGE Text(10)

NAZIVRULOGE Text(50)

NASTAVNO_OSOBLJE

JMBG Text(13)

SIFRAZVANJA Text(10)

DATUM_IZBORA DateTime

ZA_PERIOD Text(100)

RUKOVODILAC

JMBG Text(13)

SIFRARULOGE Text(10)

DATUM_IZBORA_NA_FUNKCIJU DateTime

ZA_PERIOD Text(100)

UGOVOR

OZNAKAPROJEKTA LongInteger

OZNAKAUGOVORA LongInteger

JMBG Text(13)

SIFRARADNEULOGE Text(10)

DATUMPOCETKAANGAZOVANJA DateTime

DATUMZAVRSETKAANGAZOVANJA DateTime

OPIS_ZADUZENJA Text(250)

RADNI_NALOG

OZNAKAPROJEKTA LongInteger

OZNAKAUGOVORA LongInteger

OZNAKARADNOGNALOGA LongInteger

SIFRANIVOKVALITETA Text(10)

DATUMPOCETKAANGAZOVANJA DateTime

DATUMZAVRSETKAANGAZOVANJA DateTime

OPISZADUZENJA Text(250)

DATUMZAVRSETKASVIHAKTIVNOSTI DateTime

OPISKVALITETAREALIZACIJE Text(250)

REALIZOVANA_AKTIVNOST

OZNAKAPROJEKTA LongInteger

OZNAKAUGOVORA LongInteger

OZNAKARADNOGNALOGA LongInteger

OZNAKAAKTIVNOSTI LongInteger

DATUMIZVRSENJA DateTime

OPISIZVRSENEAKTIVNOSTI Text(250)

RADNA_ULOGA

SIFRARADNEULOGE Text(10)

NAZIVRADNEULOGE Text(30)

NIVO_KVALITETA

SIFRANIVOKVALITETA Text(10)

NAZIVNIVOKVALITETA Text(30)

OBLAST_PROJEKTA

SIFRAOBLASTI Text(10)

NAZIVOBLASTI Text(40)

NENASTAVNO_OSOBLJE

JMBG Text(13)

PO_UGOVORU YesNo

Fiziĉki 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).

Page 14: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

14

0..1

radi na

0..n

0..1

ima zvanje

0..n

0..1

je rasporedjen na0..n

0..1

je sklopio0..n

1..1

je angazovao

0..n

1..1

je elaboriran

0..n

1..1

je realizovana

0..n

0..1

je rasporedjen 0..n

0..1

je nivoa

0..n

0..1

je stepena0..n

0..1

pripada

0..n

0..1

rukovodi

0..n

1..1

Inhr_262

0..n

1..1

Inhr_26

0..n

1..1

Inhr_200

0..n

ZAPOSLENI

+

+

+

JMBG

Prezime

Ime

: java.lang.String

: java.lang.String

: java.lang.String

PROJEKAT

+

+

+

+

+

+

+

+

+

OznakaProjekta

NazivProjekta

Opis

DatumPocetkaProjekta

DatumPlaniranogZavrsetkaProjekta

OpisRealizovanihRezultata

OpisIzvrsenihAktivnosti

DatumZavrsetka

DatumIzvestaja

: LongInteger

: java.lang.String

: char

: java.util.Date

: java.util.Date

: char

: char

: java.util.Date

: java.util.Date

RADNO_MESTO

+

+

SifraRM

NazivRM

: java.lang.String

: java.lang.String

ZVANJE

+

+

sifraZvanja

NazivZvanja

: java.lang.String

: java.lang.String

RUKOVODECA_ULOGA

+

+

sifraRUloge

NazivRUloge

: java.lang.String

: java.lang.String

NASTAVNO_OSOBLJE

+

+

datum izbora u zvanje

za period

: java.util.Date

: java.lang.String

RUKOVODILAC

+

+

datum izbora na funkciju

za period

: java.util.Date

: java.lang.String

UGOVOR

+

+

+

+

OznakaUgovora

DatumPocetkaAngazovanja

DatumZavrsetkaAngazovanja

Opis zaduzenja

: LongInteger

: java.util.Date

: java.util.Date

: java.lang.String

RADNI_NALOG

+

+

+

+

+

+

OznakaRadnogNaloga

DatumPocetkaAngazovanja

DatumZavrsetkaAngazovanja

OpisZaduzenja

DatumZavrsetkaSvihAktivnosti

OpisKvalitetaRealizacije

: LongInteger

: java.util.Date

: java.util.Date

: java.lang.String

: java.util.Date

: java.lang.String

REALIZOVANA_AKTIVNOST

+

+

+

OznakaAktivnosti

datumIzvrsenjaAktivnosti

OpisIzvrseneAktivnosti

: LongInteger

: java.util.Date

: char

RADNA ULOGA

+

+

SifraRadneUloge

NazivRadneUloge

: java.lang.String

: java.lang.String

NIVO_KVALITETA

+

+

sifraNivoKvaliteta

NazivNivoKvaliteta

: java.lang.String

: java.lang.String

OBLAST PROJEKTA

+

+

SifraOblasti

NazivOblasti

: java.lang.String

: java.lang.String

NENASTAVNO_OSOBLJE

+ po ugovoru : boolean

Objektni model podataka – generisan u CASE alatu

Prikazane su veze asocijacije i kompozicije. Veze asocijacije i jedan deo veza kompozicije su dobro definisane, meĊutim jedan deo

veza kompozicije je pogrešno postavljen. Naime, veze IS-A hijerarhije (iz CDM, odnosno ER modela) su prevedene kao veze

kompozicije. MeĊutim, ovde je potrebno da te veze budu definisane kao veze nasleĊivanja. Korigovan objektni model dat je u

nastavku:

0..1

radi na0..n

0..1

ima zvanje

0..n

0..1

je rasporedjen na0..n

0..1

je sklopio0..n

1..1

je angazovao

0..n

1..1

je elaboriran

0..n

1..1

je realizovana

0..n

0..1

je rasporedjen 0..n

0..1

je nivoa

0..n

0..1

je stepena0..n

0..1

pripada

0..n

0..1

rukovodi

0..n

ZAPOSLENI

+

+

+

JMBG

Prezime

Ime

: java.lang.String

: java.lang.String

: java.lang.String

PROJEKAT

+

+

+

+

+

+

+

+

+

OznakaProjekta

NazivProjekta

Opis

DatumPocetkaProjekta

DatumPlaniranogZavrsetkaProjekta

OpisRealizovanihRezultata

OpisIzvrsenihAktivnosti

DatumZavrsetka

DatumIzvestaja

: LongInteger

: java.lang.String

: char

: java.util.Date

: java.util.Date

: char

: char

: java.util.Date

: java.util.Date

RADNO_MESTO

+

+

SifraRM

NazivRM

: java.lang.String

: java.lang.String

ZVANJE

+

+

sifraZvanja

NazivZvanja

: java.lang.String

: java.lang.String

RUKOVODECA_ULOGA

+

+

sifraRUloge

NazivRUloge

: java.lang.String

: java.lang.String

NASTAVNO_OSOBLJE

+

+

datum izbora u zvanje

za period

: java.util.Date

: java.lang.String

RUKOVODILAC

+

+

datum izbora na funkciju

za period

: java.util.Date

: java.lang.String

UGOVOR

+

+

+

+

OznakaUgovora

DatumPocetkaAngazovanja

DatumZavrsetkaAngazovanja

Opis zaduzenja

: LongInteger

: java.util.Date

: java.util.Date

: java.lang.String

RADNI_NALOG

+

+

+

+

+

+

OznakaRadnogNaloga

DatumPocetkaAngazovanja

DatumZavrsetkaAngazovanja

OpisZaduzenja

DatumZavrsetkaSvihAktivnosti

OpisKvalitetaRealizacije

: LongInteger

: java.util.Date

: java.util.Date

: java.lang.String

: java.util.Date

: java.lang.String

REALIZOVANA_AKTIVNOST

+

+

+

OznakaAktivnosti

datumIzvrsenjaAktivnosti

OpisIzvrseneAktivnosti

: LongInteger

: java.util.Date

: char

RADNA ULOGA

+

+

SifraRadneUloge

NazivRadneUloge

: java.lang.String

: java.lang.String

NIVO_KVALITETA

+

+

sifraNivoKvaliteta

NazivNivoKvaliteta

: java.lang.String

: java.lang.String

OBLAST PROJEKTA

+

+

SifraOblasti

NazivOblasti

: java.lang.String

: java.lang.String

NENASTAVNO_OSOBLJE

+ po ugovoru : boolean

Korigovan objektni model – korekcija: odnos nasleĊivanja

Page 15: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

15

VIŠESLOJNA ARHITEKTURA SOFTVERA

Višeslojna softverska arhitektura, koja predstavlja konceptualni okvir implementacije softvera, opisana je na sledeći naĉin:

SLOJ KARAKTERISTIKE KOMPONENTA

KORISNIĈKI INTERFEJS Ekranske forme sa minimumom koda i vezom ka klasama EvidencijaObavezaDesk.jar

KLASE PREZENTACIONOG

SLOJA (presentation layer)

Klase koje opslužuju pojedine tipove ekranskih formi LibApp.jar

KLASE RADNOG TOKA

(workflow layer)

Klase koje opisuju radne uloge, radne aktivnosti i

ovlašćenja

LibWF.jar

KLASE POSLOVNE LOGIKE

(bussiness logic layer)

Klase koje opisuju poslovne entitete, procese, poslovna

pravila

LibBL.jar

KLASE PODATAKA (data layer) Klase koje odgovaraju tabelama iz baze podataka,

odnosno predstavljaju objektni model podataka za dati

problem

LibEntity.jar

TEHNOLOŠKE KLASE (data

layer technology utility layer)

Tehnološki vezan (za DBMS) kod za osnovne operacije

sa podacima iz baze podataka, univerzalan, nezavisan od

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 fiziĉki raspored komponenti u raĉunarskoj mreži.

DIJAGRAM KOMPONENTI

Dijagram komponenti ĉine komponente - paketi i tipovi fajlova i njihova meĊusobna veza. Ovaj dijagram se može 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

Korisnicki interfejs

Biblioteke klasa

DBMS

DIJAGRAM KOMPONENTI – aspekt isporuke

Page 16: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

16

DIJAGRAM RAZMEŠTAJA

Dijagram razmeštaja odnosi se na prikaz rasporeda komponenti sa aspekta isporuke po ĉvorovima, koje ĉine raĉunari sa aspekta

uloge u raĉunarskoj mreži. S obzirom da je planiran razvoj tzv. desktop aplikacije, razmeštaj se može odnositi na 2 varijante:

1. baza podataka/DBMS i kompletna aplikacija na 1 raĉunaru

2. - baza podataka/DBMS na serveru baze podataka

- aplikacija – korisniĉki interfejs i sve biblioteke klasa – na klijentskom raĉunaru

Server baze podataka

DBMS

baza podataka

Klijent

korisnicki interfejs

biblioteke klasa

DIJAGRAM RAZMEŠTAJA – 2 SLOJNA ARHITEKTURA

DIJAGRAMI KLASA

Objektni model koji je dat u odeljku MODELI PODATAKA potrebno je dopuniti opisom metoda svake klase, a takoĊe 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. MeĊutim u realizaciji softverskog rešenja uĉestvuju i druge klase. Kompletan

dijagram klasa koji predstavlja osnov implementacije softvera dat je u nastavku, po pojedinaĉnim 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 fiziĉkom 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 ureĊene osobine veza izmeĊu klasa – naziv uloga, kardinalitet, vidljivost, navigabilnost, tip containera (kod

veze kompozicije, itd.

Na osnovu dijagrama klasa sa korigovanim odnosima nasleĊivanja, u okviru CASE alata Power Designer 10 generisan je JAVA kod

klasa podataka (entity klasa). Na osnovu prevoĊenja 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 identiĉan nazivu relacije asocijacije iz

dijagrama

extends kod odnosa nasleĊivanja

ureĊenu 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 sledeće 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:

Page 17: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

17

o generisana verzija: private RealizovanaAktivnost jerealizovana[0..n];

o 1. verzija korekcije: private ArrayList<RealizovanaAktivnost> mRealizovaneAktivnosti;

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.

Taĉnije, napravljena je univerzalna klasa Lista koja za ĉlanove liste ima tip Object. Kljuĉni atribut je definisan na ovaj naĉin:

private ArrayList<Object> mLista;

Asocijacija Kompozicija

Sybase Power Designer 10 – dijalog za definisanje osobina veza izmeĊu klasa

PRIMER GENERISANOG JAVA PROGRAMSKOG KODA KLASE

– ODNOS NASLEĐIVANJA (EXTENDS) I ASOCIJACIJE:

/***********************************************************************

* Module: NastavnoOsoblje.java

* Author: ljubica

* Purpose: Defines the Class NastavnoOsoblje

***********************************************************************/

import java.util.*;

public class NastavnoOsoblje extends Zaposleni // NASLEDJIVANJE

{

private java.util.Date datumIzboraUZvanje;

private java.lang.String zaPeriod;

private Zvanje ima_zvanje; // ASOCIJACIJA

public java.util.Date getDatumIzboraUZvanje()

{

return datumIzboraUZvanje;

}

public void setDatumIzboraUZvanje(java.util.Date newDatumIzboraUZvanje)

{

datumIzboraUZvanje = newDatumIzboraUZvanje;

}

public java.lang.String getZaPeriod()

{

return zaPeriod;

}

public void setZaPeriod(java.lang.String newZaPeriod)

{

zaPeriod = newZaPeriod;

}

}

Page 18: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

18

PRIMER JAVA PROGRAMSKOG KODA KLASE

– ODNOS AGREGACIJE

/***********************************************************************

* Module: Ugovor.java

* Author: ljubica

* Purpose: Defines the Class Ugovor

***********************************************************************/

import java.util.*;

public class Ugovor

{

private LongInteger oznakaUgovora;

private java.util.Date datumPocetkaAngazovanja;

private java.util.Date datumZavrsetkaAngazovanja;

private java.lang.String opisZaduzenja;

private Zaposleni je_sklopio;

private RadnaUloga je_rasporedjen; // ASOCIJACIJA

public RadniNalog jeElaboriran[0..n]; // AGREGACIJA

public LongInteger getOznakaUgovora()

{

return oznakaUgovora;

}

public void setOznakaUgovora(LongInteger newOznakaUgovora)

{

oznakaUgovora = newOznakaUgovora;

}

public java.util.Date getDatumPocetkaAngazovanja()

{

return datumPocetkaAngazovanja;

}

public void setDatumPocetkaAngazovanja(java.util.Date newDatumPocetkaAngazovanja)

{

datumPocetkaAngazovanja = newDatumPocetkaAngazovanja;

}

public java.util.Date getDatumZavrsetkaAngazovanja()

{

return datumZavrsetkaAngazovanja;

}

public void setDatumZavrsetkaAngazovanja(java.util.Date newDatumZavrsetkaAngazovanja)

{

datumZavrsetkaAngazovanja = newDatumZavrsetkaAngazovanja;

}

public java.lang.String getOpisZaduzenja()

{

return opisZaduzenja;

}

public void setOpisZaduzenja(java.lang.String newOpisZaduzenja)

{

opisZaduzenja = newOpisZaduzenja;

}

}

Konaĉni oblik dijagrama klasa koji se odnosi na klase podataka sa svim korekcijama dat je u nastavku:

Page 19: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

19

Dijagram klasa bez set-get metoda

Page 20: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

20

Konaĉan oblik dijagrama klasa – osnov za generisanje JAVA koda klasa

Page 21: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

21

KLASE POSLOVNE LOGIKE

Klase poslovne logike opisuju osnovne uĉesnike poslovnog procesa koji se obraĊuje: poslovne entitete (pojmovi, radne uloge,

dokumenti), procese, poslovna pravila.

0..1

zadaje 0..* 0..1

0..*

prihvata

0..1

0..*

0..1

dobija

0..*

0..10..*

0..1

0..*

0..1

0..*

<<entitet>>

Rukovodilac

<<entitet>>

Zaposleni

<<proces>>

Posao

<<proces>>

Aktivnosti realizacije

<<dokument>>

RadniNalog

<<dokument>>

Ugovor<<dokument>>

Projekat

<<entitet>>

Radni zadatakPoslovna pravila

Dijagram klasa – poslovna logika

KLASE RADNOG TOKA

Klase radnog toka opisuju radne uloge, radne aktivnosti i ovlašćenja. Na ovaj naĉin vrši se zaštita pristupa pojedinim funkcionalnim

jedinicama softvera, odnosno pristupa bazi podataka, u skladu sa obuhvatom radnih aktivnosti koje su na raspolaganju

odgovarajućoj radnoj ulozi. U toku izvršavanja radnih aktivnosti uĉestvuju objekti klasa poslovne logike.

RUKOVODILAC

+

+

+

+

+

+

FormirajProjekat ()

Angazuj (ZAPOSLENI Ucesnik, Projekat AktuelniProjekat)

ZadajPosao (ZAPOSLENI ucesnik, Projekat aktivanProjekat)

PregledajAktivnosti (Projekat aktivanProjekat, RealizovanaAktivnost realizovanaAktivnost)

OkoncajProjekat (Projekat aktivanProjekat)

FormirajZavrsniIzvestaj (Projekat aktivanProjekat)

: Projekat

: Ugovor

: RadniNalog

: boolean

: Dokument

SEKRETAR

+ StampajDokument (Dokument DokumentZaStampu)

ZAPOSLENI

+

+

+

+

+

PogledajProjekat (Projekat noviProjekat)

PotpisiUgovor (Ugovor noviUgovor)

PrimiRadniNalog (RadniNalog noviRadniNalog)

RealizujAktivnost (RadniNalog aktivanRadniNalog)

OkoncajRadniNalog (RadniNalog aktivanRadniNalog)

: RealizovanaAktivnost

: boolean

Dokument

Projekat

Ugovor

RadniNalog

RealizovanaAktivnost

PoslovnaPravila

Dijagram klasa – radni tok

Page 22: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

22

OPIS IMPLEMENTIRANOG SOFTVERA

OPIS IMPLEMENTACIJE

U odnosu na planiranu višeslojnu arhitekturu, implementirani su samo pojedini slojevi:

SLOJ KARAKTERISTIKE KOMPONENTA

KORISNIĈKI INTERFEJS Ekranske forme sa minimumom koda i vezom ka klasama EvidencijaObavezaDesk.jar

KLASE PREZENTACIONOG

SLOJA (presentation layer)

Klase koje opslužuju pojedine tipove ekranskih formi LibApp.jar

TEHNOLOŠKE KLASE (data

layer technology utility layer)

Tehnološki vezan (za DBMS) kod za osnovne operacije sa

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 naĉin postignuta je univerzalnost programskog koda:

– univerzalne ekranske forme koje se prilagoĊavaju razliĉitoj semantici u skladu sa podešavanjima pratećih klasa

prezentacionog sloja,

– nezavisnost od vrste DBMS-a, naziva baze podataka, tabela i polja, kao i lokacije baze podataka, kod klasa koje su

zadužene 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 ažuriranja.

i na taj naĉin obezbeĊena:

1. višestruka upotrebljivost koda – u okviru iste aplikacije koriste se iste klase i ekranske forme za razliĉitu semantiku, pri

ĉemu je obezbeĊena i višestruka upotrebljivost i za razvoj drugih aplikacija – nezavisnost od semantike,

2. pouzdaniji razvoj aplikacije – jednom testiran modul-forma-klasa se u drugim sluĉajevima ne mora ponovo testirati

3. brži razvoj aplikacije – zbog višestruke upotrebljivosti i pouzdanosti modula.

Zadavanje semantike dešava se pri podešavanju osobina klasa prezentacionog sloja kod poziva odgovarajućih 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 odgovarajućih klasa prezentacionog sloja neposredno, nezavisno od ispunjenosti uslova koji zavise od poslovnih

pravila ili od nadležnosti radne operacije ili uloge, odnosno poslovnog entiteta. Taj neposredni pristup formama i podacima

predstavlja nedostatak koji se rešava uvoĊenjem dodatnih klasa koje postoje izmeĊu tehnoloških klasa i klasa prezentacionog sloja,

a odnose se na: klase entiteta podataka, poslovne logike i radnog toka.

DIJAGRAM KOMPONENTI

Dijagram komponenti u ovom odeljku prezentuje implementirano rešenje sa odgovarajućim komponentama softverske arhitekture.

DBMS2

LibDBAccess2

Evidencija2.mdb

LibApp2

EvidencijaObavezaDesk2

LibEvidencijaObavezaDesk2.jar

LibApp2.jar

LibDBAccess2.jar

Korisnicki interfejs2

Biblioteke klasa2

DBMS2

Page 23: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

23

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 sledećem 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 neće biti obraĊene u softveru u smislu

softverske podrške ažuriranju podataka. Ovi podaci će biti dostupni samo u smislu prikaza podataka, dok ažuriranje podataka u

šifarnicima se pretpostavlja da se vrši iz odgovarajuće aplikacije koja pokriva rad kadrovske službe i dekanata fakulteta. Iz tog

razloga, za ovaj rad podaci u šifarnicima su direktno uneti u bazu podataka.

Dakle, u smislu ažuriranja podataka biće razvijena softverska podrška ažuriranju sledećih tabela:

1. aProjekat

2. aUgovor

3. aRadni_Nalog

4. aRealizovana_Aktivnost

DIJAGRAMI KLASA

TEHNOLOŠKE KLASE

Univerzalne klase koje omogućuju osnovne operacije sa podacima, nezavisno od konkretne tabele baze podataka na koju se odnose.

Ovim klasama se prosleĊuje kao parametar naziv tabele i sql upiti putem kojih se izvršavaju odgovarajuće operacije ažuriranja i

pretrage podataka. Ove klase su tehnološki vezane za konkretan tip baze podataka kroz string konekcije koji obezbeĊuje 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

DBConnectionAccess Konekcija do baze podataka

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

Page 24: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

24

NAZIV KLASE NAZIV METODE NAMENA METODE

DBConnectionAccess openConnection Otvaranje konekcije

closeConnection Zatvaranje konekcije

DBTable saveDataChange Snimanje promena nad podacima; dodavanje, izmena,

brisanje u skladu sa SQL naredbom

getRecords Vraća ResultSet na osnovu SQL naredbe

DBResultSet getRowCount Vraća ukupan broj redova ResultSet-a

getColumnNamesArrayList Vraća ArrayList sa nazivima kolona ResultSet-a

getColumnNames Vraća niz Stringova sa nazivima kolona ResultSet-a

getDataRow Vraća jedan red podataka u odnosu na redni broj reda

getFirstDataRow Vraća prvi red podataka

getTableModel Vraća 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 sadržaja tabele

XML Kreira XML fajl na osnovu sadržaja tabele

writeLine Ispisuje jedan red sadržaja u fajlu

removeExtension Otklanja ekstenziju u nazivu fajla

getTimeStamp OdreĊuje 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 pojedinaĉnih klasa, odnosno da skrati i sakrije kod

koji se odnosi na podešavanje osobina preostalih klasa i na taj naĉin obezbedi jednostavniji i brži pristup i korišćenje biblioteke.

Naravno, ova klasa ne mora biti sastavni deo navedene biblioteke klasa, već može 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 Vraća model tabele, potreban za tabelarni prikaz podataka u

korisniĉkom interfejsu

DajPodatke Vraća resultset sa traženim 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

DajBrojSlogova Daje ukupan broj slogova, tj. Redova tabele, odnosno

resultseta koji je definisan na osnovu prethodno

prosledjenog SQL upita

Prethodno navedene klase i njihove veze mogu se predstaviti sledećim dijagramom:

0..1

0..*

0..1

0..*

0..1

0..*

0..1

0..*

0..1

0..*

DBConnectionAccess

DBTableDBResultSet

DBTableList

DBOutputFile

DBInterface

REALIZUJU

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

Page 25: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

25

3. Realizacija – funkcionalnost ovih klasa realizuje deo funkcionalnosti klase DBInterface pozivanjem odgovarajućih metoda

KORISNIĈKI INTERFEJS I KLASE PREZENTACIONOG SLOJA

Na osnovu analize zahteva problema i modela softvera datog u prethodnom odeljku, odreĊena je struktura glavnog menija

aplikacije:

SIFARNICI RUKOVODILAC SEKRETAR ZAPOSLENI PROGRAM

Zaposleni --

>>

Projekat -->> Štampanje ugovora Aktuelni projekat -->> Pomoć

Projekat --

>>

Ugovor -->> Štampanje radnog

naloga

Novi projekat -->> O autoru

Radni nalog -->> Štampanje izveštaja o

realizaciji projekta

Završeni projekat -->> Izlaz

Realizovana aktivnost -->>

-->> stavka menija koja ima podstavke

Kompletan spisak stavki menija sa vrstama ekrana koje otvara je dat u nastavku:

STAVKA PODSTAVKA 1.nivo PODSTAVKA

2. nivo

TIP FORME -

FUNKCIONALNOSTI

ŠIFARNICI ZAPOSLENI Radno mesto Spisak

Zvanje Spisak

Rukovodeca uloga Spisak

Zaposleni Spisak

PROJEKAT Radna uloga na projektu Spisak

Oblast projekta Spisak

Nivo kvaliteta Spisak

RUKOVODILAC PROJEKAT Aktuelni projekti koje vodi 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

Završeni projekti koje je vodio Spisak

UGOVOR Realizovani nalozi zaposlenog na dosadašnjim

projektima

Filter, Spisak

Angažovani zaposleni na odabranom projektu Filter, Spisak

Unos novog ugovora za odabrani projekat Unos

RADNI NALOG Unos novog radnog naloga Unos

Prikaz rezultata realizacije odabranog radnog naloga Filter, Spisak

Unos podataka o kvalitetu realizacije radnog naloga Filter, Analiticki prikaz,

Izmena

REALIZOVANA

AKTIVNOST

Realizovane aktivnosti odabranog projekta Filter, Spisak

SEKRETAR - Stampanje ugovora NIJE PODRZANO

Stampanje radnog naloga NIJE PODRZANO

Stampanje izvestaja o realizaciji projekta NIJE PODRZANO

ZAPOSLENI AKTUELNI

PROJEKAT

PROJEKAT

Aktuelni projekti zaposlenog Spisak

Prikaz podataka o odabranom projektu Filter, Analiticki prikaz

RADNI NALOG

Opis zaduzenja zaposlenog na odabranom projektu Filter, Analiticki prikaz

Radni nalozi zaposlenog Spisak

Unos podataka o realizaciji aktivnosti Unos

Unos podataka o zavrsetku radnog naloga Filter, Analiticki prikaz,

Izmena

NOVI PROJEKAT Prikaz novih projekata Spisak

Unos podataka o ucescu na projektu Filter, Analiticki prikaz,

Izmena

ZAVRŠENI

PROJEKAT

Prikaz zavrsenih projekata zaposlenog Spisak

Page 26: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

26

Tipovi formi i njihov opis dat je u nastavku:

TIP FORME OPIS

Login Forma za prijavu korisnika

Glavna Glavni meni aplikacije

Spisak Tabelarni prikaz – podaci u skladu sa modelom tabele koji se prosleĊuje 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 meĊuzavisnost prikazana je u nastavku. U nastojanju da se

postigne maksimalna kohezija i minimalna adhezija sa drugim slojevima višeslojnog pristupa, ekranske forme su «osloboĊene

programskog koda» koji se odnosi na konkretnu semantiku problema. Ekranske forme predstavljaju «ljusku» koja se vezuje sa

konkretnim sadržajem.

TIP

FORME

ULAZNI

PODACI

(kod pokretanja)

IZLAZNI PODACI POKREČE

AKCIJE

ULAZNA

FORMA

IZLAZNA FORMA

Login - Korisniĉko ime

Šifra

Definiše (profil)

tekućeg korisnika

Uĉitava glavni meni

- Glavna

Glavna Korisnik Izabrana stavka menija Otvara druge forme Login Druge forme, na osnovu

izbora stavke menija

Spisak

(Tabelarni

prikaz)

Model tabele Selektovan red

(opciono)

Selekcija reda tabele

(opciono)

Glavna forma Analitiĉki prikaz

Tabelarni (filtrirani)

prikaz

(opciono)

Analiticki

prikaz

Niz Polja, Niz

Vrednosti

- Izmena Filter

Tabelarni prikaz

Glavna forma

Unos Niz Polja Niz Vrednosti Snimanje unetih

vrednosti

Glavna forma Glavna forma

Izmena Niz Polja, Niz Starih

vrednosti

Niz Novih vrednosti Snimanje izmenjenih

vrednosti

Glavna forma Glavna forma

Filter Polje kriterijum Vrednost kriterijum Analiticki prikaz

Tabelarni (filtrirani)

prikaz

Glavna forma Analiticki prikaz

Tabelarni (filtrirani)

prikaz

Opis naĉina implementacije pojedinih tipova formi:

Ekranske forme realizovane su kao univerzalne, odnosno nezavisne od konkretne semantike. Potpuna nezavisnost

semantike postignuta je uvoĊenjem pratećih klasa koje se instanciraju zajedno sa pokretanjem formi i omogućavaju ulazna

podešavanja forme, a takoĊe i preuzimanje vrednosti koje su unete na formama.

Na narednom dijagramu prikazana je veza formi i pratećih klasa koje ih opslužuju, odnosno obezbeĊuju mogućnosti ulazno

izlazne operacije i na taj naĉin forme ne zavise od konkretne semantike.

Page 27: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

27

Dijagram klasa – forme korisniĉkog interfejsa i klase prezentacionog sloja

Page 28: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

28

DIJAGRAMI SEKVENCI

Dijagram sekvenci prikazuje tok izvršavanja pojedinaĉnog sluĉaja korišćenja kroz opis objekata klasa koje uĉestvuju u realizaciji

sluĉaja korišćenja i opis meĊusobnih poziva metoda tih klasa (poruke). Za svaki sluĉaj korišćenja potrebno je prikazati dijagram

sekvenci kojim se ilustruje naĉin implementacije i funkcionisanja klasa u realizaciji zahteva odgovarajućeg sluĉaja korišćenja.

TakoĊe, za jedan sluĉaj korišćenja može biti više dijagrama sekvenci – u odnosu na mogućnost postojanja više scenarija toka

aktivnosti (action steps), odnosno mogućnosti alternativnih (sekundarnih) scenarija naĉina izvršavanja toka aktivnosti sluĉaja

korišćenja. Dakle, preduslov izrade dijagrama sekvenci je:

1. dijagram sluĉajeva korišćenja

2. specifikacija svakog od sluĉaja korišćenja, koja sadrži tok aktivnosti, preduslove, postuslove, taĉke proširenja, obradu

izuzetaka itd. Radi se strukturiranim tekstualnim prikazom uz prateći dijagram aktivnosti (activity dijagram).

3. podskup skupa klasa koje uĉestvuju u implementaciji sluĉaja korišćenja (podšema dijagrama klasa).

U ovom radu izostavićemo specifikaciju sluĉajeva korišćenja. Naravno, zbog velikog obima, neće biti predstavljeni svi sluĉajevi

korišćenja, odnosno svi dijagrami sekvenci, već samo odabrani, kojim se ilustruje korišćenje objekata klasa raznih slojeva, u svrhu

realizacije jednog sluĉaja korišćenja u programu. Na ovaj naĉin, prethodni prikaz dijagrama klasa dobija svoj oblik integracije i

jasniju sliku naĉina meĊusobnih veza i upotrebe u dinamiĉkom smislu – u toku izvršavanja aktivnosti realizacije sluĉaja 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. Naĉin njigove povezanosti može se videti iz listinga programskog koda realizacije klasa

biblioteke klasa LibApp.

Naredni dijagrami sekvenci ilustruju sledeće sluĉajeve korišćenja i scenarija:

EKRANSKA FORMA SLUČAJ 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 – TABELARNI PRIKAZ

filtriranje podataka i tabelarni prikaz rezultata

Forma – FILTER

Forma – ANALITICKI PRIKAZ

filtriranje podataka i pojedinaĉni (analitiĉki) prikaz rezultata

Forma – UNOS unos novih podataka, scenario: uspešno snimanje

Forma – IZMENA Izmena (dopuna) podataka, scenario: uspešno snimanje

Page 29: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

29

Dijagram sekvenci – PRIJAVA NA SISTEM – primarni scenario

Page 30: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

30

Dijagram sekvenci – PRIJAVA NA SISTEM – sekundarni scenario (nisu uneti korektni podaci)

Page 31: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

31

DIJAGRAM SEKVENCI – tabelarni prikaz podataka

Page 32: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

32

DIJAGRAM SEKVENCI – filtriranje podataka i tabelarni prikaz

Page 33: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

33

DIJAGRAM SEKVENCI – filtriranje podataka i analitiĉki prikaz

Page 34: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

34

DIJAGRAM SEKVENCI – unos novih podataka – scenario: uspešno snimanje

Page 35: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

35

DIJAGRAM SEKVENCI – izmena (dopuna) podataka – scenario: uspešno snimanje

Page 36: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

36

KORISNIČKO UPUTSTVO

UPUTSTVO ZA INSTALACIJU

Da bi se mogao koristiti program, potrebno je instalirati odgovarajuću softversku podršku. To možemo uĉiniti na jedan od 2

osnovna naĉina:

1. instalacija JRE(Java Runtime) i JDK (Java Development Kit).

2. instalacija Application Servera, koji ukljuĉuje JRE i JDK podršku.

Na pratećem CD-u u okviru foldera «Instalacije» nalaze se odgovarajući EXE fajlovi koji predstavljaju instalaciju programske

podrške za oba navedena pristupa.

UPUTSTVO ZA KORIŠĆENJE

Pokretanje programa, koji predstavlja fajl sa ekstenzijom *jar, može se izvršiti na nekoliko naĉina, koji zavise od odabira naĉina

instalacije softverske podrške.

1. ukoliko je instaliran samo JRE i JDK:

java -jar "c:\Program\EvidencijaObavezaDesk.jar"

Navodimo kompletnu putanju fajla «*.jar» koji se odnosi na korisniĉki interfejs.

2. ukoliko je instaliran Application Server, program se pokreće sa desktopa klikom na odgovarajuću ikonicu (koja predstavlja

preĉicu do fajla «EvidencijaObavezaDesk.jar”), ili duplim klikom na JAR fajl programa iz odgovarajućeg programa fajl menadžera

ili direktno iz foldera gde se jar nalazi (dist podfolder sadrži verziju za distribuciju - isporuku).

Nakon pokretanja dobijamo formu za prijavljivanje korisnika pomoću korisniĉkog imena i šifre.

Ekran za prijavu korisnika

Nakon unosa ispravnih podataka, uĉitava se glavni meni aplikacije, u skladu sa profilom korisnika i njegovim ovlašćenjima.

Page 37: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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 naĉina 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 režim rada

analitiĉki prikaz, otvara se forma na kojoj će biti prikazani podaci na analitiĉki (pojedinaĉni red-slog podataka) naĉin.

Page 38: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

38

4. UNOS – IZMENA – nakon izbora opcije menija, otvara se forma za unos ili izmenu podataka za odgovarajući kontekst.

Nakon izbora opcije snimi, podaci se snimaju u bazi podataka.

Page 39: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

39

WEB APLIKACIJA

OPIS IMPLEMENTACIJE

Razvijena je web aplikacija koja se sastoji iz:

Klasa – prethodno kreirane klase biblioteke DB (tehnoloske klase – univerzalne klase za rad sa

podacima iz baze podataka)

JSP fajlova-stranica

Što se tiĉe mogućnosti koje pruža ova aplikacija, implementirane su sledeće osnovne funkcije:

Za svaku od navedenih osnovnih softverskih funkcija u nastavku je dat deo koda sa pratećim objašnjenjima.

LOGIN

Kljuĉni deo poĉetne 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">Korisniĉko 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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<INPUT TYPE="submit" VALUE="Potvrdi"><INPUT TYPE="reset" VALUE="Ponisti">

</font>

</blockquote>

</blockquote>

</FORM>

Na ovaj naĉin nakon pritiska na taster «Potvrdi» zapravo se poziva:

http://localhost:8080/Obaveze/prijava.jsp?UserName=lkazi,Password=aaa

Page 40: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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

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

<%

// CITANJE PROSLEDJENIH VREDNOSTI

String KorisnickoIme = request.getParameter("UserName");

String Sifra=request.getParameter("Password");

// PROVERA DA LI POSTOJI TAKAV KORISNIK

String UPIT="Select * from tipZaposleni where KorisnickoIme='" + KorisnickoIme + "' and Sifra='" + Sifra + "'";

DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "tipZaposleni", UPIT);

int brojSlogova=objDB.DajBrojSlogova();

// AKO POSTOJI:

if (brojSlogova>0) {

response.sendRedirect("home.jsp?UserName=" + KorisnickoIme);

}

// AKO NE POSTOJI:

if (brojSlogova==0) { response.sendRedirect("neuspeh.jsp"); } %>

</body>

</html>

Bitan deo koda je importovanje (page import) klasa iz biblioteke DB koje su prethodno postavljene u WEB-

INF/classes folder. TakoĊe, bitan deo koda je ĉitanje prethodno prosleĊenog parametra naredbom

request.getParameter. Nakon toga, na uobiĉajeni naĉin se instanciraju i koriste klase, pa ukoliko postoji

korisnik sa datim podacima u bazi, vrši se redirekt (response.sendRedirect) na odgovarajuću 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");%>

Prikazujemo sa:

<%=KorisnickoIme%>

opcija za odjavu – vraćamo na formu za login <A HREF="login.jsp" border="0"> <img src="design/LogOffBela.jpg" border="0"> </A>

meni – razne segmente stranice ukljuĉujemo iz drugih fajlova opcijom include <%@include file="design/meni.jsp" %>

glavni radni deo – menja se u zavisnosti od aktuelno izabrane opcije menija, na poĉetnoj formi je

dobrodošlica: <%@include file="dobrodoslica.jsp" %>

TABELARNI PRIKAZ – primer SPISAK RADNIH MESTA

1. Sa menija se poziva pojedinaĉna forma-stranica koja ima sliĉnu strukturu kao i glavni meni, s tim da se u

prostoru za prikaz dobrodošlice prikazuju konkretni rezultati obrade podataka. Pozivanje druge jsp stranice

prosleĊivanjem parametra radi se na sledeći naĉin: <A HREF="radnomesto.jsp?UserName=<%=KorisnickoIme%>"> Radno mesto </A>

2. jsp stranica koja predstavlja glavni radni deo obiĉno sadrži:

a. import klasa na poĉetku 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();

// PREUZIMANJE PODATAKA OD DB INTERFEJSA

ResultSet rsPodaci = objDB.DajPodatke();

// INICIJALIZACIJA KLASE DBResultSet ZA

// OSNOVNE OPERACIJE SA PODACIMA IZ RESULTSETA

DBResultSet objRs = new DBResultSet();

Page 41: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

41

objRs.setResultSet(rsPodaci);

c. izvršavanje odgovarajućih operacija

d.prikaz rezultata // 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>

FILTER – primer TABELARNI PRIKAZ AKTUELNIH PROJEKATA PRIJAVLJENOG

KORISNIKA

I kod filtriranja podataka koriste se ekranske forme stranica sliĉne strukture (npr. Aktprojekti.jsp). Glavni

radni deo stranice (npr. Spisakaktproj.jsp) izvršava se u okviru odgovarajuće JSP stranice koja se poziva sa

menija uz prosleĊivanje parametra poziva npr. «?UserName=radulov” Ovako prosleĊena vrednost

parametra se koristi u okviru SQL upita kojim se izdvajaju i prikazuju željeni podaci. Naravno, filter se može

zadavati i direktno sa forme, ali u ovom primeru se koristi indirektno prosleĊivanje putem korišćenja

pozivnog parametra.

Kljuĉna razlika izmeĊu tabelarnog prikaza svih podataka i tabelarnog prikaza filtriranih podataka je u

kreiranju SQL upita sa parametrom koji se prosleĊuje 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 sadrži ovu radnu JSP stranicu,

tako da nema potrebe za dodatnim ĉitanjem parametra i uvoĊenjem novih promenljivih, već se koriste iste

promenljive.

ANALITIČKI PRIKAZ

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 mogućnošću unosa kriterijuma

filtriranja, a nakon izbora tastera Potvrdi prikazuje se u okviru iste stranice na dnu rezultat filtriranja – u ovom

sluĉaju to je samo jedan slog koji se može prikazati tabelarno, ali je preglednije – analitiĉki (vetikalni prikaz

pojedinaĉih labela sa nazivima polja i vrednostima pored).

<h2>Unesite oznaku projekta:</h2>

<form method="get">

<input type="text" name="oznakaprojekta" size="25">

<p></p>

<input type="submit" value="Potvrdi">

Page 42: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

42

<input type="reset" value="Odustani">

</form>

<%

String IDprojekta = request.getParameter("oznakaprojekta");

if ( IDprojekta != null && IDprojekta.length() > 0 ) {

%>

<h2><font color="black">Uneta oznaka projekta: <%=IDprojekta%></font></h2>

<%

DBInterface objDB1 = new DBInterface ("c:\\Evidencija.mdb", "aPROJEKAT", "select OZNAKAPROJEKTA, NAZIVPROJEKTA, OPIS,

DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA from aPROJEKAT where OZNAKAPROJEKTA='" + IDprojekta + "'");

ANALITIĈKI PRIKAZ PODATAKA: <font color="white"><b> ANALITIĈKI 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 - Najvažniji deo koda je: <FORM METHOD="GET" ACTION ="snimiprojekat.jsp">

<table border="0" width="100%">

<tr>

<td align="left"><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;Š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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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 važno istaći da je realizovano oĉitavanje podataka o prijavljenom korisniku koje je potrebno

zbog kasnijeg rada sa korisniĉkim interfejsom nakon uspešnog snimanja podataka. Koristimo input type=

hidden jer se vrednost ne ĉita sa korisniĉkog interfejsa, već se oĉitava iz promenljive koja je prethodno dobila

vrednost.

Page 43: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

43

Snimiprojekat.jsp – najvažniji deo koda:

PREUZIMANJE VREDNOSTI PROSLEDJENIH PARAMETARA

<% // preuzimanje vrednosti

String KorisnickoIme=request.getParameter("KorisnickoIme");

String Oznaka = request.getParameter("Oznaka");

String SifraOblasti = request.getParameter("SifraOblasti");

String JMBGrukovodioca = request.getParameter("JMBGrukovodioca");

String NazivProjekta = request.getParameter("Nazivprojekta");

String Opis = request.getParameter("Opis");

String DatumPocetka = request.getParameter("DatumPocetka");

String DatumPlaniranogZavrsetka = request.getParameter("DatumPlaniranogZavrsetka");

%>

REALIZACIJA UNOSA POSREDSTVOM KLASE DBINTERFACE

<%

String UPIT="INSERT INTO aPROJEKAT (OZNAKAPROJEKTA, SIFRAOBLASTI, JMBG_RUKOVODIOCA, NAZIVPROJEKTA, OPIS,

DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA,

SIFRANIVOKVALITETA) VALUES ('" + Oznaka + "','" + SifraOblasti + "','" + JMBGrukovodioca + "','" + NazivProjekta + "','" + Opis + "','" + DatumPocetka +

"','" + DatumPlaniranogZavrsetka + "','NEP')";

DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "aPROJEKAT", UPIT);

objDB.Snimi();

PROSLEDJIVANJE REDIRECT NA EKRAN USPEH RADI PRIKAZA PORUKE O USPESNOSTI

response.sendRedirect("uspeh.jsp?UserName=" + KorisnickoIme);

KORISNIČKO 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 omogućava izvršavanje JSP

stranica. Postupak instalacije i pripreme fajlova je sledeći:

1. Instalira se JRE

2. Instalira se JDK

3. Instalira se Apache Web server Tomcat

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 odgovarajući fajlovi:

a. Design – sadrži CSS fajl, fajlove slika i pomoćnih menija

b. META-INF – sadrži fajl MANIFEST.MF

c. WEB-INF – sadrži 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 raĉunara može pokrenuti iz Internet browsera, npr.

Internet Explorera pomoću sledeće URL adrese: http://localhost:8080/Obaveze/login.jsp, odnosno sa URL

adrese fakulteta http://www.tf.zr.ac.yu/Obaveze/login.jsp.

Nakon pokretanja JSP stranice dobijamo sledeći ekran:

Page 44: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

44

Nakon prijave korisnika vrsi se provera korisnickog imena i sifre.

Ako je neuspesna prijava, sledeci ekran:

Ako je uspesno prijavljen korisnik, dobijamo sledeci ekran sa glavnim menijem:

Page 45: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

45

Na glavnom meniju se nalaze podaci o prijavljenom korisniku, opcija za odjavu (LogOff – vraća na ekran za

prijavu korisnika) i stavke menija, kao linkovi ka preostalim delovima programa.

Izborom stavke menija „ŠIFARNICI” dobijamo sledeći ekran:

gde izborom podstavke menija koja se odnosi na konkretni šifarnik (u ovom sluĉaju „Radna mesta”) dobijamo

tabelarni prikaz podataka navedenog šifarnika:

Page 46: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

46

Nakon izbora opcije: „RUKOVODILAC”, dobijamo sledeći ekran:

Izborom stavke menija „Aktuelni projekti” dobijamo aktuelne projekte prijavljenog korisnika u smislu

rukovoĊenja, tj. projekte na kojima je prijavljeni korisnik u ulozi rukovodioca.

Page 47: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

47

Nakon izbora opcije „Odabrani projekat”, dobijamo sledeći ekran, sa spiskom svih projekata:

Nakon unosa oznake projekta, izdvajaju se podaci o izabranom projektu.

Page 48: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

48

Nakon izbora opcije „Novi projekat” dobijamo formu za unos podataka o novom projektu:

Page 49: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

49

Nakon unosa podataka, izbora opcije „Potvrdi” i snimanja podataka, prikazuje se sledeci ekran, sa porukom o

uspesnosti snimanja novih podataka.

Page 50: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

50

ZAKLJUČAK

U ovom radu je obraĊen problem evidencije i praćenja 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 okruženje.

Korišćena je MS Access2000 baza podataka. TakoĊe, razvijena je i web aplikacija, koristeći klase koje su

razvijene u toku implementacije desktop aplikacije.

Budući pravci razvoja obuhvataju:

1. kreiranje i konektovanje na MySQL i druge baze podataka

2. realizaciju generisanja reporta, radi omogućavanja štampe dokumenata (npr. Korišćenjem freeeware

alata «iReport» ili formiranjem html dokumenta koji bi se štampao iz browsera).

PRILOG

SADRŢAJ PRATEĆEG CD-a

FOLDER FAJL-FOLDER ALAT-FORMAT NAMENA

- Seminarski rad.doc MSWord 2002 Dokument seminarskog rada

Java Windows aplikacija Dijagrami Power Designer 6

Sybase Power Designer 10 UML dijagrami

Generisani kod Java Generisan Java kod entity klasa iz

Power Designera

Implementacija Java

Install exe Instalacija razvojnog okruženja i

potrebnih runtime biblioteka klasa

Materijal Pdf eBooks

Java Web aplikacija Install Instalacija Web servera i potrebnih

runtime biblioteka klasa

JSP aplikacija Java Klase i jsp fajlovi

Page 51: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

51

LISTING PROGRAMSKOG KODA

U nastavku je dat listing programskog koda:

Biblioteka klasa LibDBAccess

Biblioteka klasa LibApp

Korisniĉki interfejs aplikacije «EvidencijaObavezaApp» (izostavljen je automatski generisan kod)

Programski kod najvažnijih 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; }

Page 52: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

52

public boolean openConnection () throws Exception { boolean zatvorena = true; boolean otvorena= false; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //ucitavanje drajvera za pristup bazi preko ODBC databaseConnection = DriverManager.getConnection(strDriver, strUserName, strPassWord); } catch (Exception ex) { System.out.println("Greska getConnection je:" + ex); } zatvorena = databaseConnection.isClosed(); otvorena= !zatvorena; return otvorena; } public Connection getConnection() throws Exception { return databaseConnection; } public boolean closeConnection() throws Exception { databaseConnection.close(); return databaseConnection.isClosed(); } } // ----------------------------------------------------------------------------------------------------------------------- package DB; /** * * @author ljubica */ import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class DBTable { private String strTableName = ""; private Connection databaseConnection; // constructor public DBTable (String pomTable, Connection pomConnection) { this.strTableName = pomTable; this.databaseConnection = pomConnection; } public void saveDataChange (String strActiveSQL) throws Exception // izvrsava aktivne sql upite tipa insert, update i delete { Statement s = databaseConnection.createStatement(); s.execute(strActiveSQL); // aktivan SQL tipa insert, update ili delete s.close(); } public ResultSet getRecords (String SQLselect) throws Exception // = DajPodatke,izdaje rezultat u obliku resultseta na osnovu sql select naredbe { ResultSet pomRez; Statement Izraz; Izraz =databaseConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); // // podesavamo osobine resultseta, da bismo mogli da radimo sa dobijenim podacima fleksibilno pomRez= Izraz.executeQuery(SQLselect); return pomRez; } } // ---------------------------------------------------------------------------------------------------------------- package DB; /** * * @author ljubica */ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import javax.swing.table.DefaultTableModel; public class DBResultSet { private ResultSet rs; public void setResultSet(ResultSet pomRS) { rs = pomRS; } public int getRowCount() throws Exception { int pomBR=0; boolean uspeh;

Page 53: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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(); } } }

Page 54: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

54

// preuzimamo zaglavlja resultseta, tj. nazive kolona String[] NaziviKolona =getColumnNames(); int brojKolona =NaziviKolona.length; // // preuzimamo vrednosti iz tekuceg reda String vrednost=""; int i; String nazivKolone; for (i=0; i<brojKolona; i++) { nazivKolone=NaziviKolona[i]; vrednost=rs.getString(nazivKolone); ceoRow= ceoRow + vrednost + ":"; } // izdvajamo niz stringova[] vrednostiRow = ceoRow.split(":"); // return vrednostiRow; } public Object[][] getFirstDataRow() throws Exception { String[] pomVrednosti1= getDataRow(0); Object[][] pomObj= {pomVrednosti1}; return pomObj; } public DefaultTableModel getTableModel() throws Exception { String[] pomS=this.getColumnNames(); Object[][] dataSM= this.getFirstDataRow(); // prvi red je 0 DefaultTableModel model = new DefaultTableModel(dataSM, pomS); int brojSlogova=this.getRowCount(); // if (brojSlogova>1) { for (int brojPokusaja =1; brojPokusaja < this.getRowCount(); brojPokusaja++ ) { String[] pomVrednosti=this.getDataRow(brojPokusaja); model.insertRow(brojPokusaja,pomVrednosti); } } return model; } } // ---------------------------------------------------------------------------------------------------------------- package DB; /** * * @author ljubica */ import java.sql.Connection; import java.sql.ResultSet; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; public class DBTableList { private Vector vecTables = new Vector(); private Connection databaseConnection; public DBTableList (Connection databaseConnection) throws SQLException { this.databaseConnection = databaseConnection; } public void setTableList () throws SQLException { ResultSet rsList; DatabaseMetaData dmd = databaseConnection.getMetaData(); rsList = dmd.getTables(null, null, "%", null); while (rsList.next()) { if (rsList.getString(4).equalsIgnoreCase("TABLE")) { vecTables.addElement(rsList.getString(3)); } } } public void addTable (String strTableName, String SQLcreateTable) throws Exception { try { Statement s = databaseConnection.createStatement(); s.execute(SQLcreateTable); // sql izraz tipa "create table..."

Page 55: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

55

s.close(); vecTables.addElement(strTableName); } catch (SQLException ex) { throw new Exception("Greska kreiranja tabele: " + strTableName); } } public void deleteTable (String strTableName) throws Exception { try { Statement s = databaseConnection.createStatement(); s.execute("drop table " + strTableName); s.close(); vecTables.removeElement(strTableName); } catch (SQLException ex) { throw new Exception("Greska brisanja tabele: " + strTableName); } } public String[] getTableList () { String [] strTemp = new String[1]; strTemp[0] = "---"; if (vecTables.size() == 0) { return strTemp; } String[] strList = new String[vecTables.size()]; for (int i = 0; i < vecTables.size(); i++) { strList[i] = (String)vecTables.elementAt(i); } return strList; } } // ---------------------------------------------------------------------------------------------------------------------------- package DB; /** * * @author ljubica */ import java.sql.ResultSet; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import javax.swing.JOptionPane; import java.util.Calendar; import java.text.DecimalFormat; public class DBOutputFile { public static void TXT (ResultSet rsList, String strFile) throws Exception { strFile = removeExtension(strFile, ".txt"); try { BufferedWriter createDocument = new BufferedWriter(new FileWriter(strFile + ".txt")); String strLine = ""; int counter = 1; strLine = "Records from table: " + strFile; writeLine(strLine, createDocument); strLine = getTimeStamp(); writeLine(strLine, createDocument); createDocument.newLine(); while (rsList.next()) { strLine = "(" + counter + ") " + rsList.getString(1) + " [" + rsList.getInt(2) + "]"; writeLine(strLine, createDocument); counter++; } createDocument.close(); JOptionPane.showMessageDialog(null, "Records written successfully to\n" + System.getProperty("user.dir") + "\\" + strFile + ".txt", "Save", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { throw new Exception("Error writing file " + System.getProperty("user.dir") + "\\" + strFile + ".txt\nPlease check file permissions"); }

Page 56: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

56

} public static void XML (ResultSet rsList, String strFile) throws Exception { strFile = removeExtension(strFile, ".xml"); try { BufferedWriter createDocument = new BufferedWriter(new FileWriter(strFile + ".xml")); String strLine = ""; int counter = 1; strLine = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"; writeLine(strLine, createDocument); createDocument.newLine(); strLine = "<!DOCTYPE conversions["; writeLine(strLine, createDocument); createDocument.newLine(); strLine = "\t<!ELEMENT " + strFile + " (title, year)>"; writeLine(strLine, createDocument); strLine = "\t\t<!ELEMENT title (#PCDATA)>"; writeLine(strLine, createDocument); strLine = "\t\t<!ELEMENT year (#PCDATA)>"; writeLine(strLine, createDocument); createDocument.newLine(); strLine = "]>"; writeLine(strLine, createDocument); createDocument.newLine(); strLine = "<!-- " + getTimeStamp() + " -->"; writeLine(strLine, createDocument); createDocument.newLine(); strLine = "<" + strFile + ">"; writeLine(strLine, createDocument); createDocument.newLine(); while (rsList.next()) { strLine = "\t<index>" + counter + "</index>"; writeLine(strLine, createDocument); strLine = "\t<title>" + rsList.getString(1) + "</title>"; writeLine(strLine, createDocument); strLine = "\t<year>" + rsList.getInt(2) + "</year>"; writeLine(strLine, createDocument); createDocument.newLine(); counter++; } strLine = "</" + strFile + ">"; writeLine(strLine, createDocument); createDocument.close(); JOptionPane.showMessageDialog(null, "Records written successfully to\n" + System.getProperty("user.dir") + "\\" + strFile + ".xml", "Save", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { throw new Exception("Error writing file " + System.getProperty("user.dir") + "\\" + strFile + ".xml\nPlease check file permissions"); } } private static void writeLine (String strLine, BufferedWriter createDocument) throws IOException { createDocument.write(strLine, 0, strLine.length()); createDocument.newLine(); } private static String removeExtension (String strFile, String strExt) { if (strFile.toLowerCase().endsWith(strExt.toLowerCase())) { strFile = strFile.substring(0, strFile.length() - 4); } return strFile; } private static String getTimeStamp () { Calendar calNow = Calendar.getInstance(); DecimalFormat decFormat = new DecimalFormat("00"); return "Last Updated " + decFormat.format(calNow.get(Calendar.DAY_OF_MONTH)) + "\\" + decFormat.format((calNow.get(Calendar.MONTH) + 1)) + "\\" + calNow.get(Calendar.YEAR) + " at " + decFormat.format(calNow.get(Calendar.HOUR_OF_DAY)) + ":" + decFormat.format(calNow.get(Calendar.MINUTE)); } }

PROGRAMSKI KOD BIBLIOTEKE «LibApp» package LApp;

Page 57: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

57

/** * * @author ljubica */ public class AppHandler { //public static String putanja="c:\\Evidencija.mdb"; private String putanjaBaze="c:\\Evidencija.mdb"; public void setPutanjaBaze (String novaPutanja) { putanjaBaze=novaPutanja; } public String getPutanjaBaze() { return putanjaBaze; } } /*********************************************************************** * Module: Korisnik.java * Author: ljubica * Purpose: Defines the Class Korisnik ***********************************************************************/ package LApp; import DB.DBInterface; import java.sql.ResultSet; public class Korisnik { private java.lang.String JMBG; private java.lang.String Prezime; private java.lang.String Ime; private java.lang.String KorisnickoIme; private java.lang.String StatusUProgramu; public Korisnik(AppHandler app, String jmbg) { if (jmbg !="") { this.JMBG=jmbg; // preuzima iz tabele zaposleni ostala polja String NazivTabele="tipZaposleni"; String SQLUpit="select * from tipZaposleni where JMBG='" + jmbg + "'"; try { // trazimo da li postoji bar jedan zaposleni sa navedenim osobinama DBInterface dbinterfejs = new DBInterface(app.getPutanjaBaze(), NazivTabele, SQLUpit); int brojZaposlenih=dbinterfejs.DajBrojSlogova(); if (brojZaposlenih>0) { ResultSet rs= dbinterfejs.DajPodatke(); rs.first(); Prezime=rs.getString("PREZIME"); Ime=rs.getString("IME"); KorisnickoIme=rs.getString("KorisnickoIme"); StatusUProgramu=rs.getString("StatusUProgramu"); } else { }; } catch (Exception ex) { }; } else{ JMBG=""; Prezime=""; Ime=""; KorisnickoIme=""; StatusUProgramu=""; } } public java.lang.String getJMBG() { return JMBG; } //public void setJMBG(java.lang.String newJMBG) //{ // JMBG = newJMBG; //} public java.lang.String getPrezime() { return Prezime;

Page 58: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

58

} //public void setPrezime(java.lang.String newPrezime) //{ // Prezime = newPrezime; //} public java.lang.String getIme() { return Ime; } //public void setIme(java.lang.String newIme) //{ // Ime = newIme; //} public java.lang.String getKorisnickoIme() { return KorisnickoIme; } //public void setKorisnickoIme(java.lang.String newKorisnickoIme) //{ // KorisnickoIme = newKorisnickoIme; //} public java.lang.String getStatusUProgramu() { return StatusUProgramu; } //public void setStatusUProgramu(java.lang.String newStatusUProgramu) //{ // StatusUProgramu = newStatusUProgramu; //} } /*********************************************************************** * Module: clsAnalitickiPrikaz.java * Author: ljubica * Purpose: Defines the Class clsAnalitickiPrikaz ***********************************************************************/ package LApp; import java.util.*; public class clsAnalitickiPrikaz { private int brojElemenata; private String[] nizPolja; private String[] nizVrednosti; private String naslov; public int getBrojElemenata() { return brojElemenata; } public void setBrojElemenata(int newBrojElemenata) { brojElemenata=newBrojElemenata; } public String[] getnizPolja() { return nizPolja; } ublic void setnizPolja(String[] newNizPolja) { nizPolja = newNizPolja; } public String[] getnizVrednosti() { return nizVrednosti; } public void setnizVrednosti(String[] newNizVrednosti) { nizVrednosti = newNizVrednosti; } public String getNaslov() { return naslov; } public void setNaslov (String newNaslov) { naslov= newNaslov; } } /*********************************************************************** * Module: clsFilter.java * Author: ljubica * Purpose: Defines the Class clsFilter ***********************************************************************/ package LApp;

Page 59: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

59

import DB.DBInterface; import java.sql.ResultSet; public class clsFilter { private java.lang.String poljeKriterijum; private java.lang.String vrednostKriterijum; private String naslov; private String tipRezultata; private String nazivTabele; private String osnovniSQLUpit; private String natpisKriterijum; private String poljaRezultat; private int brojPolja; private String slozenUpit; private AppHandler app = new AppHandler(); public clsFilter(AppHandler app) { this.app=app; } public java.lang.String getPoljeKriterijum() { return poljeKriterijum; } public void setpoljeKriterijum(java.lang.String newPoljeKriterijum) { poljeKriterijum = newPoljeKriterijum; } public java.lang.String getVrednostKriterijum() { return vrednostKriterijum; } public void setvrednostKriterijum(java.lang.String newVrednostKriterijum) { vrednostKriterijum = newVrednostKriterijum; } public String getNaslov() { return naslov; } public void setNaslov(String newNaslov) { naslov= newNaslov; } public String getTipRezultata() { return tipRezultata; } public void setTipRezultata(String newTipRezultata) { tipRezultata= newTipRezultata; } public String getNazivTabele() { return nazivTabele; } public void setNazivTabele(String newNazivTabele) { nazivTabele= newNazivTabele; } public String getOsnovniSQLUpit() { return osnovniSQLUpit; } public void setOsnovniSQLUpit(String newOsnovniSQLUpit) { osnovniSQLUpit= newOsnovniSQLUpit; } public String getNatpisKriterijum() { return natpisKriterijum; } public void setNatpisKriterijum(String newnatpisKriterijum) { natpisKriterijum= newnatpisKriterijum; } public String getPoljaRezultat() { return poljaRezultat; } public void setPoljaRezultat(String newPoljaRezultat) { poljaRezultat= newPoljaRezultat;

Page 60: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

60

} public int getBrojPolja() { return brojPolja; } public void setbrojPolja(int newbrojPolja) { brojPolja= newbrojPolja; } public String getSlozenUpit() { return slozenUpit; } public void setSlozenupit(String newSlozenUpit) { slozenUpit= newSlozenUpit; } public clsAnalitickiPrikaz DajAnalitickePodatke() { clsAnalitickiPrikaz objAnalitika=new clsAnalitickiPrikaz(); objAnalitika.setBrojElemenata(this.getBrojPolja()); // upis vrednosti u niz POLJA radi prikaza u labeli String[] NizPolja = new String[this.getBrojPolja()]; if (this.getPoljaRezultat().contains("*")) { // obraditi ovaj slucaj! // ne bi trebalo ni da se radi, jer onda uzima: prva 4 // ili prosledjuje na tabelarni prikaz - ne obradjuje analiticki } else { String strIzmedju=","; NizPolja= this.getPoljaRezultat().split(strIzmedju); } // upis vrednosti u niz vrednosti radi prikaza u text boxu String[] NizVrednosti = new String[this.getBrojPolja()]; String vrednost; String SQLfilter=this.getOsnovniSQLUpit(); if (slozenUpit.compareTo("DA")==0) { SQLfilter=this.getOsnovniSQLUpit() + " and " + this.getPoljeKriterijum() + "='" + this.getVrednostKriterijum() + "'"; } if (slozenUpit.compareTo("NE")==0) { SQLfilter=this.getOsnovniSQLUpit() + " where " + this.getPoljeKriterijum() + "='" + this.getVrednostKriterijum() + "'"; } try{ DBInterface pomDBInterfejs = new DBInterface(app.getPutanjaBaze(), nazivTabele, SQLfilter); ResultSet pomrs=pomDBInterfejs.DajPodatke(); pomrs.next(); for (int i=0; i<this.getBrojPolja(); i++) { vrednost = pomrs.getString(NizPolja[i]); NizVrednosti[i]= vrednost; } } catch (Exception ex) { } // objAnalitika.setnizPolja(NizPolja); objAnalitika.setnizVrednosti(NizVrednosti); objAnalitika.setNaslov(this.getNaslov()); return objAnalitika; } public clsTabelarniPrikaz DajTabelarnePodatke () { String SQLfilter=this.getOsnovniSQLUpit(); if (slozenUpit.compareTo("DA")==0) { SQLfilter=this.getOsnovniSQLUpit() + " and " + this.getPoljeKriterijum() + "='" + this.getVrednostKriterijum() + "'"; } else { SQLfilter =this.getOsnovniSQLUpit() + " where " + this.getPoljeKriterijum() + "='" + this.getVrednostKriterijum() + "'"; } clsTabelarniPrikaz objTabelarniPodaci = new clsTabelarniPrikaz(this.app, this.getNazivTabele(), SQLfilter); objTabelarniPodaci.setNaslov(this.getNaslov()); return objTabelarniPodaci; } } /*********************************************************************** * Module: clsIzmena.java * Author: ljubica * Purpose: Defines the Class clsIzmena ***********************************************************************/ package LApp; import DB.DBInterface; public class clsIzmena { private String[] nizPolja;

Page 61: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

61

private String[] nizNazivaPolja; private String[] nizNovihVrednosti; private String[] nizStarihVrednosti; private String NazivTabele; private AppHandler app = new AppHandler(); // private String[] poljaKriterijum; private String[] vrednostiKriterijum; private int BrojPoljaKriterijum; public clsIzmena(AppHandler app, String nazivTabele) { this.app= app; this.NazivTabele= nazivTabele; } public String[] getPoljaKriterijum() { return poljaKriterijum; } public void setpoljaKriterijum(String[] newPoljaKriterijum) { poljaKriterijum = newPoljaKriterijum; } public String[] getVrednostiKriterijum() { return vrednostiKriterijum; } public void setvrednostiKriterijum(String[] newVrednostKriterijum) { vrednostiKriterijum = newVrednostKriterijum; } public int getBrojPoljaKriterijum() { return BrojPoljaKriterijum; } public void setBrojPoljaKriterijum(int newBrojPoljaKriterijum) { BrojPoljaKriterijum=newBrojPoljaKriterijum; } public String[] getnizPolja() { return nizPolja; } public void setnizPolja(String[] newNizPolja) { nizPolja = newNizPolja; } public String[] getnizNazivaPolja() { return nizNazivaPolja; } public void setnizNazivaPolja(String[] newNizNazivaPolja) { nizNazivaPolja = newNizNazivaPolja; } public String[] getnizStarihVrednosti() { return nizStarihVrednosti; } public void setnizStarihVrednosti(String[] newNizStarihVrednosti) { nizStarihVrednosti = newNizStarihVrednosti; } public String[] getnizNovihVrednosti() { return nizNovihVrednosti; } public void setnizNovihVrednosti(String[] newNizNovihVrednosti) { nizNovihVrednosti = newNizNovihVrednosti; } public boolean Snimi() { String SQLUpit=""; boolean uspeh=false; try { String kriterijum=""; String uslov=""; // for (int brojPokusaja =0; brojPokusaja <BrojPoljaKriterijum; brojPokusaja++ ) { uslov = poljaKriterijum[brojPokusaja] + "='" + vrednostiKriterijum[brojPokusaja] + "'"; if (brojPokusaja==0) { kriterijum = uslov; } else { if ((BrojPoljaKriterijum>1) & (brojPokusaja>0) & (brojPokusaja<BrojPoljaKriterijum)) {

Page 62: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

62

kriterijum = kriterijum + " and " + uslov; } } System.out.println("uslov:" + uslov); System.out.println("kriterijum:" + kriterijum); } // // SQLUpit="UPDATE " + NazivTabele + " SET " + nizPolja[0] + "='" + nizNovihVrednosti[0] + "', " + nizPolja[1] + "='" + nizNovihVrednosti[1] + "', " + nizPolja[2] + "='" + nizNovihVrednosti[2] + "', " + nizPolja[3] + "='" + nizNovihVrednosti[3] + "', " + nizPolja[4] + "='" + nizNovihVrednosti[4] + "' where " + kriterijum; System.out.println("update upit:" + SQLUpit); DBInterface dbinterfejs = new DBInterface(app.getPutanjaBaze(),NazivTabele, SQLUpit); dbinterfejs.Snimi(); uspeh=true; } catch (Exception ex) { uspeh=false; } return uspeh; } } /*********************************************************************** * Module: clsLogin.java * Author: ljubica * Purpose: Defines the Class clsLogin ***********************************************************************/ package LApp; import DB.DBInterface; import java.sql.ResultSet; public class clsLogin { private java.lang.String KorisnickoIme; private java.lang.String Sifra; private AppHandler app = new AppHandler(); public clsLogin(AppHandler app) { this.app= app; } public java.lang.String getKorisnickoIme() { return KorisnickoIme; } public void setKorisnickoIme(java.lang.String newKorisnickoIme) { KorisnickoIme = newKorisnickoIme; } public java.lang.String getSifra() { return Sifra; } public void setSifra(java.lang.String newSifra) { Sifra = newSifra; } public boolean Prijava () { boolean uspeh= false; String NazivTabele="tipZaposleni"; String SQLUpit="select * from tipZaposleni where KorisnickoIme='" + KorisnickoIme + "' and Sifra='" + Sifra + "'"; try { // trazimo da li postoji bar jedan zaposleni sa navedenim osobinama DBInterface dbinterfejs = new DBInterface(app.getPutanjaBaze(), NazivTabele, SQLUpit); int brojZaposlenih=dbinterfejs.DajBrojSlogova(); if (brojZaposlenih>0) { //ResultSet rs= dbinterfejs.DajPodatke(); //rs.first(); //JMBGprijavljeni = rs.getString("JMBG"); //menuBar.setVisible(true); //mainPanel.setVisible(false); uspeh=true; } else { uspeh=false; }; } catch (Exception ex) { uspeh=false; }; return uspeh;

Page 63: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

63

} public Korisnik DajKorisnika() { Korisnik aktivanKorisnik = null; // // citanje vrednosti iz baze String NazivTabele="tipZaposleni"; String SQLUpit="select * from tipZaposleni where KorisnickoIme='" + KorisnickoIme + "' and Sifra='" + Sifra + "'"; try { // trazimo da li postoji bar jedan zaposleni sa navedenim osobinama DBInterface dbinterfejs = new DBInterface(app.getPutanjaBaze(), NazivTabele, SQLUpit); int brojZaposlenih=dbinterfejs.DajBrojSlogova(); if (brojZaposlenih>0) { ResultSet rs= dbinterfejs.DajPodatke(); rs.first(); // instanciramo korisnika, da bude na raspolaganju aktivanKorisnik = new Korisnik(app, rs.getString("JMBG")); // za ostala polja osim JMBG je odgovoran Korisnik da ih obezbedi iz tabele Zaposleni // to je njegova interna stvar } else { }; } catch (Exception ex) { }; return aktivanKorisnik; } } /*********************************************************************** * Module: clsTabelarniPrikaz.java * Author: ljubica * Purpose: Defines the Class clsTabelarniPrikaz ***********************************************************************/ package LApp; import javax.swing.table.DefaultTableModel; import DB.DBInterface; public class clsTabelarniPrikaz { private DefaultTableModel model; private String naslov; private String nazivTabele; private String SQLUpit; //opciono private int selektovanired; private AppHandler app = new AppHandler(); // konstruktori public clsTabelarniPrikaz() { } public clsTabelarniPrikaz(AppHandler app, String nazivTabele, String SQLUpit) { this.app= app; this.nazivTabele= nazivTabele; this.SQLUpit= SQLUpit; FormirajModel(); } private void FormirajModel() { try { DBInterface pomDBInterfejs = new DBInterface(app.getPutanjaBaze(), nazivTabele, SQLUpit); model = pomDBInterfejs.DajModelTabele() ; } catch (Exception ex) { } } public DefaultTableModel getmodel() { return model; } public void setmodel(DefaultTableModel newModel) { model = newModel; } public int getselektovanired() { return selektovanired;

Page 64: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

64

} public void setselektovanired(int newSelektovanired) { selektovanired = newSelektovanired; } public String getNaslov() { return naslov; } public void setNaslov(String newNaslov) { naslov=newNaslov; } public String getNazivTabele() { return nazivTabele; } public void setNazivTabele(String newNazivTabele) { nazivTabele=newNazivTabele; } public String getSQLUpit() { return SQLUpit; } public void setSQLUpit (String newSQLUpit) { SQLUpit= newSQLUpit; } public DefaultTableModel DajModelTabele (){ try { DBInterface pomDBInterfejs = new DBInterface(app.getPutanjaBaze(), nazivTabele, SQLUpit); model = pomDBInterfejs.DajModelTabele() ; } catch (Exception ex) { } return model; } } /*********************************************************************** * Module: clsUnos.java * Author: ljubica * Purpose: Defines the Class clsUnos ***********************************************************************/ package LApp; import DB.DBInterface; public class clsUnos { private String[] nizPolja; private String[] nizNazivaPolja; private String[] nizVrednosti; private String NazivTabele; private AppHandler app = new AppHandler(); public clsUnos(AppHandler app, String nazivTabele) { this.app= app; this.NazivTabele= nazivTabele; } public String[] getnizPolja() { return nizPolja; } public void setnizPolja(String[] newNizPolja) { nizPolja = newNizPolja; } public String[] getnizNazivaPolja() { return nizNazivaPolja; } public void setnizNazivaPolja(String[] newNizNazivaPolja) { nizNazivaPolja = newNizNazivaPolja; } public String[] getnizVrednosti() { return nizVrednosti; } public void setnizVrednosti(String[] newNizVrednosti) { nizVrednosti = newNizVrednosti; }

Page 65: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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 KORISNIČKOG 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); } } // -------------------------------------------------------------------------------------------------------------------------------

Page 66: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

66

/* * EvidencijaObavezaDeskView.java */ package evidencijaobavezadesk; import org.jdesktop.application.ResourceMap; import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.FrameView; import org.jdesktop.application.TaskMonitor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; import javax.swing.Icon; import java.awt.Color; // import LApp.AppHandler; import LApp.clsLogin; import LApp.Korisnik; import LApp.clsTabelarniPrikaz; import LApp.clsFilter; import LApp.clsUnos; import LApp.clsIzmena; /** * The application's main frame. */ public class EvidencijaObavezaDeskView extends FrameView { // globalna konstanta public AppHandler app= new AppHandler(); private Korisnik aktivanKorisnik=null; public String putanjaBaze=app.getPutanjaBaze(); public clsLogin objLogin = new clsLogin(app); public String JMBGprijavljeni = ""; // public EvidencijaObavezaDeskView(SingleFrameApplication app) { super(app); initComponents(); menuBar.setVisible(false); mainPanel.setVisible(true); } private void PrikaziMeni(String status){ if (status.compareTo("rukovodilac")==0) { jMenuSifarnici.setVisible(true); jMenuRukovodilac.setVisible(true); jMenuSekretar.setVisible(false); jMenuZaposleni.setVisible(true); } if (status.compareTo("sekretar")==0) { jMenuSifarnici.setVisible(false); jMenuRukovodilac.setVisible(false); jMenuSekretar.setVisible(true); jMenuZaposleni.setVisible(true); } if (status.compareTo("zaposleni")==0) { jMenuSifarnici.setVisible(false); jMenuRukovodilac.setVisible(false); jMenuSekretar.setVisible(false); jMenuZaposleni.setVisible(true); } } private void PrikaziFormuGrid (String naslov, String nazivTabele, String SQLUpit) { FormTabelarniPrikaz formaGrid; clsTabelarniPrikaz clsTabela= new clsTabelarniPrikaz(app,nazivTabele,SQLUpit); clsTabela.setNaslov(naslov); formaGrid=new FormTabelarniPrikaz(clsTabela); formaGrid.setVisible(true); } private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { FormAbout formaOAutoru; formaOAutoru=new FormAbout(); formaOAutoru.setTitle("O AUTORU"); formaOAutoru.setLocation(400, 200); formaOAutoru.setVisible(true); formaOAutoru.setBackground(Color.blue); } private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { FormHelp formaPomoc; formaPomoc=new FormHelp(); formaPomoc.setTitle("O AUTORU"); formaPomoc.setLocation(400, 200); formaPomoc.setVisible(true); formaPomoc.setBackground(Color.BLUE);

Page 67: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

67

} private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid ("TABELARNI PRIKAZ PODATAKA: radno mesto", "tipRADNO_MESTO", "select * from tipRADNO_MESTO"); } private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("TABELARNI PRIKAZ PODATAKA: zvanje","tipZVANJE","select * from tipZVANJE"); } private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("TABELARNI PRIKAZ PODATAKA: rukovodeca uloga","tipRUKOVODECA_ULOGA","select * from tipRUKOVODECA_ULOGA"); } private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("TABELARNI PRIKAZ PODATAKA: zaposleni","tipZAPOSLENI","select * from tipZAPOSLENI"); } private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("TABELARNI PRIKAZ PODATAKA: radna uloga","tipRADNA_ULOGA","select * from tipRADNA_ULOGA"); } private void jMenuItem8ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("TABELARNI PRIKAZ PODATAKA: oblast projekta","tipOBLAST_PROJEKTA","select * from tipOBLAST_PROJEKTA"); } private void jMenuItem9ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("TABELARNI PRIKAZ PODATAKA: nivo kvaliteta","tipNIVO_KVALITETA","select * from tipNIVO_KVALITETA" ); } private void jMenuItem14ActionPerformed(java.awt.event.ActionEvent evt) { String sqlUpit="select nazivprojekta, datumpocetkaprojekta, datumzavrsetka from aProjekat, aUgovor, tipZaposleni where tipZaposleni.JMBG=aUgovor.JMBG and aProjekat.oznakaprojekta=aUgovor.oznakaprojekta and not (datumzavrsetka<>null) and aUgovor.JMBG='" + aktivanKorisnik.getJMBG() + "';"; PrikaziFormuGrid("Aktuelni projekti zaposlenog:" + aktivanKorisnik.getPrezime() + " " + aktivanKorisnik.getIme(),"aPROJEKAT",sqlUpit); } private void jMenuItem34ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("Aktuelni projekti rukovodioca:" + aktivanKorisnik.getPrezime() + " " + aktivanKorisnik.getIme(),"aPROJEKAT","select NAZIVPROJEKTA, OPIS, DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA from aPROJEKAT where JMBG_RUKOVODIOCA='" + aktivanKorisnik.getJMBG() + "' and not( DATUMZAVRSETKA<>null)"); } private void jMenuItem26ActionPerformed(java.awt.event.ActionEvent evt) { PrikaziFormuGrid("Zavrseni projekti rukovodioca:" + aktivanKorisnik.getPrezime() + " " + aktivanKorisnik.getIme(),"aPROJEKAT","select NAZIVPROJEKTA, OPIS, DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA from aPROJEKAT where JMBG_RUKOVODIOCA='" + aktivanKorisnik.getJMBG() + "' and ( DATUMZAVRSETKA<>null)"); } private void jMenuItem35ActionPerformed(java.awt.event.ActionEvent evt) { // TABELARNI PRIKAZ //clsFilter objFilter= new clsFilter(app); //objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); //objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); //objFilter.setNaslov("PROJEKAT"); //objFilter.setTipRezultata("tabelarno"); //objFilter.setPoljaRezultat("*"); //objFilter.setbrojPolja(0); //objFilter.setNazivTabele("aPROJEKAT"); //objFilter.setOsnovniSQLUpit("select * from aPROJEKAT"); // // ANALITICKI PRIKAZ clsFilter objFilter= new clsFilter(app); objFilter.setSlozenupit("NE"); objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); objFilter.setNaslov("PROJEKAT"); objFilter.setTipRezultata("analiticki"); objFilter.setPoljaRezultat("OZNAKAPROJEKTA,NAZIVPROJEKTA,OPIS,DATUMPOCETKAPROJEKTA"); objFilter.setbrojPolja(4); objFilter.setNazivTabele("aPROJEKAT"); objFilter.setOsnovniSQLUpit("select * from aPROJEKAT"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem13ActionPerformed(java.awt.event.ActionEvent evt) { clsUnos objUnos = new clsUnos(app, "aPROJEKAT"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,NAZIVPROJEKTA,OPIS,DATUMPOCETKAPROJEKTA,DATUMPLANIRANOGZAVRSETKA,SIFRAOBLASTI,JMBG_RUKOVODIOCA"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,NAZIV PROJEKTA,OPIS,DATUM POCETKA PROJEKTA,DATUM PLANIRANOG ZAVRSETKA,SIFRA OBLASTI,JMBG RUKOVODIOCA"; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizNazivaPolja(ListaPolja); // FormUnos formaUnos = new FormUnos(objUnos); formaUnos.setTitle("UNOS PODATAKA - PROJEKAT");

Page 68: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

68

formaUnos.setLocation(400, 200); formaUnos.setVisible(true); formaUnos.setBackground(Color.BLUE); } private void jMenuItem32ActionPerformed(java.awt.event.ActionEvent evt) { // clsFilter objFilter= new clsFilter(app); objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); objFilter.setNaslov("ANGAZOVANO OSOBLJE NA PROJEKTU"); objFilter.setTipRezultata("tabelarno"); objFilter.setPoljaRezultat("*"); objFilter.setbrojPolja(0); objFilter.setNazivTabele("aUGOVOR"); objFilter.setSlozenupit("DA"); objFilter.setOsnovniSQLUpit("select aUGOVOR.OZNAKAPROJEKTA,tipZAPOSLENI.JMBG, tipZAPOSLENI.PREZIME, tipZAPOSLENI.IME, aUGOVOR.OPIS_ZADUZENJA,aUGOVOR.DATUMPOCETKAANGAZOVANJA from aUGOVOR,tipZAPOSLENI WHERE aUGOVOR.JMBG=tipZAPOSLENI.JMBG"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem36ActionPerformed(java.awt.event.ActionEvent evt) { // TABELARNI PRIKAZ clsFilter objFilter= new clsFilter(app); objFilter.setSlozenupit("NE"); objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); objFilter.setNaslov("REALIZOVANI RADNI NALOZI PROJEKTA"); objFilter.setTipRezultata("tabelarno"); objFilter.setPoljaRezultat("*"); objFilter.setbrojPolja(0); objFilter.setNazivTabele("aRADNI_NALOG"); objFilter.setOsnovniSQLUpit("select OZNAKAPROJEKTA, OZNAKARADNOGNALOGA,OZNAKAUGOVORA,OPISZADUZENJA, DATUMZAVRSETKASVIHAKTIVNOSTI from aRADNI_NALOG"); // FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem29ActionPerformed(java.awt.event.ActionEvent evt) { clsIzmena objIzmena = new clsIzmena(app, "aPROJEKAT"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,SIFRANIVOKVALITETA,OPISREALIZOVANIHREZULTATA,OPISIZVRSENIHAKTIVNOSTI,DATUMZAVRSETKA"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,SIFRA NIVO KVALITETA,OPIS REALIZOVANIH REZULTATA,OPIS IZVRSENIH AKTIVNOSTI,DATUM ZAVRSETKA"; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizNazivaPolja(ListaPolja); // String[] ListaStarihVrednosti; String vrednosti="-,-,-,-,-"; ListaStarihVrednosti= vrednosti.split(strIzmedju); objIzmena.setnizStarihVrednosti(ListaStarihVrednosti); // objIzmena.setBrojPoljaKriterijum(1); // String[] ListaPoljaKrit=new String[1]; ListaPoljaKrit[0]= "OZNAKAPROJEKTA"; objIzmena.setpoljaKriterijum(ListaPoljaKrit); // FormIzmena formaIzmena = new FormIzmena(objIzmena); formaIzmena.setTitle("UNOS PODATAKA - ZAVRSETAK PROJEKTA"); formaIzmena.setLocation(400, 200); formaIzmena.setVisible(true); formaIzmena.setBackground(Color.BLUE); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { objLogin.setKorisnickoIme(jKorisnickoIme.getText()); objLogin.setSifra(jSifra.getText()); boolean uspeh=objLogin.Prijava(); if (uspeh==true) { aktivanKorisnik= objLogin.DajKorisnika(); JMBGprijavljeni=aktivanKorisnik.getJMBG(); // u zavisnosti od statusa u programu,stavke menija se menjaju // odnosno nisu dostupne String status =aktivanKorisnik.getStatusUProgramu(); // privatna metoda PrikaziMeni(status); menuBar.setVisible(true);

Page 69: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

69

mainPanel.setVisible(false); jTextStatus.setText("Uspesno prijavljen korisnik!"); } else { // ne prikazuje statusnu liniju jTextStatus.setText("Neuspesno prijavljivanje korisnika - nisu uneti korektni podaci!"); } } private void jMenuItem27ActionPerformed(java.awt.event.ActionEvent evt) { aktivanKorisnik=null; jKorisnickoIme.setText(""); jSifra.setText(""); menuBar.setVisible(false); mainPanel.setVisible(true); jTextStatus.setText(""); } private void jMenuItem22ActionPerformed(java.awt.event.ActionEvent evt) { String sqlUpit="select nazivprojekta, datumpocetkaprojekta, datumzavrsetka from aProjekat, aUgovor, tipZaposleni where tipZaposleni.JMBG=aUgovor.JMBG and aProjekat.oznakaprojekta=aUgovor.oznakaprojekta and (datumzavrsetka<>null) and aUGOVOR.JMBG='" + aktivanKorisnik.getJMBG() + "';"; PrikaziFormuGrid("Zavrseni projekti zaposlenog:" + aktivanKorisnik.getPrezime() + " " + aktivanKorisnik.getIme(),"aPROJEKAT",sqlUpit); } private void jMenuItem15ActionPerformed(java.awt.event.ActionEvent evt) { String sqlUpit="select nazivprojekta, aRadni_nalog.DatumPocetkaAngazovanja, aRadni_Nalog.OpisZaduzenja from aProjekat, aUgovor, aRadni_Nalog where aProjekat.OznakaProjekta=aUgovor.OznakaProjekta and aUgovor.OznakaUgovora=aRadni_nalog.Oznakaugovora and aUgovor.JMBG='" + aktivanKorisnik.getJMBG() + "'"; PrikaziFormuGrid("Radni nalozi zaposlenog:" + aktivanKorisnik.getPrezime() + " " + aktivanKorisnik.getIme(),"aPROJEKAT", sqlUpit); } private void jMenuItem21ActionPerformed(java.awt.event.ActionEvent evt) { String sqlUpit="select nazivprojekta, DATUMPOCETKAPROJEKTA, OPIS_ZADUZENJA from aProjekat, aUgovor where aProjekat.OznakaProjekta=aUgovor.OznakaProjekta and aUgovor.JMBG='" + aktivanKorisnik.getJMBG()+ "' and ((aUgovor.prihvaceno='NE') or not (aUgovor.prihvaceno<>null)) "; PrikaziFormuGrid("Potencijalni novi projekti zaposlenog:" + aktivanKorisnik.getPrezime() + " " + aktivanKorisnik.getIme(),"aPROJEKAT", sqlUpit); } private void jMenuItem33ActionPerformed(java.awt.event.ActionEvent evt) { clsFilter objFilter= new clsFilter(app); objFilter.setpoljeKriterijum("aUGOVOR.JMBG"); objFilter.setNatpisKriterijum("JMBG zaposlenog"); objFilter.setNaslov("DOSADASNJE ANGAZOVANJE ZAPOSLENOG"); objFilter.setTipRezultata("tabelarno"); objFilter.setPoljaRezultat("*"); objFilter.setbrojPolja(0); objFilter.setNazivTabele("aRADNI_NALOG"); objFilter.setSlozenupit("DA"); objFilter.setOsnovniSQLUpit("select aRADNI_NALOG.OZNAKAPROJEKTA, aRADNI_NALOG.OZNAKAUGOVORA, aRADNI_NALOG.OZNAKARADNOGNALOGA, aRADNI_NALOG.DATUMPOCETKAANGAZOVANJA, aRADNI_NALOG.DATUMZAVRSETKAANGAZOVANJA, aRADNI_NALOG.OPISZADUZENJA from aRADNI_NALOG, aUGOVOR WHERE aRADNI_NALOG.OZNAKAPROJEKTA=aUGOVOR.OZNAKAPROJEKTA and aRADNI_NALOG.OZNAKAUGOVORA=aUGOVOR.OZNAKAUGOVORA and realizovan='DA'"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem31ActionPerformed(java.awt.event.ActionEvent evt) { clsFilter objFilter= new clsFilter(app); objFilter.setpoljeKriterijum("OZNAKARADNOGNALOGA"); objFilter.setNatpisKriterijum("OZNAKA RADNOG NALOGA"); objFilter.setNaslov("REALIZOVANE AKTIVNOSTI RADNOG NALOGA"); objFilter.setTipRezultata("tabelarno"); objFilter.setPoljaRezultat("*"); objFilter.setbrojPolja(0); objFilter.setNazivTabele("aREALIZOVANA_AKTIVNOST"); objFilter.setSlozenupit("NE"); objFilter.setOsnovniSQLUpit("select DATUMIZVRSENJA, OPISIZVRSENEAKTIVNOSTI from aREALIZOVANA_AKTIVNOST"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem12ActionPerformed(java.awt.event.ActionEvent evt) { clsFilter objFilter= new clsFilter(app); objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); objFilter.setNaslov("REALIZOVANE AKTIVNOSTI PROJEKTA"); objFilter.setTipRezultata("tabelarno"); objFilter.setPoljaRezultat("*"); objFilter.setbrojPolja(0); objFilter.setNazivTabele("aREALIZOVANA_AKTIVNOST"); objFilter.setSlozenupit("NE"); objFilter.setOsnovniSQLUpit("select DATUMIZVRSENJA, OPISIZVRSENEAKTIVNOSTI from aREALIZOVANA_AKTIVNOST"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); }

Page 70: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

70

private void jMenuItem16ActionPerformed(java.awt.event.ActionEvent evt) { clsFilter objFilter= new clsFilter(app); objFilter.setSlozenupit("NE"); objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); objFilter.setNaslov("PROJEKAT"); objFilter.setTipRezultata("analiticki"); objFilter.setPoljaRezultat("OZNAKAPROJEKTA,NAZIVPROJEKTA,OPIS,DATUMPOCETKAPROJEKTA"); objFilter.setbrojPolja(4); objFilter.setNazivTabele("aPROJEKAT"); objFilter.setOsnovniSQLUpit("select * from aPROJEKAT"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem17ActionPerformed(java.awt.event.ActionEvent evt) { clsFilter objFilter= new clsFilter(app); objFilter.setpoljeKriterijum("OZNAKAPROJEKTA"); objFilter.setNatpisKriterijum("OZNAKA PROJEKTA"); objFilter.setNaslov("ZADUZENJA ZAPOSLENOG PO UGOVORU"); objFilter.setTipRezultata("analiticki"); objFilter.setSlozenupit("DA"); objFilter.setPoljaRezultat("JMBG,NAZIVRADNEULOGE,DATUMPOCETKAANGAZOVANJA,OPIS_ZADUZENJA"); objFilter.setbrojPolja(4); objFilter.setNazivTabele("aUGOVOR"); objFilter.setOsnovniSQLUpit("select JMBG,NAZIVRADNEULOGE,DATUMPOCETKAANGAZOVANJA,OPIS_ZADUZENJA from aUGOVOR, tipRADNA_ULOGA WHERE aUGOVOR.SIFRARADNEULOGE=tipRADNA_ULOGA.SIFRARADNEULOGE AND JMBG='" + aktivanKorisnik.getJMBG() + "'"); FormFilter formaFilter= new FormFilter(objFilter); formaFilter.setVisible(true); } private void jMenuItem10ActionPerformed(java.awt.event.ActionEvent evt) { clsUnos objUnos = new clsUnos(app, "aUGOVOR"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,OZNAKAUGOVORA,JMBG,SIFRARADNEULOGE,DATUMPOCETKAANGAZOVANJA,DATUMZAVRSETKAANGAZOVANJA,OPIS_ZADUZENJA"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,OZNAKA UGOVORA,JMBG RADNIKA,SIFRA RADNE ULOGE,DATUM POCETKA ANGAZOVANJA,DATUM ZAVRSETKA ANGAZOVANJA,OPIS ZADUZENJA"; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizNazivaPolja(ListaPolja); // FormUnos formaUnos = new FormUnos(objUnos); formaUnos.setTitle("UNOS PODATAKA - UGOVOR"); formaUnos.setLocation(400, 200); formaUnos.setVisible(true); formaUnos.setBackground(Color.BLUE); } private void jMenuItem11ActionPerformed(java.awt.event.ActionEvent evt) { clsUnos objUnos = new clsUnos(app, "aRADNI_NALOG"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,OZNAKAUGOVORA,OZNAKARADNOGNALOGA, DATUMPOCETKAANGAZOVANJA, DATUMZAVRSETKAANGAZOVANJA, OPISZADUZENJA, REALIZOVAN"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,OZNAKA UGOVORA,OZNAKA RADNOG NALOGA, DATUM POCETKA ANGAZOVANJA, DATUM ZAVRSETKA ANGAZOVANJA, OPIS ZADUZENJA, REALIZOVAN"; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizNazivaPolja(ListaPolja); // FormUnos formaUnos = new FormUnos(objUnos); formaUnos.setTitle("UNOS PODATAKA - RADNI NALOG"); formaUnos.setLocation(400, 200); formaUnos.setVisible(true); formaUnos.setBackground(Color.BLUE); } private void jMenuItem19ActionPerformed(java.awt.event.ActionEvent evt) { clsUnos objUnos = new clsUnos(app, "aREALIZOVANA_AKTIVNOST"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,OZNAKAUGOVORA,OZNAKARADNOGNALOGA,OZNAKAAKTIVNOSTI,DATUMIZVRSENJA,OPISIZVRSENEAKTIVNOSTI,IZVRSENA"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizPolja(ListaPolja); //

Page 71: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

71

poljaStr="OZNAKA PROJEKTA,OZNAKA UGOVORA,OZNAKA RADNOG NALOGA,OZNAKA AKTIVNOSTI,DATUM IZVRSENJA,OPIS IZVRSENE AKTIVNOSTI,IZVRSENA"; ListaPolja= poljaStr.split(strIzmedju); objUnos.setnizNazivaPolja(ListaPolja); // FormUnos formaUnos = new FormUnos(objUnos); formaUnos.setTitle("UNOS PODATAKA - IZVRSENA AKTIVNOST"); formaUnos.setLocation(400, 200); formaUnos.setVisible(true); formaUnos.setBackground(Color.BLUE); } private void jMenuItem30ActionPerformed(java.awt.event.ActionEvent evt) { clsIzmena objIzmena = new clsIzmena(app, "aRADNI_NALOG"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,OZNAKAUGOVORA,OZNAKARADNOGNALOGA,SIFRANIVOKVALITETA,OPISKVALITETAREALIZACIJE"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,OZNAKA UGOVORA,OZNAKA RADNOG NALOGA,SIFRA NIVO KVALITETA,OPIS KVALITETA REALIZACIJE"; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizNazivaPolja(ListaPolja); // String[] ListaStarihVrednosti; String vrednosti="-,-,-,-,-"; ListaStarihVrednosti= vrednosti.split(strIzmedju); objIzmena.setnizStarihVrednosti(ListaStarihVrednosti); // // objIzmena.setBrojPoljaKriterijum(3); // String[] ListaPoljaKrit; String poljaKrit="OZNAKAPROJEKTA,OZNAKAUGOVORA,OZNAKARADNOGNALOGA"; ListaPoljaKrit= poljaKrit.split(strIzmedju); objIzmena.setpoljaKriterijum(ListaPoljaKrit); // FormIzmena formaIzmena = new FormIzmena(objIzmena); formaIzmena.setTitle("UNOS PODATAKA - KVALITET ZAVRSENOG RADNOG NALOGA"); formaIzmena.setLocation(400, 200); formaIzmena.setVisible(true); formaIzmena.setBackground(Color.BLUE); } private void jMenuItem18ActionPerformed(java.awt.event.ActionEvent evt) { clsIzmena objIzmena = new clsIzmena(app, "aUGOVOR"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,OZNAKAUGOVORA,JMBG,SIFRARADNEULOGE,PRIHVACENO"; String strIzmedju=","; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,OZNAKA UGOVORA,JMBG,SIFRA RADNE ULOGE,PRIHVACENO"; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizNazivaPolja(ListaPolja); // String[] ListaStarihVrednosti; String vrednosti="-,-,-,-,-"; ListaStarihVrednosti= vrednosti.split(strIzmedju); objIzmena.setnizStarihVrednosti(ListaStarihVrednosti); // // objIzmena.setBrojPoljaKriterijum(2); // String[] ListaPoljaKrit; String poljaKrit="OZNAKAPROJEKTA,OZNAKAUGOVORA"; ListaPoljaKrit= poljaKrit.split(strIzmedju); objIzmena.setpoljaKriterijum(ListaPoljaKrit); // FormIzmena formaIzmena = new FormIzmena(objIzmena); formaIzmena.setTitle("UNOS PODATAKA - UCESCE NA PROJEKTU"); formaIzmena.setLocation(400, 200); formaIzmena.setVisible(true); formaIzmena.setBackground(Color.BLUE); } private void jMenuItem20ActionPerformed(java.awt.event.ActionEvent evt) { clsIzmena objIzmena = new clsIzmena(app, "aRADNI_NALOG"); String[] ListaPolja= new String[8]; String poljaStr="OZNAKAPROJEKTA,OZNAKAUGOVORA,OZNAKARADNOGNALOGA,DATUMZAVRSETKASVIHAKTIVNOSTI,REALIZOVAN"; String strIzmedju=",";

Page 72: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

72

ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizPolja(ListaPolja); // poljaStr="OZNAKA PROJEKTA,OZNAKA UGOVORA,OZNAKA RADNOG NALOGA,DATUM ZAVRSETKA SVIH AKTIVNOSTI,REALIZOVAN"; ListaPolja= poljaStr.split(strIzmedju); objIzmena.setnizNazivaPolja(ListaPolja); // String[] ListaStarihVrednosti; String vrednosti="-,-,-,-,-"; ListaStarihVrednosti= vrednosti.split(strIzmedju); objIzmena.setnizStarihVrednosti(ListaStarihVrednosti); // // objIzmena.setBrojPoljaKriterijum(3); // String[] ListaPoljaKrit; String poljaKrit="OZNAKAPROJEKTA,OZNAKAUGOVORA,OZNAKARADNOGNALOGA"; ListaPoljaKrit= poljaKrit.split(strIzmedju); objIzmena.setpoljaKriterijum(ListaPoljaKrit); // FormIzmena formaIzmena = new FormIzmena(objIzmena); formaIzmena.setTitle("UNOS PODATAKA - ZAVRSETAK RADNOG NALOGA"); formaIzmena.setLocation(400, 200); formaIzmena.setVisible(true); formaIzmena.setBackground(Color.BLUE); } // -------------------------------------------------------------------------------------------------------------------------

/* * FormAbout.java * * Created on 28.03.2009., 18.58.28 */ package evidencijaobavezadesk; /** * * @author ljubica */ public class FormAbout extends javax.swing.JFrame { /** Creates new form FormAbout */ public FormAbout() { initComponents(); } 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 FormAbout().setVisible(true); } }); } // -------------------------------------------------------------------------------------------------------------------------------

Page 73: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

73

/* * FormAnalitika.java * * Created on 06.04.2009., 15.44.32 */ package evidencijaobavezadesk; /** * * @author ljubica */ import javax.swing.JLabel; import LApp.clsAnalitickiPrikaz; public class FormAnalitika extends javax.swing.JFrame { /** Creates new form FormAnalitika */ public FormAnalitika(clsAnalitickiPrikaz objAnalitika) { //, String[] nazivpolja, String[] vrednost initComponents(); // nazivi polja na labelama jLabel1.setText(objAnalitika.getnizPolja()[0].toString()); jLabel2.setText(objAnalitika.getnizPolja()[1].toString()); jLabel3.setText(objAnalitika.getnizPolja()[2].toString()); jLabel4.setText(objAnalitika.getnizPolja()[3].toString()); // // vrednosti na text boxu // jTextArea1.setText(objAnalitika.getnizVrednosti()[0].toString()); jTextArea2.setText(objAnalitika.getnizVrednosti()[1].toString()); jTextArea3.setText(objAnalitika.getnizVrednosti()[2].toString()); jTextArea4.setText(objAnalitika.getnizVrednosti()[3].toString()); this.setTitle(objAnalitika.getNaslov()); this.setLocation(400, 200); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FormAnalitika(null).setVisible(true); } }); } } // ---------------------------------------------------------------------------------

/* * FormFilter.java

Page 74: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

74

* * Created on 30.03.2009., 12.29.31 */ package evidencijaobavezadesk; /** * * @author ljubica */ import LApp.clsFilter; public class FormFilter extends javax.swing.JFrame { /** Creates new form FormFilter */ private clsFilter objFilter; public FormFilter(clsFilter objFilter) { this.objFilter=objFilter; initComponents(); jTextFilter.setText(""); jNazivPolja.setText(objFilter.getNatpisKriterijum()); this.setTitle("FILTER PODATAKA:" + objFilter.getNaslov()); this.setLocation(400, 200); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // OCITAVANJE VREDNOSTI objFilter.setvrednostKriterijum(jTextFilter.getText()); // PRIKAZ if (objFilter.getTipRezultata().compareTo("tabelarno")==0) { // prikazuje formu sa tabelarnim podacima FormTabelarniPrikaz frmTabela = new FormTabelarniPrikaz (objFilter.DajTabelarnePodatke()); frmTabela.setVisible(true); } if (objFilter.getTipRezultata().compareTo("analiticki")==0) { // prikazuje formu sa pojedinacnim podacima - analiticki FormAnalitika frmTabela = new FormAnalitika (objFilter.DajAnalitickePodatke()); frmTabela.setVisible(true); } } private void jButton2ActionPerformed(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 FormFilter(null).setVisible(true); } }); } // ---------------------------------------------------------------------------------------------------------

/* * 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) {

Page 75: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

75

this.dispose(); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FormHelp().setVisible(true); } }); } } // -----------------------------------------------------------------------------------------------------------------

/ * 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();

Page 76: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

76

nizVrednosti[3]=jTextPolje4.getText(); nizVrednosti[4]=jTextPolje5.getText(); // // kriterijum za pristupanje slogu String[] nizVrednostiKriterijum= new String[8]; // for (int brojPokusaja =0; brojPokusaja <objIzmena.getBrojPoljaKriterijum(); brojPokusaja++ ) { nizVrednostiKriterijum[brojPokusaja]=nizVrednosti[brojPokusaja]; } // objIzmena.setvrednostiKriterijum(nizVrednostiKriterijum); // // objIzmena.setnizNovihVrednosti(nizVrednosti); boolean uspeh=objIzmena.Snimi(); if (uspeh==true) { MsgBox poruka= new MsgBox("OBAVESTENJE","Uspesno snimanje unetih podataka!"); poruka.setLocation(400, 200); poruka.setVisible(true); } else { MsgBox poruka= new MsgBox("OBAVESTENJE","Neuspesno snimanje unetih podataka!"); poruka.setLocation(400, 200); poruka.setVisible(true); } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FormIzmena(null).setVisible(true); } }); } } // ----------------------------------------------------------------------------------------------------------

/* * 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);

Page 77: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

77

pack(); table.setVisible(true); table.setBackground(Color.WHITE); table.setAutoResizeMode(5); // DA MOZE DA SE URADI RESIZE ZA SVE KOLONE } catch (Exception ex) { } initComponents(); this.setTitle(clsTabela.getNaslov()); this.setLocation(400, 200); } 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 FormTabelarniPrikaz(null).setVisible(true); } }); } } // ----------------------------------------------------------------------------------------------------

/* * 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();

Page 78: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

78

nizVrednosti[1]=jTextPolje2.getText(); nizVrednosti[2]=jTextPolje3.getText(); nizVrednosti[3]=jTextPolje4.getText(); nizVrednosti[4]=jTextPolje5.getText(); nizVrednosti[5]=jTextPolje6.getText(); nizVrednosti[6]=jTextPolje7.getText(); objUnos.setnizVrednosti(nizVrednosti); boolean uspeh=objUnos.Snimi(); if (uspeh==true) { MsgBox poruka= new MsgBox("OBAVESTENJE","Uspesno snimanje unetih podataka!"); poruka.setLocation(400, 200); poruka.setVisible(true); } else { MsgBox poruka= new MsgBox("OBAVESTENJE","Neuspesno snimanje unetih podataka!"); poruka.setLocation(400, 200); poruka.setVisible(true); } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FormUnos(null).setVisible(true); } }); } } // ---------------------------------------------------------------------------------------------------------------

/* * 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); } }); } }

Page 79: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

79

Programski kod web aplikacije «Obaveze»

(najvažniji 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>&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <tr><td><font face="Verdana" size="2">PRIJAVA KORISNIKA:</font></td> <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <tr><td> <FORM METHOD="GET" ACTION ="prijava.jsp"> <table border="0" > <tr> <td align="left"><font face="Verdana" size="2">Korisničko 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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>

Page 80: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

80

PRIJAVA.JSP <%@ page import="DB.DBInterface" %> <%@ page import="DB.DBResultSet" %> <%@ page import="java.sql.ResultSet" %> <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"> <% // CITANJE PROSLEDJENIH VREDNOSTI String KorisnickoIme = request.getParameter("UserName"); String Sifra=request.getParameter("Password"); // PROVERA DA LI POSTOJI TAKAV KORISNIK String UPIT="Select * from tipZaposleni where KorisnickoIme='" + KorisnickoIme + "' and Sifra='" + Sifra + "'"; DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "tipZaposleni", UPIT); int brojSlogova=objDB.DajBrojSlogova(); // AKO POSTOJI: if (brojSlogova>0) { response.sendRedirect("home.jsp?UserName=" + KorisnickoIme); } // AKO NE POSTOJI: if (brojSlogova==0) { response.sendRedirect("neuspeh.jsp"); } %> </body> </html> HOME.JSP <html> <head><title>EVIDENCIJA OBAVEZA - glavni meni</title></head> <META http-equiv=Content-Type content="text/html; charset=windows-1250"> <LINK REL="STYLESHEET" TYPE="TEXT/CSS" HREF="design/style.css"> <% // CITANJE PROSLEDJENIH VREDNOSTI String KorisnickoIme = request.getParameter("UserName");%> <table border="0" align="center" width=50%> <tr><td> <table border="0" align="center" width=95%> <tr> <td align="right" width=100%> <b> <font face="Verdana" color="#ADDAF1" size="2">Korisnik: &nbsp;&nbsp; <%=KorisnickoIme%></b></font>&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <A HREF="login.jsp" border="0"> <img src="design/LogOffBela.jpg" border="0"> </A> </td> </tr> </table> </td></tr> <tr><td> <%@include file="design/zaglavljeAll.jsp" %></td></tr> <tr><td> <table border="0" align="left" width=100%> <tr><td width=15%><%@include file="design/meni.jsp" %> </td> <td width=60% bgcolor=""white"> <%@include file="dobrodoslica.jsp" %></td></tr> </table> </td> </tr> </table> </body> </html> RADNOMESTO.JSP <html> <head><title>EVIDENCIJA OBAVEZA - šifarnici </title></head> <META http-equiv=Content-Type content="text/html; charset=windows-1250"> <LINK REL="STYLESHEET" TYPE="TEXT/CSS" HREF="design/style.css"> <% // CITANJE PROSLEDJENIH VREDNOSTI String KorisnickoIme = request.getParameter("UserName");%> <table border="0" align="center" width=50%> <tr><td> <table border="0" align="center" width=95%> <tr> <td align="right" width=100%> <b> <font face="Verdana" color="#ADDAF1" size="2">Korisnik: &nbsp;&nbsp; <%=KorisnickoIme%></b></font>&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <A HREF="login.jsp" border="0"> <img src="design/LogOffBela.jpg" border="0"> </A> </td> </tr> </table> </td></tr> <tr><td> <%@include file="design/zaglavljeAll.jsp" %></td></tr> <tr><td> <table border="0" align="left" width=100%>

Page 81: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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>&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </td> </tr> <tr> <td ALIGN="center"> <font face="Verdana" color="WHITE" size="3">&nbsp;&nbsp; &nbsp;&nbsp;<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>

Page 82: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

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> &nbsp;&nbsp;&nbsp;&nbsp; </td> </tr> <tr> <td> <B><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp;UNOS NOVOG PROJEKTA</FONT></B> </td> </tr> <tr> <td> &nbsp;&nbsp;&nbsp;&nbsp; </td> </tr> <tr> <td> <FORM METHOD="GET" ACTION ="snimiprojekat.jsp"> <table border="0" width="100%"> <tr> <td align="left"><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;Š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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>

Page 83: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

83

<body bgcolor="white"> <% // preuzimanje vrednosti String KorisnickoIme=request.getParameter("KorisnickoIme"); String Oznaka = request.getParameter("Oznaka"); String SifraOblasti = request.getParameter("SifraOblasti"); String JMBGrukovodioca = request.getParameter("JMBGrukovodioca"); String NazivProjekta = request.getParameter("Nazivprojekta"); String Opis = request.getParameter("Opis"); String DatumPocetka = request.getParameter("DatumPocetka"); String DatumPlaniranogZavrsetka = request.getParameter("DatumPlaniranogZavrsetka"); %> <% String UPIT="INSERT INTO aPROJEKAT (OZNAKAPROJEKTA, SIFRAOBLASTI, JMBG_RUKOVODIOCA, NAZIVPROJEKTA, OPIS, DATUMPOCETKAPROJEKTA, DATUMPLANIRANOGZAVRSETKA, SIFRANIVOKVALITETA) VALUES ('" + Oznaka + "','" + SifraOblasti + "','" + JMBGrukovodioca + "','" + NazivProjekta + "','" + Opis + "','" + DatumPocetka + "','" + DatumPlaniranogZavrsetka + "','NEP')"; DBInterface objDB = new DBInterface ("c:\\Evidencija.mdb", "aPROJEKAT", UPIT); objDB.Snimi(); response.sendRedirect("uspeh.jsp?UserName=" + KorisnickoIme); %> </body> </html> SPISAKAKTPROJ.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>&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </td> </tr> <tr> <td ALIGN="center"> <font face="Verdana" color="WHITE" size="3">&nbsp;&nbsp; &nbsp;&nbsp;<b>AKTUELNI PROJEKTI RUKOVODIOCA: <%=KorisnickoIme%></B> </font> </td> </tr> <tr> </table> <% // ----------prikaz svih vrednosti------------------ %> <% 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)"); 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> <td width=170> <b><% out.println (zaglavlje[2]); %></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> <td width=170> <% out.println (prviRed[2]); %> </td> </tr> </table> <% for (int brojPokusaja =1; brojPokusaja < objRs.getRowCount(); brojPokusaja++ ) { String[] pomVrednosti=objRs.getDataRow(brojPokusaja); %>

Page 84: UNIVERZITET U NOVOM SADU - TFZR - Index · 2020. 5. 8. · 1. UVOD Zadatak seminarskog rada Metode i alati korišćeni u realizaciji seminarskog rada ... Realizovati program putem

84

<table border=1 align="center" bgcolor="white"> <tr> <td width=160> <% out.println (pomVrednosti[0]); %> </td> <td width=170> <% out.println (pomVrednosti[1]); %> </td> <td width=170> <% out.println (pomVrednosti[2]); %> </td> </tr> </table> <% } %> <table align="center"> <tr> <td> <b><% out.println ("Ukupno:" + brSlogova);%> </b> </td> </tr> </table> </body> </html>