Professional Documents
Culture Documents
Predmet:
Viši programski jezici i RAD alati
S.U.T.U.R KRŠIĆ
Seminarski rad
Predmetni nastavnik:
Prof. dr Zoran Ž. Avramović, dipl.inž.elek.
Student:
Aleksa Marčeta
Indeks br. 38-17/RPI-S
SADRŽAJ
1. Uvod ..................................................................................................................... 3
2. O samom projektu ................................................................................................ 4
2
S.U.T.U.R KRŠIĆ
1. Uvod
3
S.U.T.U.R KRŠIĆ
2. O samom projektu
Kao što sam rekao krenuću prvo od opisivanja samog projekta i njegove
svrhe. Pošto sam objasnio kako smo kolega i ja došli na ideju ovog projekta sada
je red da se detaljnije osvrnem na sam projekat.
S.U.T.U.R Kršić, ime projekta je dato po imenu firme koja se bavi
pogrebnim uslugama, prodajom opreme, organizovanje ručka, prevza, hladnjače
itd. Vlasnik ove firme je naš prijatelj preko kog smo došli do projekta tako da
smo zaključili da ovo ime najviše odgovara ovoj pomalo i morbidnoj temi.
Projekat se odma od samog početka i prvih dana svog nastanka granao
na tri glavne strane, administratorska grana, korisnička i gost. Sad unaprijed ću
napomenuti da smo svijesni nekih nelogičnosti u programu, ali na kraju ovo je
samo prezentacioni program, koji se neće prodavati i koristiti za bilo kakvu
finansijsku dobit, njegova primarna uloga je da bude pokazatelj znanja koje smo
koleg i ja postigli, no da se vratim na temu. Kao što sam već spomenuo, imamo
tri ogranka. Administratorski ogranam služi za kontrolisanje robe i radnika, dok
korisnicki ogranak predstavlja ustvari obične radnike firme tako da nemaju neku
veliku mogućnost manipulacije u samom programu. Zadnji ogranak je gost, to je
jedini ogranak koji nema svoju način prijate povezan sa bazom. već pristupa
programu kao posmatrač sa ulogom kupca. Gost je nalog napravljen i namjenjen
da služi kao kupac proizvoda koje firma nudi. Tu se već vidi prva nelogičnost, jer
po nekom logičnom načinu zaključivanja, osoba mora da skine aplikaciju recimo
sa interneta, instalira je i tek onda da izabere šta će da kupi. Tako da ovaj sistem
kupovine najviše bi odgovarao nekoj aplikaciji koja bi bila na intenetu, radjena u
PHP-u ili Python-u.
4
S.U.T.U.R KRŠIĆ
5
S.U.T.U.R KRŠIĆ
Pored ovih nama kao administratorima najbitnijih logova, uveli smo i uspješne i
neuspješne pokušaje kupovine koji su bitni menadžeru. Treći i poslednji logovi su
logovi izbrisanih korisnika od strane administratora. Tu je prikazano kad je
administrator izbrisao, ko je administrator koji je izbrisao i koji je korisnik izbrisan.
6
S.U.T.U.R KRŠIĆ
Način na koji pravimo ove log datoteke je taj da, promjenjivoj dodijelimo vrijednost
trenutnog vremena, koju u kombinaciji sa korisničkim imemon i lozinkom
zapisujemo u .txt tip datoteke. Na slici je prikazan princip za uspješne prijave, isti
šablon se koristi i za ostale log datoteke samo sa malim izmjenama.
2.1.1. Dodavanje novog korisnika
7
S.U.T.U.R KRŠIĆ
Na slici 6. je prikazan samo kod vezan za lozinku u „Unos Radnika“ heš kod će biti
naknadno prikazan u jednom od narednih poglavlja.
8
S.U.T.U.R KRŠIĆ
Nakon što smo unijeli radnike sada je red da ih i pretražujemo, kako bi prvo
koliko radnika imamo, ko su radnici i po potrebi da ih izbrišemo. Pretraga radnika je
nastala kao sasvim nova forma odvojena od „Pregleda radnika“ radi
pojednosatvljivanja posla i pregleda jer upočetku je bilo predviđeno da te dvije forme
budu jedna.
9
S.U.T.U.R KRŠIĆ
10
S.U.T.U.R KRŠIĆ
Na slici 11. vidimo kod koji se koristi da dobijemo listu korisnika sa koje želimo da
odaberemo nekog i posebno ga pregledamo. Korišćena je već postojeća konekcija sa
bazom koju ću opisati u poglavlju baze podataka.
Tražeći da nam baza prikaže sve podatke iz tabele „korisnici“ gdje je korisnički ID
jednak onome koji smo izabrali da pregledamo, vršimo popunjavanje tabele
„user_table“ sa tim podatcima, koristeći adapter vršimo to popunjavanje i sada
poljima za tekst dodjeljujemo vrijednost koje se nalaze u tabeli „user_table“ kako bi
je popunili. Za dobijanje pozicije je pisan poseban upit, gdje radimo „JOIN“ za
spajanje tabela korisnici i pozicija na osnovu istog ID (u tabeli korisnici
„radna_pozicija“ ima vrijednost intedžera i vezana je za pozicija_id). Gdje je
korisnik onaj kojeg smo odabrali. Na istoj slici se vidi kako je dugme „Izbriši
korisnika“ podešeno da nestane.
11
S.U.T.U.R KRŠIĆ
Broj 1 označava dugme koje nam otključava polja kako bi vršili izmjene i klikom na
to dugme ono nestaje i pojavljuju se dva nova prikazana na slici 14.
Ovde možemo sačuvati izmjene o
radnicima ili jednostavno odlučiti da
ne želimo ništa od izmjena da
sačuvamo ze ih poništavamo. Broj 2
sa slike 13. predstavlja imena kolona
Slika 14. Sačuvaj, poništi izmjene na pregledu radnika
koje ce biti popunjene, popunjavanje
je automatizovano i na prostoru gdje je broj 3 se automtski prikazuje lista svih
radnika. Za popunjavanje ove tabele koristio se alat „DataSet“.
12
S.U.T.U.R KRŠIĆ
2.1.4. Skladište
13
S.U.T.U.R KRŠIĆ
Korisnički tip naloga nije ni izbliza bogat kao administratorski koji je bio
glavni fokus tokom ovog projekta. To naravno ne znači da je ovaj dio zapostavljen.
Saznali smo ukratko šta sve može administratorski panel i kroz jednu od opcija iz
administratorskog naloga uveli nas u neke od osnova korisničkog. Korisnički nalog
se po sebi dijeli na osnovu sledećih pozicija:
Grobar
Vozač
Konobar
Kuhar
S.U.T.U.R Kršić se na bavi samo prodajom pogrebne opreme, već sam u počteku
naveo sve čime se oni bave, te za te stvari su im potrebni njivohi radnici. Kada
orgnizuju ručak za sahrane potrebni su kuhari i konobari koji će tu raditi. Korisnički
panel je sam po sebi poprilično skroman, sadrži skladište i informacije o korisniku.
Skladište je slično ono administratorskom sa nekim sitnim izmjenama, isto
popunjeno pomoću DataSet-a. Za razliku od administratorskog, korisnički panel ima
sve kolone zaključane osim one za količinu, korisnici automatski mogu mjenjati
količinu stvari u skladištu.
14
S.U.T.U.R KRŠIĆ
15
S.U.T.U.R KRŠIĆ
U ovom kodu nam se prvi put pojavilo povlačenje promjenjive iz druge forme, kako
bi smo prepoznali za kog korisnika trebamo da očitamo podatke, iz prove forme smo
nakon prijave povukli informaciju koji se to korisnik prijavi na osnovu toga pomoću
„WHERE“ komande izvukli tražene informacije.
Select Case grananje nam na primjeru sa slike 19. prikazuje kako smo dobijali
vrijednosti za mjesec kasnije upotrebljene u kodu ispod kako bi uspješno izračunali
platu za svaki dan.
16
S.U.T.U.R KRŠIĆ
SQL upit u drugom dijelu koda počinje tako što dodjeljujemo skalarnu promjenjivu
koja će nam služiti kao početni datum. Definišemo ispod nje novu skalarnu
promjenjivu koja se zove mjesec i dobija vrijednost mjeseca koju smo u prošlom
kodu prikazali. Naredna skalarna promjenjiva je traženi datum, koja ima vrijednost
samo mjeseca od početnog datuma + vrijednost „@Mjesec“ što znači da ako je
mjesec nula mi dobijamo vrijednost od Januar + 0 = Januar, da nam je „@Mjesec“ sa
vrijednošću 1 to bi bilo Januar + 1 = Februar. SQL komande ne funkcionišu ovako,
ovo je recimo pseudo kod kako u nekoj teoriji gore navedena komanda funkcioniše.
Dodjeljuemo našem upitu novu promjenjivu, radni dani koja će ustvari izračunati
koliko dana ima mjesec. Radni dani sa formulom FORMAT od traženog datuma koji
recimo ima vrijednost februar traži zadnji dan, koji je trenutno 28. Ispod njega
dodjeljujemo zadnju varijablu dana rađeno. Krećemo sa pretpostavkom da nema
svako mjesec isti broj radnih dana, te da nema svaki radnik iste radne dane. Zato
ćemo računati radne dane na osnovu toga da ako mjesec ima 31 dan onda će radnici
imati 22 radna dana, ako mjesec ima 30 dana radnici imaju 19 radnih dana i na kraju
ako je mjesec februar to jeste ako ima ispot 30 dana imamo 17 radnih dana. Praznici i
godišnji nisu uračunati u ovim računicama. Na početku predavanja i vježbi nam je
rečeno. Sve što se može izračunati ne treba biti zapisano u bazi, već upravo
izračunato kad se stvori potreba za tim. Tako i mi ovde koristimo radne dane možeći
17
S.U.T.U.R KRŠIĆ
ih sa satnicom koju neka pozicija ima i sa radnim satima u danu jer opet nema svaka
pozicija isto radnih sati.
2.3. Gost
Poslednji „tip naloga“ na koji ćemo se osvrnuti je gost. Gost sam po sebi nije tip
naloga već samo pokretanje programa i korišćenje njegovih funkcija bez prijave.
Njegova jedina mogućnost je naručivanje opreme. Već je spomenuto da je ovo
funkcija kojo bi bilo najbolje da je za internet aplikaciju napravljena, ali ovde se
bavimo prezentacionim projektom. U sklopu gost forme, odlučili smo da radi
postizanja više znanja, kolega i ja napravimo novi program i pokušamo prebaciti
vrijednost iz jednog programa u drugi i isto tako pokrenuti jedan program iz drugog.
Na slici 21. vidimo kako izgleda korpa za kupovinu, imamo listu proizvoda sa
nazivom, pored količina i cijena u KM. U korpu stavljamo broj koliko artikala želimo
i dobijamo ispisan iznos sa strane koji se automatski sabira i ispisuje u polju desno od
18
S.U.T.U.R KRŠIĆ
19
S.U.T.U.R KRŠIĆ
Kako bi čitav kod mogao fino stati, poruku sam skratio, i na mjesto „OVDE IDE
LOZINKA“ namjerno nisam napisao svoju u seminarskom radu, ali na prezentaciji
projekta će vjerovatno biti zajedno sa nekim emailom napravljenim striktno za
prezentaciju i projekat.
Početno izabrana kartica nam je MasterCard tako da je zato ostavljamo kao i ELSE
na IF grananju. Na osnovu izabrane kartice i podataka unesenih u bazi mi
provjeravamo da li neko sa tim informacijama postoji. U slučaju da su informacije
ispravne pomoću adaptera mi punimo tabelu napravljenu samo za prijem tih podataka
iz baze.
20
S.U.T.U.R KRŠIĆ
U ovom kodu na slici 28. vidimo nastavak onog sa slike 27. ako je broj redova u
tabeli koju smo pokušali popuniti program nam javlja da nismo unijeli tačne
informacije. U slučaju da je tabela popunjena, mi preko primarnog ključa (CVV)
tražimo stanje računa iz sasvim druge tabele u bazi i popunjavamo drugu tabelu sa
novčanim iznosom. Tek sada dolazi do provjere stanja računa, novo stanje računa je
jednako trenutno – cijena povučena iz prvog programa i tu novu vrijednost sada
unosimo u bazu.
21
S.U.T.U.R KRŠIĆ
3. Dodatni kod
U kod koji nije naveden preko formi koje sam do sada prikazivao, svrstavam kod
za povezivanje sa bazom podataka i enkrpciju (heš) pored ovih ću prikazati još
login formu koja nije vezana za naloge. Kako ne bi svaki put bili prisiljeni da na
svakoj novoj formi iznova pravimo vezu sa bazom, kolega i ja smo napravili
jednu vezu i pozivamo je svaki put kad nam treba baza.
Heš metod zajedno sa dva grananja jedno koje se koristi u pokušaju prijave i drugo
koje koristimo za hešovanje lozinke tokom pravljenja novog naloga.
HashStore promjenjiva zadužena za rad sa lozinkom iz forme za prijavu pravi heš
dužine 31 karakter pomoću MD5 od nečeg navedenog u zagradi () kod nas je u
primjeru naveden Prijava.Password_form_Box.Text, što znači tekst koji unosimo
kada se pokušavamo prijaviti. Kasnije se sadržaj iz HashStore promjenjive poredi sa
lozinkom iz baze kako bi provjerili da li je korisnik unjeo ispravne kredencijale.
22
S.U.T.U.R KRŠIĆ
23
S.U.T.U.R KRŠIĆ
24
S.U.T.U.R KRŠIĆ
4. Baza podataka
Već je pomenuto da je baza koja se koristi MSSQL, tako da ćemo moći priložiti i
dijagram, sliku tabela i skriptu za instaliranje baze.
Ovde nam se pojavljuju sve tabele koje smo do sada vidjeli u kodu ili spomenuli.
Nismo išli previše u detalje sa pravljenje više tabela pošto je projekat sam po sebi
opširan tako da su za svaku oblast dovoljne po dvije tabele.
Imamo naziv_opreme tabelu koja u sebi sadrži ustvari ime od čega je oprema i ID
kao primarni ključ. Šta mislim pod ime može se vidjeti na slici 35.
Ovo je ustvari tip kojem naša roba pripada.
25
S.U.T.U.R KRŠIĆ
Oprema u sebi sadrži našu robu, opremu koju prodajemo, znači nešto od navedenog
iz tabele naziv_opreme, samo daleko opširnije.
26
S.U.T.U.R KRŠIĆ
Kako bi komplet tabela stala, morali smo suziti polja. A da ne bi zaboravili koja
lozinka pripada kom korisniku napravili
smo dodatnu .txt datoteku sa svim
lozinkama i korisničkim ID. Kada se radi
sa heš metodima i uz to koristi puno
različitih naloga za različitim lozinkama
lako se zaboravi kom nalogu je koja bila
dodjeljena.
Lista kreditnih kartica i vlasnika tih istih kartica. Radi uvjerljivije prezentacije i kako
ne bi bili u potrebi da stalno otvaramo bazu podataka i iz nje kopiramo i unosimo ove
podatke, napravili smo partice koje ćemo koristiti.
27
S.U.T.U.R KRŠIĆ
Tabele su poprilično jasne same po sebi kad se pogledaju i kad se utvrdi veza između
njih. Jedina pometnja koja može postojati je kod korisničke tabele i zašto je radna
pozicija broj. Radna pozicija je vezana sa pozicija_id iz tabele pozicija.
INSERT [dbo].[korisnici] ([korisnicki_id], [ime_korisnika],
[prezime_korisnika], [lozinka], [adresa_stanovanja], [broj_telefona], [email],
[datum_rodjenja], [pol], [radna_pozicija]) VALUES (N'MarLeksa', N'Aleksa',
N'Marceta', N'_C53E479B03B3220D3D56DA88C4CACE20', N'Zore Kovacevic 9a',
N'38766311227', N'aleksa.marceta@suturk.ba', CAST(N'1998-01-23' AS Date),
N'Muski', 1)
Ovde imamo primjer komande za popunjavanje tabele u bazi, ovo je jedna od
mnogih koje se nalaze u generisanoj skripti.
28
S.U.T.U.R KRŠIĆ
5. Zaključak
Rad na projektu je bio jako vremenski zahtjevan, puno je vremena truda i rada
uloženo u njega. Na kraju kada vidimo koliko smo uspjeli stvoriti počevši od toga da
ni kolega ni ja nikad nismo napisali ozmiljniju liniju koda. Mogu sa ponosom reći da
je ovo bilo jedno divno iskustvo, tema je opširna i mi smo je dodatno razvukli možda
u neke strane u koje i nismo trebali, ali kad se sve sumira znanje koje smo steli radeći
ovo je ono što je najbitnije i razlog zbog kog smo se odlučili na rad ovog projekta.
Mislim da su projekti nešto što bi svaki student informatike trebao više da forsira u
poređenju sa izlaskom na integralni ispit.
29
S.U.T.U.R KRŠIĆ
6. Slike
Slika 1. Administratorski panel .................................................................................... 5
Slika 2. Uspješne prijave .............................................................................................. 6
Slika 3. Neuspješne prijave .......................................................................................... 6
Slika 4. Kod za pravljenje Log datoteka ...................................................................... 7
Slika 5. Unos novog radnika ........................................................................................ 7
Slika 6. Heš pri unosu novog korisnika ....................................................................... 8
Slika 7. Unos podataka u bazu ..................................................................................... 8
Slika 8. Kod za unos novog radnika............................................................................. 9
Slika 9. Pretraga radnika ............................................................................................ 10
Slika 10. Pretraga radnika, popunjena ........................................................................ 10
Slika 11. Kod za pretragu ........................................................................................... 11
Slika 12. Popunjavanje forme Pretraga Radnika ........................................................ 11
Slika 13. Pregled radnika ........................................................................................... 12
Slika 14. Sačuvaj, poništi izmjene na pregledu radnika ............................................. 12
Slika 15. Skladište ...................................................................................................... 13
Slika 16. Skladište Korisničkog panela ...................................................................... 14
Slika 17. Korisnički panel, provjera informacija ....................................................... 15
Slika 18. Popunjavanje polja u formi informacije o korisniku .................................. 16
Slika 19. Drop down meni za biranje mjeseca ........................................................... 16
Slika 20. Kod za računanje plate ................................................................................ 17
Slika 21. Kupovina ..................................................................................................... 18
Slika 22. Kupovina proizvoda .................................................................................... 19
Slika 23. Popunjavanje liste proizvoda za gosta ........................................................ 19
Slika 24. Komanda za pokretanje drugog programa .................................................. 19
Slika 25. Preuzimanje cijene ...................................................................................... 20
Slika 26. Kod za slanje emaila ................................................................................... 20
Slika 27. Biranje kreditne kartice i provjera da li su unjete informacije tačne .......... 20
Slika 28. Provjera stanja na računu ............................................................................ 21
Slika 29. Konekcija sa bazom .................................................................................... 22
Slika 30. Heš metod ................................................................................................... 22
Slika 31. Forma za prijavu ......................................................................................... 23
Slika 32. Provjera kredencijala................................................................................... 23
30
S.U.T.U.R KRŠIĆ
31