Visoka tehnička škola -Niš
Seminarski rad Osnovni pojmovi vizuelnog programiranja u programskom jeziku Visual C# 2008 Predmet : NET programiranje
Mentor : mr Zoran Veličković
Student : Nikola Lukić br.indeksa R-48
1
Sadrža : !."vod######################.!
11Opsti uvod1 1!Opis teme rada! $.!. Vežba ! : %snove rada u kon&oli#######..##.'
!11 "ilj ve#$e ve#$e% % !1! &adatak ve#$e ve#$e% % !1% 'ealiza(ija ve#$e% $.$.Vežba $: Rad sa uslovnom (etlom )ranana....................*
!!1 "ilj ve#$e ve#$e) ) !!! &adatak ve#$e ve#$e) ) !!% 'ealiza(ija ve#$e) $.'.Vežba ': +reirane (adauće) menia...............................8
!%1 "ilj ve#$e ve#$e* * !%! &adatak ve#$e ve#$e* * !%% 'ealiza(ija ve#$e* $.4.Vežba 4 : %snove %snove rada sa klasama###.#.#.###!, klasama###.#.#.###!,
!+1 "ilj ve#$e1, !+! &adatak ve#$e ve#$e1, 1, !+% 'ealiza(ija ve#$e1, $.*.Vežba *: Rad Rad sa tamer timer timer kontrolom#..###.#!$ kontrolom#..###.#!$
!)1 "ilj ve#$e1! !)! &adatak ve#$e ve#$e1! 1! !)% 'ealiza(ija ve#$e1! $./. Vežba / : Rad sa tekstualnim 0alovima #.####.#.!1
!1 "ilj ve#$e1. !! &adatak ve#$e ve#$e1. 1. !% 'ealiza(ija ve#$e1. $.1.Vežba 1 : Rad sa 2ra0ičkim 2ra0ičkim inter0esom ###.##.#$,
!.1 "ilj ve#$e ve#$e!, !, !.! &adatak ve#$e ve#$e!, !, !.% 'ealiza(ija ve#$e!, $.8.Vežba 8 : %snove internet (ro)ramirana####......#$4 (ro)ramirana####......#$4
!*1 "ilj ve#$e!+ !*! &adatak ve#$e ve#$e!+ !+ !*%1 'ealiza(ija ve#$e /0erver deo !+ !*%!'ealiza(ija ve#$e /2lijent deo333333333%1 '. Zaklučak#####..#..##### Zaklučak#####..#..##########..#.##.'/ #####..#.##.'/
+ 4okumenta(ija 3333333333 33333333333333333333%. 3333333333%.
!
15vod 11Opsti uvod 5 ovom radu $avi6emo se isključivo programskim jezikom 7i(roso8t Visual "9 !,,* /Epre /Epress ss Editi Edition on Epress Epress Editio Editionn je $espla $esplatna tna li(en( li(en(ira irana na vezija vezija ovog programskog jezika Ono što izdvaja ovaj programski jezik jeste to da se u njemu mogu pisati konzolne /4O0 aplika(ije; denti8ikovanja o$jekta ->denti8ikovanja atri$uta o$jekata kao i njihovih vrednosti ->denti8ikovanje 8unk(ionalnosti o$jekta -2lasi8ika(ija o$jekata prema atri$utima i 8unk(ionalnosti u kategorije ili klase -'ezultat klasi8ika(ije je de8ini(ija klase ->denti8ikova
@ko niko spolja netre$a da prisupi članu klase onda se on de8 kao privatni 4a tre$a $iti dostupan svima onda je de8inisan kao javan &ašti6eni član je dostupan samo unutar unu tar svoje svoje matičn matičnee klase klase >nterna >nternall ili interni interni član je dos dostup tupan an samo unutar tog programaA!B
%
1!Opis teme rada 'ad se sastoji od * ve#$i od kojih se svaka sastoji od slede6e 8orme : -
-
5il vežbe /sadr#a6e šta smo postigli u datoj ve#$i Zadatak vežbe /u kom 6e $iti opisano u kratkim (rtama šta se generalno zahteva u
datoj ve#$i -
/razvr /razvrsta stana na po kora(ima kora(ima sa izvornim izvornim kodom kodom date ve#$e ve#$e ; opisom u vidu komentara i slika
Reali&ai Reali&aia a vežbe
Teme koje se provlače kroz ovoj rad $i6e uskla?ene sa početničkim znanjima o vizuelnom programiranju Od prve do osme ve#$e o$radi6emo konzolne 4O0 aplika(ije; klase; uslovne petlje ili selek(ije; gra8ičkog inter8ejsa; klijent server aplika(iju 5 polju realiza(ije ve#$e ispod svakog zadatka postoja6e izvorni kod po prin(ipu primera p rimera Npr u zadatku zada tku piše da tre$a na(rtati kvadrat kva drat pomo6u četiri linija u polju za izvorni kod $i6e napisan kod kako na(rtati dve linije 5 suštini najve6i deo $iti detaljno o$isan Tako?e u polju realiza(ije nalazi6e se i slike 8ormi kao pomo6 kako $i tre$alo izvesti odre?eni zadatak >zvorni kod sadr#i komentare koji direkno za svaku ključnu liniju koda opisuju istu Pa#nja je skrenuta i na sintaksu jezika tako za razliku od Visual Casi(-a programski jezik "9 pravi razliku izme?u mali malihh i veli veliki kihh slov slovaa tako tako da mala mala nepa nepa#n #nja ja dovo dovodi di do greš greške ke Ve Ve#$ #$ee su raspore?ene po prin(ipu od osnovnijeg ka slo#enijem primeru 4a $i tekst $io što kon(izniji uveo sam par pravila : -@ko se u tekstu pominju imena 8ormi i o$jekta onda su sa svojstvom itali( npr Glavnaforma. Dto znači da 8orma u projektu nosi takvo ime -2ad su u pitanju same vrednosti vrednosti promenjivi promenjivihh onda su to $old itali( slova slova Npr ovojesifra Primetili ste da nisam koristijo slovo š u reči ši8ra jer je mnogo te#e pisati kod sa 6iriličnim pismom nego u latiničnom er 6irilična slova zauzimaju mesto glavnih karaktera koji se koriste u sintaksi "9 programskog jezika 5 zadnjoj ve#$i o$ra?ena je o$last internet programiranja 'adi se o temi 2lijent-0erver aplika(ija aplika(ija &$og kompleksnosti kompleksnosti zadatka izvorni kod $i6e apsolutno apsolutno kompletan i ispisan komentarina kako $i što $olje $io o$jašnjen &aključno sa * ve#$om prešli smo sve va#nije o$lasti o$ lasti i o$radili nekoliko zanimljivih zadataka
+
$.!. Vežba ! : %snove rada u kon&oli 6os ili Ms7rom(t (ro&or
!11"ilj ve#$e : 5poznavanj 5pozna vanjee sa sintak sintaksom som progra programsk mskog og jezika jezika "9 4ode 4odelji ljivanj vanjee vrednos vrednosti ti promenjivim i prikaz na ekranu istih
!1!&adatak ve#$e : &ahtev za unos podataka i prikaz istih na ekranu
!1%'ealiza(ija ve#$e : +ora +orak k !: Otvoriti Otvoriti novi projekat tipa konzola aplika(ija aplika(ija sa nazivom Vezba1
brtell tipa 4e8inisat 4e8inisatii promenjivu promenjivu Student i brte tipa string string Napisati algoritam za unos imena studenta; $roj tele8ona i prikazati prikazati unete podatke na ekranu kao na sli(i 1
0lika 11
)
>zvorni kod : using System; using System; using System.Collections.Generic; using System.Collections.Generic; using System.Linq; using System.Linq; using System.Text; using System.Text; namespace Vezba1 namespace Vezba1 { class Program { static oi! oi! "ain# "ain#string string$% $% args& { string Stu!ent' string Stu!ent' brtel; (( brtel; (( )e* !e promen+ie u +e!no+ lini+i Console.,riteLine# Console .,riteLine#--- &; Console.,riteLine# Console .,riteLine#- - Viso/a te0nic/a s/ola nis c - &; Console.,riteLine# Console .,riteLine#--- &; (( Po/upiti po!at/e ' unos Console.,rite# Console .,rite#-2me -2me stu!enta 3 - &; Stu!ent 4 Console Console.5ea!Line#&; .5ea!Line#&; Console.,rite# Console .,rite#-6ro+ -6ro+ tele*ona3 -&; - &; brtel 4 Console Console.5ea!Line#&; .5ea!Line#&; Console.,riteLine#&; Console .,riteLine#&; (( Pri/azati unete po!at/e Console.,riteLine# Console .,riteLine#-444444444444444444444444444444444444-444444444444444444444444444444444444- &; Console.,riteLine# Console .,riteLine#-7(7 -7(7 Po!aci su uneti i pri/azani 7(7- &; Console.,riteLine# Console .,riteLine#-444444444444444444444444444444444444-444444444444444444444444444444444444- &; Console.,rite# Console .,rite#-Stu!ent -Stu!ent 3 - &; Console.,riteLine#Stu!ent Console .,riteLine#Stu!ent &; Console.,rite# Console .,rite#-6ro+ -6ro+ tele*ona 3 -&; - &; Console.,riteLine#brtel Console .,riteLine#brtel &; Console.,riteLine# Console .,riteLine#-4444444444444444444444444444444444448n-4444444444444444444444444444444444448n- &; Console.5ea!Line#&;999 Console .5ea!Line#&;999 (( :ra+ izornog /o!a Vezbe1
6odatni (rimer na(redno) (ro)ramiraa u kon&oli 9 : using System; using System; using System.T0rea!ing; using System.T0rea!ing; public class Vremens/iTest { Vremens/iTest { public class "o+aposla "o+aposla { { public int int bro+pomal+an+a41; bro+pomal+an+a41; public oi! oi! Po/reni#& Po/reni#& { *or# *or #int int i4;iame&; .CurrentT0rea!.>ame&; 9 9 9 public static oi! oi! "ain# "ain#string string$% $% args& { "o+aposla mo+aposla1 4 ne? "o+aposla "o+aposla #&; #&; mo+aposla1.bro+ponal+an+a 4@; T0rea! t0rea! T0rea! t0rea! 4 ne? T0rea! T0rea!# #ne? T0rea!Start T0rea!Start#mo+aposla1.Po/reni #mo+aposla1.Po/reni &&;
t0rea!.>ame 4 -Prosla +e se/un!a.....- ; t0rea!.Start#&;
99
$.$.Vežba $ : Rad sa uslovnom (etlom )ranane ili selekia
!!1"ilj ve#$e : 5poznavanje sa 8ormama i njenih osnovnih oso$ina; prenošenje vrednosti iz 8orme u 8ormu 5 primeru je o$ra?ena >F struktura sa jednim i dva uslova koriš6enjem operatora za rad sa $itovima Videli smo kako od unete vrednosti zavisi dalji tok programa
!!!&adatak ve#$e : Napisati program koji zahteva unos imena i ši8re /log in da $i se prikazala 8orma Na novoj 8ormi realizovati zahtev za unos dve ši8re da $i se prikazala tre6a 8orma Ovaj zadatak realizovati pomo6u tekst $oksova i komandnih dugmeta
!!%'ealiza(ija ve#$e : +orak ! : Otvoriti projekat
Forma1 insertovati 8ormu Forma2 i Forma3. +orak $: 5 8ormi Forma1 postaviti slede6e o$jekte: 4va o$jekta tekst$oks sa
imenima - Ime ; ifra edno komandno dugme dugme sa imenom - !roveri i natpisom Proveri 5neti o$jekte la$el za opis tekstualnih $oksova !rover erii pomo6u >F petlje +ora +orak k ' : 'eal 'ealiz izov ovat atii u po polj ljuu kod kodaa dugm dugmet etaa !rov
algoritam koji proverava tačnost unete vrednosti u tekst$oks ifra sa vrednoš6u ovoješifra 5 slučaju da je uneta vrednost u tet$o Di8ra ovoješifra prikazati 8ormu Forma2 i sakriti 8ormu Forma1 5 slučaju slučaju da vrednost nije istinita istinita prikazati poruku : -5neta ši8ra je pogrešnaGGG- 2ao na sli(i 11
.
0lika11 0lučaj da je si8ra pogrešna /Forma1
>zvorni kod : priate oi! proeriAClic/# oi! proeriAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { i* #si*ra.Text i* #si*ra.Text 44 -oo+esi*ra-oo+esi*ra-& & { (( uslo +e ispun+en u te/st bo/s si*ra uneto +e -oo+esi*ra(( i pri/azace se *orma DormaE DormaF *rmF DormaF *rmF 4 ne? DormaF DormaF#&; #&; *rmF.Tag 4 t0is t0is.2me.Text; .2me.Text; *rmF.S0o?#&; t0is.i!e t0is .i!e #&; 9 else {((sluca+ !a si*ra ni+e uneta isprana po+al+u+e se poru/a u msgbo/su "essage6ox.S0o?# "essage6ox .S0o?#-Hneta -Hneta si*ra +e pogresnaIII- &; 99
+orak 4 : 5 8ormi Forma2 postaviti slede6e o$jekte :
-Tri kontrole tekst$oks sa imenima " Ime ifra1 ifra2 -edno komandno dugme sa imenom - !roveri i natpisom Proveri -2ao i dugme za prekid aplika(ije
0lika1! Forma Forma2
+orak * : 'ealizovati u polju koda dugmeta !roveri pomo6u uslovne petlje
*
algori algoritam tam koji proverava proverava tačnost tačnost une unete te vredno vrednosti sti u teks$o teks$oks ks Di8ra1 Di8ra1 sa vredno vredno6u 6u ovoješifra1 i u tekst$oks ifra2 sa vredno6u ovoješifra2 @ko su o$e vrednosti ispunile tačnost prikazati 8ormu Forma3 i sakriti 8ormu Forma2 +orak / : O$ez$editi da se svojstvo tekst 8orme Forma% pri učitavanju promeni u vrednost >metet iz 8orme Forma1 i isto tako za me.te;t iz 8orme Forma!
0lika 1% 2onačna 8orma Forma3 >zvorni kod : priate oi! ProeriAClic/# oi! ProeriAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { i* #Si*ra1.Text i* #Si*ra1.Text 44 -oo+esi*ra1-oo+esi*ra1- JJ JJ Si*raF .Text 44 -oo+esi*raF-oo+esi*raF-& & { (( uslo +e ispun+en u te/st bo/s si*ra1 uneto +e -oo+esi*ra1(( i u te/st bo/s si*raF uneto +e oo+esi*raF (( i pri/azace se *orma DormaE DormaE *rmE DormaE *rmE 4 ne? DormaE DormaE#&; #&; *rmE.Tag 4 t0is t0is.2me.Text; .2me.Text;((oom ((oom lini+om obezbe!+u+emo !a se u *ormaE (( u so+stu text po+ai re!nost uneta u ime.text iz *ormeF *rmE.S0o?#&; (( pri/azi *ormuE t0is.Close#&; t0is .Close#&; (( Katoriti *ormuF 9 else {((sluca+ !a si*ra ni+e uneta isprana po+al+u+e se poru/a u msgbo/su "essage6ox.S0o?# "essage6ox .S0o?#-Hneta -Hneta si*ra +e pogresnaIII- &; 9 9 priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { pplication.Bxit#&;{ pplication .Bxit#&;{((:ra+ ((:ra+ celog programa 9
H
$.'.Vežba ' : +reirane (adauće) menia
!%1"ilj ve#$e : 5poznavanj 5pozna vanjee svo svojst jstva va 8orme; 8orme; pok pokazat azatii predno prednosti sti kod koriš6 koriš6enj enjaa padaju6 padaju6eg eg meni menija ja Pokaz Pokazat atii da jedn jednoo svoj svojst stvo vo mo#e mo#emo mo post postavi aviti ti na više više nači načina na /ili /ili usle usledd učitavanja 8orme ili usled promene nekog drugog svojstva
!%!&adatak ve#$e : 2reirati padaju6i meni na 8ormi preko kojeg $iramo koje 6e se nove 8orme prikazati Pokazati modalni i nemodalni prikaz 8ormi 2oristiti skra6eni(e tastature 7anuelno i automa(ki maksimizirati nove 8orme
!%%'ealiza(ija ve#$e : +orak ! : Otvo Otvori riti ti proj projek ekat at
preimenovati Form1 u Glavnaforma 'ealizovati 'ealizovati na glavnoj glavnoj 8ormi slede6u slede6u strukturu strukturu padaju6eg menija : Forma 1 Forma 2 %ra& 'ro(rama 1 2oren orenii men menii : !ri$azati1 podmeni:/ Forma Forma3 Forma ) ! 2oren orenii meni eni : !ri$azati2 podmeni:/ Forma3
0lika1 Prikaz padaju6eg menija
1,
+orak $ : 2reirati za svaku stavku padaju6eg menija istoimenu 8ormu sem za %ra&
'ro(rama za koju tre$a napisati kod prekida p rekida aplika(ije +orak ' : Forme iz stavke menija !ri$azati1 prikazati u modalnom o$liku a
sve ostale 8orme prikazati u nemodalnom o$liku
>zvorni kod : priate oi! *orma1ToolStrip"enu2temAClic/# oi! *orma1ToolStrip"enu2temAClic/# ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { Dorma1 *rm1 Dorma1 *rm1 4 ne? Dorma1 Dorma1#&; #&; *rm1.S0o?)ialog#&; ((mo!alni pri/az *orme1 *rm1.S0o?)ialog#&;((mo!alni 9 priate oi! oi! *ormaFToolStrip"enu2temAClic/# *ormaFToolStrip"enu2temAClic/# ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { (( "o!alni pri/az *ormeF ' meto!a S0o?)ialog#& DormaF *rmF DormaF *rmF 4 ne? DormaF DormaF#&; #&; *rmF.S0o?)ialog#&; 9 priate oi! oi! *ormaEToolStrip"enu2temAClic/# *ormaEToolStrip"enu2temAClic/# ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { (( >emo!alni pri/az noe *orme pomou meto!e S0o? DormaE *rmE DormaE *rmE 4 ne? DormaE DormaE#&; #&; *rmE.S0o?#&; 9 priate oi! oi! *ormaMToolStrip"enu2temAClic/# *ormaMToolStrip"enu2temAClic/# ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { (( >emo!alni pri/az noe *orme DormaM *rmM DormaM *rmM 4 ne? DormaM DormaM#&; #&; *rmM.S0o?#&; 9
+orak 4 : Postaviti Postaviti skra6eni(e skra6eni(e sa tastatur tastaturee kom$ina(ijom kom$ina(ijom @IT = podvučeno
slovo iz stavke menija +orak * : Formama Forma3 i Forma) postaviti WindowState oso$inu na vrednost Ma;ima&ed i to za 8ormu Forma3 u okviru doga?aja
>zvorni kod : priate oi! oi! DormaEALoa!# DormaEALoa!#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {((postal+amo re!nost za ma/simiziran+e *orme i to u !oga!+a+u ((*ormAloa! t0is.,in!o?State t0is .,in!o?State 4 Dorm,in!o?State ."aximize!; 9 priate oi! button1AClic/# oi! button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {(( po pritis/u na !ugme *orma DormaM se razlaci po celom e/ranu t0is.,in!o?State t0is .,in!o?State 4 Dorm,in!o?State ."aximize!; 9
11
$.4.Vežba 4 : %snove rada sa klasama
!+1"ilj ve#$e : Pokaz Pokazat atii kako kako se gene generi riše še jedna jedna javn javnaa klas klasaa dod dodel elju juju ju6i 6i joj joj prom promen enji jive ve koriste6i sve vrste modi8ikatora pristupa Napisati konstruktor; 8unk(iju i pod8unk(iju Pozvali smo jednu podrutinu 2lase nisu vidljivi o$jekti kao što su to 8orme; mogu se pozivati iz drugih programa ako su de8inisane kao javne 7i smo našu klasu pokrenuli preko konzole tj njene glavne 8unk(ije Videli smo da svaka klasa mora imati samo jednu glavnu 8unk(iju
!+!&adatak ve#$e : Napisati klasu koja sadr#i dodeljene promeljive svih vrsta modi8ikatora pristupa Napisati minimum jedan konstruktor sa jednim argumentum Napisati jednu 8unk(iju 8unk(iju sa povratnom povratnom vrednoš6u vrednoš6u Napisti primer primer dodeljivanja dodeljivanja vrednosti vrednosti de8inisanim de8inisanim promenjivim i prikazati na ekranu >z glavnog programa pozvati jednu pod8unk(iju 'ealizovati prikaz kao na sli(i 11
!+%'ealiza(ija ve#$e : +orak ! : Otvoriti novi projekat tipa "lass i generisati javnu klasu !rodu$t i u
njoj slede6e promenjive : public string string napral+en; napral+en; protecte! internal string string mo!el; mo!el; internal string string bo+a bo+a ; protecte! int int /on+s/asnaga /on+s/asnaga 4 1@; priate int int Go!inaPro; Go!inaPro;
Napisati javnu 8unk(iju tipa int sa imenom *a&miGod!ro+, sa povratnom vrednoš6u Godina!ro Napisati konstruktor !ostaviGod!ro+ int int (odina, (odina, u kome dodeljujemo vrednost t-is.Godina!ro t-is .Godina!ro (odina / public oi! PostaiGo!Pro# oi! PostaiGo!Pro#int int go!ina& go!ina& { t0is.Go!inaPro t0is .Go!inaPro 4 go!ina ; ((/onstru/tor 9 public int int )a+migo!pro#& )a+migo!pro#&
1!
{ 9
return Go!inaPro return Go!inaPro ; ((!obiti po!ata/ o go! proizo!n+i ((Dun/ci+a mora imati ma/ar +e!nu poratnu re!nost
Napisati podrutinu (ubli void Start > koji štampa J 7otor uključen ; pritisni enter za krajK +orak $ : Lenerisati klasu lass Main5lass i u njoj napisati glavnu 8unk(iju (ubli stati void void Main. Main. 5 glavnoj 8unk(iji postaviti slede6e vrednosti i napisati kod za prikaz dodeljenih vrednosti: Pro!u/t pro!u/tuto 4 ne? Pro!u/t Pro!u/t pro!u/tuto Pro!u/t#&; #&; pro!u/tuto.napral+en 4 -Kastaa :ragu+eac-; :ragu+eac- ; pro!u/tuto.mo!el 4 -Nugo /oral-; /oral- ; pro!u/tuto.bo+a 4 -blac/-blac/-; ; pro!u/tuto.PostaiGo!Pro pro!u/tuto.PostaiGo!Pr o #1O@&; System.Console System. Console.,riteLine# .,riteLine#->apral+en ->apral+en o! strane *irme- = pro!u/tuto.napral+en&; System.Console System. Console.,riteLine# .,riteLine#-Qzna/a -Qzna/a "o!ela 4 - = pro!u/tuto.mo!el&; System.Console System. Console.,riteLine# .,riteLine#-6o+a -6o+a automobila 4 - = - = pro!u/tuto.bo+a&; System.Console System. Console.,riteLine# .,riteLine#-Gi!ina -Gi!ina proizo!n+e 4 - = pro!u/tuto.)a+migo!pro#&&; pro!u/tuto.Start#&; System.Console System.Console.5ea!Line#&; .5ea!Line#&;
+orak ': @plika(iju pokrenuti kao konzolu i prikazati gore navedene vrednosti Pozvati podrutinu Start iz klase Produkt
0lika 11 Napomena
4a smo pokušali koristiti u glavnoj 8unk(iji promenjivu konjskasnaga videli $i smo da ne$i $ilo dozvoljeno jer je de8 kao zašti6ena i mo#e se koristiti samo u svojoj matičnoj klasi
1%
4a smo našu klasu nazvali Pro!u/t1 onda $i linija koda Pro!u/t pro!u/tHTQ 4 ne? Pro!u/t Pro!u/t pro!u/tHTQ Pro!u/t#&; #&; izgledala kao : Pro!u/t1 pro!u/tHTQ Pro!u/t1 pro!u/tHTQ 4 ne? Pro!u/t1 Pro!u/t1#&; #&;
$.*.Vežba * : Rad sa tamer timer kontrolom
!)1"ilj ve#$e : 5pozna 5poz nati ti se sa veli veliki kim m pred predno nost stim imaa kori koriš6 š6en enja ja kont kontro role le tajm tajmer er Na Nauč učit itii pozivanje ugra?ene 8unk(ije vremena Pokazati osnove rada sa list$oks kontrolom 2ako manipulisati sistemskim datumom i vremenom dodeljivanjem njihove vrednosti promenjivima
!)!&adatak ve#$e : Napisati aplika(iju /koriste6i strukturu strukturu padaju6eg menija koja prikazuje vreme; realizuje štoperi(u i prin(ip od$rojavanja od zadatog vremena do nule
!)%'ealiza(ija ve#$e : +orak ! : Otvori Vežba3 a3 Otvoriti ti projek projekat at
> preimenovati Form1 u Glavnaforma 'ealizovati 'ealizovati na glavnoj glavnoj 8ormi slede6u slede6u strukturu strukturu padaju6eg menija : !ri$aži vreme i datum to'eria dbro&avan&e 12oreni meni : Izaberi; podmeni :/ !ri$aži %ra& 'ro(rama,.
Preko stavki menija aktivirati /modalno nove 8orme i to za : !ri$aži vreme i datum : 8ormu pod imenom Vreme - !ri$aži "dbro&ava4e 8ormu pod imenom dbro&avan&e. -to'eria : 8ormu 8ormu pod imenom Sto'eria +orak $ : Formi Vreme postaviti slede6e kontrole : 1 Tajmer ; 1 la$el. Crojaču postaviti oso$inu interval na vrednost 100 i oso$inu oso$inu enabled na true /što znači da 6e
se njegova pod8unk(ija izvršavati svakih 1,, mili sekundi O$ez$editi prikaz vremena preko vrednosti kontrole label!.te;t. 2ao na sli(i 11
1+
0lika11Prikaz vremena &vorni kod : priate oi! timer1ATic/# oi! timer1ATic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {(( o!e obezbe!+u+emo !a nam se po+ai reme i !atum za+e!no (( R:oristili smo meto!u ToString !a bi mogli !a !o!elimo (( re!nost ob+e/tu label1 label1.Text 4 )ateTime )ateTime.>o?.ToString#&;9 .>o?.ToString#&;9
+orak ' : 5 8ormi dbro&avan&e postaviti slede6e kontrole :
- % teks tekst$ t$oks oksa; a; ! komand komandna na dug dugme meta ta;; % la$el la$el kon kontr trol olee i time timer1 r1/e /ena$ na$le ledd M false 4e8i 4e 8ini nisa sati ti priv privat atne ne prom promen enji jive ve se$unde minuti i sati tipa tipa intege integer r Postaviti Timer1.interval 1000. Preko komandnog dugmeta 1 aktivirati vremenski $rojač preko kojeg se vrši od$rojavanje do nule Tekst$oksove koristiti kao vizuelni prikaz stanja stanja od$rojava od$rojavanja nja 2ad vredno vrednosti sti se$unde minuti i sati postignu postignu vrednost vrednost nula aktivirati poruku : „Vreme je isteklo!!!“.
0lika 1! &adali smo #eljeno vreme
1)
0lika 1% &adato vreme je isteklo pojavljuje se poruka
>zvorni kod : priate priate priate priate
int se/un!e;((neop0o!no int se/un!e; ((neop0o!no +e !e*inisati promen+ie tipa integer int minuti; int minuti; (( ra!i /orien+a ugraene /lase !atetime int sati; int sati; oi! timer1ATic/# oi! timer1ATic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { i* #se/un!e i* #se/un!e 44 J minuti 44 J sati 44 & { timer1.Bnable! 4 *alse *alse; ; (( /a! se ispuni uslo ta+mer presta+e sa "essage6ox.S0o?# "essage6ox .S0o?#-Vreme -Vreme +e iste/lo-&; iste/lo- &;((ra!om ((ra!om 2 po+al+u+e se poru/a 9 i* #se/un!e i* #se/un!e 44 J minuti 44 J sati I4 & { (( relacioni operator I4 znaUi ne+e!na/ sati77;(()e/rement sati77; (()e/rement sati +er su se/un!e 2 minuti iste/li (( a sati ima +o text6oxE.Text 4 sati.ToString#&; minuti 4 @O; ((rasitnili @O; ((rasitnili smo +e!an sat se/un!e 4 @O; text6oxF.Text 4 minuti.ToString#&; ((!o!el+ian+e re!nosti ra!i ((pri/aza re!nosti promen+ii0 tipa string text6ox1.Text 4 se/un!e.ToString#&; 9 i* #se/un!e i* #se/un!e 44 J minuti I4 & { minuti77; ((sati su iste/li 'se/un!e su iste/le ((ali minuta ima +os text6oxF.Text 4 minuti.ToString #&; se/un!e 4 @O; text6ox1.Text 4 se/un!e.ToString #&; 9 se/un!e77;((ostale se/un!e77; ((ostale su +o se/un!e za o!bro+aan+e text6ox1.Text 4 se/un!e.ToString#&; 9 priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e&
1
{ timer1.Bnable! 4 true true; ; se/un!e 4 System.2ntEF System. 2ntEF.Parse# .Parse#t0is t0is.text6ox1.Text&; .text6ox1.Text&; ((!o!el+ian+e re!nosti promen+iim /ree o!bro+aan+e "eto!a parse ((omoguu+e !a se re!nosti te/st bo/soa ori+entiu na tip integer minuti 4 System.2ntEF System. 2ntEF.Parse# .Parse#t0is t0is.text6oxF.Text&; .text6oxF.Text&; sati 4 System.2ntEF System. 2ntEF.Parse# .Parse#t0is t0is.text6oxE.Text&; .text6oxE.Text&; 9 priate oi! oi! buttonFAClic/# buttonFAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { se/un!e 4 ; minuti 4 ; sati 4 ; ((2s/l+uUu+e se ta+mer ' re!nosti se raa+u na nulu text6ox1.Text 4 se/un!e.ToString#&; text6oxF.Text 4 minuti.ToString#&; text6oxE.Text 4 sati.ToString#&; timer1.Bnable! 4 *alse *alse; ; 9
+orak 4 : 5 8ormi Sto'eria postaviti slede6e kontrole : % komandna dugmeta;
1 tajmer ; 1 list$oks list$oks i + la$el kontrole kontrole 4e8inisati 4e8inisati + promenjive promenjive tipa tipa int i to slede6e : desetin$e se$unde minute i sati Ove promenjive promenjive prikazivat prikazivatii preko + la$el kontrola kontrola Prvo komandno komandno dugme koristiti koristiti za za$ele#avanj za$ele#avanjee trenutnog trenutnog prošlog vremena vremena i to u list$oksu; drugo dugme za ini(ijaliza(iju promenjivih tj postavljanje vrednosti na , i pokretanje tajmera u kom tre$a realizovati algoritam stoperi(e Tre6e dugme dug me iskoristiti za gašenje tajmera i prekid rada stoperi(e Projekat realizovati kao na sli(i 1+
0lika1+ Po pritisku na dugme start počinje je $rojanje vremena
1.
&vorni kod : priate oi! oi! buttonFAClic/# buttonFAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {((QUistiti listbo/s 'se re!nosti promn+ii0 list6ox1.2tems.Clear#&; sati 4 ; se/un!e 4 ; minuti 4 ; label1.Text 4 ---; ; labelF.Text 4 ---; ; labelE.Text 4 ---; ; timer1.Bnable! 4 true true; ; 9 priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {(( pritisa/ na !ugme unosimo trenutne re!nosti promen+ii0 list6ox1.2tems.!!#labelE.Text = - sati - = labelF.Text = - minuta = label1.Text = - se/un!a - = labelM .Text = - !esetin/i - &; 9 priate oi! oi! buttonEAClic/# buttonEAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {(( pre/i! ra!a stoperice timer1.Bnable! 4 *alse *alse; ; 9
priate oi! timer1ATic/# oi! timer1ATic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { i* #!esetin/e i* #!esetin/e & (( zaostata/ o! !e !esetin/e iz razloga { (( sto iteraci+a petl+e za0tea ne/o malo reme se/un!e==; !esetin/e 4 ; 9 i* #se/un!e i* #se/un!e @O& { minuti==; se/un!e 4 ; 9 i* #minuti i* #minuti @O& { sati==; minuti 4 ; 9 !esetin/e==; labelM.Text 4 !esetin/e.ToString#&; label1.Text 4 se/un!e.ToString#&; labelF.Text 4 minuti.ToString#&; labelE.Text 4 sati.ToString#&; 9
1*
2.6. Ve`ba 6 : Rad sa tekstualnim fajlovima !1"ilj ve#$e : Ostvarivanje programa koji radi sa tekstualnim 8ajlovima i to čitanje i upis red po red Naučiti koriš6enje ugra?ene klase 0treamriten i 0tream'eader Ovaj primer nam daje dalje ideje kao što su organizovanje podataka po rednom $roju linije upisa Tako mo#emo od tekstualnog 8ajla napraviti $azu podataka
!!&adatak ve#$e : Napraviti aplika(iju koja vrši unos po prin(ipu linija po linija u tekstualni 8ajl i po istom prin(ipu vrši čitanje iz 8ajla
!%'ealiza(ija ve#$e : +orak +orak !: Otvoriti Otvoriti projekat projekat vindovs vindovs aplika(ija aplika(ija pod imenom imenom Ve#$a* i
preimenovati Form1 u Llavna8orma Pored ve6 de8inisanih $i$lioteka koje koristi o$ično
1H
fa&l 6itan&e iz
2rei 2reira rati ti doda dodatn tnee 8orm 8ormee 7nos Citan&e i prikaza prikazati ti ih modaln modalnoo preko preko stavki stavki padaju6eg menija +orak $: Tekstualni 8ajl koji 6emo koristiti i za unos i za čitanje nazva6emo 0ilete;t.t;t /nem /nemor oram amoo ga krei kreira rati ti mi ;sam ;samoo pozi poziva vanj njee meto metode de pisa pisanj njaa krei kreira ra6e 6e
tekstu tekstualn alnii 8ajl 8ajl 5 8ormi 8ormi 7nos insertovati ! tekst$oksa i jedno komandno dugme sa natpisom 7nesi. Na pritisak dugmeta zapisati u tekstualni 8ajl slede6e linije linije : 7neta &e 'rva lini&a . 7neta &e dru(a lini&a.
>spisati i tre6u i četvrtu liniju i to sadr#ajem tekstualnih $oksova O$ez$editi da nakon pritiska na dugme i unosa u tekstualni 8ajl sadr#aj tekst$oksova $ude iz$risan 'ealizovati 8ormu kao na sli(i 11
0lika 114ugme još uvek nije pritisnuto A%B >zvorni kod : priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e&{ e&{ Stream,riter stream,riter1 4 ne? Stream,riter Stream,riter stream,riter1 Stream,riter# #-*ilename.txt-*ilename.txt-&; &; (( !e*inisemo /lasu i ime *a+la stream,riter1.,riteLine# -Hneta +e pra lini+a - &;
!,
stream,riter1.,riteLine# -uneta +e !ruga lini+a .- &; stream,riter1.,riteLine#text6ox1.Text&; stream,riter1.,riteLine#text6oxF.Text&; i* #stream,riter1 i* #stream,riter1 I4 null null& & stream,riter1.Close#&; (( zataran+e /lase i *a+la stream,riter1.Close#&;(( text6ox1.Text 4 ---; ;(( brisan+e sa!rza+a text6oxF.Text 4 ---;9 ;9
+ora +orak k ' : 5 8ormi Citan&ee insertovati kontrolu list$o1 i jedno komandno 8ormi Citan&
dugme sa natpisom 6ita&. Na pritisak dugmeta pročitati sadr#aj iz tekstualnog 8ajla i prikazati preko kontrole list$oks kao na sli(i 1! A%B >zvorni kod :
priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& {Stream5ea!er Stream5ea!er sr sr 4 ne? Stream5ea!er Stream5ea!er# #-*ile>ame.txt-*ile>ame.txt-&; &; string line; string line; list6ox1.2tems.Clear#&; ?0ile ##line ?0ile ##line 4 sr.5ea!Line#&& I4 null null& & {list6ox1.2tems.!!#line&;9 i* #sr i* #sr I4 null null& & sr.Close#&;9
!1
0lika 1! Prikaz sadr#aja tekstualnog 8ajla
$.1. Vežba 1 : Rad sa 2ra0ičkim inter0esom
!.1"ilj ve#$a : Naučiti kreiranje i korič6enje o$jekta klase Lraphi(s 4e8inisanje o$jekata Pen /olovka kako $i smo iz(ratli geometriske 8igure po 8ormi Pokazati šta je sve potre$no radi pozivanja metode (rtanja
!.!&adatak ve#$e : Ostvariti na jednoj 8ormi mogu6nost iz(rtavanja kvadrata pomo6u četiri linija ; pravougaonika ; elipse i poligona
!.%'ealiza(ija ve#$e : +orak ! : Otvor Otvorit itii proj projek ekat at vind vindovs ovs apli aplika ka(i (ija ja pod imeno imenom m Vežba
i preimenovati 8ormu Form1 u Grafi$a.Postaviti + komandnih dugmeta u gormamo + slučaja tako da 6emo promeniti svojstvo teks komandnim dugmadima u $vadrat 'omo9u lini&a; 'ravou(aoni$ eli'sa 'oli(on Preko Preko ko koma mand ndni nihh dug dugma madi di post postavn avnja jati ti vred vrednos nostt promenjive bira& i to neka $udu 1;!;% i + za sva + slučaja
!!
+orak $: >z(rtati sa + linije kvadrat koriste6i za koordinate svih tačaka samo
slede6e vrednosti ), ;!,, 2ao na sli(i 11
0lika 11>s(rtali smo pravougaonik A!B >zvorni kod : priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { bira+ 4 1; (( Sta ce se crtati W 1 7 cetiri lini+e /o+e gra!e /a!rat (( F 7 praougaoni/ it!. t0is.Paint t0is .Paint =4 ne? System.,in!o?s.Dorms. PaintBentan!ler #t0is t0is.Gra*i/aAPaint&; .Gra*i/aAPaint&; (( pozi na !oga!+a+ crtan+a t0is.5e*res0#&; t0is .5e*res0#&;(( (( bez ooga nemozemo i!eti izcrtaan+e po *ormi 9 priate oi! oi! Gra*i/aAPaint# Gra*i/aAPaint#ob+ect ob+ect sen!er' sen!er' System.,in!o?s.Dorms. PaintBentrgs PaintBentrgs e& e& { s?itc0 #bira+& s?itc0 #bira+& { case 13 case 13 Grap0ics lini+a Grap0ics lini+a 4 e.Grap0ics; Pen p 4 ne? Pen Pen p Pen# #Color Color.6lac/' .6lac/' 1&; lini+a.)ra?Line#p' @' @' @'F&; lini+a.)ra?Line#p' @' @' F' @&; lini+a.)ra?Line#p' F' @' F' F&; lini+a.)ra?Line#p' F' F' @' F&; brea/; brea/ ;
+orak ': >z(rtati pravougaonik na 8ormi kao na sli(i 1!
!%
0lika 1! Pravougaonik (rvene $oje
A!B >zvorni kod : ((oe lini+e /o!a i!u za sluUa+ F u S,2TC CSB stru/turi Grap0ics praou 4 e.Grap0ics; Pen p1 Pen p1 4 ne? Pen Pen# #Color Color.5e!' .5e!' @&; praou.)ra?5ectangle#p1' 1X' @' F' X@&;
+orak 4: >z(rtati elipsu po 8ormi
0lika 1% Elipsa A!B >zvorni kod : ((oe lini+e /o!a ubaciti za case E3 Grap0ics elipsa 4 e.Grap0ics; Grap0ics elipsa Pen pF Pen pF 4 ne? Pen Pen# #Color Color.Siler' .Siler' 1&; elipsa.)ra?Bllipse#pF' F' X@' F' 1&;
!+
+ora +orak k *: >z(rtati poligon ; proizvonog izgleda ali da $ude vidljiv i $ez
prese(anja kao na sli(i 1+ O$lik zavisi od iz$ora tačaka koje uzimamo
0lika 1+Poligon A!B >zvorni kod : ((oe lini+e /o!a ubaciti za case M3 ((Color.6lac/ ' F o!reu+e bo+u 2 !ebl+inu olo/e Pen pE Pen pE 4ne? 4ne? Pen Pen # #Color Color .6lac/ .6lac/ 'F&; Soli!6rus0 cet/a Soli!6rus0 cet/a 4 ne? Soli!6rus0 Soli!6rus0 # #Color Color .6lue .6lue &; Grap0ics poli Grap0ics poli 4 e.Grap0ics; Point $% Point $% tac/e 4 { ne? Point Point #O'1O&' #O'1O&' ne? Point Point #1M'O&' #1M'O&' ne? Point Point #E@'M&' #E@'M&' ne? Point Point #1'F1&' #1'F1&' ne? Point Point #F1'1&9; #F1'1&9; poli.DillPolygon # cet/a ' tac/e&;
!)
$.8. Vežba 8 : %snove internet (ro)ramirana (ro)ramirana
!*1"ilj ve#$e : Prikazati realiza(iju klijent server aplika(ije sa elementarnim 8unk(ijama koje omogu6avaju konek(iju dva računara 5poznavanje sa ugra?enom klasom TcpClient i kako se odre?uje njena 8unk(ionalnost /kao klijent i kao server
!*!&adatak ve#$e : 5 okviru ove ve#$e napisati dve odvojene sto >sto tako tre$a tre$a o$avestiti sve sve korisnike o napuštanju jednog od klijenta ili o konek(iji novog klijenta Otvaranje porta za čekanje nove konek(ije preko dugmeta i doga?aja klik Na strani klijenta preko jednog komandnog dugmeta o$ez$editi konek(iju i diskonek(iju 2ad smo na 8okusu teks$oksa koji slu#i za unos podataka koje #elimo da šaljemo na pritisak ENTE' o$ez$editi slanje podataka preko servera svim ostalim klijentima
!
!*%1'ealiza(ija ve#$e /0erver deo +ora +orak k !:Otvo Otvori ri no novi vi proj projek ekat at
4e8inisat 4e8inisatii $i$lioteke $i$lioteke koje 6emo koristiti koristiti u ovom projektu projektu 2reiraj 2reiraj novu klasu pod nazivo vom m "hat0erver ver(s 5 okv kviiru ov ovee klase napisati izved vedenu klasu 0tatus"hangedEvent@rgs iz klase Event@rgs Napisati njen konstruktor i 8unk(iju 4e8inisati pokazivač 8unk(ija AB &vorni kod Sadrža 5DatServer.s : using System; using System; using System.Collections.Generic; using System.Collections.Generic; using System.Text; using System.Text; using System.>et; using System.>et; using System.>et.Soc/ets; using System.>et.Soc/ets; using System.2Q; using System.2Q; using System.T0rea!ing; using System.T0rea!ing; using System.Collections; using System.Collections; namespace C0atSerer namespace C0atSerer { public class StatusC0ange!Bentrgs 3 Bentrgs { priate string string Bent"sg; Bent"sg;
public string string Bent"essage Bent"essage {(( Dun/ci+a /lase get { return Bent"sg; return Bent"sg; 9 set { Bent"sg 4 alue alue; ; 9 9 public StatusC0ange!Bentrgs# public StatusC0ange!Bentrgs# string string strBent"sg& strBent"sg& {((:onstru/tor ize!ene /lase3mora se napisati Bent"sg 4 strBent"sg; 99 (( !e* Po/aziaca ' sluzi za pozian+e *un/ci+a public !elegate oi! StatusC0ange!Bentan!ler #ob+ect ob+ect sen!er' sen!er' StatusC0ange!Bentrgs e&;
+orak $: Napisati klasu C-atServer u u njoj napisati konstruktore i sve pomo6ne
8unk(ije kako $i realizovali zadatak a zatim i klasu Connetion. Formu1 kreirati kao na sli(i11 Preimenovati kontrole kao što je dato u kodu programa /daj tekst $oksovima imena t:t;o( i t:tI zatim nazovi dugme imenom btn;isten ,.
!.
0lika11Na sli(i je 8orma na kojoj je pritisnuto dugme za odvaranje porta AB &vorni kod Sadrža 5DatServer.s : class C0atSerer { (( Q!re!+i +e limit bro+a /orisni/a public static as0table as0table 0tHsers 0tHsers 4 ne? as0table as0table#E&; #E&; (( E /orisni/a o! +e!nom public static as0table as0table 0tConnections 0tConnections 4 ne? as0table as0table#E&; #E&; priate 2P!!ress 2P!!ress ip!!ress; ip!!ress; priate TcpClient TcpClient tcpClient; tcpClient; (( )oga!+a+ /o+i obaestaa *ormu o /one/ci+i '!is/one/ci+i i slan+u (( poru/a public static eent StatusC0ange!Bentan!ler StatusC0ange!; priate static StatusC0ange!Bentrgs e; (( :onstru/tor /lase C0atserer public C0atSerer# public C0atSerer#2P!!ress 2P!!ress a!!ress& a!!ress& { ip!!ress 4 a!!ress; 9 (( >it /o+a !rzi port otorenim priate T0rea! T0rea! t0rListener; t0rListener; (( TCP ob+e/t priate TcpListener TcpListener tlsClient; tlsClient; (( 5eci cemo ?0ile petn+i !a ce/a na /one/ci+u bool Ser5unning bool Ser5unning 4 *alse *alse; ; (( Hnesi /orisni/a public static oi! oi! !!Hser# !!Hser#TcpClient TcpClient tcpHser' tcpHser' string string strHsername& strHsername& { (( Hnesi /orisni/a C0atSerer.0tHsers.!!#strHsername' C0atSerer .0tHsers.!!#strHsername' tcpHser&; C0atSerer.0tConnections.!!#tcpHser' C0atSerer .0tConnections.!!#tcpHser' strHsername&; (( 5eci sima ostalima !a +e noi /orisni/ tu Sen!!min"essage#0tConnections$tcpHser% Sen!!min"essage#0tConnec tions$tcpHser% = - nam se pri!ruYi+o I- &; 9 (( H/loni /orisni/a
!*
public static oi! oi! 5emoeHser# 5emoeHser#TcpClient TcpClient tcpHser& tcpHser& { i* #0tConnections$tcpHser% i* #0tConnections$tcpHser% I4 null null& & { (( :orisni/ nas +e napustio Sen!!min"essage#0tConnections$tcpHser% Sen!!min"essage#0tConnectio ns$tcpHser% = - nas +e napustio I-&; I- &; ((H/loni po!at/e o n+emu C0atSerer.0tHsers.5emoe# C0atSerer .0tHsers.5emoe# C0atSerer C0atSerer.0tConnections$tcpHser%&; .0tConnections$tcpHser%&; C0atSerer.0tConnections.5emoe#tcpHser&; C0atSerer .0tConnections.5emoe#tcpHser&; 99 ((Qa rutina se poyia /a!a zelimo probu!iti StatusC0ange! !oga!+a+ public static oi! oi! QnStatusC0ange!# QnStatusC0ange!#StatusC0ange!Bentrgs StatusC0ange!Bentrgs e& { StatusC0ange!Bentan!ler statusan!ler 4 StatusC0ange!; i* #statusan!ler i* #statusan!ler I4 null null& & {(( Poziati !elegata statusan!ler#null statusan!ler# null' ' e&; 99 (( Posal+i a!ministratinu poru/u public static oi! oi! Sen!!min"essage# Sen!!min"essage#string string "essage& "essage& { Stream,riter s?Sen!erSen!er; Stream,riter s?Sen!erSen!er; (( Pre sega po/azi +e u oo+ apli/aci+i e 4 ne? StatusC0ange!Bentrgs #-!ministrator3 - = - = "essage&; QnStatusC0ange!#e&; (( :reira+ onoli/u tabelu /oli/o imamo /orisni/a TcpClient$% TcpClient $% tcpClients 4 ne? TcpClient$ TcpClient $C0atSerer C0atSerer.0tHsers.Count%; .0tHsers.Count%; (( iz/opira+ /li+entu C0atSerer.0tHsers.Values.CopyTo#tcpClients' C0atSerer .0tHsers.Values.CopyTo#tcpClients' &; *or # *or #int int i i 4 ; i < tcpClients.Lengt0; i==& { (( Po/usa+ poslati sima try { (( /o +e poru/a prazna ili nema /orisni/a pre/i!a+ i* #"essage.Trim#& i* #"essage.Trim#& 44 --- ZZ ZZ tcpClients$i% 44 null null& & { continue; continue ; 9 (( posal+i /orisnicima poru/u s?Sen!erSen!er 4 ne? Stream,riter Stream,riter#tcpClients$i%.GetStream#&&; #tcpClients$i%.GetStream#&&; s?Sen!erSen!er.,riteLine# -!ministrator3 - = - = "essage&; s?Sen!erSen!er.Dlus0#&; s?Sen!erSen!er 4 null null; ; 9 catc0 ((/o ima problema sa /orisni/om u/loniti ga { 5emoeHser#tcpClients$i%&; 999 (( Poslati poru/u o! +e!nog /orisni/a sima ostalima public static oi! oi! Sen!"essage# Sen!"essage#string string Drom' Drom' string string "essage& "essage& { Stream,riter s?Sen!erSen!er; Stream,riter s?Sen!erSen!er; (( Po/azimo u naso+ serer apli/aci+i ta+ po!ata/ e 4 ne? StatusC0ange!Bentrgs #Drom = - :aze 3 - = - = "essage&; QnStatusC0ange!#e&; (( :reira+ onoli/u tabelu /oli/o imamo /orisni/a
!H
TcpClient$% TcpClient $% tcpClients 4 ne? TcpClient TcpClient$ $C0atSerer C0atSerer.0tHsers.Count%; .0tHsers.Count%; (( iz/opira+ /li+entu C0atSerer.0tHsers.Values.CopyTo#tcpClients' C0atSerer .0tHsers.Values.CopyTo#tcpClients' &; *or # *or #int int i i 4 ; i < tcpClients.Lengt0; i==& { (( Po/usa+ posal+i sima poru/u try { (( /o +e poru/a prazna ili nema /orisni/a pre/i!a+ i* #"essage.Trim#& i* #"essage.Trim#& 44 --- ZZ ZZ tcpClients$i% 44 null null& & { continue; continue ; 9 (( Posal+i onima /o+i su tu s?Sen!erSen!er 4 ne? Stream,riter Stream,riter#tcpClients$i%.GetStream#&&; #tcpClients$i%.GetStream#&&; s?Sen!erSen!er.,riteLine#Drom = - /aze 3 - = - = "essage&; s?Sen!erSen!er.Dlus0#&; s?Sen!erSen!er 4 null null; ; 9 catc0 ((/o ima problem sa /orisni/om uzbaciti ga { 5emoeHser#tcpClients$i%&; 999 public oi! oi! StartListening#& StartListening#& { ((Postaiti 2P 2P!!ress ipaLocal 2P!!ress ipaLocal 4 ip!!ress; (( Postaiti port tlsClient 4 ne? TcpListener TcpListener#11[&; #11[&; (( Qtoriti port oslus/ian+e tlsClient.Start#&; (( ?0ile stru/turom proeraacemo stan+e Ser5unning 4 true true; ; t0rListener 4 ne? T0rea! T0rea!#:eepListening&; #:eepListening&; t0rListener.Start#&; 9 priate oi! oi! :eepListening#& :eepListening#& { (( )o/ +e serer po/renut pri0ata !olazece za0tee ?0ile #Ser5unning ?0ile #Ser5unning 44 true true& & {(( Pri0ati !olazece za0tee tcpClient 4 tlsClient.cceptTcpClient#& tlsClient.cceptTcpClient#&; ; (( :reira+ nou instancu Connection ne?Connection Connection ne?Connection 4 ne? Connection Connection#tcpClient&; #tcpClient&; 999 class Connection { TcpClient tcpClient; TcpClient tcpClient; (( Potrebne /lase i promen+ie ra!i slan+a poru/e priate T0rea! T0rea! t0rSen!er; t0rSen!er; priate Stream5ea!er Stream5ea!er sr5eceier; sr5eceier; priate Stream,riter Stream,riter s?Sen!er; s?Sen!er; priate string string currHser; currHser; priate string string str5esponse; str5esponse; (( :onstru/tor public Connection# public Connection#TcpClient TcpClient tcpCon& tcpCon& { tcpClient 4 tcpCon;
%,
(( Pri0ata /li+ente i ce/a noe t0rSen!er 4 ne? T0rea! T0rea!#cceptClient&; #cceptClient&; t0rSen!er.Start#&; 9 priate oi! oi! CloseConnection#& CloseConnection#& { (( Katori ob+e/te tcpClient.Close#&; sr5eceier.Close#&; s?Sen!er.Close#&; 9 (( Pri0atan+e /li+enta ili /orisni/a priate oi! oi! cceptClient#& cceptClient#& { sr5eceier 4 ne? System.2Q.Stream5ea!er System.2Q. Stream5ea!er#tcpClient.GetStream#&&; #tcpClient.GetStream#&&; s?Sen!er 4 ne? System.2Q.Stream,riter System.2Q. Stream,riter#tcpClient.GetStream#&&; #tcpClient.GetStream#&&; (( procita+ po!at/e o /li+entu currHser 4 sr5eceier.5ea!Line#&; (( )obili smo o!goor o! /li+enta i* #currHser i* #currHser I4 ---& & { (( S/la!iti /orisniU/o ime u 0as0 tabelu i* # i* #C0atSerer C0atSerer.0tHsers.Contains#currHser& .0tHsers.Contains#currHser& 44 true true& & { (( znaUi ni+e /one/toan propisno s?Sen!er.,riteLine# -ZQo /orisnic/o ime ec posto+i.- &; s?Sen!er.,riteLine#-ZQo s?Sen!er.Dlus0#&; CloseConnection#&; return; return ; 9 else i* i* #currHser #currHser 44 -!ministrator-!ministrator-& & { s?Sen!er.,riteLine# -ZQo /orisnic/o ime +e rezerisano.- &; s?Sen!er.,riteLine#-ZQo s?Sen!er.Dlus0#&; CloseConnection#&; return; return ; 9 else { (( /a! posal+emo re!nost 1 znaci !a +e /one/ci+a uspesna s?Sen!er.,riteLine# -1-&; s?Sen!er.,riteLine#-1&; s?Sen!er.Dlus0#&; (( Hnesi /orisni/a i ce/a+ n+egoe poru/e C0atSerer.!!Hser#tcpClient' C0atSerer .!!Hser#tcpClient' currHser&; 9 9 else { CloseConnection#&; return; return ; 9 try {
%1
(( 2 !al+e ce/a+ za poru/u ?0ile ##str5esponse ?0ile ##str5esponse 4 sr5eceier.5ea!Line#&& I4 ---& & { (( /o +e neprailna izbaci ga i* #str5esponse i* #str5esponse 44 null null& & { C0atSerer.5emoeHser#tcpClient&; C0atSerer .5emoeHser#tcpClient&; 9 else { (( Posal+i sim /orisnicima poru/u C0atSerer.Sen!"essage#currHser' C0atSerer .Sen!"essage#currHser' str5esponse&; 999 catc0 { (( /o bilo sta neal+a sa oim /orisni/om !is/one/tu+ ga C0atSerer.5emoeHser#tcpClient&; C0atSerer .5emoeHser#tcpClient&; 9999
&vorni kod / kom(letan sadrža koda 0orme 0orm!.s: using System; using System; using System.Collections.Generic; using System.Collections.Generic; using System.Component"o!el; using System.Component"o!el; using System.)ata; using System.)ata; using System.)ra?ing; using System.)ra?ing; using System.Text; using System.Text; using System.,in!o?s.Dorms; using System.,in!o?s.Dorms; using System.T0rea!ing; using System.T0rea!ing; using System.>et; using System.>et; using System.>et.Soc/ets; using System.>et.Soc/ets; using System.2Q; using System.2Q; namespace C0atSerer namespace C0atSerer { public partial class Dorm1 3 Dorm1 3 Dorm { priate !elegate oi! Hp!ateStatusCallbac/ #string string str"essage&; str"essage&;
public Dorm1#& public Dorm1#& { 2nitializeComponent#&; 9
priate oi! oi! btnListenAClic/# btnListenAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { (( Po/upi re!nost iz txt2P i !o!eli ga 2p a!resi 2P!!ress ip!resa 2P!!ress ip!resa 4 2P!!ress 2P!!ress.Parse#txt2p.Text&; .Parse#txt2p.Text&; (( /reira+ ob+e/at serer C0atSerer GlaniSerer C0atSerer GlaniSerer 4 ne? C0atSerer C0atSerer#ip!resa&; #ip!resa&; (( Postaiti !a StatusC0ange! ru/u+e promenom statusa serera C0atSerer.StatusC0ange! C0atSerer .StatusC0ange! =4 ne? StatusC0ange!Bentan!ler #GlaniSererAStatusC0ange!&;
(( Postai port na prislus/ian+e GlaniSerer.StartListening#&; (( Qbaesti !a +e port otoren txtLog.ppen!Text#-Port txtLog.ppen!Text# -Port +e otoren'ce/a se na za0te za /one/ci+u8r8n-&;
9
%!
public oi! oi! GlaniSererAStatusC0ange!# GlaniSererAStatusC0ange!# ob+ect ob+ect sen!er' sen!er' StatusC0ange!Bentrgs e& { ((Pri0atan+e priml+eni0 po!ata/a po!ata/a t0is.2no/e# t0is .2no/e#ne? ne? Hp!ateStatusCallbac/ #t0is t0is.Hp!ateStatus&' .Hp!ateStatus&' ne? ob+ect ob+ect$% $% { e.Bent"essage 9&; 9 priate oi! oi! Hp!ateStatus# Hp!ateStatus#string string str"essage& str"essage& { (( Hnesi poru/u u te/stualni bo/s txtLog.ppen!Text#str"essage = -8r8n-8r8n-&; &; 9 priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { pplication.Bxit#&; pplication .Bxit#&; 999
!.%!'ealiza(ija ve#$e /2lijent deo +orak ! :Otvori Otvori novi projek projekat at
4e8inisati $i$lioteke koje 6emo koristiti u ovom projektu 2reiraj 8ormu forma1 kao na sli(i1!
%%
0lika1! >zgled 8orme Form1 +orak $ : Pošto smo u$a(ili + tekst $oksa i % komandna dugmeta potre$no je
izvršiti preimenovanje da $i kod radio u slede6a imena : button1 preimenoati u btnConnect buttonF preimenoati u Sal+i buttonE preimenoati u :ra+ textbox1 preimenoati u txtIp textboxF preimenoati u txtHser textboxF preimenoati u txtLog textboxF preimenoati u Poru/a
AB >zvorni kod : /kompletan sadr#aj 8orm1(s (( )e* bibliote/a /o+e /oristi pro+e/at using System; using System; using System.Collections.Generic; using System.Collections.Generic; using System.Component"o!el; using System.Component"o!el; using System.)ata; using System.)ata; using System.)ra?ing; using System.)ra?ing; using System.Text; using System.Text;
%+
using System.,in!o?s.Dorms; using System.,in!o?s.Dorms; using System.>et; using System.>et; using System.>et.Soc/ets; using System.>et.Soc/ets; using System.2Q; using System.2Q; using System.T0rea!ing; using System.T0rea!ing; namespace C0atClient namespace C0atClient { public partial class Dorm1 Dorm1 3 3 Dorm { (( !e*inisan+e /orisniU/og imena tipa string priate string string Hser>ame Hser>ame 4 ->epoznat->epoznat-; ; priate Stream,riter Stream,riter s?Sen!er; s?Sen!er; priate Stream5ea!er Stream5ea!er sr5eceier; sr5eceier; priate TcpClient TcpClient tcpSerer; tcpSerer; (( Potrebno ra!i obaesten+a *orme !a +e poru/a stigla priate !elegate oi! Hp!ateLogCallbac/ #string string str"essage&; str"essage&; (( Potrebno !a se obaesti *orma !a +e !is/one/ci+a izazana (( o! !ruge strane #serera& priate !elegate oi! CloseConnectionCallbac/ #string string str5eason&; str5eason&; priate T0rea! T0rea! t0r"essaging; t0r"essaging; priate 2P!!ress 2P!!ress ip!!r; ip!!r; priate bool bool Connecte!; Connecte!; public Dorm1#& public Dorm1#& { (( Pre izlas/a iz apli/aci+e !a se izri !is/one/ci+a pplication.pplicationBxit pplication .pplicationBxit =4 ne? Bentan!ler Bentan!ler#QnpplicationBxit&; #QnpplicationBxit&; 2nitializeComponent#&; 9 (( Po izlas/u iz apli/aci+e obezbeu+e !is/one/ci+u public oi! oi! QnpplicationBxit# QnpplicationBxit#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { i* #Connecte! i* #Connecte! 44 true true& & { (( H/oli/o +e status /one/toan on!a ga !is/one/tu+ Connecte! 4 *alse *alse; ; s?Sen!er.Close#&; sr5eceier.Close#&; tcpSerer.Close#&; 9 9 priate oi! oi! btnConnectAClic/# btnConnectAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { (( preimeni+te ime !ugmeta za /one/ci+u I I I
i* #Connecte! i* #Connecte! 44 *alse *alse& & { (( /o nismo /one/toani po/uae !a se /one/tu+e (( 2nici+alizaci+a /one/ci+e 2nitializeConnection#&; 9 else (( Ve smo /one/toani izri !is/one/ci+u { Connecte! 4 *alse *alse ; ; Connecte! 4 *alse *alse; ; s?Sen!er.Close#&; sr5eceier.Close#&; tcpSerer.Close#&; CloseConnection# -:ra+ /one/ci+e po /orisnic/om za0teu.- &; CloseConnection#-:ra+ 9
%)
9 priate oi! oi! 2nitializeConnection#& 2nitializeConnection#& { (()o!eliti promen+io+ sa!rYa+ te/stualnog bo/sa ip!!r 4 2P!!ress 2P!!ress.Parse#txt2p.Text&; .Parse#txt2p.Text&; (( Startoati noi TCP ob+e/at sa sererom tcpSerer 4 ne? TcpClient TcpClient#&; #&; tcpSerer.Connect#ip!!r' 11[&; (( 2P a!resa i Port u!al+enog serera Connecte! 4 true true; ; (( Pripremiti *ormu Hser>ame 4 txtHser.Text; ((Po!esiti opci+e )isable i enable za reYim /oa!a smo /one/toani txt2p.Bnable! 4 *alse *alse; ; txtHser.Bnable! 4 *alse *alse; ; Poru/a.Bnable! 4 true true; ; Sal+i.Bnable! 4 true true; ; btnConnect.Text 4 -)isconnect-)isconnect-; ; (( Poslati :orisniU/o ime sereru s?Sen!er 4 ne? Stream,riter Stream,riter#tcpSerer.GetStream#&&; #tcpSerer.GetStream#&&; s?Sen!er.,riteLine#txtHser.Text&; s?Sen!er.Dlus0#&; (( Po/renuti nit za priman+e poru/a i !ol+u /omuni/aci+u t0r"essaging 4 ne? T0rea! T0rea!# #ne? T0rea!Start T0rea!Start#5eceie"essages&&; #5eceie"essages&&; t0r"essaging.Start#&; 9 priate oi! oi! 5eceie"essages#& 5eceie"essages#& { (( Pri0atiti poru/u sa serera sr5eceier 4 ne? Stream5ea!er Stream5ea!er#tcpSerer.GetStream#&&; #tcpSerer.GetStream#&&; (( /o +e pri /ara/ter /o+i +e priml+en 1 ' on!a smo uspesno (( /one/toani string Con5esponse string Con5esponse 4 sr5eceier.5ea!Line#&; (( /o +e pri poslati /ara/ter 1 to +e zna/ !a +e /one/ci+a uspena i* #Con5esponse$% i* #Con5esponse$% 44 \1\ \1\& & { (( Qbaestiti *ormu !a smo uspesno /one/toani t0is.2no/e# t0is .2no/e#ne? ne? Hp!ateLogCallbac/ #t0is t0is.Hp!ateLog&' .Hp!ateLog&' ne? ob+ect ob+ect$% $% { -Hspesna /one/ci+aI- 9&; /one/ci+aI- 9&; 9 else (( /o pri /ara/ter ni+e l e obiUno on!a nismo (( propisno /one/toani { string 5eason string 5eason 4 ->ema /one/ci+eI -; -; (( 2ma E po/usa+a 5eason =4 Con5esponse.Substring#F' Con5esponse.Lengt0 7 F&; (( Qbaesti *ormu za razlog t0is.2no/e# t0is .2no/e#ne? ne? CloseConnectionCallbac/ #t0is t0is.CloseConnection&' .CloseConnection&' ne? ob+ect$% ob+ect $% { 5eason 9&; (( 2zai iz oe meto!e return; return ; 9 (( Hspesno smo /one/toani i pri0atamo po!at/e sa serera ?0ile #Connecte! ?0ile #Connecte! 44 true true& & { try { t0is.2no/e# t0is .2no/e#ne? ne? Hp!ateLogCallbac/ #t0is t0is.Hp!ateLog&' .Hp!ateLog&' ne? ob+ect ob+ect$% $% { sr5eceier.5ea!Line#& 9&;
%
9 catc0 { Connecte! 4 *alse *alse; ; (( s?Sen!er.Close#&; (( sr5eceier.Close#&; tcpSerer.Close#&; 9 *inally { 9
99 (( pri/az pristigli0 2 poslati0 po!ata/a u te/st bo/s priate oi! oi! Hp!ateLog# Hp!ateLog#string string str"essage& str"essage& { (( Po/azati na+noi+i te/st na !nu txtLog.ppen!Text#str"essage = -8r8n-8r8n-&; &; 9 (( Katori posto+eu /one/ci+u priate oi! oi! CloseConnection# CloseConnection#string string 5eason& 5eason& {(( Po/aYi razlog zasto se ri !is/one/ci+a txtLog.ppen!Text#5eason = -8r8n-8r8n-&; &; (( Po!esi opci+e Bnable i !isable za o!reene /ontrole za reYim (( !is/one/ci+e txt2p.Bnable! 4 true true; ; txtHser.Bnable! 4 true true; ; Poru/a.Bnable! 4 *alse *alse; ; Sal+i.Bnable! 4 *alse *alse; ; btnConnect.Text 4 -Connect-Connect-; ; (( Katori ob+e/te Connecte! 4 *alse *alse; ; (( s?Sen!er.Close#&; (( sr5eceier.Close#&; tcpSerer.Close#&; 9
(( Poslati po!ata/ sereru priate oi! oi! Sen!"essage#& Sen!"essage#& { i* #Poru/a.Lines.Lengt0 i* #Poru/a.Lines.Lengt0 4 1& { s?Sen!er.,riteLine#Poru/a.Text&; s?Sen!er.Dlus0#&; Poru/a.Lines 4 null null; ; 9 Poru/a.Text 4 ---; ; 9 (( Poal+i na /li/ !ugmeta priate oi! oi! Sal+iAClic/# Sal+iAClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { Sen!"essage#&; 9 (( Slan+e po!ata/a u sluUa+u pritis/a na !ugme B>TB5 priate oi! oi! Poru/aA:eyPress# Poru/aA:eyPress#ob+ect ob+ect sen!er' sen!er' :eyPressBentrgs e& { i* #e.:eyC0ar i* #e.:eyC0ar 44 #c0ar # c0ar&1E& &1E& {
%.
Sen!"essage#&; 9 9 priate oi! oi! button1AClic/# button1AClic/#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { pplication.Bxit#&; pplication .Bxit#&; 9 priate oi! oi! Poru/aATextC0ange!# Poru/aATextC0ange!#ob+ect ob+ect sen!er' sen!er' Bentrgs Bentrgs e& e& { 9 (( 2 a/o +e oa rutina prazna neop0o!na +e 99
+orak ' : Pokrenuti o$a dela projekta i pro$ati konek(iju kao na sli(i 1%
0lika1%Prikaz konek(ije
% &aključak Programiranje zahteva svakodnevni anga#man i pored talenta tra#i i puno rada 5 ovih * ve#$i od najprostije konzolne aplika(ije za upis i prikaz podataka došli smo do klijent-server aplika(ije koja spada u Internet 'ro(ramiran&e. Potrudio Potrudio sam se da hronologija zadataka $ude ispoštovana po prin(ipu od elementarnijih ka slo#enijim primerima >nače 7i(roso8t Visual "9 !,,* Epress Edition Edition je $esplatna verzija i lako i $rzo se mo#e instalirati sa interneta Pro$lem je u tome što se te#e nalazi izvori kod za %*
novije verzije programskih jezika ali ipak postoji u dovoljnoj meri Preporučujem
6okumentaia
Iiteratura koriš6ena u uvodu i projektima :
%H
A1B 7i(roso8t "orporation; "9 version !, 0pe(i8i(ation; 7@ !,,+ A!B pro8dr 4ragan ankovi6; 7oderni kon(epti programiranja; !,,
&vorni kod u&et sa satova :
A%B http:QQ<<<8in(herorgQtipsQ http:QQ<<<8in(herorgQtipsQIanguagesQ(sharpshtml IanguagesQ(sharpshtml zadnji pristup : !1,!,,H A+B http:QQ<<<java!s(omQTutorialQ"0harpQ"atalog"0harphtm zadnji pristup : !!,!,,H A)B http:QQ<<<(odeproje(t(om zadnji pristup : !!,!,,H AB http:QQ<<<geekpedia(omQtutorial!%HR"sharp-"hat-Part-1--http:QQ<<<geekpedia(omQtutorial!%HR"sharp-"hat-Part-1---Cuilding-the-"hatCuilding-the-"hat"lienthtml zadnji pristup : !!,!,,H
+,