Seminarski Net Tehnologija C#

  • Uploaded by: Nikola Lukic
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Seminarski Net Tehnologija C# as PDF for free.

More details

  • Words: 6,198
  • Pages: 40
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žaj : 1.Uvod………………………………………………………….1 1.1.Opsti uvod...........................................................................1 1.2.Opis teme rada....................................................................2 2.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.............................................................3 2.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.............................................................5 2.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

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 unutar svoje matične klase. Internal ili interni član je dostupan samo unutar tog programa.[2]

3

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

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

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
6

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

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.

Slika1.2 Forma Forma2

Korak 5 : Realizovati u polju koda dugmeta Proveri pomoću uslovne petlje

8

algoritam 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" // 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 }

9

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 ) 2. Koreni meni : Prikazati2, podmeni:(Forma3 , Forma 4 )

Slika1. Prikaz padajućeg menija

10

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 { Forma1 frm1 = new Forma1(); frm1.ShowDialog();//modalni prikaz forme1 } private void forma2ToolStripMenuItem_Click(object sender, EventArgs { // Modalni prikaz forme2 , metoda ShowDialog() Forma2 frm2 = new Forma2(); frm2.ShowDialog(); } private void forma3ToolStripMenuItem_Click(object sender, EventArgs { // Nemodalni prikaz nove forme pomoću metode Show Forma3 frm3 = new Forma3(); frm3.Show(); } private void forma4ToolStripMenuItem_Click(object sender, EventArgs { // Nemodalni prikaz nove forme Forma4 frm4 = new Forma4(); frm4.Show(); }

e)

e)

e)

e)

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; }

11

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.

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()

12

{ }

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.

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.

13

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 : 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..

14

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!!!“.

Slika 1.2 Zadali smo željeno vreme

15

Slika 1.3 Zadato vreme je isteklo pojavljuje se poruka

Izvorni kod : private private private private

int sekunde;//neophodno je definisati promenjive tipa integer int minuti; // radi korišćenja ugrađene klase datetime int sati; 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 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)

16

{

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..

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

17

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) { 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(); }

18

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 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 tekstualnih fajlova, Kraj programa).

19

fajl, Čitanje iz

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..

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 ");

20

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 : 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();}

21

Slika 1.2. Prikaz sadržaja tekstualnog fajla

2.7. Vežba 7 : Rad sa Grafičkim interfejsom 2.7.1.Cilj vežba : 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 .

22

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. 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.

23

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);

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);

24

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 ); 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);

25

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 .

26

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 using using using using using using using

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

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

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 ).

27

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; 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

28

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++) { // 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

29

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 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;

30

// 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(); 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 {

31

// 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 using using using using using using using using using using

System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Threading; System.Net; System.Net.Sockets; 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 servera ChatServer.StatusChanged += new StatusChangedEventHandler(GlavniServer_StatusChanged);

// Postavi port na prisluskivanje GlavniServer.StartListening(); // Obavesti da je port otvoren

txtLog.AppendText("Port je otvoren,ceka se na zahtev za konekciju\r\n");

}

32

public void GlavniServer_StatusChanged(object sender, StatusChangedEventArgs e) { //Prihvatanje primljenih podataka podataka this.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(); }}}

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.

33

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 btnConnect button2 preimenovati u Salji button3 preimenovati u Kraj textbox1 preimenovati u txtIp textbox2 preimenovati u txtUser textbox2 preimenovati u txtLog textbox2 preimenovati u Poruka

[6] Izvorni kod : (kompletan sadržaj form1.cs) // Def biblioteka koje koristi projekat using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;

34

using using using using using

System.Windows.Forms; System.Net; System.Net.Sockets; System.IO; 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 // 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."); }

35

} 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 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() });

36

} 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; } 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) {

37

}

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

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 38

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.

Dokumentacija Literatura korišćena u uvodu i projektima :

39

[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.shtml zadnji pristup : 21.06.2009. [4] http://www.java2s.com/Tutorial/CSharp/CatalogCSharp.htm zadnji pristup : 22.06.2009. [5] http://www.codeproject.com zadnji pristup : 22.06.2009. [6] http://www.geekpedia.com/tutorial239_Csharp-Chat-Part-1---Building-the-ChatClient.html zadnji pristup : 22.06.2009.

40

Related Documents

C#vb[1].net
April 2020 5
Pop3 In C# .net
April 2020 3
C#.net 2005 Basics
December 2019 2
Tehnologija Skela.pdf
December 2019 8

More Documents from ""