You are on page 1of 27

PANEVROPSKI UNIVERZITET APEIRON

FAKULTET INFORMACIONIH TEHNOLOGIJA

Vanredne studije
Smjer: Poslovna informatika

Predmet:
Vii programski jezici i RAD alati
Programiranje u Visual Basicu

Tema seminarskog rada:


Kreiranje aplikacije za kontrolu iznajmljivanja vozila
"Rent-A-Car"

Predmetni nastavnik:
Prof. dr Zoran . Avramovi

Student:
Vladimir urii
Indeks br. 56-10/VPI

Banja Luka, juli 2013.


Sadraj
Uvod (o Visual Basicu i izabranom projektu)......................................................................................3
Izrada po planu.....................................................................................................................................4
Baza i tabele.........................................................................................................................................4
Korisnici...........................................................................................................................................4
Tabela korisnici - lista kolona.....................................................................................................4
Vozni park........................................................................................................................................5
Tabela vozni_park lista kolona.................................................................................................5
Tabela proizvodjaci lista kolona...............................................................................................6
Tabela modeli_vozila lista kolona............................................................................................6
Tabela tipovi_vozila lista kolona.............................................................................................6
Tabela nazivi statusa lista kolona.............................................................................................6
Klijenti.............................................................................................................................................7
Tabela klijenti lista kolona.......................................................................................................7
Tabela drzave lista kolona........................................................................................................8
Tabela gradovi lista kolona......................................................................................................8
GKI - Koncept aplikacije....................................................................................................................12
Login forma...................................................................................................................................12
Klijenti...........................................................................................................................................15
Dodavanje novog klijenta..............................................................................................................15
Izmjena podataka postojeeg korisnika.........................................................................................17
Iznajmljivanje vozila......................................................................................................................18
Lista svih iznajmljenih vozila........................................................................................................20
tampanje jednostavnog izvjetaja................................................................................................21
Isjeci iz kompletnog programskog teksta.........................................................................................22
Glavna forma.................................................................................................................................22
Klasa Alata.....................................................................................................................................24
Funkcija za snimanje vozila...........................................................................................................26
Upiti prema bazi.............................................................................................................................26
Zakljuak............................................................................................................................................28
Literatura............................................................................................................................................29

2
Uvod (o Visual Basicu i izabranom projektu)

S obzirom da nisam imao prethodnog iskustva sa Visual Basicom a poto je obavezan


predmet na fakultetu, odluio sa da pristupim zadatku ozbiljno i izaberem za projekat programiranje
kompleksnije aplikacije, gdje bih se mogao bolje upoznati sa ovim programskim jezikom.

Aplikacija za voenje "Rent-A-Car" biznisa, inila se kao dobar izbor za temu iz seminarskog rada.
Nakon postavljenih teza ta aplikacija treba da ima a poto ve imam dugogodinje iskustvo u radu
sa relacionim bazama, koje sam koristio pri programiranju u PHP, imao sam ve poprilino jasno
zamiljen koncept ove aplikacije i vremenski period za koji bi se ova aplikacija mogla i napraviti (5
dana za osobu koja prije nije imala dodira sa VB). Ispoetka, dok se nisam navikao na sintaksu
Visual Basica i IDE ovog programskog jezika, sve se razvijalo dosta sporo. Nakon par dana, osjeao
sam se poprilino oputeno, kao da sam na domaem terenu.

Ono to nisam odmah koristio (iako je uvaeni profesor Avramovi pomenuo ve na prvim
predavanjima), je "watches". Watches je izuzetno korisna, ugraena opcija i slui za pregledanje
vrijednosti varijabli i njihovih tipova. Kada sam je otkrio (hvala Bojane), napredak je bio oigledan.
"Watches"mnogo podsjea na "Console.Log" iz JavaScripta. Analizom raznih sistemskih objekata,
moe se mnogo nauiti. Na primjer - vraeni sadraj iz upita, ne sadri samo redove, kolone i
vrijednosti njihovih polja, ve i mnogo drugih stvari, kao to su broj vraenih redova (result.Count),
ekstenzija "Where", (result.Where), u ije se tijelo ubacuju predikati filtera, koristei "override"
tehniku. Navedene vrijednosti su samo dio jedne velike liste. Ekstenziju "where" nisam koristio.
Nain na koji sam ja radio je takav da sam za odreeni table adapter napravio vie upita, tako da se
mogu koristiti vie puta u cijelom projektu. Investitora nije bilo, tako da sam morao preuzeti
njegovu ulogu. Iskreno, vremena je dosta uloeno ali i isplatilo se na razne naine. Jedno
zanimljivo iskustvo, moram da priznam.

3
Izrada po planu
injenica je da je korisnik pravni subjekt, firma koja se bavi iznajmljivanjem vozila. Ono
to je potrebno je to da se analizira svaka akcija koja bi se mogla desiti. Aplikacija mora biti
robusna i skalabilna i ako se sve dobro isplanira, ne bi trebalo da bude problema.

Prije svega, treba znati s kim i s im korisnik ima dodira i s im treba da upravlja. Analogno
organizaciji u firmi, kree se od direktora, koji e upravljati radnicima, koji e na kraju iznajmljivati
vozila, klijentima. Ve se primjeuje osnovna struktura koju e aplikacija da ima. Direktor e dati
ovlatenja radnicima da mogu da koriste pojedine dijelove aplikacije, tako da aplikacija dobija prvu
tabelu u bazi "korisnici". Poto je i direktor korisnik aplikacije, izolovaemo ga sa posebnom
vrijednosti u kolonu id_tipa.

Baza i tabele
Bazu koju sam koristio je ugraena verzija Microsoft SQL server, MSSQL - Compact Edition.
Ekstenzija datoteke je ".sdf". Ono to sam primijetio je da ova uzima daleko manje resursa
(procesor i memorija) za razliku od pune verzije. Postoje i odreena ogranienja1, ali niti jedno nije
uopte bitno za ovaj projekat.

Korisnici
Ova tabela, za poetak e imati 6 kolona. U narednim izdanjima programa, ovdje se mogu dodavati
i druge kolone od koristi.

Tabela korisnici - lista kolona

1. "id" int, unique, autoincrement, not null


Iako nee biti 2.147.483.647 korisnika, ovaj tip se mora izabrati, kako bi se mogla ukljuiti
opcija "Autoincrement" u SQL bazi. Bar je to sluaj sa verzijom MSSQL Compact.

2. "korisnik" nvarchar(100)
do stotinu "Unicode" znakova je dovoljno za korisniko ime. (Ovo je default vrijednost koja
se dodijeli u grafikom okruenju upravljanja sa tabelom. Meutim, ukoliko se duina ne
podesi, default vrijednost je 30?)

3. "lozinka" nvarchar(100)
po pravilu, lozinka se nikad ne uva u originalu, ve se uva "HASH" stringa koji smo
dobili pozivajui funkciju za pravljenje hasha uz pomo MD5 algoritma (funkcija
MD5SUM se lako napravi uz pomo uputstva na stranici Microsoft podrke)

4. "ime" nvarchar (100)

5. "prezime" nvarchar (100)

1 MSSQL Compact Edition: http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/compact.aspx

4
6. "tip" tinyint
brojevi od 0-255. Ova kolona slui za odreivanje tipa korisnika. Za sada postoje dva tipa.
Admin (0) i User (1). U prvoj verziji programa, svi korisnici su tipa User. Tip "Admin" bi
trebao da ima vie privilegija od tipa "User", ali s obzirom da nam to jo nije potrebno,
dovoljno je to je sve pripremljeno za period kada e to da bude

Postoje i dvije relacije u koju je ukljuena ova tabela a u vezi je sa tabelom "iznajmljivanje". Kada
se auto iznajmi, pored ostalog, potrebno je zabiljeiti koji je korisnik iznajmio vozilo. Takoe,
potrebno je zabiljeiti i koji je korisnik izvrio razduivanje vozila. Ovo je jako bitno, i u
budunosti se moe dodati jo jedna tabela ili vie tabela koja e biljeiti odreene akcije korisnika,
bilo to vezano za statistiku (najbolji radnik sedmice) ili da se ue u trag odreenom problemu ili sl.

Vozni park
Ova tabela se sastoji od 11 kolona. Kao i sa prethodnom navedenom tabelom, u budunosti moe
trpiti odreene izmjene, po potrebi. Za poetak, bitno nam je da biljeimo osnovne podatke o
vozilu, one koje slue sistemu a i nama da ih lake raspoznajemo.

Tabela vozni_park lista kolona

1. id int, unique, autoincrement, not null


2. id_proizvodjaca int
u relaciji sa tabelom "proizvodjaci" kolona "id"
3. id_modela int
u relaciji sa tabelom "modeli" kolona "id"
4. broj_sasije - nvarchar(100)
5. broj_motora - nvarchar(100)
6. registarske_tablice - nvarchar(100)
7. trenutni_klijent (posljednji klijent) int
8. id_tipa - int
u relaciji sa tabelom "tipovi_vozila" kolona "id"
9. boja int
RGB boja u decimalnom obliku
10. status_id int
u relaciji je sa tabelom "nazivi statusa" kolona "id"
11. interni_naziv_vozila nvarchar(100)

5
Tabela proizvodjaci lista kolona
Kako je u relaciji za tabelom "vozni_park", pominjem je odmah. Kao to se moe pretpostaviti,
rije je obinoj listi proizvoaa i za nju su dovoljne samo dvije kolone. Isti sluaj je sa tabelom
"modeli_vozila" i "tipovi_vozila"

1. id - int, unique, autoincrement, not null


2. naziv nvarchar(100)

Tabela modeli_vozila lista kolona


Rije je o modelu vozila. Na primjer, izabrali smo proizvoaa "Renault", sada moemo da
izaberemo model recimo, "Laguna II"

1. id - int, unique, autoincrement, not null


2. naziv nvarchar(100)

Tabela tipovi_vozila lista kolona


Rije je o tipovima vozila. Na primjer, izabrali smo proizvoaa "Renault" i model "Laguna II", i s
obzirom da ovaj model postoji u vie verzija, sada moemo da izaberemo tip npr. "Karavan"

1. id - int, unique, autoincrement, not null


2. naziv nvarchar(100)

Tabela nazivi statusa lista kolona


Ovdje je rije o atributima vozila koja se dotiu poslovne logike i problema s kojim se moe
susresti.
Za poetak, auto moe biti na raspologanju (Slobodno) ili ne (Iznajmljeno). Vremenom, u ovu
tabelu moemo dodati nove vrijednosti, npr. "Na pranju" ili "Na popravci". Kao i iz prethodnih,
pomonih tabela, tabele "vozni_park", iz ove tabele lako uzimamo podatke za sistemski objekat
grafikog interfejsa "ComboBox" padajui meni.
Na ovaj nain moemo izabrati samo predefinisane statuse, izbjegavajui mogui problem sa
nekonzistentnosti prilikom unoenja naziva statusa runo (Iznajmljen = Zauzet, Slobodan= Nije
zauzet, itd.)

1. id - int, unique, autoincrement, not null


2. naziv nvarchar(100)

6
Klijenti
Kada je rije o klijentima, svaki od njih ima osnovne podatke kao to su ime, prezime, broj
telefona, adresu i sl. S obzirom da klijenti mogu biti i preduzea, ukoliko se u tabelu dodaju kolone
kao to su naziv preduzea, poreski broj i id_tipa, gdje emo zabiljeiti numeriku vrijednost tipa
(npr. 0 za fizika lica, 1 za preduzea), lako e se u sljedeoj verziji proiriti mogunosti aplikacije.

Tabela klijenti lista kolona

1. id int, unique, autoincrement, not null


2. ime nvarchar(100)
3. prezime nvarchar(100)
4. jmbg bigint
jmbg je duine 13 brojeva, a kod nas se koriste samo brojevi. Ovo moe biti problem ako to
nije sluaj u svim zemljama svijeta, a klijent je iz inostranstva.
5. br_lk nvarchar(10)
6. adresa nvarchar(100)
7. grad_id int
u relaciji sa tabelom gradovi
8. drzava_id int
u relaciji sa tabelom drzave
9. broj_telefona bigint
kada se broj telefona pise sa predznakom drzave i operatera, i kada mu se oduzmu nule, plus
ili ostali specijalni karakteri, ostaju samo brojevi, koje je najbolje uvati kao tip bigint
10. obrisan tinyint
ukoliko se korisnik brie, iz nekog razloga, pametno je samo mu dati oznaku "obrisan" i ne
pomou upita, izbjei ga iz prikazivanja nekoj listi. Ukoliko bi se trajno obrisao, sve
prethodne akcije u koje je na bilo koje nain bio upetljan ovaj korisnik, bi izgubile znaenje
ne bi smo znali o kom je korisniku rije. Ukoliko na nekim mjestima u kodu nismo mislili
na robusnost aplikacije, moglo bi ak doi do greke u aplikaciji. Ova opcija se ne koristi u
aplikaciji, ali je stavljena za primjer, kako bi se mogla koristiti, ukoliko se pojavi potreba za
istom

7
Tabela drzave lista kolona
Kao i sluaju sa vozilima, bolje je dati opciju da se izabere drzava, umjesto da se iznova
unosi. Izbjegava se nekonzistentnost, ali da se ne zaboravi napomenuti, na ovaj nain se vri i
uteda na memorijskom prostoru. Naziv drzave je jedistven. U tabelu klijenta unosimo sa broj
drzave, to je daleko bolje. I pretraga klijenata po dravi je bra kada se koriste brojevi i indeks.

1. id int, unique, autoincrement, not null


2. iso nchar(3)
iso code 3, po internacionalnom standaru koristi tri znaka za svaku drzavu, i jedinstven je.
Ovo je opcionalni dodatak koji moe koristiti u budunosti.
3. naziv nvarchar (100)
nazivi odreenih drava znaju biti poprilino dugaki. Nadam se da e 100 karaktera biti
dovoljno, jer e u suprotnom pretrpiti trimovanje. Zbogom, puni nazivi drava sa imenom
duim od 100 znakova.

Tabela gradovi lista kolona


Tabela "gradovi" se koristi slino kao tabela "drzave". Jedina razlika je da se gradu mora
pridodati sistemski kod drzave u kojoj se nalazi. Ako izaberemo dravu, na primjer Japan, koristei
id ove drave, izlistaemo sve gradove koje imaju id drave Japan.

1. id int, unique, autoincrement, not null


2. naziv nvarchar(100)
3. id_drzave
u relaciji sa tabelama "gradovi" i klijent (moe se dodati i na tabeli korisnici u narednoj
verziji aplikacije)

Da bi se vidjelo kako izgleda bilo koja tabela i njihove relacije u grafikom okruenju Visual
Basica, na slici 1 u prikazati sadraj "dataset" prozora sa adapterima tabela i njihovim setovima
podataka

8
9
Slika 1: Rentacar - Primjer tabela i njihovi relacija
GKI - Koncept aplikacije
Poto se vozila mogu iznajmljivati klijentima, a klijenti mogu iznajmljivati vozila, odluio
sam da koristim tu logiku i prilikom organizacije formi. Kako bih korisnika naveo na taj put,
postavio sam dugme "Iznajmi" na listi automobila ali i na listi klijenata.
Slijede forme u njihovom dizajn izdanju i to redoslijedom kako se pojavljuju, od startovanja same
aplikacije pa na dalje.

Login forma
Pri samom startu aplikacije, otvara se glavna forma i vri se provjera da li je korisnik
prijavljen na sistem. S obzirom da je aplikacija tek upaljena, pojavie se forma za unos korisnickog
imena i lozinke.
Pritiskom na OK, uporedie se MD5 hash uneene lozinke sa hashom koji je smjeten u istom redu
sa uneenim korisnikim imenom, ako postoji.

Slika 2: Prijava na sistem

Ukoliko su korisniko ime ili lozinka neispravni, pojavie se upozorenje. Ako je pronaen korisnik
za datim korisnikim imenom i lozinkom, dugmii na glavnom panelu e postati aktivni.

10
Klijenti
Pritiskom na dugme klijenti, pojavie se forma sa listom svih dostupnih klijenata u bazi.

Slika 3: Lista klijenata

Dodavanje novog klijenta


Dugme "Novi klijent" e otvoriti novu formu, u kojoj se nalaze polja za unos podataka za
novog klijenta. Nakon izvrene verifikacije podataka, izvrie se upis u tabelu i osvjeie se lista na
formi klijenata.

11
Slika 4: Dodavanje novog klijenta

12
Izmjena podataka postojeeg korisnika
Ukoliko izaberemo jednog klijenta sa liste i kliknemo na dugme "Izmijeni podatke",
otvorie forma koja je koritena za dodavanje novog klijent, s tim da se ovog puta sa zahtijevom za
otvaranje forme, proslijedio i id klijenta. U formi se u dijelu programa ispunio uslov za pravljenje
upita na tabelu baze, proslijedivi joj id klijenta u upitu, Rezultat je jedan red, ije podatke uzimamo
i upisujemo u odgovarajua polja na formi.

Slika 5: Izmjena postojeeg klijenta

13
Iznajmljivanje vozila
Pritiskom na dugme "Iznajmi vozilo", otvorie se forma sa listom slobodnih vozila. U ovom
sluaju vidimo da nema nije jednog slobodnog vozila.

Slika 6: Iznajmljivanje s poetkom u klijentima

Poto se iznajmljivanje moe poeti i iz forme sa listom vozila, tu e se u drugom koraku pojaviti
lista svih klijenata. U ovom primjeru, imamo listu svih automobila, gdje je jedno vozilo bilo
slobodno.

14
Slika 7: Lista svih vozila

15
Slika 8: Iznajmljivanje s poetkom u vozilima

Klikom na izmijeni pokazee nam se forma u kojoj moemo jo jednom pregledati na izbor, gdje
moemo potvrditi ili odustati od akcije.

Slika 9: Potvivanje iznajmljivanja

16
Lista svih iznajmljenih vozila
Pritiskom na dugme "Iznajmljivanje", otvoriemo formu sa listom svih iznajmljenih vozila.
Ukoliko je status vozila "zauzeto", kada klijent vrati automobil, ili ako se se ne vrati due vrijeme,
moemo zakljuiti vozilo, pritiskom na dugme "Zakljui".

Slika 10: Lista iznajmljenih vozila

U ovom sluaju, otvorie nam se forma u kojoj moemo dodijeliti novi status vozilu i dodatni
komentar, ukoliko je potrebno. Nakon zakljuivanja, vratiemo se na prethodnu listu iznajmljenih
vozila. Sada je status na prethodno izabranom vozilu, promijenjen.

17
Slika 11: Zakljuivanje vozila - lista dostupni statusa i komentar

18
Ovdje vidimo da je prethodno zauzeto vozilo, sada opet slobodno za iznajmljivanje i opet e biti
dostupno kada odemo na listu vozila.

tampanje jednostavnog izvjetaja


Ukoliko izaberemo bilo koji dostupni red i pritisnemo dugme "Detalji", otvorie nam se
forma koja prethodi tampi dokumenta. Pritiskom na "tampaj", dobiemo sistemski prozor u kome
moemo izabrati eljeni tampa.

19
Isjeci iz kompletnog programskog teksta
S obzirom na koliinu programskog teksta, besmisleno ga je kompletnog ubacivati u sadraj
seminarskog rada. Prikazau samo programski tekst osnovne forme, klase alata, nekih funkcija i
podprocedura.

Glavna forma

Public Class FormaGlavna


Public prijavljen As Boolean = False
Public Alati = New Alati()

Private Function UrediDizajn()


Panel1.Width = Me.Width
BtnPrijaviSe.Top = Me.Height / 2 - BtnPrijaviSe.Height / 2
BtnPrijaviSe.Left = Me.Width / 2 - BtnPrijaviSe.Width / 2

'ogranici minimum velicinu


Dim min_width As Integer = 800
Dim min_height As Integer = 250
If WindowState <> 1 Then
If Me.Width < min_width Then
Me.Width = min_width
End If
If Me.Height < min_height Then
Me.Height = min_height
End If
End If
Return True
End Function
Public Function UpravljajSaPrijavom()
If prijavljen = True Then
'ukloni sve login dugmice
Panel1.Enabled = True
LblKorisnik.Text = "Korisnik: " & Alati.KImeKorisnika
BtnPrijaviSe.Hide()
Else
Panel1.Enabled = False
BtnPrijaviSe.Show()
End If
Return True
End Function
Private Sub GlavnaForma_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Resize
UrediDizajn()

20
End Sub

Private Sub GlavnaForma_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


MyBase.Load
UrediDizajn()
UpravljajSaPrijavom()
FormaLogin.ShowDialog()
UpravljajSaPrijavom()

End Sub

Private Sub BtnPrijaviSe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles BtnPrijaviSe.Click
FormaLogin.ShowDialog()
UpravljajSaPrijavom()
End Sub

Private Sub BtnListaAutomobila_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles BtnListaAutomobila.Click
FormaIznajmiVozilo.VoziloIznajmljeno = False
FormaListaAutomobila.ShowDialog()
End Sub

Private Sub BtnKlijenti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles BtnKlijenti.Click
FormaIznajmiVozilo.VoziloIznajmljeno = False
FormaListaKlijenata.ShowDialog()
Dim adapter = New rentacar_baza_DataSetTableAdapters.klijentiTableAdapter()
Dim dataset = New rentacar_baza_DataSet()
'adapter.Adapter.Update(dataset.klijenti)

End Sub

Private Sub BtnIznajmljivanje_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles BtnIznajmljivanje.Click
FormaIznajmljivanja.ShowDialog()
End Sub
End Class

21
Klasa Alata
Klasa alata je zgodno mjesto za postavljenje korisnih funkcija koje e se koristiti u cijelom
programu. Jedna od funkcija koju sam dodao, a to sam ve pomenuo je MD5SUM funkcija.

Imports System
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text
Public Class Alati
Dim cIdKorisnika As Integer = 0
Dim cKImeKorisnika As String = ""
Dim cTipKorisnika As Integer = 0
Public ReadOnly Property IdKorisnika As Integer
Get
Return cIdKorisnika
End Get
End Property
Public ReadOnly Property KImeKorisnika As String
Get
Return cKImeKorisnika
End Get
End Property
Public ReadOnly Property TipKorisnika As Integer
Get
Return cTipKorisnika
End Get
End Property

Private Function ByteArrayToString(ByVal arrInput() As Byte) As String


Dim i As Integer
Dim sOutput As New StringBuilder(arrInput.Length)
For i = 0 To arrInput.Length - 1
sOutput.Append(arrInput(i).ToString("X2"))
Next
Return sOutput.ToString()
End Function
Public Function MD5SUM(ByVal str)
Dim hash As String
Dim tmpStr() As Byte
Dim tmpHash() As Byte

tmpStr = ASCIIEncoding.ASCII.GetBytes(str)
tmpHash = New MD5CryptoServiceProvider().ComputeHash(tmpStr)

22
Return ByteArrayToString(tmpHash)
End Function
Public Function uzmiKorisnickePodatke(ByVal id_korisnika)
If (Not id_korisnika = 0) Then
Dim korisniciAdapter As rentacar_baza_DataSetTableAdapters.korisniciTableAdapter
korisniciAdapter = New rentacar_baza_DataSetTableAdapters.korisniciTableAdapter()
Dim korisnici = korisniciAdapter.GetDataById(id_korisnika)
cIdKorisnika = korisnici.Rows(0).Item(0)
cKImeKorisnika = korisnici.Rows(0).Item(1)
cTipKorisnika = korisnici.Rows(0).Item(5)
End If

Return False
End Function
Public Function OcistiTextBox(ByVal objekatForme As Control)
For Each ctrl As Control In objekatForme.Controls
If TypeOf ctrl Is TextBox Then
CType(ctrl, TextBox).Text = String.Empty
End If
Next
Return True
End Function

Public Function HtmlBojaUDec(ByVal boja As String)


Dim intBoja As Integer
Dim syscolor = New Color()
Try
syscolor = ColorTranslator.FromHtml(boja)
Catch ex As Exception
Return -1
End Try
Try
intBoja = Convert.ToInt32(FormaGlavna.Alati.Color2Hex(syscolor).Remove(0, 1), 16)
Catch ex As Exception
Try
intBoja = Me.HtmlBojaUDec(FormaGlavna.Alati.Color2Hex(Color.FromName(boja)))
Catch ex2 As Exception
MessageBox.Show("greska u konverziji boje u dec")
End Try
End Try
Return intBoja
End Function
Public Function DecBojaUHtml(ByVal decBoja)
Dim htmlBoja As String = "#" & Hex(decBoja).PadLeft(6, "0")
If decBoja = 0 Then
htmlBoja = "#000000"

23
End If
Return htmlBoja
End Function

Funkcija za snimanje vozila


Private Function SnimiVozilo()

Dim poruka_greske = TestirajPodatke()


If (poruka_greske = String.Empty) = False Then
MessageBox.Show(poruka_greske)
Return False
End If
Dim query_result As Integer = 0

If FormaListaAutomobila.IdIzabranogVozila = 0 Then 'if inserting


Try
query_result =
Me.Vozni_parkTableAdapter.InsertVozila(ComboBoxProizvodjac.SelectedValue,
ComboBoxModel.SelectedValue, TxtBoxSasija.Text, TxtBoxMotor.Text, TxtBoxTablice.Text,
ComboBoxTip.SelectedValue, FormaGlavna.Alati.HtmlBojaUDec(TxtBoxBoja.Text), TxtBoxInterniNaziv.Text)
Catch ex As Exception
MessageBox.Show("greska prilikom upisa")
End Try
ElseIf FormaListaAutomobila.IdIzabranogVozila > 0 Then 'if updating
Try
query_result =
Me.Vozni_parkTableAdapter.UpdateVozila(ComboBoxProizvodjac.SelectedValue,
ComboBoxModel.SelectedValue, TxtBoxSasija.Text, TxtBoxMotor.Text, TxtBoxTablice.Text,
ComboBoxTip.SelectedValue, FormaGlavna.Alati.HtmlBojaUDec(TxtBoxBoja.Text), TxtBoxInterniNaziv.Text,
FormaListaAutomobila.IdIzabranogVozila)
Catch ex As Exception
MessageBox.Show("greska prilikom izvrsavanja update upita")
End Try
End If

Return query_result
End Function

24
Upiti prema bazi
Iskustvo sa radom u SQL stekao sam koristei MySQL bazu podataka. MSSQL je gotovo identian
MYSQL kad je u pitanju sintaksa upita. Pogledajte kako bi izgledali upiti u jednom a kako drugom.

MSSQL nain
SELECT vp.interni_naziv_vozila, i.id_vozila, k.ime, k.prezime, k.broj_telefona, k.adresa, g.naziv
as naziv_grada, d.naziv as naziv_drzave, i.id_klijenta, koz.korisnik as korisnik_iznajmljivanja,
i.id_korisnika_iznajmljivanja, i.vrijeme_iznajmljivanja, i.vrijeme_povratka, kop.korisnik as
korisnik_povratka, i.id_korisnika_povratka, i.id, ns.naziv AS status, vp.status_id FROM
iznajmljivanja AS i LEFT OUTER JOIN vozni_park AS vp ON vp.id = i.id_vozila
LEFT OUTER JOIN klijenti AS k ON k.id = i.id_klijenta
LEFT OUTER JOIN korisnici AS koz ON koz.id = i.id_korisnika_iznajmljivanja
LEFT OUTER JOIN korisnici AS kop ON kop.id = i.id_korisnika_povratka
LEFT OUTER JOIN nazivi_statusa AS ns ON ns.id = vp.status_id
LEFT OUTER JOIN gradovi AS g ON g.id = k.grad_id
LEFT OUTER JOIN drzave AS d ON g.id = k.drzava_id
WHERE i.id =?

MYSQL nain
SELECT vp.interni_naziv_vozila, i.id_vozila, k.ime, k.prezime, k.broj_telefona, k.adresa, g.naziv
as naziv_grada, d.naziv as naziv_drzave, i.id_klijenta, koz.korisnik as korisnik_iznajmljivanja,
i.id_korisnika_iznajmljivanja, i.vrijeme_iznajmljivanja, i.vrijeme_povratka, kop.korisnik as
korisnik_povratka, i.id_korisnika_povratka, i.id, ns.naziv AS status, vp.status_id FROM
iznajmljivanja AS i LEFT OUTER JOIN vozni_park AS vp ON vp.id = i.id_vozila
LEFT JOIN klijenti AS k ON k.id = i.id_klijenta
LEFT JOIN korisnici AS koz ON koz.id = i.id_korisnika_iznajmljivanja
LEFT JOIN korisnici AS kop ON kop.id = i.id_korisnika_povratka
LEFT JOIN nazivi_statusa AS ns ON ns.id = vp.status_id
LEFT JOIN gradovi AS g ON g.id = k.grad_id
LEFT JOIN drzave AS d ON g.id = k.drzava_id
WHERE i.id =?

Jedino u emu se razlikuju je to da kada sam kucao LEFT JOIN u MSSQL, automatski je svaki
izraz LEFT JOIN konvertovan u LEFT OUTER JOIN.

25
Zakljuak
Visual Basic me je iskreno, vrlo prijatno iznenadio. Zaista sam se brzo adaptirao na rad u
ovom programskom jeziku. IDE je poprilino prijateljski nastrojen prema programeru. Brza izrada
grafikog interfejsa i automatsko zavravanje termina je od velike pomoi u izradi aplikacije.
Ono to me je takoe iznenadilo je velik broj njegovih korisnika. Iako je danas popularan C sa
derivatima i JAVA, izgleda je ipak naao mjestu kod dosta mladih programera. Nije ni udo, jer se
zaista brzo razvijaju aplikacije odakle i naziv RAD (Rapid Application Development).
Ono to ne znam, je to koliko su stabilne aplikacije koje se u ovom programskom jeziku i naprave.
Veina kolega iz struke sa podsmjehom priaju o Visual Basicu, pa me zaista interesuje da li je to
zbog starijih verzija i da li se odreeni problemi javljaju i u novim verzijama.
Rado preporuujem poetnicima i osobama koje imaju iskustva sa skriptnim programiranjem.

26
Literatura
Visual Basic Learning Center
http://msdn.microsoft.com/en-US/vstudio/hh388573
StackOverflow
http://stackoverflow.com/
VisualBasic Tutorials
http://www.vbtutor.net/index.php/visual-basic-2010-tutorial/

27

You might also like