64
1. UVOD U .NET OKRUŽENJE I NJEGOVA ARHITEKTURA1.1 Arhitektura .NET-a1.2 Osnovne klase1.3 Web Forms – Web forme1.4 Web Servisi1.5 Windows Forms – Windows forme2. KRATAK OPIS PROGRAMA „AMBULANTA“3. IZRADA BAZE PODATAKA ZA APLIKACIJU „AMBULANTA“3.1 Prvi način3.2 Drugi način4. KREIRANJE BAZE PODATAKA U KODU4.1 Stvaranje baze podataka4.2 Stvaranje (kreiranje) tabela u aplikaciji5. KREIRANJE I POSTAVLJANJE RELACIJA TABELA U BAZI PODATAKA6. UNOŠENJE PODATAKA U TABELE7. KREIRANJE APLIKACIJE AMBULANTA U VISUAL BASIC-U 20107.1 Windows forma za pristupanje (autorizaciju) korisnika7.2 Glavna forma8. Forma za administratorsku kontrolu9. Forma za dodavanje doktora10. Forma za dodavanje novih pacijenata11. Forma Doktori12. Forma o finansijama ambulante13. Forma koja prikazuje podatke pacijenata14. Forma koja prikazuje stanje svih pregledanih pacijenata15. Forma za zakazane preglede16. Forma za zakazivanje pregleda17. Forma za rešavanje završenog pregleda18. Ostali zadaci u Visual Basic-uPANEVROPSKI UNIVERZITET APEIRON FAKULTET POSLOVNE INFORMATIKE Redovne studije Smer Inženjering ITPredmet HCI „PROGRAM ZA AMBULANTU” (seminarski rad) Predmetni nastavnik Prof. dr Lazo Roljić Student Dejan Krneta Index br.235-07/RPI

kardiolozi-rs.orgkardiolozi-rs.org/preuzimanje.php?f=radovi/1/Program z… · Web viewPANEVROPSKI UNIVERZITET APEIRONFAKULTET POSLOVNE INFORMATIKERedovne studijeSmer „Inženjering

Embed Size (px)

Citation preview

Sadržaj

1. UVOD U .NET OKRUŽENJE I NJEGOVA ARHITEKTURA....................................................3

1.1 Arhitektura .NET-a........................................................................................................................31.2 Osnovne klase................................................................................................................................4

1.3 Web Forms – Web forme..............................................................................................................51.4 Web Servisi...................................................................................................................................5

1.5 Windows Forms – Windows forme...............................................................................................52. KRATAK OPIS PROGRAMA „AMBULANTA“.........................................................................7

3. IZRADA BAZE PODATAKA ZA APLIKACIJU „AMBULANTA“...........................................83.1 Prvi način.................................................................................................................................8

3.2 Drugi način............................................................................................................................104. KREIRANJE BAZE PODATAKA U KODU...................................................................................11

4.1 Stvaranje baze podataka..............................................................................................................114.2 Stvaranje (kreiranje) tabela u aplikaciji.......................................................................................11

5. KREIRANJE I POSTAVLJANJE RELACIJA TABELA U BAZI PODATAKA...........................126. UNOŠENJE PODATAKA U TABELE............................................................................................14

7. KREIRANJE APLIKACIJE AMBULANTA U VISUAL BASIC-U 2010......................................157.1 Windows forma za pristupanje (autorizaciju) korisnika.............................................................15

7.2 Glavna forma...............................................................................................................................178. Forma za administratorsku kontrolu..................................................................................................22

9. Forma za dodavanje doktora..............................................................................................................2510. Forma za dodavanje novih pacijenata..............................................................................................27

11. Forma Doktori..................................................................................................................................2912. Forma o finansijama ambulante.......................................................................................................32

13. Forma koja prikazuje podatke pacijenata..................................................................................3314. Forma koja prikazuje stanje svih pregledanih pacijenata..........................................................38

15. Forma za zakazane preglede......................................................................................................4216. Forma za zakazivanje pregleda..................................................................................................45

17. Forma za rešavanje završenog pregleda....................................................................................4618. Ostali zadaci u Visual Basic-u...................................................................................................48

18.1 Kalkulator..................................................................................................................................4818.2Aplikacija “Srećna Sedmica“.....................................................................................................49

18.3 Aplikacija Korisnička validacija- provera.................................................................................5018.4Aplikacija koja ispisuje dan(Ponedeljak) datuma rođenja.........................................................51

18.5 Aplikacija Web pretraživač.......................................................................................................52

PANEVROPSKI UNIVERZITET APEIRONFAKULTET POSLOVNE INFORMATIKE

Redovne studijeSmer „Inženjering IT”

PredmetHCI

„PROGRAM ZA AMBULANTU”(seminarski rad)

Predmetni nastavnikProf. dr Lazo Roljić

Student

Dejan KrnetaIndex br.235-07/RPI

Banja Luka, Maj 2011.

1. UVOD U .NET OKRUŽENJE I NJEGOVA ARHITEKTURA

Početkom devedesetih godina prošlog veka, tačnije 1992. godine, svoj je razvoj započeo World Wide Web, danas najpoznatiji i najkorišteniji deo Interneta. Svojim ubrzanim razvojem uveliko je pridoneo ogromnoj popularnosti Interneta u svetu, pa je kod većine ljudi postao njegovim sinonimom. Tako danas većina ljudi govoreći o Internetu, zapravo govori o Webu i Web stranicama.

Paralelno s razvojem Weba, tekao je i razvoj tehnologija koje su omogućavale njegovu implementaciju u sva područja računarskog sveta, ali i šire. Istorijski gledano, na scenu su stupali CGI (eng. Common Gateway Interface) - prvi u nizu tzv. Web programskih jezika, PHP (eng.Hypertext PreProcesor) - stvoren 1995., a popularizovan tek u trećoj verziji (1997.)

Nešto malo pre popularizacije PHP-a, na Web scenu stupa Microsoft, izdavanjem Opcionog Paketa (eng.Option Packa) za Windows NT Server, u kojem unutar IIS-a 4.0 (enlg. Internet Information Services) uvodi značajnu novost - prvu verziju svog Web programskog jezika nazvanog Active Server Pages ili skraćeno ASP. Dve godine kasnije, izlaskom Windowsa 2000, izlazi i IIS 5.0 s ASP-om 3.0 što će, budućnost će pokazati, biti ujedno i posljednja verzija "klasičnog" ASP-a.

Već tada Microsoftov ASP po svojim mogućnostima uveliko zaostaje za PHP-om koji je još pod Open Source licencom i vrti se na Linux/Unix-based operativnim sustavima (besplatna platforma). Upravo zbog toga Microsoft prestaje razvijati staru tehnologiju i okreće se izradi nove, koja će, vreme će pokazati, predstavljati revoluciju i svetu Web-a, ali i informatičkom svijetu uopšte.

Negde početkom 2001. godine, Microsoft objavljuje osnovnu arhitekturu svoje nove tehnologije nazvanu .NET. Sredinom 2002. godine finaliziran je .NET Framework 1.0 i MS Visual Studio 2002. Od tog vremena potječe sveopšta opčinjenost .NET-om koja traje i danas.

1.1 Arhitektura .NET-a

Osnovu .NET-a predstavlja svakako .NET Framework. Najjednostavnije rečeno, to je sistem koji nadograđuje mogućnosti samog operativnog sistema. Radi se o posebnoj infrastrukturi koja programerima nudi gotova rešenja i funkcionalnosti da bi ubrzala i pojednostavila razvoj aplikacija svih vrsta i oblika.

2

Najvažniji dodatak .NET Frameworka zove se Common Language Runtime ili skraćeno CLR. CLR je softverski sistem u kome se kôd izvršava. Kada korisnik pokrene aplikaciju pisanu za .NET Platformu, CLR je izvršava kako bi joj osigurao stabilnost i funkcionalnost. Instrukcije u programu se u realnom vremenu prevode u izvorni strojni kôd koji razumije računar. Za taj je posao zaslužan JIT-kompajler (eng. Just In Time). Upravo prevođenje u izvorni mašinski kôd računara, omogućilo je .NET-u prelazak na druge operativne sisteme kao što su Linux ili MacOS (putem pomoćnog third-party MONO sistema).

Kako kompajliranje zasigurno usporava izvršavanje aplikacija, ono će se izvršavati samo jednom, a njegov će se rezultat spremiti kako bi se kasnije mogao koristiti bez ponovnog kompajliranja.

Aplikacije za .NET platformu mogu se pisati u raznim programskim jezicima, gotovo svim poznatijim. CLR, međutim, ne poznaje niti jedan taj jezik - on dobija naredbe isključivo u jeziku nazvanom Microsoft Intermediate Language (sraćeno MSIL), temeljen na pravilima koja se nazivaju Common Language Specifications (CLS). Stoga je jasno da mora postojati kompajler koji će programski jezik u kojem programer piše kôd prevesti u MSIL kako bi ga CLR razumeo. Ovi kompajleri nazivaju se IL-kompajleri te su dostupni za velik broj programskih jezika. Microsoft je izdao kompajlere za pet jezika: C#, J#, C++, Visual Basic i JScript, dok su se ostali proizvođači softvera potrudili oko brojnih drugih kao što su: Perl, Python, Cobol, Eiffel,…

Kako se svi ovi jezici prvo pretvaraju u MSIL, sasvim je svejedno u kojem ćete od njih pisati aplikacije. Iz ovoga takođe proizilazi i druga velika mogućnost .NET-a - višejezično pisanje aplikacija. Tako sada više nije nužno da svi programeri koji rade na određenom projektu poznaju isti programski jezik, važno je samo da je podrška za njihov jezik dostupna u .NET-u, odnosno da postoji IL-kompajler za njihov jezik.

Mogućnosti koje CLR nudi su izuzetne, no same po sebi nisu dovoljno upotrebljive iz ljudskog aspekta. Upravo zbog toga u .NET Frameworku postoje setovi klasa koje omogućavaju brzo i jednostavno korištenje mogućnosti koje CLR nudi.

1.2 Osnovne klase 

Prva i osnovna skupina klasa zove se Base Class Library ili skraćeno BCL te sadrži osnovne funkcionalnosti koje se koriste u programiranju (funkcije za transformaciju teksta, mrežnu komunikaciju, proveravanje sigurnosnih prava, hvatanje unosa s tastature, …)

Svojevrsna nadogradnja osnovne biblioteke sadrži set klasa zaduženih za komunikaciju s bazama podataka (ADO.NET) i XML-om. One omogućuju povezivanje aplikacija s bazama

3

podataka (kao MS Access, SQL Server, Oracle…), kao i manipulaciju podacima u XML-dokumentima.

1.3 Web Forms – Web forme

Web Forms je dio skupa klasa nazvanog ASP.NET i zadužen je za razvoj web aplikacija. ASP.NET naslednik je ASP-a, ali definitivno nije njegova nova verzija. Sam ASP.NET svakako predstavlja budućnost web programiranja. Tzv. Web forme u sebi sadrže sve objekte potrebne za objektno-orijentisani pristup generisanju HTML sadržaja, koji predstavljaju konačni proizvod ovakvog tipa web aplikacija.

1.4 Web Servisi

.NET donosi novost u programiranju na području web-servisa. Radi se o prihvaćenom standardu za komunikaciju između aplikacija pomoću SAOP poruka prenošenih Webom. Pravu snagu web servisa predstavlja mogućnost integracije različitih sistema i aplikacija putem standardiziranog načina komunikacije. Web servisi zapravo predstavljaju web aplikacije koje pružaju određenu funkcionalnost udaljenim programima.

Njihovo korištenje (konzumiranje, eng. consuming) u aplikacijama relativno je jednostavno: u svojoj aplikaciji dodate web referencu na željeni web servis, upišete njegovu adresu i možete ga pozivati iz svoje aplikacije kao da se radi o bilo kojoj drugoj klasi koja se nalazi unutar Vaše aplikacije, a ne negdje na Internetu. Naravno, aplikacija u trenutku korištenja funkcionalnosti web servisa mora imati pristup Internetu.

1.5 Windows Forms – Windows forme

Windows Forme predstavljaju standardne klase za rad s Windows okruženjem. Microsoft je nanovo izradio (skoro) sve objekte standardnog Windows radnog prostora (Tree View i List View je ostao isti, napravljeni su samo "omotači" koji omogućuju njihovo korištenje u .NET-u) pa im dodao novije opcije.

Svakako je velika novost i GDI+ tehnologija (ne toliko karakteristična za same WinForms) koja omogućuje napredni rad s grafikom i puno jednostavnije iscrtavanje OwnerDrawn kontrola nego dosad.

4

Slika 1 Princip izvršavanja – kompjaliranja u kod mašinskog procesora

Aplikacije za .NET platformu mogu se pisati u raznim programskim jezicima, gotovo svim poznatijim.

CLR, međutim, ne poznaje niti jedan taj jezik - on dobija naredbe isključivo u jeziku nazvanom Microsoft

Intermediate Language (sraćeno MSIL), temeljen na pravilima koja se nazivaju Common Language

Specifications (CLS).

CLR prihvata našu .NET aplikaciju, zatim je kompajlira u mašinski kod i izvrši je. Ovo nam omogućava širok spektar funkcionalnosti, a ovo nam pomaže da se aplikacija izvrši pravilno;

- učitavanje i izvršavanje (runtime) koda - izolacija aplikacije od drugih aplikacija - upravljanje memorijom - sigurnost (eng. Security application)- obrada grešaka - interoperabilnost unutar i izvan .NET okruženja

5

2. KRATAK OPIS PROGRAMA „AMBULANTA“

Najvažniji aspekat ovog projekta je obezbeđenje aplikativnog softvera IS. Zahtev je da, pored odgovarajuće funkcionalnosti, aplikativni softver bude pouzdan, korisnički orijentisan (Windows XP, Vista ili 7 ambijent), jednostavan za korišćenje, efikasan u eksploataciji, pogodan za održavanje, koji sadrži u sebi i povezanu SQL bazu podataka i praćen odgovarajućim kvalitetom vizuelnog izgleda.

Pored kvaliteta aplikativnog softvera bitna je i vremenska komponenta obezbeđenja i

uvođenja softvera, što pokazuje da ne treba previše gubiti vremena na stvaranje prve verzije aplikacije Npr.v1.0, jer će se s vremenom nadograđivati(eng.Update), ali ne sme se uzeti u obzir neozbiljan i traljav rad programera, jer može imati kasnije velike poteškoće u programu koje čak ne bi mogla ni grupa stručnjaka da reši. Zato je važno poštovati protokol, pravila i u startu definisati vreme izrade aplikativnog softvera.

Stvaranje samog programa služi kao i što sam naziv pokazuje radi lakše evidencije pacijenata, doktora, pregleda, upisa novih pacijenata i doktora, izmene i brisanja njihovih podataka, kao i administratorskog pogleda na citavu aplikaciju „Ambulanta“.

Aplikacija je povezana sa bazom podataka i na taj način obezbeđuje jednostavno dodavanje gore navedenih atributa.

Postoje dva tipa autorizacije od kojih je jedan tip sam Admin, a drugi tip su osoblje koje radi u ambulanti. Administrator ima politiku, pravo da doda i obriše nove i postojeće radnike.

Sastoji se od 12 formi koje su rađene u alatima Visual Basic-a u okviru Microsoft Visual Studio 2010 Ultimate, a baza podataka sadrži 6 tabela u čije ću podatke opisati nešto kasnije u samom seminarskom radu. Baza podataka je načinjena u Microsoft SQL Server 2008 EXPRESS EDITION Managment Studio-u.

6

3. IZRADA BAZE PODATAKA ZA APLIKACIJU „AMBULANTA“

Osnovni, prvi korak kada instaliramo SQL program za načinjavanje baza podataka, jeste podešavanje samog pristupa bazi podataka.

Odnosno prijavljivanje tj. navodimo Tip Servera „Server Type: Database Engine“ koji je po „default-u“, Ime Servera „Server name“ i samu Autentifikaciju „Authentication“ i zatim potvrđujemo ulazak u MS SQL Server gde ću prikazati na sledećoj slici.

Slika 2 Prijavljivanje u SQL Server-u 2008

Nakon prijave korisnika na računaru, možemo početi sa kreiranjem odnosno stvaranjem samog temelja baze podataka. Ovaj proces možemo obaviti grafičkim putem i uz pomoć samog izvornog kôda.

3.1 Prvi način

Kursorom miša obeležavamo podfolder “Databases” i desnim pritiskom tastera miša otvara nam se novi prozor koji nudi komandu “New Database…”.

7

Slika 3 Kreiranje nove baze podataka

Nakon ovog koraka otvara nam se novi prozor koji se naziva »New Database«, gde upisujemo ime baze »Database name« i pritiskom dugmeta »OK« kreirali smo naziv, postolje nove baze.

Slika 4 Dodavanje imena bazi podataka

8

3.2 Drugi način

Kreiranje baze podataka možemo obaviti preko forme za unos upita tzv. „NEW QUERY“ i za taj unos je potrebno kliknuti prvo levim tasterom miša. Posle dobijanja forme upita upisujemo sledeći kod za kreiranje tabele:

create database Ambulanta(naziv aplikacije, odnostno naša aplikacija će nositi ovo ime)GO -- izvršava proces načinjavanja baze podataka

Slika 5 "New Query" upit za kreiranje baze podataka

Pošto smo kreirali naziv baze podataka , sledeći korak je da postavimo srpski jezik kako bi baza podržavala slova abecede kao što su: š,đ,č,ć,ž; takođe SQL upit za to je:

-- Podesavanje baze da prihvata slova abecede:š,đ,č,ć,ž ALTER DATABASE AmbulantaCOLATE Serbian_Latin_100_CI_AI_KS

9

4. KREIRANJE BAZE PODATAKA U KODU

4.1 Stvaranje baze podataka

create database AmbulantaGO --Kreira bazu podataka

4.2 Stvaranje (kreiranje) tabela u aplikaciji

USE Ambulanta –-Koristi napravljenu bazuGO--KREIRANJE TABELE DOKTORICreate table Doktori (ID_doktora_PK TINYINT IDENTITY PRIMARY KEY,Ime_doktora nvarchar(30) NOT NULL,Prezime nvarchar(30) NOT NULL,Zvanje nvarchar(20) NOT NULL,Oblast nvarchar(20) NOT NULL,Telefon varchar(20) NULL,Mesto_prebivalista nvarchar(50)NOT NULL,Adresa_prebivalista nvarchar(50)NULL,Napomena nvarchar(max) NULL)

--KREIRANJE TABELE PACIJENTICreate table Pacijenti(ID_pacijent_PK smallint IDENTITY PRIMARY KEY,Ime_pacijenta nvarchar(30)NOT NULL,Prezime nvarchar(30) NOT NULL,Ime_oca nvarchar(30) NULL,JMBG char(13) NULL,Mesto_prebivalista nvarchar(50)NOT NULL,Adresa_prebivalista nvarchar(50)NULL,Telefon varchar(20) NULL,Napomena nvarchar(max) NULL,Datum_rodjenja date NOT NULL)

--KREIRANJE TABELE PODACI O PRISTUPUCreate table Podaci_o_pristupu(ID_podaci_pr_PK int IDENTITY PRIMARY KEY,ID_radnika_FK tinyint NOT NULL,Datum_prijave date NOT NULL,Vreme_prijave time(7) NOT NULL,Vreme_odjave time(7) NOT NULL, )

--KREIRANJE TABELE PREGLEDICreate table Pregledi(ID_pregleda_PK int IDENTITY PRIMARY KEY,ID_pacijenta_FK smallint NOT NULL,ID_doktora tinyint NOT NULL,Informacije_o_pregledu nvarchar(300) NULL,Cijena_pregleda money NOT NULL,Datum_pregleda date NOT NULL,Nalaz_i_misljenje nvarchar(1000)NOT NULL)

--KREIRANJE TABELE RADNICICreate table Radnici(ID_radnika_PK tiny INT PRIMARY KEY,Ime_radnika nvarchar(50)NOT NULL,Prezime nvarchar(50)NOT NULL,Strucna_sprema nvarchar(20) NOT NULL,Telefon varchar(20) NULL,Sifra_za_pristup nvarchar(20) NOT NULL)

--KREIRANJE TABELE ZAKAZIVANJA PREGLEDACreate table Zakazivanje_pregleda(ID_zakazivanje_pr int PRIMARY KEY,ID_pacijenta_FK smallint NOT NULL,ID_doktora tinyint NOT NULL,ID_radnika_FK tinyint NOT NULL,Datum_pregleda date NULL,Pregled_u_vezi_cega nvarchar(300) NULL)

10

5. KREIRANJE I POSTAVLJANJE RELACIJA TABELA U BAZI PODATAKA

Posle unošenja koda u kreriranju tabela koje se sadrže u bazi podataka, važno je pristupiti povezivanju tabela, odnosno njihovim relacijama. Ovo takođe možemo izvršiti na dva načina tj. putem koda (pisanjem) i povezivanjem po meni puno lakšem načinu, putem grafičkog interfejsa.

Obeležićemo kursorom miša i desnim tasterom pritisnuti na »Database Diagrams« u kojem nam se prikazuje novi mali podprozor u kojem odaberemo »New Database Diagram«.

Slika 6 Kreiranje relacija u bazi podataka i vizuelno prikazivanje povezivanja

Posle kreiranja novog dijagrama Baze podataka, pojavljuje se dijalog u kojem selektujemo sve tabele, koje će se pojaviti na dijagramu.

Zatim se vrši izrada relacija između tabela na taj način tako što levim tasterom miša vučemo određena polja tabela koja će postati sporedni ključevi (eng. Foregin key) prema poljima sa primarnim ključevima (eng. Primary key). Dobijamo finalnu formu na kojoj je prikazana relacija, Slika 6.

Pošto je relacija u redu potvrdnim odgovorm na dugme »OK« još jednom potvrdimo i tako dobijamo relaciju između date dve tabele. Kada istim postupkom obavimo i ostale relacije, samim pravilnim povezivanjem dobićemo dijagram relacija prikazan na sledećoj slici 7.

11

Slika 7 Relacije između tabela

12

6. UNOŠENJE PODATAKA U TABELE

Kada smo kreirali tabele, postavili pravilno relacije između njih, ostaje nam lakši deo posla u smislu razmišljanja, a to je popunjavanje tabela podacima. Važno je imati informacije i znati šta popunjavamo. Ovaj proces popunjavanja tabela bih predstavio lakšim, bržim i preglednijim procesom, a to je preko grafičkog interfejsa kada je u pitanju Microsoft SQL Server 2008. Potrebno je da u OBJECT EXPLORERU izaberemo tabelu u koju želimo da unosimo podatke, i kliknemo desnim tasterom miša i odaberemo „EDIT TOP 200 ROWS“, pri čemu se pojavljuje interfejs za popunjavanje tabele podacima. Nakon popunjavanja tabele dobićemo sadržaj koji ima izgled forme kao što ću prikazati na slici.

Slika 8 Popunjavanje tabele grafickim putem

13

7. KREIRANJE APLIKACIJE AMBULANTA U VISUAL BASIC-U 2010

Aplikacija je napravljena uz pomoć Visual Basic-a 2010 koji sadrži grafički interfejs radi lakšeg i pojednostavljenog rukovanja samim programom. Ova aplikacija sadrži sledeće delove u sebi:

- Bazu podataka

- Grafički izgled

- Autentifikacija korisnika i njegova prava

- Dodavanje novih podataka (doktora, pacijenata, pregleda i ostalih informacija)

- Izmenu podataka

- Brisanje podataka

- Konvertovanje pregleda i podataka pacijenta u jedan od MS aplikativnih softvera Excel 2007

Postoje dva osnovna tipa aplikacija SDI i MDI. Kod SDI aplikacija (eng.Single-document interface) može se samo jedan dokument otvoriti u jednom trenutku. Primer SDI aplikacije je Microsoft WordPad. Kod MDI aplikacija (eng.Multiple document interface) nekoliko dokumenata se može otvoriti istovremeno. Primer MDI aplikacije je Microsoft Word. MDI aplikacija se sastoji od jednog roditeljskog prozora i jednog ili više prozora potomaka.Ovde je korištena i jedna i druga forma, u zavisnosti od vizuelnog i lakšeg snalaženja običnom korisniku. To je tzv. nova MDI roditeljska forma koja ima svojstvo IsMdiContainer-a koji se postavlja na vrednost True. 

7.1 Windows forma za pristupanje (autorizaciju) korisnika

Kada pokrenemo aplikaciju na ikonu pojavljuje se početna tzv. „Glavna forma“. Ona u sebi poziva još jednu formu, a to je forma prijavljivanje, odnosno autentifikacije korisnika. Iako postoje dve vrste pristupa, a to je radnika i Administratora, dozvolio sam da svi radnici mogu ući u glavnu formu, ali da samo Administrator može ukloniti, dodati i proveriti radno vreme prisutnosti radnika na poslu.

14

Slika 9 Prozor za prijavu radnika i ulazak u aplikaciju

Forma za pristup korisnika opisana u sledećem kodu:

15

Imports System.DataImports System.Data.SqlClient

Public Class frmPrijava

Private Sub frmPrijava_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load konekcija() End Sub

Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click

Dim cmdString As String = "select Ime_radnika,Sifra_za_pristup from radnici " cmdString = cmdString & "WHERE (Ime_radnika = @Param1) AND (Sifra_za_pristup = @Param2)" Dim paramIme_radnika As New SqlParameter Dim paramLozinka As New SqlParameter Dim Korisnici_baze_podataka As New SqlDataAdapter Dim sqlDataTable As New DataTable Dim sqlKomanda As New SqlCommand

paramIme_radnika.ParameterName = "@Param1" paramIme_radnika.Value = Ime_radnikaTextBox.Text paramLozinka.ParameterName = "@Param2" paramLozinka.Value = Sifra_za_pristupTextBox.Text sqlKomanda.Connection = sqlKonekcija sqlKomanda.CommandType = CommandType.Text sqlKomanda.CommandText = cmdString sqlKomanda.Parameters.Add(paramIme_radnika) sqlKomanda.Parameters.Add(paramLozinka)

Korisnici_baze_podataka.SelectCommand = sqlKomanda Korisnici_baze_podataka.Fill(sqlDataTable) If sqlDataTable.Rows.Count > 0 Then Me.Hide()

7.2 Glavna forma

Posle uspešnog prijavljivanja na prvoj formi ulazimo u tzv. GLAVNU FORMU „Ambulante“ gde se nalaze skraćenice, dugmad i kao neka vizuelna osveženja tipa časovnika i slika, a napravljeno radi lepšeg i jednostavnijeg rada u samom okruženju.

16

'' jos koda = omoguci meni i ostalo na glavnoj formi

vremePrijave = TimeOfDay frmGlavna.MenuStrip2.Enabled = True frmGlavna.Panel1.Visible = True Else MsgBox("Korisničko ime ili lozinka nisu pronađeni u bazi, probajte ponovo!") End If sqlDataTable.Dispose() sqlDataTable = Nothing sqlKomanda.Dispose() sqlKomanda = Nothing Korisnici_baze_podataka.Dispose() Korisnici_baze_podataka = Nothing ID()

End Sub Private Sub ID()

Dim id As String id = "select id_radnika_pk from radnici where Ime_radnika = @Param1 and Sifra_za_pristup = @Param2 "

Dim paramIme_radnika1 As New SqlParameter Dim paramLozinka1 As New SqlParameter Dim idradnika As New SqlDataAdapter Dim sqlDataTable1 As New DataTable Dim sqlKomanda1 As New SqlCommand

paramIme_radnika1.ParameterName = "@Param1" paramIme_radnika1.Value = Ime_radnikaTextBox.Text paramLozinka1.ParameterName = "@Param2" paramLozinka1.Value = Sifra_za_pristupTextBox.Text sqlKomanda1.Connection = sqlKonekcija sqlKomanda1.CommandType = CommandType.Text sqlKomanda1.CommandText = id sqlKomanda1.Parameters.Add(paramIme_radnika1) sqlKomanda1.Parameters.Add(paramLozinka1)

idradnika.SelectCommand = sqlKomanda1 idradnika.Fill(sqlDataTable1) BindingSource1.DataSource = sqlDataTable1 ListBox1.DataSource = BindingSource1 ListBox1.DisplayMember = "id_radnika_pk" IDprijavljenogRadnika = ListBox1.Text End SubEnd Class

Slika 10 Glavna forma aplikacije Ambulanta

Na Glavnoj formi se nalaze :

- Meni na početku, vrhu forme (Pacijenti, Doktori, Pregledi, Finansije, Podesavanja)

- Panel sa leve strane koji sadrži dva dugmeta, sat, i sliku

Programski kod glavne forme:

17

Imports System.Windows.Forms

Public Class frmGlavna

Private Sub frmGlavna_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'AmbulantaDataSet.Podaci_o_pristupu' table. You can move, or remove it, as needed. Me.Podaci_o_pristupuTableAdapter.Fill(Me.AmbulantaDataSet.Podaci_o_pristupu) Panel1.Visible = False Me.MenuStrip2.Enabled = False

frmPrijava.MdiParent = Me

18

Public Sub doktoripregledi() Dim dat As String dat = Format(Today, "yyyy-MM-dd") Dim upit As String upit = "declare @privremena table (Doktor nvarchar (40))" upit = upit + " insert @privremena " upit = upit + "select Ime_doktora + ' ' + Prezime as doktor from Zakazivanje_pregleda, Doktori " upit = upit + " where Datum_pregleda = '" + dat + "' and ID_doktora = ID_doktora_PK" upit = upit + " select distinct Doktor, COUNT (Doktor) from @privremena group by Doktor" bin(upit, BindingSource1) DataGridView1.DataSource = BindingSource1 With DataGridView1 .Columns.Item(1).DefaultCellStyle.BackColor = Color.Crimson .Columns.Item(1).Width = 40 .Columns.Item(0).Width = 140 .Columns.Item(1).HeaderText = "Br." End With End Sub

Private Sub CloudButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) frmPacijenti.MdiParent = Me frmPacijenti.Show()

End Sub

Private Sub PregledPacijenataToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PregledPacijenataToolStripMenuItem.Click

frmPacijenti.Show()

End Sub

Private Sub NoviPacijentToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NoviPacijentToolStripMenuItem.Click

frmDodajPacijenta.Show()

End Sub

Private Sub PregledDoktoraToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PregledDoktoraToolStripMenuItem.Click 'frmDoktori.MdiParent = Me frmDoktori.Show()

End Sub

Private Sub DodajDoktoraToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DodajDoktoraToolStripMenuItem.Click 'frmDodajDoktora.MdiParent = Me frmDodajDoktora.Show()

End Sub

Private Sub SviPreglediToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SviPreglediToolStripMenuItem.Click

19

Private Sub ZakaziPregledToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZakaziPregledToolStripMenuItem.Click ' frmZakaziPregl.MdiParent = Me frmZakaziPregl.Show() zastotrebapacijent = "zakaziPregled" odaberiPacijenta()

End Sub

Private Sub UnesiPregledToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UnesiPregledToolStripMenuItem.Click noviIliIzmenaPregleda = True zastotrebapacijent = "unesiPregled" odaberiPacijenta() End Sub

Private Sub frmGlavna_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed Try

Dim datum As String datum = Format(Today, "yyyy-MM-dd") ' format datuma Dim vremeOdjave As String vremeOdjave = TimeOfDay ' trenutno sistemsko vreme Dim s, m, ss As Integer s = CInt(vremeOdjave.Substring(0, 2)) ' dobijau se samo cifre sati - hours m = CInt(vremeOdjave.Substring(3, 2)) ' dobijaju se samo cifre minuta ss = CInt(vremeOdjave.Substring(6, 2)) ' dobijaju se samo cifre sekundi ' vreme odjavljivanja Dim vremeOdj As New TimeSpan(s, m, ss) ' koristi se timespan struktura podataka za smestanje vremena u bazu

'vreme prijavljivanja Dim sp, mp, ssp As Integer sp = CInt(vremePrijave.Substring(0, 2)) ' dobijaju se samo cifre sati - hours mp = CInt(vremePrijave.Substring(3, 2)) ' dobijaju se samo cifre minuta - minutes ssp = CInt(vremePrijave.Substring(6, 2)) ' dobijaju se samo cifre sekundi - seconds Dim vremePrij As New TimeSpan(sp, mp, ssp)

'dodavanje podataka u TableAdapter Me.Podaci_o_pristupuTableAdapter.Insert(ID_radnika_FK:=IDprijavljenogRadnika, Datum_prijave:=datum, Vreme_odjave:=vremeOdj, Vreme_prijave:=vremePrij) Me.Validate() Me.TableAdapterManager.UpdateAll(Me.AmbulantaDataSet) 'azuriranje podataka u datasetu Me.Podaci_o_pristupuTableAdapter.Dispose() Me.Podaci_o_pristupuTableAdapter.Fill(Me.AmbulantaDataSet.Podaci_o_pristupu) Catch ex As Exception ' ukoliko je doslo do greske prikazi poruku o gresci MsgBox("Doslo je do greske, nisu sacuvani podaci o prijavi i odjavi", MsgBoxStyle.Critical, Title:="Greska, Zao nam je") MsgBox(ex) Finally Application.Exit() ' izadji iz aplikacije, ovaj kod se uvek

20

frmZakazaniPregledi.Show() End Sub

Private Sub PodesavanjaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PodesavanjaToolStripMenuItem.Click 'frmAdministrator.MdiParent = Me frmAdministrator.Show()

End Sub

Private Sub CloudButton2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton2.Click zastotrebapacijent = "zakaziPregled" odaberiPacijenta() End Sub

Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click 'frmZakazaniPregledi.MdiParent = Me frmZakazaniPregledi.Show() End Sub

Private Sub frmGlavna_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged Panel1.Left = (Me.Width - Panel1.Width) - 15 End Sub

Private Sub FinansijeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FinansijeToolStripMenuItem.Click 'frmFinansije.MdiParent = Me frmFinansije.Show() End Sub

Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) zastotrebapacijent = "zakaziPregled" odaberiPacijenta() End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click

End Sub

Private Sub MenuStrip2_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles MenuStrip2.ItemClicked

End Sub

Program sadrži kao što smo videli Glavnu Formu i Formu za prijavljivanje, ali i još 11 preostalih formi koji su bili potrebni za nesmetani rad Ambualnte i za koje sam smatrao da su najpotrebnije medicinskom osoblju i doktorima. One će biti vizuelno grafički i kroz kod prikazane u seminarskom radu.

8. Forma za administratorsku kontrolu

Slika 11 Forma za administratorsku kontrolu

Programski kod za formu administratorske kontrole:

21

Public Class frmAdministrator Dim pokusaj As SByte Private Sub frmAdministrator_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' podesavanje parametara Me.RadniciTableAdapter.Fill(Me.AmbulantaDataSet.Radnici) TabControl1.Visible = False Label2.Visible = False CloudButton6.Visible = False DateTimePicker1.Visible = False DateTimePicker2.Visible = False Label4.Visible = False Label3.Visible = False MonthCalendar1.Visible = False End Sub

Private Sub RadniciBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadniciBindingNavigatorSaveItem.Click Me.Validate()

22

Me.RadniciBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.AmbulantaDataSet) End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Clear() TextBox1.Focus() End Sub

Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click Dim upit As String = TextBox1.Text ' upit je uneseni tekt bin(upit, BindingSource1) 'izvrsi upit DataGridView1.DataSource = BindingSource1 ' prikazi rezultat End Sub

Private Sub CloudButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton2.Click If TextBox2.Text = "administrator" Then ' ako je administratorska sifra ispravna Panel1.Dispose() TabControl1.Visible = True Else ' ako nije Label2.Visible = True TextBox2.Text = "" TextBox2.Focus() pokusaj = pokusaj + 1 If pokusaj >= 3 Then ' ako se vise od tri puta unela pogresna sifra Panel1.Dispose() MsgBox("Tri puta ste netacno uneli administratorsku sifru, obratite se administratoru") End If End If End Sub

Private Sub CloudButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton3.Click Dim upit As String Dim datum As String datum = Format(Today, "yyyy-MM-dd") upit = "select Radnici.Ime_radnika as 'RADNIK', sum(DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) / 60) AS 'SAT', SUM(DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) - (DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) / 60) * 60) as 'MINUTE' from Podaci_o_pristupu, Radnici" upit = upit + " where ID_radnika_FK = ID_radnika_PK and Podaci_o_pristupu.Datum_prijave = '" + datum + "'" upit = upit + " group by Radnici.Ime_radnika" bin(upit, BindingSource2) DataGridView2.DataSource = BindingSource2 With DataGridView2 .Columns.Item(1).Width = 50 .Columns.Item(2).Width = 50 End With

CloudButton6.Visible = False DateTimePicker1.Visible = False DateTimePicker2.Visible = False Label4.Visible = False Label3.Visible = False MonthCalendar1.Visible = False End Sub

23

Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged Dim upit As String Dim datum As String datum = Format(MonthCalendar1.SelectionRange.Start, "yyyy-MM-dd") upit = "select Radnici.Ime_radnika as 'RADNIK', sum(DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) / 60) AS 'SAT', SUM(DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) - (DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) / 60) * 60) as 'MINUTE' from Podaci_o_pristupu, Radnici" upit = upit + " where ID_radnika_FK = ID_radnika_PK and Podaci_o_pristupu.Datum_prijave = '" + datum + "'" upit = upit + " group by Radnici.Ime_radnika" bin(upit, BindingSource2) DataGridView2.DataSource = BindingSource2 With DataGridView2 .Columns.Item(1).Width = 50 .Columns.Item(2).Width = 50 End With End Sub

Private Sub CloudButton6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton6.Click Dim upit As String Dim datum1 As String Dim datum2 As String datum1 = Format(DateTimePicker1.Value, "yyyy-MM-dd") datum2 = Format(DateTimePicker2.Value, "yyyy-MM-dd") upit = "select Radnici.Ime_radnika as 'RADNIK', sum(DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) / 60) AS 'SAT', SUM(DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) - (DATEDIFF(MINUTE , Podaci_o_pristupu.Vreme_prijave, Podaci_o_pristupu.Vreme_odjave) / 60) * 60) as 'MINUTE' from Podaci_o_pristupu, Radnici" upit = upit + " where ID_radnika_FK = ID_radnika_PK and Podaci_o_pristupu.Datum_prijave between '" + datum1 + "' and '" + datum2 + "'" upit = upit + " group by Radnici.Ime_radnika"

bin(upit, BindingSource2) DataGridView2.DataSource = BindingSource2 With DataGridView2 .Columns.Item(1).Width = 50 .Columns.Item(2).Width = 50 End With End Sub

Private Sub CloudButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton4.Click CloudButton6.Visible = True DateTimePicker1.Visible = True DateTimePicker2.Visible = True Label3.Visible = True Label4.Visible = True MonthCalendar1.Visible = False End Sub Private Sub CloudButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton5.Click CloudButton6.Visible = False DateTimePicker1.Visible = False DateTimePicker2.Visible = False Label4.Visible = False Label3.Visible = False MonthCalendar1.Visible = True End Sub

9. Forma za dodavanje doktora

Slika 12 Izgled forme dodavanja doktora i informacija o njemu

Programski kod za formu dodavanja doktora i informacija o njemu:

24

Public Class frmDodajDoktora

Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click Try Me.DoktoriTableAdapter.Insert(Ime_doktora:=Ime_doktoraTextBox.Text, Adresa_prebivalista:=Adresa_prebivalistaTextBox.Text, Mesto_prebivalista:=Mesto_prebivalistaTextBox.Text, Napomena:=NapomenaTextBox.Text, Oblast:=OblastTextBox.Text, Prezime:=PrezimeTextBox.Text, Telefon:=TelefonTextBox.Text, Zvanje:=ZvanjeTextBox.Text) Me.Validate() Me.TableAdapterManager.UpdateAll(frmPacijenti.AmbulantaDataSet) frmDoktori.DoktoriTableAdapter.Dispose() frmDoktori.DoktoriTableAdapter.Fill(frmDoktori.AmbulantaDataSet.Doktori) frmDoktori.Show() Me.Close() Catch ex As Exception MsgBox("Dogodila se greska, doktor nije dodat, provjerite da li su sva roza polja ispravno popunjena") End Try

End Sub'kada se napusta fokus textboxa i ukoliko je taj text box prazan prikazi

25

Private Sub Ime_doktoraTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ime_doktoraTextBox.Leave If Ime_doktoraTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") Ime_doktoraTextBox.Focus() Ime_doktoraTextBox.BackColor = Color.MistyRose Else Ime_doktoraTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub PrezimeTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrezimeTextBox.Leave If PrezimeTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") PrezimeTextBox.Focus() PrezimeTextBox.BackColor = Color.MistyRose Else PrezimeTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub ZvanjeTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZvanjeTextBox.Leave If ZvanjeTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") ZvanjeTextBox.Focus() ZvanjeTextBox.BackColor = Color.MistyRose Else ZvanjeTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub OblastTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OblastTextBox.Leave If OblastTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") OblastTextBox.Focus() OblastTextBox.BackColor = Color.MistyRose Else OblastTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub Mesto_prebivalistaTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mesto_prebivalistaTextBox.Leave If Mesto_prebivalistaTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") Mesto_prebivalistaTextBox.Focus() Mesto_prebivalistaTextBox.BackColor = Color.MistyRose Else Mesto_prebivalistaTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub frmDodajDoktora_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End SubEnd Class

10. Forma za dodavanje novih pacijenata

Slika 13 Forma za dodavanje pacijenata

Programski kod za formu dodavanja pacijenata i informacija o njima:

26

Public Class frmDodajPacijenta

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try ' pokusaj dodati pacijenta 'dodeljivanje vrednosti Me.PacijentiTableAdapter.Insert(Ime_pacijenta:=Ime_pacijentaTextBox.Text, Adresa_prebivalista:=Adresa_prebivalistaTextBox.Text, Datum_rodjenja:=Datum_rodjenjaDateTimePicker.Value, Ime_oca:=Ime_ocaTextBox.Text, JMBG:=JMBGTextBox.Text, Mesto_prebivalista:=Mesto_prebivalistaTextBox.Text, Napomena:=NapomenaTextBox.Text, Prezime:=PrezimeTextBox.Text, Telefon:=TelefonTextBox.Text) Me.Validate() Me.TableAdapterManager.UpdateAll(frmPacijenti.AmbulantaDataSet) ' azuriranje DataSeta Me.Close() 'Azuriranje pacijenti Table Adapter frmPacijenti.PacijentiTableAdapter.Dispose() frmPacijenti.PacijentiTableAdapter.Fill(frmPacijenti.AmbulantaDataSet.Pacijenti) frmPacijenti.Show() Catch ex As Exception ' ukoliko dodje do greske neke prikazi sledecu poruku MsgBox("Dogodila se greska, clan nije dodat, provjerite da li su

27

'kada se napusta fokus textboxa i ukoliko je taj text box prazan prikazi poruku da se mora popuniti Private Sub Ime_pacijentaTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) If Ime_pacijentaTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") Ime_pacijentaTextBox.Focus() Ime_pacijentaTextBox.BackColor = Color.MistyRose Else Ime_pacijentaTextBox.BackColor = Color.PaleGreen End If

End Sub

Private Sub PrezimeTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) If PrezimeTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") PrezimeTextBox.Focus() PrezimeTextBox.BackColor = Color.MistyRose Else PrezimeTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub Mesto_prebivalistaTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mesto_prebivalistaTextBox.Leave If Mesto_prebivalistaTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") Mesto_prebivalistaTextBox.Focus() Mesto_prebivalistaTextBox.BackColor = Color.MistyRose Else Mesto_prebivalistaTextBox.BackColor = Color.PaleGreen End If End Sub

Private Sub frmDodajPacijenta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End SubEnd Class

11. Forma Doktori

Ova forma sadrži u sebi četiri važna komande, a to su:

- Dodavanje doktora- Izmena podataka doktora- Brisanje informacija doktora u bazi podataka- I čuvanje podataka o doktorima

Slika 14 Forma o informacijama i izmenama doktora

Programski kod za formu o informacijama i izmenama doktora:

28

Public Class frmDoktori

Private Sub frmDoktori_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.DoktoriTableAdapter.Fill(Me.AmbulantaDataSet.Doktori) 'ispunjavanje table adaptera podacima iz DataSeta pacijenti() ' pozivanje procedure za prikaz pacijenata koje je pregledao odabrani doktor

With DoktoriDataGridView 'izmena imena kolona u DataGridViewu .Columns.Item(0).HeaderText = "IME" .Columns.Item(1).HeaderText = "PREZIME" .Columns.Item(2).HeaderText = "ZVANjE" .Columns.Item(3).HeaderText = "OBLAST" .Columns.Item(4).HeaderText = "TELEFON" .Columns.Item(5).HeaderText = "PREBIVALISTE" .Columns.Item(6).HeaderText = "ADRESA" End With

29

' sakrivanje i onemogucavanje odredjenih textboxova ID_doktora_PKTextBox.Visible = False CloudButton2.Enabled = False CloudButton3.Enabled = False Ime_doktoraTextBox.Enabled = False PrezimeTextBox.Enabled = False OblastTextBox.Enabled = False Mesto_prebivalistaTextBox.Enabled = False Adresa_prebivalistaTextBox.Enabled = False NapomenaTextBox.Enabled = False TelefonTextBox.Enabled = False ZvanjeTextBox.Enabled = False

End Sub

Private Sub CloudButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton3.Click Try ' pokusaj snimiti promene Me.Validate() Me.DoktoriBindingSource.EndEdit() Me.DoktoriTableAdapter.Update(Me.AmbulantaDataSet.Doktori) 'azuriranje izmena MsgBox("Uspješno izmjenjeni podaci") Catch ex As Exception ' ako nije snimljeno MsgBox("Izmjenjeni podaci nisu sačuvani, pokušajte ponovo!,") Finally 'uvek izvrsi ovaj kod CloudButton2.Enabled = False CloudButton3.Enabled = False Ime_doktoraTextBox.Enabled = False PrezimeTextBox.Enabled = False OblastTextBox.Enabled = False Mesto_prebivalistaTextBox.Enabled = False Adresa_prebivalistaTextBox.Enabled = False NapomenaTextBox.Enabled = False TelefonTextBox.Enabled = False ZvanjeTextBox.Enabled = False End Try

End Sub

Private Sub CloudButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton2.Click Try ' pokusaj izbrisati doktora Me.Validate() Me.DoktoriBindingSource.EndEdit() ' govori koji doktor da se izbrise Me.DoktoriTableAdapter.Delete(Original_ID_doktora_PK:=ID_doktora_PKTextBox.Text, Original_Adresa_prebivalista:=Adresa_prebivalistaTextBox.Text, Original_Ime_doktora:=Ime_doktoraTextBox.Text, Original_Mesto_prebivalista:=Mesto_prebivalistaTextBox.Text, Original_Oblast:=OblastTextBox.Text, Original_Prezime:=PrezimeTextBox.Text, Original_Telefon:=TelefonTextBox.Text, Original_Zvanje:=ZvanjeTextBox.Text) Me.DoktoriTableAdapter.Update(Me.AmbulantaDataSet.Doktori) ' azuriranje Data Seta MsgBox("Doktor je uspješno izbrisan") 'azuriranje Table Adaptera Me.DoktoriTableAdapter.Dispose() Me.DoktoriTableAdapter.Fill(Me.AmbulantaDataSet.Doktori) Catch ex As Exception 'ako je doslo do greske prikazi poruku da doktor nije izbrisan MsgBox("Doktor nije izbrisan, pokušajte ponovo!")

30

Finally ' uvek izvrsi ovaj kod 'onemoguci odredjena dugmad i textboxove CloudButton2.Enabled = False CloudButton3.Enabled = False Ime_doktoraTextBox.Enabled = False PrezimeTextBox.Enabled = False OblastTextBox.Enabled = False Mesto_prebivalistaTextBox.Enabled = False Adresa_prebivalistaTextBox.Enabled = False NapomenaTextBox.Enabled = False TelefonTextBox.Enabled = False ZvanjeTextBox.Enabled = False End Try End Sub Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click frmDodajDoktora.Show() ' prikazi formu za dodavanje novog doktora Me.Hide() End Sub Private Sub pacijenti() ' podrutina koja prikazuje pacijente koje jepregledao odabrani doktor Dim upit As String ' u njoj ce biti sadrzana SQL komanda koja ce se izvrsiti upit = "select Ime_pacijenta + Prezime 'pacijent' from Pregledi, Pacijenti where ID_doktora =@Param1 And ID_pacijenta_FK = ID_pacijent_PK" aktivnosti(upit, ID_doktora_PKTextBox, "pacijent", ListBox1) ' pozivanje procedure i prosledjivanje podataka End Sub

Private Sub ID_doktora_PKTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ID_doktora_PKTextBox.TextChanged 'kada se promeni vrednost u text boxu koji sadrzi ID doktora onda pozovi podrutinu koja ce da prikaze pacijente koje je pregledao odabrani doktor pacijenti() End Sub

Private Sub CloudButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton4.Click ' omogucavanje textboxova da korisnik moze da izmeni podatke u njima CloudButton2.Enabled = True CloudButton3.Enabled = True CloudButton2.Enabled = True CloudButton3.Enabled = True Ime_doktoraTextBox.Enabled = True PrezimeTextBox.Enabled = True OblastTextBox.Enabled = True Mesto_prebivalistaTextBox.Enabled = True Adresa_prebivalistaTextBox.Enabled = True NapomenaTextBox.Enabled = True TelefonTextBox.Enabled = True ZvanjeTextBox.Enabled = True End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' sluzi kada se sa forme pregledi pozove ova forma da bi se odabrao doktor odnosno njegov ID. ' i proslede se odredjeni podaci na formu Pregledi frmPregledi.TextBox2.Text = ID_doktora_PKTextBox.Text frmPregledi.Label1.Text = Ime_doktoraTextBox.Text + " " + PrezimeTextBox.Text Me.Close() End Sub

12. Forma o finansijama ambulante

Slika 15 Forma finansijskog stanja ambulante

Programski kod za formu o finansijskom stanju ambulante:

31

Public Class frmFinansije

Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click Dim prvidatum, drugiDatum As String prvidatum = Format(MonthCalendar1.SelectionRange.Start, "yyyy-MM-dd") drugiDatum = Format(MonthCalendar2.SelectionRange.Start, "yyyy-MM-dd")

Dim upit As String upit = "select sum(cijena_pregleda)as 'KM', count(cijena_pregleda) 'PREGLEDA' from pregledi" upit = upit + " where Datum_pregleda between '" + prvidatum + "' and '" + drugiDatum + "'" bin(upit, BindingSource1)

ListBox1.DataSource = BindingSource1 ListBox2.DataSource = BindingSource1 ListBox1.DisplayMember = "KM" ListBox2.DisplayMember = "PREGLEDA" Dim cena As String Try cena = Math.Truncate(CDec(ListBox1.Text)) ' odsecanje svega posle , tj zareza Label4.Text = "Ukupno " + cena + " KM, od ukupno " + ListBox2.Text + " pregleda" Catch ex As Exception Label4.Text = "Ukupno 0,00 KM, od ukupno 0 pregleda" End Try End Sub Private Sub frmFinansije_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub

13. Forma koja prikazuje podatke pacijenata

U ovoj formi je značajno izdvojiti da možemo upravljati podacima pacijenata i to na sledeći način:

- Uneti (upisati) novog pacijenta- Uredite podatke o pacijentu- Sačuvati izmene- Zakzivanje pregleda - Završen (obrađen) pregled

Pored toga što po defaultu kad otvorimo formu ona još sadrži dva podkataloga, a to su pregledi gde takođe možemo vršiti izmene i još se nalazi podkatalog informacije pacijenata.

Slika 16 Forma podaci pacijenta

Programski kod za formu o podacima pacijenata ambulante:

32

Public Class frmPacijenti

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'ispunjavanje Table Adaptera podacima Me.Zakazivanje_pregledaTableAdapter.Fill(Me.AmbulantaDataSet.Zakazivanje_pregleda) Me.PreglediTableAdapter.Fill(Me.AmbulantaDataSet.Pregledi) Me.PacijentiTableAdapter.Fill(Me.AmbulantaDataSet.Pacijenti)

'pozivanje podrutina imenaIprezimena() yakat()

33

'sakrivanje i onemogucavanje odredjenih TextBoxova ID_pacijent_PKTextBox.Visible = False Ime_pacijentaTextBox.Enabled = False PrezimeTextBox.Enabled = False Ime_ocaTextBox.Enabled = False JMBGTextBox.Enabled = False Mesto_prebivalistaTextBox.Enabled = False Adresa_prebivalistaTextBox.Enabled = False TelefonTextBox.Enabled = False NapomenaTextBox.Enabled = False Datum_rodjenjaDateTimePicker.Enabled = False End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged 'kada se promeni vrednost TextBoxa u ListBoxu sa imenima pacijenata odabrani index ce biti vrednost ' dobijena kao rezultat pozvane podrutine ListBox2.SelectedIndex = pretraga(ListBox2, tekstPolje:=TextBox1) End Sub

Private Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click ' kada se klikne na dugme dodaj novog pacijenta prikazi formu za dodavanje pacijenta i sakrij formu sa pacijentima frmDodajPacijenta.Show() Me.Hide() End Sub

Private Sub CloudButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton2.Click Try 'pokusaj izbrisati clana Me.Validate() Me.PacijentiBindingSource.EndEdit() 'kraj izmena nad Bindigsourcem 'govori sta i gde treba da obrise Me.PacijentiTableAdapter.Delete(Original_ID_pacijent_PK:=ID_pacijent_PKTextBox.Text, Original_Adresa_prebivalista:=Adresa_prebivalistaTextBox.Text, Original_Datum_rodjenja:=Datum_rodjenjaDateTimePicker.Text, Original_Ime_oca:=Ime_ocaTextBox.Text, Original_Ime_pacijenta:=Ime_pacijentaTextBox.Text, Original_JMBG:=JMBGTextBox.Text, Original_Mesto_prebivalista:=Mesto_prebivalistaTextBox.Text, Original_Prezime:=PrezimeTextBox.Text, Original_Telefon:=TelefonTextBox.Text)

''azuriranje izmena u Data Setu i prikaz poruke da je clan uspesno izbrisan Me.PacijentiTableAdapter.Update(Me.AmbulantaDataSet.Pacijenti) MsgBox("Član je uspješno izbrisan")

Me.PacijentiTableAdapter.Dispose() ' "unistavanje" iz memorije Pacijenti Table adaptera i popunjavanje istog sa azuriranim podacima ' to se radi da bi se azurirali podaci na trenutnoj formi inace se mora zatvoriti i ponovo otvoriti forma za prikaz azuriranih podataka Me.PacijentiTableAdapter.Fill(Me.AmbulantaDataSet.Pacijenti) Catch ex As Exception ' ukoliko nije uspelo brisanje tj doslo je do neke greske prikazi sledecu poruku MsgBox("Član nije izbrisan, pokušajte ponovo!")

34

End Try End Sub

Private Sub CloudButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton3.Click Try 'pokusaj sacuvati izmenjene podatke Me.Validate() Me.PacijentiBindingSource.EndEdit() 'kraj izmene nad BindigSourcem Me.PacijentiTableAdapter.Update(Me.AmbulantaDataSet.Pacijenti) ' govori sta se "apdejtuje' MsgBox("Uspješno izmjenjeni podaci") ' prikaz poruke da su izmenjeni podaci uspesno sacuvani Catch ex As Exception ' ako nije snimljeno tj doslo je do neke greske prikazi sledecu poruku MsgBox("Izmjenjeni podaci nisu sačuvani, pokušajte ponovo!,") End Try

CloudButton4.Show() ' prikazi sakriveno dugme

'onemoguci dole navedene textboxove Ime_pacijentaTextBox.Enabled = False PrezimeTextBox.Enabled = False Ime_ocaTextBox.Enabled = False JMBGTextBox.Enabled = False Mesto_prebivalistaTextBox.Enabled = False Adresa_prebivalistaTextBox.Enabled = False TelefonTextBox.Enabled = False NapomenaTextBox.Enabled = False Datum_rodjenjaDateTimePicker.Enabled = False End Sub

Private Sub CloudButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton4.Click ' kada se klikne na dugme izmeni sakrij to dugme i omoguci korisniku da moze izmeniti podatke u TextBoxovima CloudButton4.Hide() Ime_pacijentaTextBox.Enabled = True PrezimeTextBox.Enabled = True Ime_ocaTextBox.Enabled = True JMBGTextBox.Enabled = True Mesto_prebivalistaTextBox.Enabled = True Adresa_prebivalistaTextBox.Enabled = True TelefonTextBox.Enabled = True NapomenaTextBox.Enabled = True Datum_rodjenjaDateTimePicker.Enabled = True End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged 'kada dodje do promene odabranog index u ListBoxu pozovi sledecu podrutinu yakat() End Sub

Private Sub imenaIprezimena() 'podrutina pomocu koje se dobijaju imena i prezimena clanova Dim u As String

35

u = "select Ime_pacijenta + ' ' + prezime as pacijent from pacijenti" bin(u, BindingSource1) ' pozivanje druge procedure i prosledjivanje podataka 'smjestanje dobijenih podataka u listbox ListBox2.DataSource = BindingSource1 ListBox2.DisplayMember = "pacijent" ' koji podaci ce biti prikazani u listboxu 2 End Sub

Public Sub yakat() 'procedura preko koje se dobijaju imena i prezimena doktora koji je pregledao odabranog pacijenta ' i dobivanje datuma zakazanog pregleda za odabranog pacijenta

'sql upit za ime i prezime doktora Dim upit As String = "select Ime_doktora + ' ' + Prezime as Doktor from Doktori, Pregledi where ID_doktora_PK = ID_doktora and ID_pacijenta_FK = @Param1" 'pozivanje podrutine i prosledjivanje potrebnih podataka aktivnosti(upit, ID_pacijent_PKTextBox, "Doktor", lbxDoktori)

' sql upit za dobivanje datuma zakazanog pregleda za odabranog pacijenta upit = "select Datum_pregleda as Pacijenat from Pacijenti, Zakazivanje_pregleda where(ID_pacijenta_FK = ID_pacijent_PK And ID_pacijenta_FK = @Param1 And Datum_pregleda > getdate())" ' pozivanje podrutine i prosledjivanje potrebnih podataka aktivnosti(upit, ID_pacijent_PKTextBox, "Pacijenat", lbxZakazaniPregl) End Sub

Private Sub CloudButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton5.Click 'zakazivanje pregleda za odabranog pacijenta

'dodeljivanje vrednosti globalnim promenljivima idPacijenta = ID_pacijent_PKTextBox.Text imePacijenta = Ime_pacijentaTextBox.Text + " " + PrezimeTextBox.Text Me.Close() ' zatvori formu sa pacijentima

Dim zakazi As New frmZakaziPregl 'stvaranje novog objekta tj forme za zakazivanje pregleda zakazi.Show() ' prikazi formu za zakazivanje pregleda End Sub

Private Sub CloudButton6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton6.Click 'kada je pacijent pregled uneti podatke o pregledu noviIliIzmenaPregleda = True ' dodeljivanje vrednosti true na osnovu cega forma za zavrsene preglede zna da li je u pitanju 'unost novog pregleda ili izmena vec postojeceg

Dim dodaj As New frmZavrsenPregled ' stvaranje novog objekta forme za zavrsene preglede dodaj.Show() ' prikaz forme End Sub

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' ovo dugme je kada se treba odabrati pacijent za zakazivanje, unos ili pregled pregleda ' da bi se izbeglo stvaranje nove forme iskoristita je vec postojeca forma sa svim podacima o pacijentima ' i korisnik kada zeli da zakaze novi pregled pojavljuje mu se prvo ova forma i on odabire pacijenta i akcijom ' na ovo dugme on prosledjuje odredjene podatke o pacijentu na formu koju

36

pozvao

' deklarisana je globalna promenljiva i na osnovu vrednosti te promenljive zna se gde treba da se proslede podaci o pacijentu i koje akcije da se urade If zastotrebapacijent = "izvestajpregled" Then frmPregledi.TextBox2.Text = ID_pacijent_PKTextBox.Text frmPregledi.Label1.Text = Ime_pacijentaTextBox.Text + " " + PrezimeTextBox.Text ElseIf zastotrebapacijent = "zakaziPregled" Then frmZakaziPregl.MdiParent = frmGlavna frmZakaziPregl.Show() frmZakaziPregl.ID_pacijenta_FKTextBox.Text = ID_pacijent_PKTextBox.Text frmZakaziPregl.Label1.Text = Ime_pacijentaTextBox.Text + " " + PrezimeTextBox.Text ElseIf zastotrebapacijent = "unesiPregled" Then frmZavrsenPregled.MdiParent = frmGlavna frmZavrsenPregled.Show() frmZavrsenPregled.ID_pacijenta_FKTextBox.Text = ID_pacijent_PKTextBox.Text frmZavrsenPregled.Label1.Text = Ime_pacijentaTextBox.Text + " " + PrezimeTextBox.Text End If

Me.Close() ' zatvori ovu formu End Sub

Private Sub CloudButton7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton7.Click Try

' izmena odabranog pregleda za odredjenog pacijenta

noviIliIzmenaPregleda = False ' na osnovu ovog podatka pozvana forma ce da zna da je u pitanju samo izmena a ne dodavanje novog pregleda

Dim izmeni As New frmZavrsenPregled ' stvaranje novog objekta forme za zavrsene preglede i prikaz iste Me.Show() izmeni.Text = "IZMENI" ' naslov prikazane forme idPacijenta = CInt(ID_pacijenta_FKTextBox.Text) ' prosledjivanje podataka sa ove forme u formu za izmenu pregleda izmeni.Datum_pregledaDateTimePicker.Value = Datum_pregledaDateTimePicker.Value izmeni.Cijena_pregledaTextBox.Text = Math.Truncate(CDec(Cijena_pregledaTextBox.Text)) ' odsecanje svega posle , izmeni.Informacije_o_pregleduTextBox.Text = Informacije_o_pregleduTextBox.Text izmeni.Nalaz_i_misljenjeTextBox.Text = Nalaz_i_misljenjeTextBox.Text izmeni.ID_pacijenta_FKTextBox.Text = ID_pacijent_PKTextBox.Text izmeni.txtIDpregleda.Text = ID_pregleda_PKTextBox1.Text Me.Hide() ' sakrivanje ove forme REM MsgBox(Datum_pregledaDateTimePicker.Text + " je datum " + ", Cijena pregleda " + Cijena_pregledaTextBox.Text + "informacije o pregledu" + Informacije_o_pregleduTextBox.Text + " nalaz i misljenje " + Nalaz_i_misljenjeTextBox.Text + "id pacijenta" + ID_pacijenta_FKTextBox.Text + "id pregleda" + ID_pregleda_PKTextBox1.Text) 'nastavi dalje MsgBox("Morate ponovo odabrati doktora!", MsgBoxStyle.Exclamation) ' prikaz poruke izmeni.ID_doktora_PKTextBox.Text = ID_doktoraTextBox.Text ' prosledjivanje podatka izmeni.ShowDialog() ' prikaz forme za izmenu pregleda Me.Close() ' zatvori ovu formu

14. Forma koja prikazuje stanje svih pregledanih pacijenata

Ovo je forma koja prikazuje stanje svih pregledanih pacijenata i to po:

- Doktoru- Pacijentu- Datumu- Spisku svih pregleda

Slika 17 Ukupni pregledi pacijenata

37

Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged ' posto u list boxu mozemo samo prikazati sadrzaj jedne kolone sto u ovom slucaju nije dovoljno odnosno potrebno je ' prikazati sadrzaj dve kolone tj ime i prezime pacijenta, dosao sam na ideju da u jednom list boxu prikazem imena i prezimena kao je produkt jedne kolone ' ali posto ta imenea i prezimena nisu dobijena iz Data Seta nego preko SQL upita onda menjanjem odabranog indeksa u tom list boxu nece se prikazivati ' detaljni podaci o tom pacijentu ' tako da sam dodao jos jedan list box koji nije vidljiv korisniku i u kojem su sadrzani samo imena ili prezimena pacijenta i promenom indeksa dolazi do prikaza ' detaljnih podataka za odabranog pacijenta ' pa sam tako napravio promenljivu koja ce da sadrzi odabrani indeks list boxa sa imenima i prezimenima ' i taj isti indeks sam dodelio da bude odabran na listboxu sa samo imenima ili prezimenima ' i na taj nacin sam omogucio sinhronizaciju dva list boxa Dim x As Integer = ListBox2.SelectedIndex() ListBox1.SelectedIndex = x End SubEnd Class

Programski kod za formu o svim pregledima pacijenata:

38

Public Class frmPregledi Dim upit As String ' promenljiva vidljiva unutar klase

Private Sub frmPregledi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load sviPregledi() ' pozivanje podrutine 'sakrivanje odredjenih objekata TextBox2.Visible = False DateTimePicker1.Visible = False Button2.Visible = False 'prikaz sadrzaja ComboBoxa ComboBox1.DroppedDown = True

End Sub

Private Sub sviPregledi() 'podrutina koja prikazuje sve preglede upit = "select Ime_pacijenta + ' ' + Pacijenti.Prezime as Pacijent, Ime_doktora + ' ' + Doktori.Prezime as Doktor, " upit = upit + "Informacije_o_pregledu as 'O pregledu', Cijena_pregleda as Cijena, Datum_pregleda as Datum, " upit = upit + "Nalaz_i_misljenje as 'Nalaz i misljenje' from pregledi, pacijenti, doktori " upit = upit + "where ID_doktora_PK = ID_doktora and ID_pacijent_PK = ID_pacijenta_FK"

bin(upit, BindingSource1) ' pozivanje podrutine i prosledjivanje podataka DataGridView1.DataSource = BindingSource1 ' prikaz dobijenih podataka u DataGridViewu End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'prikazuje se forma za odabir pacijenta ili doktora Select Case ComboBox1.Text 'zavisno od odabrane vrednosti teksta zavise akcije koje ce se desiti Case "Po pacijentu" zastotrebapacijent = "izvestajpregled" ' dodeljivanje vrednosti globalnoj promenjlivoj na osnovu koje ce ' forma pacijenti znati gde da proslei odredjene podatke odaberiPacijenta() ' pozivanje podrutine za odabir pacijenta Case "Po doktoru" Dim doktori As New frmDoktori ' stvaranje novog objekta forme doktori ' podesavanja prikaza tj sta ce se sve i kako prikazati na novoj formi doktori doktori.CloudButton1.Dispose() doktori.CloudButton2.Dispose() doktori.CloudButton3.Dispose() doktori.CloudButton4.Dispose() doktori.Panel1.Top = 12 doktori.Panel1.Left = 17 doktori.ListBox1.Top = 28 doktori.DoktoriDataGridView.Top = 165 doktori.Button1.Left = 17 doktori.Button1.Top = 378 doktori.Button1.Width = 677 doktori.Label1.Top = 11 doktori.Height = 475

39

doktori.ShowDialog() End Select End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged ' kada se promeni odabrani indeks u comboboxa i zavisno od odabrane vrednosti zavise akcije koje ce se desiti Select Case ComboBox1.Text Case "Svi pregledi" Button2.Visible = False DateTimePicker1.Visible = False Label1.Text = "SVI PREGLEDI:" sviPregledi() Case "Po pacijentu" Button2.Visible = True Button2.Text = "Odaberi pacijenta" DateTimePicker1.Visible = False Label1.Text = "Pacijent:" DataGridView1.Columns.Item(5).Width = 240 ' sirina 6 kolone u datagridviewu

Case "Po doktoru" Button2.Visible = True Button2.Text = "Odaberi doktora" DateTimePicker1.Visible = False Label1.Text = "Doktor:" 'sirina kolona u datagridviewu DataGridView1.Columns.Item(5).Width = 240 DataGridView1.Columns.Item(0).Width = 100 Case "Po datumu" Button2.Visible = False DateTimePicker1.Visible = True Label1.Text = "Po datumu pregleda" poDatumu() ' pozivanje podrutine End Select

End Sub

Private Sub poDatumu() ' podrutina koja prikazuje preglede po datumu Dim dat As String dat = Format(DateTimePicker1.Value, "yyyy-MM-dd") ' odredjivanje formata datuma

'Sql upit upit = "select Ime_pacijenta + Pacijenti.Prezime as Pacijent, Ime_doktora + Doktori.Prezime as Doktor, " upit = upit + "Informacije_o_pregledu as 'O pregledu', Cijena_pregleda as Cijena, Datum_pregleda as Datum, " upit = upit + "Nalaz_i_misljenje as 'Nalaz i misljenje' from pregledi, pacijenti, doktori " upit = upit + "where ID_doktora_PK = ID_doktora and ID_pacijent_PK = ID_pacijenta_FK " upit = upit + "and Datum_pregleda = '" + dat + "'" bin(upit, BindingSource1) ' pozivanje globalne podrutine i prosledjivanje parametara DataGridView1.DataSource = BindingSource1 ' prikaz dobijenih podataka u datagridviewu DataGridView1.Columns.Item(0).Width = 110 ' sirina prve kolone

40

Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged 'kada se promeni vrednost u Textboxu i zavisno od odabrane vrednosti u comboBoxu izvrsavaju se odredjene aktivnosti Select Case ComboBox1.Text Case "Po pacijentu" ' ukoliko je odabrano da prikaze po pacijentima 'sql upit upit = "select Datum_pregleda as Datum, Ime_doktora + Doktori.Prezime as Doktor, " upit = upit + "Informacije_o_pregledu as 'O pregledu', Cijena_pregleda as Cijena, " upit = upit + "Nalaz_i_misljenje as 'Nalaz i misljenje' from pregledi, pacijenti, doktori " upit = upit + "where ID_doktora_PK = ID_doktora and ID_pacijent_PK = ID_pacijenta_FK" upit = upit + " and ID_pacijenta_FK = " + TextBox2.Text DataGridView1.Columns.Item(0).Width = 70 ' sirina prve kolone Case "Po doktoru" ' ukoliko je odabrano da prikaze po doktoru 'sql upit upit = "select Ime_pacijenta + Pacijenti.Prezime as Pacijent, Datum_pregleda as Datum," upit = upit + "Informacije_o_pregledu as 'O pregledu', Cijena_pregleda as Cijena, " upit = upit + "Nalaz_i_misljenje as 'Nalaz i misljenje' from pregledi, pacijenti, doktori " upit = upit + "where ID_doktora_PK = ID_doktora and ID_pacijent_PK = ID_pacijenta_FK" upit = upit + " and ID_doktora = " + TextBox2.Text DataGridView1.Columns.Item(0).Width = 150 ' sirina kolone End Select bin(upit, BindingSource1) ' pozivanje globalne podrutine i prosledjivanje podataka DataGridView1.DataSource = BindingSource1 ' smestanje dobijenog podatka u datagridview End Sub

Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged ' kada se promeni vrednost u dateTimePicker pozovi podrutinu poDatumu() End SubEnd Class

15. Forma za zakazane pregledeForma za zakazane preglede sadrži pored ostalih sadržaja u sebi četiri dugmeta:

- Uključite pretragu po doktoru- Odaberite neki drugi dan- Prikazati naručene pacijente- Importovanje podataka u Excel

Slika 18 Prikaz forme za zakazane preglede pacijenata

Programski kod za formu o zakazanim pregledima:

41

Public Class frmZakazaniPregledi Dim dat As String 'datum koji ce biti prikazan u Labeli na vrhu forme

Private Sub frmZakazaniPregledi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.DoktoriTableAdapter.Fill(Me.AmbulantaDataSet.Doktori) DateTimePicker1.Visible = False DoktoriDataGridView.Visible = False 'nije vidljivo odaberi() 'DanasSVi() ' poziva proceduru koja ce da prikaze za danas sve preglede kod svih doktora dat = DateTimePicker1.Text 'promenljivoj dodeljuje vrednost tj danasnji datum Label1.Text = dat ' prikaz datuma u labeli End SubPrivate Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click uExcel(DataGrid:=DataGridView1) ' pozivanje procedure da sadrzaj iz datagridviewa eksportuje u excel 2007 End Sub

42

Private Sub CloudButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton3.Click If CloudButton3.ButtonText = "UKlJUCI PRETRAGU PO DOKTORU" Then ' podesavanje objekata na formi Me.Height = 462 DataGridView1.Top = 222 CloudButton1.Top = 380 CloudButton5.Width = 215 CloudButton5.Top = 135 CloudButton5.Height = 52 CloudButton5.Left = 200

DoktoriDataGridView.Visible = True ' vidljivi doktori CloudButton3.ButtonText = "ISKlJUCI PRETRAGU PO DOKTORU" ' tekst na dugmetu odaberi() ' pozovi proceduru da prikaze preglede

ElseIf CloudButton3.ButtonText = "ISKlJUCI PRETRAGU PO DOKTORU" Then DoktoriDataGridView.Visible = False ' lista sa doktorima nije vidljiva CloudButton3.ButtonText = "UKlJUCI PRETRAGU PO DOKTORU" ' tekst na dugmetu odaberi() ' pozivanje procedure Me.Height = 446 DataGridView1.Top = 197 CloudButton1.Top = 360 CloudButton5.Width = 401 CloudButton5.Height = 46 CloudButton5.Top = 137 CloudButton5.Left = 18 End If End Sub

Private Sub CloudButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton4.Click If CloudButton4.ButtonText = "ODABERI NEKI DRUGI DAN" Then DateTimePicker1.Visible = True ' prikazi objekat za odabir datuma CloudButton4.ButtonText = "DANAS" ' tekst dugmeta ElseIf CloudButton4.ButtonText = "DANAS" Then DateTimePicker1.Visible = False ' sakrij objekat za odabir datuma DoktoriDataGridView.Visible = False odaberi() 'DanasSVi() CloudButton4.ButtonText = "ODABERI NEKI DRUGI DAN" End If End SubPrivate Sub CloudButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton5.Click odaberi() End Sub

Private Sub DanasSVi() Dim upit, datum As String datum = Format(Today, "yyyy-MM-dd") upit = "select Ime_doktora + ' ' + Doktori.Prezime 'Doktor',Ime_pacijenta + ' ' + Pacijenti.Prezime 'Pacijent', Pregled_u_vezi_cega from Zakazivanje_pregleda, Pacijenti, doktori" upit = upit + " where ID_pacijent_PK = ID_pacijenta_FK and ID_doktora = ID_doktora_PK and Datum_pregleda = '" + datum + "'" upit = upit + " order by Doktor" bin(upit, BindingSource1)

43

Private Sub odaberi() Dim upit As String ' sql upit Dim datum As String ' datum za upit

If DoktoriDataGridView.Visible = True Then ' ako je datagrid sa doktorima vidljiv If DateTimePicker1.Visible = True Then ' i ako je vidljiv objekat za odabir datuma ' biraj datum i doktora datum = Format(DateTimePicker1.Value, "yyyy-MM-dd") ' format datuma Label1.Text = DateTimePicker1.Text ' prikazi odabrani datum u labeli Else ' doktor al samo danas datum = Format(Today, "yyyy-MM-dd") ' ako nije vidljiv objekat za odabir datuma Label1.Text = dat End If 'sql upit upit = "select Ime_doktora + ' ' + Doktori.Prezime 'Doktor', Ime_pacijenta + ' ' + Pacijenti.Prezime 'Pacijent', Pregled_u_vezi_cega from Zakazivanje_pregleda, Pacijenti, doktori" upit = upit + " where ID_pacijent_PK = ID_pacijenta_FK and ID_doktora = ID_doktora_PK and ID_doktora = " + ID_doktora_PKTextBox.Text + " and Datum_pregleda = '" + datum + "'" upit = upit + " order by Datum_pregleda desc" Else ' ako nije vidljiv datagrid sa doktorima znaci da se prikazu svi doktori ' svi doktori If DateTimePicker1.Visible = True Then ' ako je vidljiv objekat za odabir datuma ' biraj datum za sve doktore datum = Format(DateTimePicker1.Value, "yyyy-MM-dd") ' format datuma Label1.Text = DateTimePicker1.Text

Else ' ukoliko nije vidljiv objekat za odabir datuma ' svi doktori danas datum = Format(Today, "yyyy-MM-dd") Label1.Text = dat End If 'sql upit upit = "select Ime_doktora + ' ' + Doktori.Prezime 'Doktor',Ime_pacijenta + ' ' + Pacijenti.Prezime 'Pacijent', Pregled_u_vezi_cega from Zakazivanje_pregleda, Pacijenti, doktori" upit = upit + " where ID_pacijent_PK = ID_pacijenta_FK and ID_doktora = ID_doktora_PK and Datum_pregleda = '" + datum + "'" upit = upit + " order by Doktor" End If bin(upit, BindingSource1) ' pozivanje procedure i prosledjivanje parametara DataGridView1.DataSource = BindingSource1 ' prikaz dobijenog rezultata u data grid view With DataGridView1 ' podesavanje datagrid view sa rezultatima .Columns.Item(0).Width = 100 .Columns.Item(1).Width = 100 .Columns.Item(2).Width = 200 .Columns.Item(0).DefaultCellStyle.BackColor = Color.Azure End With End Sub

Private Sub ID_doktora_PKTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ID_doktora_PKTextBox.TextChanged odaberi() ' kada se promeni vrednost u textboxu koji sadrzi ID doktora

16. Forma za zakazivanje pregleda

Slika 19 Izgled forme za zakzivanje pregleda

Programski kod za formu o zakazanim pregledima:

44

Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged odaberi() ' kada se promeni vrednost odabranog datuma End SubEnd Class

Public Class frmZakaziPregl

Private Sub frmZakaziPregl_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text = IDprijavljenogRadnika ' u textbox dodeljivanje vrednosti ID prijavljenog radnika ID_pacijenta_FKTextBox.Text = idPacijenta ' u textbox dodeli vrednost ID pacijenta 'prikaz podataka iz Dataseta Me.DoktoriTableAdapter.Fill(Me.AmbulantaDataSet.Doktori) Me.PreglediTableAdapter.Fill(Me.AmbulantaDataSet.Pregledi) 'sakrivanje odredjenih tekstboxova i prikaz sadrzaja labele ID_doktora_PKTextBox.Visible = False TextBox1.Visible = False Label1.Text = imePacijenta End SubPrivate Sub CloudButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton1.Click Try ' pokusaj dodati pregled 'koje podatke da doda

17. Forma za rešavanje završenog pregleda

Slika 20 Forma za upis završenog pregleda

Programski kod za formu o zakazanim pregledima:

45

Me.Zakazivanje_pregledaTableAdapter.Insert(ID_pacijenta_FK:=ID_pacijenta_FKTextBox.Text, Datum_pregleda:=MonthCalendar1.SelectionRange.Start, ID_doktora:=ID_doktora_PKTextBox.Text, ID_radnika_FK:=TextBox1.Text, Pregled_u_vezi_cega:=Pregled_u_vezi_cegaTextBox.Text) Me.Validate() Me.TableAdapterManager.UpdateAll(Me.AmbulantaDataSet) 'azuriranje Me.Close() frmGlavna.doktoripregledi() ' prikaz na glavnoj formi zakazanih pregleda frmPacijenti.Show() frmPacijenti.yakat() frmPacijenti.Close() Catch ex As Exception ' u slucaju greske prikazi sledecu poruku MsgBox("Dogodila se greska, pregled nije dodat") End Try End SubEnd Class

Imports System.DataImports System.Data.SqlClientPublic Class frmZavrsenPregled

Private Sub frmZavrsenPregled_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.DoktoriTableAdapter.Fill(Me.AmbulantaDataSet.Doktori) 'ispunjavanje podacima ID_pacijenta_FKTextBox.Text = frmPacijenti.ID_pacijent_PKTextBox.Text ' dodeljivanje vrednosti

46

Label1.Text = frmPacijenti.Ime_pacijentaTextBox.Text + " " + frmPacijenti.PrezimeTextBox.Text ' prikaz imena pacijenta ' ID_pacijenta_FKTextBox.Visible = False ' nije vidljiv ID pacijenta DoktoriDataGridView.Columns.Item(0).HeaderText = "Ime" 'promena imena kolone u datagridviewu End Sub

Private Sub CloudButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloudButton2.Click If noviIliIzmenaPregleda Then ' ukoliko je novi pregleed Try ' pokusaj dodati Me.PreglediTableAdapter.Insert(ID_pacijenta_FK:=ID_pacijenta_FKTextBox.Text, ID_doktora:=ID_doktora_PKTextBox.Text, Cijena_pregleda:=Cijena_pregledaTextBox.Text, Datum_pregleda:=Datum_pregledaDateTimePicker.Value, Informacije_o_pregledu:=Informacije_o_pregleduTextBox.Text, Nalaz_i_misljenje:=Nalaz_i_misljenjeTextBox.Text) Me.Validate() Me.TableAdapterManager.UpdateAll(frmPacijenti.AmbulantaDataSet) frmPacijenti.PreglediTableAdapter.Dispose() frmPacijenti.PreglediTableAdapter.Fill(frmPacijenti.AmbulantaDataSet.Pregledi) frmPacijenti.yakat() MsgBox("Uspesno dodan pregled") Me.Close() Catch ex As Exception 'ukoliko je doslo do greske MsgBox("Dogodila se greska, pregled nije dodat, provjerite da li su sva roza polja ispravno popunjena") End Try Else ' ukoliko je izmena vec postojeceg pregleda Try ' pokusaj Dim upit As String ' sql upit Dim dat As String ' datum dat = Format(Datum_pregledaDateTimePicker.Value, "yyyy-MM-dd") ' format datuma 'sql upit upit = "update Pregledi set ID_pacijenta_FK = " + CStr(idPacijenta) + ", ID_doktora = " + ID_doktora_PKTextBox.Text upit = upit + ", Informacije_o_pregledu = '" + Informacije_o_pregleduTextBox.Text + "'" upit = upit + ", Cijena_pregleda = '" + Cijena_pregledaTextBox.Text + "'" upit = upit + ", Datum_pregleda ='" + dat + "'" upit = upit + ", Nalaz_i_misljenje= '" + Nalaz_i_misljenjeTextBox.Text + "'" upit = upit + " where ID_pregleda_PK =" + txtIDpregleda.Text

'stvaranje nove konekcije i uspostavljanje iste i izvrsenje sql upita Dim sqlkonekc As New System.Data.SqlClient.SqlConnection(sqlString) Dim cmd As New System.Data.SqlClient.SqlCommand cmd.CommandType = System.Data.CommandType.Text cmd.CommandText = upit cmd.Connection = sqlkonekc sqlkonekc.Open() cmd.ExecuteNonQuery() sqlkonekc.Close() MsgBox("Uspesno izmenjeni podaci") TableAdapterManager.UpdateAll(frmPacijenti.AmbulantaDataSet) 'azuriranje podataka Me.Close()

18. Ostali zadaci u Visual Basic-u

18.1 Kalkulator

Slika 21Kalkulator

47

MsgBox(ex.ToString()) End Try

End If End Sub

Private Sub Cijena_pregledaTextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cijena_pregledaTextBox.Leave If Cijena_pregledaTextBox.Text = "" Then MsgBox("Polje mora biti popunjeno") Cijena_pregledaTextBox.Focus() Cijena_pregledaTextBox.BackColor = Color.MistyRose Else Cijena_pregledaTextBox.BackColor = Color.PaleGreen End If End SubEnd Class

Programski kod za formu kalkulator:

18.2Aplikacija “Srećna Sedmica“

Slika 22 Aplikacija Srecna Sedmica

48

Public Class Form1

Dim PrviBr, DrugiBr As Double

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click PrviBr = TextBox1.Text DrugiBr = TextBox2.Text

If RadioButton1.Checked = True Then TextBox3.Text = PrviBr + DrugiBr End If If RadioButton2.Checked = True Then TextBox3.Text = PrviBr - DrugiBr End If If RadioButton3.Checked = True Then TextBox3.Text = PrviBr * DrugiBr End If If RadioButton4.Checked = True Then TextBox3.Text = PrviBr / DrugiBr End If End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click

End SubEnd Class

Programski kod za formu za Srećnu Sedmicu:

18.3 Aplikacija Korisnička validacija- provera

Slika 23 Korisnička provera

49

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

PictureBox1.Visible = False ' sakriva slicicu Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If (Label1.Text = "7") Or (Label2.Text = "7") Or (Label3.Text = "7") Then PictureBox1.Visible = True Beep() End If End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End SubEnd Class

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If MaskedTextBox1.Text = "555-55-1212" Then MsgBox("Dobrodosli u sistem!")

18.4Aplikacija koja ispisuje dan(Ponedeljak) datuma rođenja

Slika 24 Dan rođenja

Programski kod za formu za Dan rođenja:

50

Else MsgBox("Ne prepoznajem ovaj broj") End If End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End SubEnd Class

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(" DATUM TVOG RODJENDANA JE: " & DateTimePicker1.Text)

MsgBox("DAN GODINE TVOG RODJENJA: " & DateTimePicker1.Value.DayOfWeek.ToString())

End Sub

18.5 Aplikacija Web pretraživač

Slika 25 Web pretraživač

Programski kod za formu za Dan rođenja:

51

Public Class web_pretrazivac

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate(TextBox1.Text) End Sub

Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

End Sub

Private Sub web_pretrazivac_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End SubEnd Class

LITERATURA

- Prezentacije sa predavanja iz predmeta Viši programski jezici i rad alati „Visual Basic“

- Prezentacije sa predavanja iz predmeta Principi programiranja, Apeiron Banja Luka

- Internet adrese:http://www.freebookspot.me/Default.aspx

- Microsoft Visual Basic 2010 – Step by step, Michael Halvorson, 2010 godina

- Practical SQL QUERIES for MS SQL SERVER 2008 R2, Art Tennick, 2010 godina

52