Professional Documents
Culture Documents
Vanredne studije
Smjer: Poslovna informatika
Predmet:
Vii programski jezici i RAD alati
Programiranje u Visual Basicu
Predmetni nastavnik:
Prof. dr Zoran . Avramovi
Student:
Vladimir urii
Indeks br. 56-10/VPI
2
Uvod (o Visual Basicu i izabranom projektu)
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.
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
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.
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"
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.
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.
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.
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.
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.
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.
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.
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".
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.
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
20
End Sub
End Sub
End Sub
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
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
23
End If
Return htmlBoja
End Function
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