52
V i s o k a t e h n i č k a š k o l a - N i š Seminarski rad Osnovni pojmovi vizuelnog programiranja u programskom jeziku Visual C# 2008 Predmet : NET programiranje 1

Seminarski Net tehnologija c#

Embed Size (px)

DESCRIPTION

full source codeDokument se sastoji iz dokumentacije i izvornog koda koji je koriscen u radu.osnove programiranja u Visual C# jezikuStruktura Cilj vezbe :Zadatak vezbe:Realizacija:U opisu koda i slikama opisani primeri.

Citation preview

Page 1: Seminarski Net tehnologija c#

V i s o k a t e h n i č k a š k o l a - N i š

Seminarski rad

Osnovni pojmovi vizuelnog programiranja uprogramskom jeziku Visual C# 2008

Predmet : NET programiranje

Mentor : Student : mr Zoran Veličković Nikola Lukić br.indeksa R-48

1

Page 2: Seminarski Net tehnologija c#

Sadržaj :

1.Uvod………………………………………………………….1 1.1.Opsti uvod...........................................................................1 1.2.Opis teme rada....................................................................22.1. Vežba 1 : Osnove rada u konzoli…………………..…….3

2.1.1. Cilj vežbe........................................................................3 2.1.2 Zadatak vežbe..................................................................3 2.1.3 Realizacija vežbe.............................................................32.2.Vežba 2: Rad sa uslovnom petljom grananja....................5

2.2.1. Cilj vežbe........................................................................5 2.2.2 Zadatak vežbe..................................................................5 2.2.3 Realizacija vežbe.............................................................52.3.Vežba 3: Kreiranje padajućeg menija...............................8

2.3.1. Cilj vežbe........................................................................8 2.3.2. Zadatak vežbe.................................................................8 2.3.3. Realizacija vežbe............................................................8

2.4.Vežba 4 : Osnove rada sa klasama……….….….………10 2.4.1. Cilj vežbe.........................................................................10

2.4.2. Zadatak vežbe..................................................................10 2.4.3. Realizacija vežbe.............................................................10 2.5.Vežba 5: Rad sa tajmer (timer) kontrolom…..……….…12

2.5.1.. Cilj vežbe........................................................................12 2.5.2. Zadatak vežbe..................................................................12 2.5.3. Realizacija vežbe.............................................................12

2.6. Vežba 6 : Rad sa tekstualnim fajlovima ….………….….17 2.6.1. Cilj vežbe........................................................................17

2.6.2 Zadatak vežbe..................................................................17 2.6.3 Realizacija vežbe.............................................................17

2.7.Vežba 7 : Rad sa Grafičkim interfejsom ……….…….…20 2.7.1. Cilj vežbe.........................................................................20

2.7.2. Zadatak vežbe..................................................................20 2.7.3. Realizacija vežbe.............................................................20

2.8.Vežba 8 : Osnove internet programiranja…………......…24 2.8.1. Cilj vežbe.........................................................................24

2.8.2. Zadatak vežbe....................................................................24 2.8.3.1. Realizacija vežbe (Server deo) ......................................24

2.8.3.2..Realizacija vežbe (Klijent deo)……………..….………31 3. Zaključak……………..…..…………………………..….…….36 4. Dokumentacija .……………….………..………………….…….……37

2

Page 3: Seminarski Net tehnologija c#

1.Uvod

1.1.Opsti uvod

U ovom radu bavićemo se isključivo programskim jezikom Microsoft Visual C# 2008 (Express Edition). Express Edition je besplatna licencirana vezija ovog programskog jezika. Ono što izdvaja ovaj programski jezik jeste to da se u njemu mogu pisati konzolne (DOS) aplikacije, windows aplikacije, aplikacije za web i klase. Ovu osobinu je nasledijo od izvrsnog širokog koncepta jezika Visual C++. C# (Csharp) je objektno orijentisan jezik i kao svaki drugi takav sistem sastoji se iz više različitih objekata koji mogu imati iste slične ili potpuno specifične osobine. Te osobine se nazivaju i atributima. Pored osobina objekti imaju i svoju funkcionalnost (skup funkcija) koju navivamo metodama.

Možemo reći da se programiranje korišćenjem objekno orijentisane paradigme sastoji od sledecih koraka :

-Identifikovanja objekta-Identifikovanja atributa objekata kao i njihovih vrednosti-Identifikovanje funkcionalnosti objekta -Klasifikacija objekata prema atributima i funkcionalnosti u kategorije ili klase .

-Rezultat klasifikacije je definicija klase -Identifikovawe komunikacije između objekata

Pojavom windows aplikacija i operativnog sistema tj. windows programiranja i razvojem objektno orijentisane paradigme nastao je novi razvojni sistem koji pruža mogućnosti brzog razvijanja aplikacija. Aplikacija se posmatra kao interfejs sastavljen od više formi na kojima se nalaze kontrole. Korisnik pokreće aplikaciju koja očekuje od korisnika akciju tj. izazvan događaj.(eng. Event). Ovaj način programiranja naziva se programiranje vođeno događajima.

Prava pristupa ko može i kom podatku pristupa određuje se modifikatorima pristupa :

-private-public-protected-protected internal-internal

Ako niko spolja netreba da prisupi članu klase onda se on def. kao privatni. Da treba biti dostupan svima onda je definisan kao javan. Zaštićeni član je dostupan samo

3

Page 4: Seminarski Net tehnologija c#

unutar svoje matične klase. Internal ili interni član je dostupan samo unutar tog programa.[2]

1.2.Opis teme rada

Rad se sastoji od 8 vežbi od kojih se svaka sastoji od sledeće forme :

- Cilj vežbe (sadržaće šta smo postigli u datoj vežbi).- Zadatak vežbe (u kom će biti opisano u kratkim crtama šta se generalno zahteva u

datoj vežbi).- Realizacija vežbe (razvrstana po koracima sa izvornim kodom date vežbe ,

opisom u vidu komentara i slika) .

Teme koje se provlače kroz ovoj rad biće usklađene sa početničkim znanjima o vizuelnom programiranju. Od prve do osme vežbe obradićemo konzolne DOS aplikacije, klase, uslovne petlje ili selekcije, grafičkog interfejsa, klijent server aplikaciju. U polju realizacije vežbe ispod svakog zadatka postojaće izvorni kod po principu primera. Npr. u zadatku piše da treba nacrtati kvadrat pomoću četiri linija u polju za izvorni kod biće napisan kod kako nacrtati dve linije. U suštini najveći deo biti detaljno obisan. Takođe u polju realizacije nalaziće se i slike formi kao pomoć kako bi trebalo izvesti određeni zadatak. Izvorni 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 Basic-a programski jezik C# pravi razliku između malih i velikih slova tako da mala nepažnja dovodi do greške. Vežbe su raspoređene po principu od osnovnijeg ka složenijem primeru.

Da bi tekst bio što koncizniji uveo sam par pravila : -Ako se u tekstu pominju imena formi i objekta onda su sa svojstvom italic npr. Glavnaforma. Što znači da forma u projektu nosi takvo ime.

-Kad su u pitanju same vrednosti promenjivih onda su to bold italic slova. Npr. ovojesifra .Primetili ste da nisam koristijo slovo š u reči šifra jer je mnogo teže pisati kod sa ćiriličnim pismom nego u latiničnom. Jer ćirilična slova zauzimaju mesto glavnih karaktera koji se koriste u sintaksi C# programskog jezika. U zadnjoj vežbi obrađena je oblast internet programiranja. Radi se o temi Klijent-Server aplikacija. Zbog kompleksnosti zadatka izvorni kod biće apsolutno kompletan i ispisan komentarina kako bi što bolje bio objašnjen. Zaključno sa 8. vežbom prešli smo sve važnije oblasti i obradili nekoliko zanimljivih zadataka.

4

Page 5: Seminarski Net tehnologija c#

2.1. Vežba 1 : Osnove rada u konzoli (Dos ili MsPrompt prozor)

2.1.1.Cilj vežbe :

Upoznavanje sa sintaksom programskog jezika C#. Dodeljivanje vrednosti promenjivim i prikaz na ekranu istih.

2.1.2.Zadatak vežbe :

Zahtev za unos podataka i prikaz istih na ekranu.

2.1.3.Realizacija vežbe :

Korak 1: Otvoriti novi projekat tipa konzola aplikacija sa nazivom Vezba1. Definisati promenjivu Student i brtel tipa string. Napisati algoritam za unos imena studenta, broj telefona i prikazati unete podatke na ekranu kao na slici 1.

Slika 1.1

5

Page 6: Seminarski Net tehnologija c#

Izvorni kod :

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Vezba1{ class Program { static void Main(string[] args) { string Student, brtel; // Def dve promenjive u jednoj liniji Console.WriteLine("********************************"); Console.WriteLine("* Visoka tehnicka skola nis c# *"); Console.WriteLine("********************************"); // Pokupiti podatke , unos Console.Write("Ime studenta : "); Student = Console.ReadLine(); Console.Write("Broj telefona: "); brtel = Console.ReadLine(); Console.WriteLine(); // Prikazati unete podatke Console.WriteLine("===================================="); Console.WriteLine("-/- Podaci su uneti i prikazani -/-"); Console.WriteLine("===================================="); Console.Write("Student : "); Console.WriteLine(Student ); Console.Write("Broj telefona : "); Console.WriteLine(brtel ); Console.WriteLine("====================================\n"); Console.ReadLine();}}} // Kraj izvornog koda Vezbe1

Dodatni primer naprednog programirawa u konzoli c# :

using System;using System.Threading;

public class VremenskiTest {public class Mojaposla {

public int brojpomavljanja=1;public void Pokreni() {

for(int i=0;i<brojpomavljanja ;i++) {Thread.Sleep(1000);

Console.WriteLine(Thread.CurrentThread.Name);}

}}

public static void Main(string[] args) {Mojaposla mojaposla1 = new Mojaposla ();

6

Page 7: Seminarski Net tehnologija c#

mojaposla1.brojponavljanja =5;Thread thread = new Thread(new ThreadStart(mojaposla1.Pokreni )); thread.Name = "Prosla je sekunda....."; thread.Start(); }}

2.2.Vežba 2 : Rad sa uslovnom petljom (grananje ili selekcija)

2.2.1.Cilj vežbe :

Upoznavanje sa formama i njenih osnovnih osobina, prenošenje vrednosti iz forme u formu. U primeru je obrađena IF struktura sa jednim i dva uslova korišćenjem operatora za rad sa bitovima. Videli smo kako od unete vrednosti zavisi dalji tok programa.

2.2.2.Zadatak vežbe :

Napisati program koji zahteva unos imena i šifre (log in) da bi se prikazala forma. Na novoj formi realizovati zahtev za unos dve šifre da bi se prikazala treća forma. Ovaj zadatak realizovati pomoću tekst boksova i komandnih dugmeta. 2.2.3.Realizacija vežbe :

Korak 1 : Otvoriti projekat windows aplikacija pod imenom Vežba2. Pored Forma1 insertovati formu Forma2 i Forma3.

Korak 2: U formi Forma1 postaviti sledeće objekte: Dva objekta tekstboks sa imenima - Ime , Šifra. Jedno komandno dugme dugme sa imenom - Proveri i natpisom Proveri. Uneti objekte label za opis tekstualnih boksova.

Korak 3 : Realizovati u polju koda dugmeta Proveri pomoću IF petlje algoritam koji proverava tačnost unete vrednosti u tekstboks Šifra sa vrednošću ovoješifra. U slučaju da je uneta vrednost u textbox Šifra ovoješifra prikazati formu Forma2 i sakriti formu Forma1. U slučaju da vrednost nije istinita prikazati poruku : -Uneta šifra je pogrešna!!!- ..Kao na slici 1.1.

7

Page 8: Seminarski Net tehnologija c#

Slika1.1 . Slučaj da je sifra pogrešna (Forma1)

Izvorni kod :

private void proveri_Click(object sender, EventArgs e) { if (sifra.Text == "ovojesifra") { // uslov je ispunjen u tekst boks sifra uneto je "ovojesifra" // i prikazace se forma Forma3 Forma2 frm2 = new Forma2(); frm2.Tag = this.Ime.Text; frm2.Show(); this.Hide (); } else{//slucaj da sifra nije uneta ispravna pojavljuje se poruka u msgboksu MessageBox.Show("Uneta sifra je pogresna!!!"); }}

Korak 4 : U formi Forma2 postaviti sledeće objekte :

-Tri kontrole tekstboks sa imenima - Ime , Šifra1 , Šifra2 -Jedno komandno dugme sa imenom - Proveri i natpisom Proveri -Kao i dugme za prekid aplikacije.

8

Page 9: Seminarski Net tehnologija c#

Slika1.2 Forma Forma2

Korak 5 : Realizovati u polju koda dugmeta Proveri pomoću uslovne petljealgoritam koji proverava tačnost unete vrednosti u teksboks Šifra1 sa vrednoću ovoješifra1 i u tekstboks Šifra2 sa vrednoću ovoješifra2. Ako su obe vrednosti ispunile tačnost prikazati formu Forma3 i sakriti formu Forma2.

Korak 6 : Obezbediti da se svojstvo tekst forme Forma3 pri učitavanju promeni u vrednost Ime.text iz forme Forma1 i isto tako za Ime.text iz forme Forma2.

Slika 1.3 Konačna forma Forma3

Izvorni kod :

private void Proveri_Click(object sender, EventArgs e) { if (Sifra1.Text == "ovojesifra1" && Sifra2 .Text == "ovojesifra2") { // uslov je ispunjen u tekst boks sifra1 uneto je "ovojesifra1"

9

Page 10: Seminarski Net tehnologija c#

// i u tekst boks sifra2 uneto je ovojesifra2 // i prikazace se forma Forma3 Forma3 frm3 = new Forma3();frm3.Tag = this.Ime.Text;//ovom linijom obezbedjujemo da se u forma3

// u svojstu text pojavi vrednost uneta u ime.text iz forme2 frm3.Show(); // prikazi formu3

this.Close(); // Zatvoriti formu2 } else{//slucaj da sifra nije uneta ispravna pojavljuje se poruka u msgboksu MessageBox.Show("Uneta sifra je pogresna!!!");} } private void button1_Click(object sender, EventArgs e) { Application.Exit();{//Kraj celog programa }

2.3.Vežba 3 : Kreiranje padajućeg menija

2.3.1.Cilj vežbe :

Upoznavanje svojstva forme, pokazati prednosti kod korišćenja padajućeg menija. Pokazati da jedno svojstvo možemo postaviti na više načina (ili usled učitavanja forme ili usled promene nekog drugog svojstva).

2.3.2.Zadatak vežbe :

Kreirati padajući meni na formi preko kojeg biramo koje će se nove forme prikazati. Pokazati modalni i nemodalni prikaz formi. Koristiti skraćenice tastature. Manuelno i automacki maksimizirati nove forme.

2.3.3.Realizacija vežbe :

Korak 1 : Otvoriti projekat windows aplikacija pod imenom Vežba3 i preimenovati Form1 u Glavnaforma. Realizovati na glavnoj formi sledeću strukturu padajućeg menija :

1. Koreni meni : Prikazati1, podmeni:(Forma 1 , Forma 2 , Kraj programa )

10

Page 11: Seminarski Net tehnologija c#

2. Koreni meni : Prikazati2, podmeni:(Forma3 , Forma 4 )

Slika1. Prikaz padajućeg menija

Korak 2 : Kreirati za svaku stavku padajućeg menija istoimenu formu sem za Kraj programa za koju treba napisati kod prekida aplikacije.

Korak 3 : Forme iz stavke menija Prikazati1 prikazati u modalnom obliku a sve ostale forme prikazati u nemodalnom obliku.

Izvorni kod :

private void forma1ToolStripMenuItem_Click(object sender, EventArgs e) { Forma1 frm1 = new Forma1(); frm1.ShowDialog();//modalni prikaz forme1 }private void forma2ToolStripMenuItem_Click(object sender, EventArgs e) { // Modalni prikaz forme2 , metoda ShowDialog() Forma2 frm2 = new Forma2(); frm2.ShowDialog();

}private void forma3ToolStripMenuItem_Click(object sender, EventArgs e) { // Nemodalni prikaz nove forme pomoću metode Show Forma3 frm3 = new Forma3(); frm3.Show(); }private void forma4ToolStripMenuItem_Click(object sender, EventArgs e) { // Nemodalni prikaz nove forme Forma4 frm4 = new Forma4(); frm4.Show();

}

11

Page 12: Seminarski Net tehnologija c#

Korak 4 : Postaviti skraćenice sa tastature kombinacijom ALT + podvučeno slovo iz stavke menija.

Korak 5 : Formama Forma3 i Forma4 postaviti WindowState osobinu na vrednost Maximazed i to za formu Forma3 u okviru događaja Forma3_load() a za formu Forma4 preko dugmeta button1 i Click događaja.

Izvorni kod :

private void Forma3_Load(object sender, EventArgs e){//postavljamo vrednost za maksimiziranje forme i to u dogadjaju //form_load

this.WindowState = FormWindowState.Maximized; }

private void button1_Click(object sender, EventArgs e) {// po pritisku na dugme forma Forma4 se razvlaci po celom ekranu this.WindowState = FormWindowState.Maximized;

}

2.4.Vežba 4 : Osnove rada sa klasama

2.4.1.Cilj vežbe :

Pokazati kako se generiše jedna javna klasa dodeljujući joj promenjive koristeći sve vrste modifikatora pristupa. Napisati konstruktor, funkciju i podfunkciju. Pozvali smo jednu podrutinu. Klase nisu vidljivi objekti kao što su to forme, mogu se pozivati iz drugih programa ako su definisane kao javne. Mi smo našu klasu pokrenuli preko konzole tj. njene glavne funkcije. Videli smo da svaka klasa mora imati samo jednu glavnu funkciju.

2.4.2.Zadatak vežbe :

Napisati klasu koja sadrži dodeljene promeljive svih vrsta modifikatora pristupa. Napisati minimum jedan konstruktor sa jednim argumentum. Napisati jednu funkciju sa povratnom vrednošću. Napisti primer dodeljivanja vrednosti definisanim promenjivim i prikazati na ekranu. Iz glavnog programa pozvati jednu podfunkciju. Realizovati prikaz kao na slici 1.1.

12

Page 13: Seminarski Net tehnologija c#

2.4.3.Realizacija vežbe :

Korak 1 : Otvoriti novi projekat tipa Class i generisati javnu klasu Produkt i u njoj sledeće promenjive : public string napravljen; protected internal string model; internal string boja ; protected int konjskasnaga = 150; private int GodinaPro;

Napisati javnu funkciju tipa int sa imenom DajmiGodPro() sa povratnom

vrednošću GodinaPro . Napisati konstruktor PostaviGodPro(int godina) u kome dodeljujemo vrednost this.GodinaPro = godina ; public void PostaviGodPro(int godina) { this.GodinaPro = godina ; //konstruktor } public int Dajmigodpro() { return GodinaPro ; //dobiti podatak o god proizvodnji } //Funkcija mora imati makar jednu povratnu vrednost

Napisati podrutinu public void Start() , koji štampa “ Motor uključen , pritisni enter za kraj”

Korak 2 : Generisati klasu class MainClass i u njoj napisati glavnu funkciju public static void Main(). U glavnoj funkciji postaviti sledeće vrednosti i napisati kod za prikaz dodeljenih vrednosti: Produkt produktAuto = new Produkt(); produktAuto.napravljen = "Zastava Kragujevac"; produktAuto.model = "Yugo koral"; produktAuto.boja = "black"; produktAuto.PostaviGodPro (1985);System.Console.WriteLine("Napravljen od strane firme" + produktAuto.napravljen);System.Console.WriteLine("Oznaka Modela = " + produktAuto.model);System.Console.WriteLine("Boja automobila = " + produktAuto.boja);System.Console.WriteLine("Gidina proizvodnje = " + produktAuto.Dajmigodpro()); produktAuto.Start(); System.Console.ReadLine();

Korak 3: Aplikaciju pokrenuti kao konzolu i prikazati gore navedene vrednosti. Pozvati podrutinu Start() iz klase Produkt.

13

Page 14: Seminarski Net tehnologija c#

Slika 1.1.

Napomena :

Da smo pokušali koristiti u glavnoj funkciji promenjivu konjskasnaga videli bi smo da nebi bilo dozvoljeno jer je def. kao zaštićena i može se koristiti samo u svojoj matičnoj klasi. Da smo našu klasu nazvali Produkt1 onda bi linija koda Produkt produktAUTO = new Produkt(); izgledala kao :Produkt1 produktAUTO = new Produkt1();

2.5.Vežba 5 : Rad sa tajmer (timer) kontrolom

2.5.1.Cilj vežbe :

Upoznati se sa velikim prednostima korišćenja kontrole tajmer. Naučiti pozivanje ugrađene funkcije vremena. Pokazati osnove rada sa listboks kontrolom. Kako manipulisati sistemskim datumom i vremenom dodeljivanjem njihove vrednosti promenjivima.

2.5.2.Zadatak vežbe :

Napisati aplikaciju (koristeći strukturu padajućeg menija) koja prikazuje vreme, realizuje štopericu i princip odbrojavanja od zadatog vremena do nule.

2.5.3.Realizacija vežbe :

14

Page 15: Seminarski Net tehnologija c#

Korak 1 : Otvoriti projekat windows aplikacija pod imenom Vežba3 I preimenovati Form1 u Glavnaforma. Realizovati na glavnoj formi sledeću strukturu padajućeg menija :

1.Koreni meni : Izaberi, podmeni :(Prikaži vreme i datum ,štoperica ,Odbrojavanje, Kraj programa). Preko stavki menija aktivirati (modalno) nove forme i to za :-Prikaži vreme i datum : formu pod imenom Vreme . -Odbrojavawe : formu pod imenom Odbrojavanje.-Štoperica : formu pod imenom Stoperica .

Korak 2 : Formi Vreme postaviti sledeće kontrole : 1 Tajmer , 1 label. Brojaču postaviti osobinu interval na vrednost 100 i osobinu enabled na true (što znači da će se njegova podfunkcija izvršavati svakih 100 mili sekundi). Obezbediti prikaz vremena preko vrednosti kontrole label1.text. Kao na slici 1.1..

Slika1.1.Prikaz vremena Izvorni kod :

private void timer1_Tick(object sender, EventArgs e) {// ovde obezbedjujemo da nam se pojavi vreme i datum zajedno // ~Koristili smo metodu ToString da bi mogli da dodelimo // vrednost objektu label1 label1.Text = DateTime.Now.ToString();}

Korak 3 : U formi Odbrojavanje postaviti sledeće kontrole : - 3 tekstboksa, 2 komandna dugmeta, 3 label kontrole i timer1(enabled = false). Definisati privatne promenjive sekunde, minuti i sati tipa integer. Postaviti Timer1.interval = 1000. Preko komandnog dugmeta 1 aktivirati vremenski brojač preko kojeg se vrši odbrojavanje do nule. Tekstboksove koristiti kao vizuelni prikaz stanja odbrojavanja. Kad vrednosti sekunde, minuti i sati postignu vrednost nula aktivirati poruku : „Vreme je isteklo!!!“.

15

Page 16: Seminarski Net tehnologija c#

Slika 1.2 Zadali smo željeno vreme

Slika 1.3 Zadato vreme je isteklo pojavljuje se poruka

Izvorni kod :

private int sekunde;//neophodno je definisati promenjive tipa integer private int minuti; // radi korišćenja ugrađene klase datetimeprivate int sati;private void timer1_Tick(object sender, EventArgs e) { if (sekunde == 0 & minuti == 0 & sati == 0) { timer1.Enabled = false; // kad se ispuni uslov tajmer prestaje sa MessageBox.Show("Vreme je isteklo");//radom I pojavljuje se poruka } if (sekunde == 0 & minuti == 0 & sati != 0) { // relacioni operator != znači nejednak sati--;//Dekrement sati jer su sekunde I minuti istekli// a sati ima još textBox3.Text = sati.ToString(); minuti = 59; //rasitnili smo jedan sat

16

Page 17: Seminarski Net tehnologija c#

sekunde = 59;textBox2.Text = minuti.ToString();//dodeljivanje vrednosti radi //prikaza vrednosti promenjivih tipa string textBox1.Text = sekunde.ToString(); } if (sekunde == 0 & minuti != 0) { minuti--; //sati su istekli ,sekunde su istekle //ali minuta ima jos textBox2.Text = minuti.ToString (); sekunde = 59; textBox1.Text = sekunde.ToString (); } sekunde--;//ostale su još sekunde za odbrojavanje textBox1.Text = sekunde.ToString(); } private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; sekunde = System.Int32.Parse(this.textBox1.Text); //dodeljivanje vrednosti promenjivim kreće odbrojavanje Metoda parse //omogućuje da se vrednosti tekst boksova orijentišu na tip integer minuti = System.Int32.Parse(this.textBox2.Text); sati = System.Int32.Parse(this.textBox3.Text); } private void button2_Click(object sender, EventArgs e) { sekunde = 0 ; minuti = 0 ; sati = 0;//Isključuje se tajmer , vrednosti se vraćaju na nulu textBox1.Text = sekunde.ToString(); textBox2.Text = minuti.ToString(); textBox3.Text = sati.ToString(); timer1.Enabled = false; }

Korak 4 : U formi Stoperica postaviti sledeće kontrole : 3 komandna dugmeta, 1 tajmer , 1 listboks i 4 label kontrole. Definisati 4 promenjive tipa int i to sledeće : desetinke , sekunde , minute i sati. Ove promenjive prikazivati preko 4 label kontrola. Prvo komandno dugme koristiti za zabeležavanje trenutnog prošlog vremena i to u listboksu, drugo dugme za inicijalizaciju promenjivih tj. postavljanje vrednosti na 0 i pokretanje tajmera u kom treba realizovati algoritam stoperice. Treće dugme iskoristiti za gašenje tajmera i prekid rada stoperice. Projekat realizovati kao na slici 1.4..

17

Page 18: Seminarski Net tehnologija c#

Slika1.4. Po pritisku na dugme start počinje je brojanje vremena

Izvorni kod :

private void button2_Click(object sender, EventArgs e) {//Očistiti listboks ,sve vrednosti promnjivih listBox1.Items.Clear(); sati = 0; sekunde = 0; minuti = 0; label1.Text = "0"; label2.Text = "0"; label3.Text = "0"; timer1.Enabled = true; }private void button1_Click(object sender, EventArgs e) {// pritisak na dugme unosimo trenutne vrednosti promenjivih listBox1.Items.Add(label3.Text + " sati " + label2.Text + " minuta " + label1.Text + " sekunda " + label4 .Text + " desetinki "); } private void button3_Click(object sender, EventArgs e) {// prekid rada stoperice timer1.Enabled = false; }

private void timer1_Tick(object sender, EventArgs e) { if (desetinke > 8) // zaostatak od dve desetinke iz razloga { // sto iteracija petlje zahteva neko malo vreme sekunde++; desetinke = 0; } if (sekunde > 59)

18

Page 19: Seminarski Net tehnologija c#

{ minuti++; sekunde = 0; } if (minuti > 59) { sati++; minuti = 0; } desetinke++; label4.Text = desetinke.ToString(); label1.Text = sekunde.ToString(); label2.Text = minuti.ToString(); label3.Text = sati.ToString(); }

2.6. Ve`ba 6 : Rad sa tekstualnim fajlovima

2.6.1.Cilj vežbe :

Ostvarivanje programa koji radi sa tekstualnim fajlovima i to čitanje i upis red po red. Naučiti korišćenje ugrađene klase StreamWriten i StreamReader. Ovaj primer

19

Page 20: Seminarski Net tehnologija c#

nam daje dalje ideje kao što su organizovanje podataka po rednom broju linije upisa. Tako možemo od tekstualnog fajla napraviti bazu podataka.

2.6.2.Zadatak vežbe :

Napraviti aplikaciju koja vrši unos po principu linija po linija u tekstualni fajl i po istom principu vrši čitanje iz fajla.

2.6.3.Realizacija vežbe :

Korak 1: Otvoriti projekat vindovs aplikacija pod imenom Vežba8 i preimenovati Form1 u Glavnaforma. Pored već definisanih biblioteka koje koristi obično windows aplikacija dodati i biblioteku using System.IO; Preko nje možemo koristiti klasu StreamWriten i StreamReader. Realizovati na glavnoj formi sledeću strukturu padajućeg menija : 1.Koreni meni : Izaberi, podmeni: (Zapisivanje u tekstualni fajl, Čitanje iz tekstualnih fajlova, Kraj programa).

Kreirati dodatne forme Unos, Citanje i prikazati ih modalno preko stavki padajućeg menija .

Korak 2: Tekstualni fajl koji ćemo koristiti i za unos i za čitanje nazvaćemo filetext.txt (nemoramo ga kreirati mi ,samo pozivanje metode pisanja kreiraće tekstualni fajl). U formi Unos insertovati 2 tekstboksa i jedno komandno dugme sa natpisom Unesi. Na pritisak dugmeta zapisati u tekstualni fajl sledeće linije : Uneta je prva linija . Uneta je druga linija.

Ispisati i treću i četvrtu liniju i to sadržajem tekstualnih boksova. Obezbediti da nakon pritiska na dugme i unosa u tekstualni fajl sadržaj tekstboksova bude izbrisan. Realizovati formu kao na slici 1.1..

20

Page 21: Seminarski Net tehnologija c#

Slika 1.1.Dugme još uvek nije pritisnuto

[3] Izvorni kod :

private void button1_Click(object sender, EventArgs e){StreamWriter streamWriter1 = new StreamWriter("filename.txt");// definisemo klasu i ime fajla streamWriter1.WriteLine("Uneta je prva linija "); streamWriter1.WriteLine("uneta je druga linija ."); streamWriter1.WriteLine(textBox1.Text); streamWriter1.WriteLine(textBox2.Text); if (streamWriter1 != null) streamWriter1.Close();// zatvaranje klase i fajla textBox1.Text = "";// brisanje sadrzaja textBox2.Text = "";}

Korak 3 : U formi Citanje insertovati kontrolu listbox1 i jedno komandno dugme sa natpisom Čitaj. Na pritisak dugmeta pročitati sadržaj iz tekstualnog fajla i prikazati preko kontrole listboks kao na slici 1.2.

[3] Izvorni kod :

21

Page 22: Seminarski Net tehnologija c#

private void button1_Click(object sender, EventArgs e) {StreamReader sr = new StreamReader("fileName.txt"); string line; listBox1.Items.Clear(); while ((line = sr.ReadLine()) != null) {listBox1.Items.Add(line);} if (sr != null) sr.Close();}

Slika 1.2. Prikaz sadržaja tekstualnog fajla

2.7. Vežba 7 : Rad sa Grafičkim interfejsom

2.7.1.Cilj vežba :

22

Page 23: Seminarski Net tehnologija c#

Naučiti kreiranje i koričćenje objekta klase Graphics. Definisanje objekata Pen (olovka) kako bi smo izcratli geometriske figure po formi. Pokazati šta je sve potrebno radi pozivanja metode crtanja.

2.7.2.Zadatak vežbe :

Ostvariti na jednoj formi mogućnost izcrtavanja kvadrata pomoću četiri linija , pravougaonika , elipse i poligona.

2.7.3.Realizacija vežbe :

Korak 1 : Otvoriti projekat vindovs aplikacija pod imenom Vežba6 i preimenovati formu Form1 u Grafika..Postaviti 4 komandnih dugmeta u gorwem delu forme u jedan red jedan do drugog. Postaviti svojstvo forme Grafika FormBorderStyle na vrednost FixedToolWindows. Postaviti veličinu naše forme na vrednost 365,240 (širina i dužina opcija Size). Definisati promenjivu private int biraj; preko koje switch case struktura određuje koji će objekat biti izcrtan. Imamo 4 slučaja tako da ćemo promeniti svojstvo teks komandnim dugmadima u kvadrat pomoću linija, pravougaonik, elipsa, poligon. Preko komandnih dugmadi postavnjati vrednost promenjive biraj i to neka budu 1,2,3 i 4 za sva 4 slučaja .

Korak 2: Izcrtati sa 4 linije kvadrat koristeći za koordinate svih tačaka samo sledeće vrednosti 50 ,200 . Kao na slici 1.1.

Slika 1.1.Iscrtali smo pravougaonik

[2] Izvorni kod : private void button1_Click(object sender, EventArgs e) { biraj = 1; // Sta ce se crtati ? 1 - cetiri linije koje grade kvadrat // 2 - pravougaonik itd.

23

Page 24: Seminarski Net tehnologija c#

this.Paint += new System.Windows.Forms.PaintEventHandler(this.Grafika_Paint); // poziv na dogadjaj crtanja this.Refresh();// bez ovoga nemozemo videti izcrtavanje po formi

}private void Grafika_Paint(object sender,System.Windows.Forms.PaintEventArgs e) { switch (biraj) { case 1: Graphics linija = e.Graphics;

Pen p = new Pen(Color.Black, 10); linija.DrawLine(p, 50, 50, 50,200); linija.DrawLine(p, 50, 50, 200, 50); linija.DrawLine(p, 200, 50, 200, 200); linija.DrawLine(p, 200, 200, 50, 200); break;

Korak 3: Izcrtati pravougaonik na formi kao na slici 1.2.

Slika 1.2. Pravougaonik crvene boje

[2] Izvorni kod ://ove linije koda idu za slučaj 2 u SWITCH CASE strukturi

Graphics pravou = e.Graphics; Pen p1 = new Pen(Color.Red, 5); pravou.DrawRectangle(p1, 17, 50, 200, 75);

24

Page 25: Seminarski Net tehnologija c#

Korak 4: Izcrtati elipsu po formi .

Slika 1.3 Elipsa

[2] Izvorni kod ://ove linije koda ubaciti za case 3: Graphics elipsa = e.Graphics; Pen p2 = new Pen(Color.Silver, 10); elipsa.DrawEllipse(p2, 20, 75, 200, 100);

Korak 5: Izcrtati poligon , proizvoqnog izgleda ali da bude vidljiv i bez presecanja kao na slici 1.4.. Oblik zavisi od izbora tačaka koje uzimamo .

Slika 1.4.Poligon

[2] Izvorni kod :

//ove linije koda ubaciti za case 4: //Color.Black , 20 određuje boju I debljinu olovke Pen p3 =new Pen (Color .Black ,20); SolidBrush cetka = new SolidBrush (Color .Blue );

25

Page 26: Seminarski Net tehnologija c#

Graphics poli = e.Graphics; Point [] tacke = { new Point (90,190), new Point (140,90), new Point (350,40), new Point (180,210), new Point (210,180)}; poli.FillPolygon ( cetka , tacke);

26

Page 27: Seminarski Net tehnologija c#

2.8. Vežba 8 : Osnove internet programiranja

2.8.1.Cilj vežbe :

Prikazati realizaciju klijent server aplikacije sa elementarnim funkcijama koje omogućavaju konekciju dva računara. Upoznavanje sa ugrađenom klasom TcpClient i kako se određuje njena funkcionalnost (kao klijent i kao server).

2.8.2.Zadatak vežbe :

U okviru ove vežbe napisati dve odvojene windows aplikacije i to pod nazivom projekata Klijent deo i Server deo. Server treba da obezbedi prihvatanje više klijenata i string podataka koji oni šalju. Poruka jednog od klijenata treba proslediti svim ostalim konektovanim klijentima. Isto tako treba obavestiti sve korisnike o napuštanju jednog od klijenta ili o konekciji novog klijenta. Otvaranje porta za čekanje nove konekcije preko dugmeta i događaja klik. Na strani klijenta preko jednog komandnog dugmeta obezbediti konekciju i diskonekciju. Kad smo na fokusu teksboksa koji služi za unos podataka koje želimo da šaljemo na pritisak ENTER obezbediti slanje podataka preko servera svim ostalim klijentima .

2.8.3.1.Realizacija vežbe (Server deo)

Korak 1:Otvori novi projekat windows aplikacija pod nazivom Server. Definisati biblioteke koje ćemo koristiti u ovom projektu. Kreiraj novu klasu pod nazivom ChatServer.cs. U okviru ove klase napisati izvedenu klasu StatusChangedEventArgs iz klase EventArgs. Napisati njen konstruktor i funkciju. Definisati pokazivač funkcija.

[6] Izvorni kod (Sadržaj ChatServer.cs) :

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;using System.Collections;

namespace ChatServer {public class StatusChangedEventArgs : EventArgs { private string EventMsg;

27

Page 28: Seminarski Net tehnologija c#

public string EventMessage{// Funkcija klase get{ return EventMsg;}set{ EventMsg = value; }}

public StatusChangedEventArgs(string strEventMsg){//Konstruktor izvedene klase:mora se napisati

EventMsg = strEventMsg;}}// def Pokazivaca , sluzi za pozivanje funkcija

public delegate void StatusChangedEventHandler(object sender, StatusChangedEventArgs e);

Korak 2: Napisati klasu ChatServer u njoj napisati konstruktore i sve pomoćne funkcije kako bi realizovali zadatak a zatim i klasu Connection. Formu1 kreirati kao na slici1.1. Preimenovati kontrole kao što je dato u kodu programa (daj tekst boksovima imena txtLog i txtI , zatim nazovi dugme imenom btnListen ).

Slika1.1.Na slici je forma na kojoj je pritisnuto dugme za odvaranje porta

[6] Izvorni kod (Sadržaj ChatServer.cs) :

class ChatServer {// Odredji je limit broja korisnika public static Hashtable htUsers = new Hashtable(30); // 30 korisnika od jednom public static Hashtable htConnections = new Hashtable(30); private IPAddress ipAddress;

28

Page 29: Seminarski Net tehnologija c#

private TcpClient tcpClient;// Dogadjaj koji obavestava formu o konekciji ,diskonekciji i slanju // poruka public static event StatusChangedEventHandler StatusChanged; private static StatusChangedEventArgs e;// Konstruktor klase Chatserver public ChatServer(IPAddress address) { ipAddress = address; }// Nit koja drzi port otvorenim private Thread thrListener;// TCP objekt private TcpListener tlsClient;// Reci cemo while petnji da ceka na konekciju bool ServRunning = false;// Unesi korisnika public static void AddUser(TcpClient tcpUser, string strUsername) {// Unesi korisnika ChatServer.htUsers.Add(strUsername, tcpUser); ChatServer.htConnections.Add(tcpUser, strUsername);// Reci svima ostalima da je novi korisnik tu SendAdminMessage(htConnections[tcpUser] + " nam se pridružijo !"); }// Ukloni korisnika public static void RemoveUser(TcpClient tcpUser) { if (htConnections[tcpUser] != null) {// Korisnik nas je napustio SendAdminMessage(htConnections[tcpUser] + " nas je napustio !");//Ukloni podatke o njemu ChatServer.htUsers.Remove(ChatServer.htConnections[tcpUser]); ChatServer.htConnections.Remove(tcpUser); }} //Ova rutina se poyiva kada zelimo probuditi StatusChanged dogadjaj public static void OnStatusChanged(StatusChangedEventArgs e) { StatusChangedEventHandler statusHandler = StatusChanged; if (statusHandler != null) {// Pozivati delegata statusHandler(null, e); }}// Posalji administrativnu poruku public static void SendAdminMessage(string Message) { StreamWriter swSenderSender;

// Pre svega pokazi je u ovoj aplikaciji e = new StatusChangedEventArgs("Administrator: " + Message); OnStatusChanged(e);// Kreiraj onoliku tabelu koliko imamo korisnika TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];// izkopiraj klijentu ChatServer.htUsers.Values.CopyTo(tcpClients, 0); for (int i = 0; i < tcpClients.Length; i++) {

29

Page 30: Seminarski Net tehnologija c#

// Pokusaj poslati svima try {// Ako je poruka prazna ili nema korisnika prekidaj if (Message.Trim() == "" || tcpClients[i] == null) { continue; }// posalji korisnicima poruku

swSenderSender = new StreamWriter(tcpClients[i].GetStream()); swSenderSender.WriteLine("Administrator: " + Message);

swSenderSender.Flush();swSenderSender = null;

} catch //Ako ima problema sa korisnikom ukloniti ga { RemoveUser(tcpClients[i]); }}}// Poslati poruku od jednog korisnika svima ostalima public static void SendMessage(string From, string Message) { StreamWriter swSenderSender;// Pokazimo u nasoj server aplikaciji taj podatak e = new StatusChangedEventArgs(From + " Kaze : " + Message); OnStatusChanged(e);// Kreiraj onoliku tabelu koliko imamo korisnika

TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];// izkopiraj klijentu

ChatServer.htUsers.Values.CopyTo(tcpClients, 0);for (int i = 0; i < tcpClients.Length; i++)

{// Pokusaj posalji svima poruku try {// Ako je poruka prazna ili nema korisnika prekidaj

if (Message.Trim() == "" || tcpClients[i] == null) { continue; }// Posalji onima koji su tu

swSenderSender = new StreamWriter(tcpClients[i].GetStream());swSenderSender.WriteLine(From + " kaze : " + Message);

swSenderSender.Flush();swSenderSender = null;

} catch //Ako ima problem sa korisnikom uzbaciti ga { RemoveUser(tcpClients[i]); }}} public void StartListening() { //Postaviti IP IPAddress ipaLocal = ipAddress;// Postaviti port tlsClient = new TcpListener(1106);// Otvoriti port osluskivanje tlsClient.Start();// while strukturom proveravacemo stanje

30

Page 31: Seminarski Net tehnologija c#

ServRunning = true; thrListener = new Thread(KeepListening); thrListener.Start(); } private void KeepListening() { // Dok je server pokrenut prihvata dolazece zahteve while (ServRunning == true) {// Prihvati dolazece zahteve tcpClient = tlsClient.AcceptTcpClient();// Kreiraj novu instancu Connection newConnection = new Connection(tcpClient); }}} class Connection { TcpClient tcpClient; // Potrebne klase i promenjive radi slanja poruke private Thread thrSender; private StreamReader srReceiver; private StreamWriter swSender; private string currUser; private string strResponse; // Konstruktor public Connection(TcpClient tcpCon) { tcpClient = tcpCon; // Prihvata klijente i ceka nove thrSender = new Thread(AcceptClient); thrSender.Start(); } private void CloseConnection() {// Zatvori objekte tcpClient.Close(); srReceiver.Close(); swSender.Close(); }// Prihvatanje klijenta ili korisnika private void AcceptClient() { srReceiver = new System.IO.StreamReader(tcpClient.GetStream()); swSender = new System.IO.StreamWriter(tcpClient.GetStream());

// procitaj podatke o klijentu currUser = srReceiver.ReadLine();

// Dobili smo odgovor od klijenta if (currUser != "") {// Skladišti korisničko ime u hash tabelu if (ChatServer.htUsers.Contains(currUser) == true) {// 0 znači nije konektovan propisno swSender.WriteLine("0|Ovo korisnicko ime vec postoji."); swSender.Flush();

31

Page 32: Seminarski Net tehnologija c#

CloseConnection(); return; } else if (currUser == "Administrator") { swSender.WriteLine("0|Ovo korisnicko ime je rezervisano."); swSender.Flush(); CloseConnection(); return; } else {// kad posaljemo vrednost 1 znaci da je konekcija uspesna swSender.WriteLine("1"); swSender.Flush();// Unesi korisnika i cekaj njegove poruke ChatServer.AddUser(tcpClient, currUser); } } else { CloseConnection(); return; } try {// I dalje cekaj za poruku while ((strResponse = srReceiver.ReadLine()) != "") {// Ako je nepravilna izbaci ga if (strResponse == null) { ChatServer.RemoveUser(tcpClient); } else {// Posalji svim korisnicima poruku ChatServer.SendMessage(currUser, strResponse); }}} catch {// Ako bilo sta nevalja sa ovim korisnikom diskonektuj ga ChatServer.RemoveUser(tcpClient); }}}}

Izvorni kod ( kompletan sadržaj koda forme form1.cs):

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;using System.Net;using System.Net.Sockets;

32

Page 33: Seminarski Net tehnologija c#

using System.IO;

namespace ChatServer{ public partial class Form1 : Form { private delegate void UpdateStatusCallback(string strMessage);

public Form1() { InitializeComponent(); }

private void btnListen_Click(object sender, EventArgs e) {// Pokupi vrednost iz txtIP i dodeli ga Ip adresi IPAddress ipAdresa = IPAddress.Parse(txtIp.Text);// kreiraj objekat server ChatServer GlavniServer = new ChatServer(ipAdresa);// Postaviti da StatusChanged rukuje promenom statusa serveraChatServer.StatusChanged += new StatusChangedEventHandler(GlavniServer_StatusChanged);// Postavi port na prisluskivanje GlavniServer.StartListening();// Obavesti da je port otvorentxtLog.AppendText("Port je otvoren,ceka se na zahtev za konekciju\r\n"); }public void GlavniServer_StatusChanged(object sender, StatusChangedEventArgs e) {//Prihvatanje primljenih podataka podatakathis.Invoke(new UpdateStatusCallback(this.UpdateStatus), new object[] { e.EventMessage }); } private void UpdateStatus(string strMessage) {// Unesi poruku u tekstualni boks txtLog.AppendText(strMessage + "\r\n"); } private void button1_Click(object sender, EventArgs e) { Application.Exit(); }}}

33

Page 34: Seminarski Net tehnologija c#

2.7.3.2.Realizacija vežbe (Klijent deo)

Korak 1 :Otvori novi projekat windows aplikacija pod nazivom Klijent. Definisati biblioteke koje ćemo koristiti u ovom projektu. Kreiraj formu forma1 kao na slici1.2.

Slika1.2. Izgled forme Form1

Korak 2 : Pošto smo ubacili 4 tekst boksa i 3 komandna dugmeta potrebno je izvršiti preimenovanje da bi kod radio u sledeća imena :

button1 preimenovati u btnConnectbutton2 preimenovati u Saljibutton3 preimenovati u Krajtextbox1 preimenovati u txtIptextbox2 preimenovati u txtUsertextbox2 preimenovati u txtLogtextbox2 preimenovati u Poruka

34

Page 35: Seminarski Net tehnologija c#

[6] Izvorni kod : (kompletan sadržaj form1.cs)

// Def biblioteka koje koristi projekatusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;

namespace ChatClient{ public partial class Form1 : Form { // definisanje korisničkog imena tipa string private string UserName = "Nepoznat"; private StreamWriter swSender; private StreamReader srReceiver; private TcpClient tcpServer; // Potrebno radi obavestenja forme da je poruka stigla private delegate void UpdateLogCallback(string strMessage); // Potrebno da se obavesti forma da je diskonekcija izazvana // od druge strane (servera) private delegate void CloseConnectionCallback(string strReason); private Thread thrMessaging; private IPAddress ipAddr; private bool Connected; public Form1() { // Pre izlaska iz aplikacije da se izvrši diskonekcija Application.ApplicationExit += new EventHandler(OnApplicationExit); InitializeComponent(); } // Po izlasku iz aplikacije obezbeđuje diskonekciju public void OnApplicationExit(object sender, EventArgs e) { if (Connected == true) { // Ukoliko je status konektovan onda ga diskonektuj Connected = false; swSender.Close(); srReceiver.Close(); tcpServer.Close(); } } private void btnConnect_Click(object sender, EventArgs e) { // preimenijte ime dugmeta za konekciju ! ! ! if (Connected == false) { // Ako nismo konektovani pokušaće da se konektuje

35

Page 36: Seminarski Net tehnologija c#

// Inicijalizacija konekcije InitializeConnection(); } else // Već smo konektovani izvrši diskonekciju { Connected = false ; Connected = false; swSender.Close(); srReceiver.Close(); tcpServer.Close(); CloseConnection("Kraj konekcije po korisnickom zahtevu."); } } private void InitializeConnection() {//Dodeliti promenjivoj sadržaj tekstualnog boksa ipAddr = IPAddress.Parse(txtIp.Text);// Startovati novi TCP objekat sa serverom tcpServer = new TcpClient(); tcpServer.Connect(ipAddr, 1106);// IP adresa i Port udaljenog servera Connected = true; // Pripremiti formu UserName = txtUser.Text;//Podesiti opcije Disable i enable za režim koada smo konektovani txtIp.Enabled = false; txtUser.Enabled = false; Poruka.Enabled = true; Salji.Enabled = true; btnConnect.Text = "Disconnect";// Poslati Korisničko ime serveru swSender = new StreamWriter(tcpServer.GetStream()); swSender.WriteLine(txtUser.Text); swSender.Flush();// Pokrenuti nit za primanje poruka i dolju komunikaciju thrMessaging = new Thread(new ThreadStart(ReceiveMessages)); thrMessaging.Start(); } private void ReceiveMessages() { // Prihvatiti poruku sa servera srReceiver = new StreamReader(tcpServer.GetStream());// Ako je prvi karakter koji je primljen 1 , onda smo uspesno // konektovani string ConResponse = srReceiver.ReadLine();// Ako je prvi poslati karakter 1 to je znak da je konekcija uspešna if (ConResponse[0] == '1') { // Obavestiti formu da smo uspesno konektovani this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] { "Uspesna konekcija!" }); } else // Ako prvi karakter nije l već obično 0 onda nismo // propisno konektovani { string Reason = "Nema konekcije! "; // Ima 3 pokusaja Reason += ConResponse.Substring(2, ConResponse.Length - 2); // Obavesti formu za razlog

36

Page 37: Seminarski Net tehnologija c#

this.Invoke(new CloseConnectionCallback(this.CloseConnection), new object[] { Reason }); // Izađi iz ove metode return; } // Uspesno smo konektovani i prihvatamo podatke sa servera while (Connected == true) { try {this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] { srReceiver.ReadLine() }); } catch { Connected = false; // swSender.Close(); // srReceiver.Close(); tcpServer.Close(); } finally { } }} // prikaz pristiglih I poslatih podataka u tekst boks private void UpdateLog(string strMessage) { // Pokazati najnoviji tekst na dnu txtLog.AppendText(strMessage + "\r\n"); } // Zatvori postojeću konekciju private void CloseConnection(string Reason) {// Pokaži razlog zasto se vrši diskonekcija txtLog.AppendText(Reason + "\r\n");// Podesi opcije Enable i disable za određene kontrole za režim // diskonekcije txtIp.Enabled = true; txtUser.Enabled = true; Poruka.Enabled = false; Salji.Enabled = false; btnConnect.Text = "Connect"; // Zatvori objekte Connected = false; // swSender.Close(); // srReceiver.Close(); tcpServer.Close(); }

// Poslati podatak serveru private void SendMessage() { if (Poruka.Lines.Length >= 1) { swSender.WriteLine(Poruka.Text); swSender.Flush(); Poruka.Lines = null; }

37

Page 38: Seminarski Net tehnologija c#

Poruka.Text = ""; } // Pošalji na klik dugmeta private void Salji_Click(object sender, EventArgs e) { SendMessage(); } // Slanje podataka u slučaju pritiska na dugme ENTER private void Poruka_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)13) { SendMessage(); } } private void button1_Click(object sender, EventArgs e) { Application.Exit(); } private void Poruka_TextChanged(object sender, EventArgs e) { } // I ako je ova rutina prazna neophodna je }}

Korak 3 : Pokrenuti oba dela projekta i probati konekciju kao na slici 1.3.

Slika1.3.Prikaz konekcije

38

Page 39: Seminarski Net tehnologija c#

3. Zaključak

Programiranje zahteva svakodnevni angažman i pored talenta traži i puno rada. U ovih 8 vežbi od najprostije konzolne aplikacije za upis i prikaz podataka došli smo do klijent-server aplikacije koja spada u Internet programiranje. Potrudio sam se da hronologija zadataka bude ispoštovana po principu od elementarnijih ka složenijim primerima. Inače Microsoft Visual C# 2008 Express Edition je besplatna verzija i lako i brzo se može instalirati sa interneta. Problem je u tome što se teže nalazi izvori kod za novije verzije programskih jezika ali ipak postoji u dovoljnoj meri. Preporučujem web adrese navede u dokumentaciji. Većina koda je dato u formi klase ili je napisan za konzolnu aplikaciju ali i takav kod uz manje prepravke možete napisati windows aplikaciju. U vizuelnoj sredini komandu Console.WriteLine zamenili bi MessageBox.Show komandom. Tako svaku konzola aplikaciju možemo prevesti u windows aplikaciju uz male prepravke .

Za izvodjenje složenih projekata kao u našem slučaju 9 posebnih projekata treba posebnu pažnju posvetiti izboru radnog direktorijuma i backup direktorijuma za skladišćenje fajlova projekta. Preporučljivo je pri insertovanju i preimenovanju formi snimiti promenu.

Jedan od zaključaka ovog rada je i sledeće : vrlo je lako ostvariti osnovnu konekciju i kreirati grafički interfejs za jednu chat aplikaciju. Videli smo da jednom linijom koda šaljemo string udaljenom računaru, tada taj string možemo definisati kao jednu komandu .Kada server primi poslati podatak može na osnovu njegovog sadržaja odraditi neki blik naredbi. U načem slučaju to je 1 ili 0 tako server kada prihvati prvi podatak “1” on request metodom prihvata konekciju i obaveštava klijenta.

39

Page 40: Seminarski Net tehnologija c#

Dokumentacija

Literatura korišćena u uvodu i projektima :

[1] Microsoft Corporation, C# version 2.0 Specification, MAY 2004

[2] prof.dr. Dragan Janković, Moderni koncepti programiranja, 2006.

Izvorni kod uzet sa sajtova :

[3] http://www.fincher.org/tips/Languages/csharp.shtmlzadnji pristup : 21.06.2009.

[4] http://www.java2s.com/Tutorial/CSharp/CatalogCSharp.htmzadnji pristup : 22.06.2009.

[5] http://www.codeproject.comzadnji pristup : 22.06.2009.

[6] http://www.geekpedia.com/tutorial239_Csharp-Chat-Part-1---Building-the-Chat-Client.html

zadnji pristup : 22.06.2009.

40