Softverki inzenjering sa objektnim programiranjem- Kristina Goranovic.docx

Embed Size (px)

Citation preview

PANEVROPSKI UNIVERZITET APEIRONFAKULTET INFORMACIONIH TEHNOLOGIJAVanredne studijeSmjer Nastavnika informatika PredmetSoftverski inenjering sa objektinm programiranjemKreiranje kalkulatora u programu C#(seminarski rad)Predmetni nastavnikProf. dr Zoran . Avramovi, dipl.in.elek.StudentKristina GoranoviIndex br. 152-14/VNIBanja Luka, septembar 2015. SADRAJ

1.UVOD32.Strukrura programa52.1.Kompajliranje i pokretanje62.2.Rezervisane rijei72.3.Konvertovanje promenljivih82.4.Objektno orijentisano programiranje82.5.Svojstva, metode i dogaaji82.6.Fizika implementacija klase92.7.Deklaracija varijabli i funkcija92.8.Tipovi podataka112.9.Greke i njihovo pokretanje123.Kreiranje aplikacije Kalkulator133.1.Planiranje izgleda aplikacija133.2.Izrada forme133.3.Programiranje kontrola postavljenih na formu183.3.1.Programiranje dugmadi na kojim se nalaze brojevi183.3.2.Programiranje dugmeta Obrii sve203.3.3.Programiranje dugmeta Brii znak203.3.4.Programoranje dugmadi za raunanje (+,-,*,/)203.3.5.Programiranje aktivnosti za dugme =233.3.6.Metoda koja isti predhodno uneeni tekst233.4.Onemoguavanje unosa znakova sa tastature233.5.Djeljenje sa nulom nije dozvoljeno243.6.Prikaz cijelog koda aplikacije Kalkulator254.Zakljuak295.Literatura30

1. UVOD

U ovom seminarskom radu bie rijei o osnovama programskog jezika C# i nainu na koji je napravljena aplikacija kalkulator. Kalkulator je jednostavna aplikacija pomou koji se izbvravaju osnovne matematike operacije (sabiranje, oduzimanje, mnoenje i djeljenje) nad uneenim brojevima.Microsoft Visual C# je Microsoftov moni jedostavan objektno-orijentisan programski jezik opte namene koji ima veoma znaajnu ulogu u arhitekturi Microsoft .NET Frameworka. Razvio ga je Microsof tim koji je vodio Andres Hejlsberg. Poto je nasljednik C i C++ jezika, dobio je ime sharp po inspiraciji muzike notacije i znai da se napisana nota izvodi za pola koraka vie. C# je naprednija verzija C++. Programi pisani u ovom jeziku imaju ekstenziju cs. Ako ve znate jezike kakvi su C, C++, ili Java, vidjeete da vam je sintaksa jezika C# veoma bliska. Ako ste nekada programirali u drugim jezicima, uskoro bi trebalo da usvojite osjeaj i sintaksu jezika C#; samo treba da nauite da stavljate zagrade i taku zarez na pravo mjesto.

NET Framework je revulucionarna platofrma koju je kreirao Microsoft za razvoj aplikacija. To je takva platforma na kojoj mogu raditi razliite vrste aplikacija (Windows aplikacije, Web aplikacije, Web servisi...). NET Framework je dizajniran tako da moe koristiti bilo koji programski jezik kao to su C++, Visual Basic, Jscript, ak i ranije verzije Cobol. NET Framework sadri veliku biblioteku koda koji moe da koristi klijentski jezik (kao to je C#) koristei tehnike objektno-orijentisanog programiranja. Ova biblioteka se sastoji od razliitih modula, pri emu je mogue koristiti pojedine dijelove u zavisnosti od potrebe. Tako npr. neki moduli sadre blokove za kreiranje windows aplikacija, drugi dio za mreno programiranje, a neki drugi za Web razvoj. Neki moduli su podeljeni u neke specifinije pod module.Kada je u pitanju ova tehnologija ona omoguava dostupnost na svakom mjestu. .Net tehnologija ima osnovne predispozicije da postane osnovna platforma za razvoj svih modernih aplikacija. Prvenstveno je namjenjena za razvoj aplikacija pod Windows operativnim sistemom. Velika prednost ove platforme je to je orijentisana i prema razvoju aplikacija i preko interneta. Pored navedenih prednosti .NET tehnologija su i: Aplikacije su objektno orijentisane; Mogue je stvoriti kolekciju pojedinih dijelova koda na jednom mjestu, suprotno dosadanjem stilu gdje su se stvarale kopije programa na vie mesta. Ovaj tip apikacije prua softverske cjeline raspoloive razliitim ureajima preko interfejsa; Kontrolisanjem pristupa u realnom vremenu (real-time) ka distribuiranim vorovima (dielovi jedne softverske cjeline ) mogue je lake kontrolisanje rada takvih aplikacija. Ima razvijenu biblioteku klasa, koja je rezvijana od samog poetka koristei mnoga iskustva. Ovo onoguava dobru osobinu, a to je dobar dizajn i dobro definisanje osnovnih tipova; Jeziki je nezavistan (to je postignuto uvoenjem meujezika IL intermediate lenguage); Ima dobru podrka za Web (XML) servise. .NET ima razvijene alate za jednostavno pisanje XML servisa; Odlian pristup dinamikim Web stranicama baziranim na ASP.NET tehnologijama; Bolji pristup podacima preko ADO.NET klasa; U .NET tehnologiji postavljen je i novi pristup za zajedniko koritenje koda. Suprotno od tradicionalnih dll biblioteka, ovdje se uvodi koncept sklopova.

Osnovni preduslov za izvoenje programa napisanih pomodu .NET tehnologije je postojanje instaliranog programskog paketa Microsoft .NET Framework na raunaru. Biblioteka klasa .NET Framework rije je o objektno orijentisanoj kolekciji klasa (te pripadajudih svojstava i metoda) koja se koristi kod razvoja razliitih oblika vlastitih programskih reenja (standardni Windows programi, Web forme ili XML Web servisi). .NET Framework dovodi do izjednaavanja razliitih Windows platformi, oslobaajui programera posebnog razvoj a i testiranja programskog koda za razliite verzije Windowsa.

2. Strukrura programa

Ovdje u pokazati kako izgleda osnovna strukrura C# programa da bih objasnila osnovne naredbe u programu. Prilikom kreiranje novog projekta potrebno je da kliknemo na vezu Kreiraj: Projekat...(Create: Project...). Na ovaj nain se otvara dijalog u kome treba izabrati tip projekta. Osnovna tri tipa projekta su: Windows aplikacija (Windows application). Izborom ove opcije mogue je napraviti standardnu Windows aplikaciju koja se moe samostalno pokretati na raunaru. Biblioteka klasa (Class Library) je biblioteka klasa sa svojim funkcijama i drugim elementima. Izborom ove opcije kreirani projekat se ne moe se samostalno pokrenuti, ve ga pokreu i koriste drugi tipovi projekata. Aplikacija konzole (Console Application). Izborom ove opcije kreiraete takoe Windows aplikaciju, ali se ta aplikacija nee moi samostalno pokrenuti ve se komunikacija odvija iskljuivo preko komandne linije.Ostali tipovi, koji ovdje nisu navedeni predstavljaju samo razliite predloke i demo aplikacije uz ponuenu mogunost da se odreeni predloci pronau na Internetu.Ukoliko elimo da kreiramo najjednostavniji tip aplikacije, potrebno je kliknuti na stavku Aplikacija konzole (Console Application) i zatim kliknuti na dugme U redu (OK).Poslije nekoliko trenutaka se otvara prozor za pisanje koda sa ve ispisanim kosturom aplikacije.

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1{ class Program { static void Main(string[] args) { } }}

Da bi aplikacija bilo ta radila potrebno je dodati bar jednu liniju koda ispod glavne funkcije void Main(string[] args). Poto e ovaj program samo da ispisuje poruku Zdravo dodau sledee linije koda:Console.WriteLine("Zdravo!"); /*Ispisuje poruku na ekran */Console.ReadKey();/*Pritisnite bilo koji taster za prekid rada peograma */

namespace predstavlja .NET nain da se kod i njegov sadraj jedinstveno identifikuju. Takoe se koristi za kategorizaciju elemenata u .NET Framework. namespace je deklarisan za kod aplikacije koja se u ovom sluaju naziva ConsoleApplication1.using System; - predstavlja korienje System namespace (odnosi se na biblioteku klasa .NET Framework, iju biblioteku koristi C#). Za vee projekte moe se kreirati sopstveni namespaces.class Program{- definicija klase Program. Poetak klase poinje sa otvorenom vitiastom zagradom {, a zavrava se sa }.static void Main() - poinje glavni metod, gde se izvrava program. Ovaj metod poinje sa static, to znai da je statiki i void - ne vraa vrijednost.Console.WriteLine("Zdravo!"); WriteLine() je funkcija koji kao rezultat vraa string koji mu je prosljeen. Console - podrava konzolni I/O. U kombinaciji se kompajlerom govori da je WriteLine() lanica Console klase. Izrazi u C# se zvravaju sa taka - zarezom (;).Console.ReadKey(); - funkcija za unos nekog znaka sa tastature (za prekid rada programa)U okviru koda mogue je pisati i komentare. Komentari se ne izvravaju u toku procesa kompajliranje. Oni slue programeru kao potsjetnici o tome ta eli da isprogramira u odreenom dijelu programa. Vielinijski komentari piu se izmeu znakova /* i */, a jenolinijski komentari poinju znakovima //, a zavravaju se enterom.U predhodno napisanom kodu koriteni su vielinijski komentari za ispis sledeih poruka:/*Ispisuje poruku na ekran *//*Pritisnite bilo koji taster za prekid rada peograma */

2.1. Kompajliranje i pokretanje

Ovaj, program Zdravo, a i sve ostale primjere, moete kompajlirati na nakoliko naina. Da biste kompajlirali i pokrenuli program iz komandne linije, potrebno je da pritisnete fuknkcijski taster F5 na tastauri, ili da sa Start menija izaberete naredbu Start Debugging, ili da pritisnete ikonu koja se nalazi na alatnoj traci.

2.2. Rezervisane rijeiU tabeli 1 koja je prikazana u narednom dijelu teksa dat je spisak kljunih rijei koje se koriste u programskom jeziku C#

abstractasbasebool

breakby 2bytecase

catchcharcheckedclass

constcontinuedecimaldefault

delegatedodoubledescending 2

expliciteventexternelse

enumfalsefinallyfixed

floatforforeachfrom 2

gotogroup 2ifimplicit

inintinterfaceinternal

into 2islocklong

newnullnamespaceobject

operatoroutoverrideorderby 2

paramsprivateprotectedpublic

readonlyrefreturnswitch

structsbytesealedshort

sizeofstackallocstaticstring

select 2thisthrowtrue

trytypeofuintulong

uncheckedunsafeushortusing

var 2virtualvolatilevoid

whilewhere 1[3]2yield 1

1, 2 ovo nisu zapravo kljune rijei, ime se ( za razliku od stvarne kljune rijei ) mogu je definisati varijable, ali oni se ponaaju kao kljune rijei u nekim novim verzijama jezikih konstrukcija uvedenih u verzije C # 2.0 i 3.0

Tabela 1. Kljune rijei koje se poriste u programskom jeziku C#

2.3. Konvertovanje promenljivihTipovi konverzije promenljivih mogu biti:Implicitna konverzija konverzija iz tipa I u tip II je mogua u svim sluajevima, i pravila izvoenja konverzije su jednostavna.Eksplicitna konverzija konverzija iz tipa I u tip II je mogua samo u odreenim sluajevima ili su pravila za konverziju prilino komplikovana.

2.4. Objektno programiranje

Kada je rije o tradicionalnom programiranju koje se sastoji od niza funkcija i pozivanja tih funkcija, objektno orijentisano programiranje bolje prikazuje realni sviet i prua mogunost logikog projektovanja programskih zahtijeva. Odreeni problem koji se postavi pred programera moe se rijeiti i pomou tradicionalnog i objektnog orijentisanog programiranja. Prednost objektno orijenitisanog programiranje je skladniji programski model, a pored toga i neke praktine stvari kao to je ponovna upotreba i nasleivanje objekata. Jedan objekat je uvek predstavljen jednom klasom. Na klasu je potrebno gledati kao nacrt ili plan za izgradnju objekta. Primjera radi, recimo da imamo plan za izgradnju kue, taj plan e predstavljati klasu, a kua napravljena po tom planu e predstavljati objekat zasnovan na klasi. Sama klasa za sebe nije objekat, ve predstavlja samo opis po kome e objekat biti napravljen. Kada programer napravi (kae se instancira) objekat na osnovu klase, on se kreira u memoriji raunara i tek tada moe da se koristiti. Kada imamo napravljenu jednu klasu od te klase moe se napraviti neogranieni broj objekata, odnosno broj tih klasa je tehniki ogranien koliinom memorije raunara.

2.5. Svojstva, dogaaji i metode

Kao primjer uzeemo uenika, ukoliko bismo ga hteli predstaviti u objektnom svetu, klasa koja ga opisuje uenika trebala bi sadravati sledee elemente, krenuemo od njegovih fizikih osobina: ime uenika, datum roenja, boja kose i oiju, pol, razred i slino. Ovo to je pomenuto predstavlja svojstva (eng. properties) klase. Kada instanciramo objekat na osnovu klase Uenik, postaviemo ova svojstva da odgovaraju konkretnom ueniku. Ukoliko smo dobro kreirali klasu uenik moemo tano opisati sve uenike neke odreene kole. Ali, ovo nije dovoljno. Uenik moe da obavlja veliki broj kolskih aktivnosti koje takoe treba opisati. To su aktivnosti koje uenik obavlja u koli i kod kue, kao ona primjer, radi domai i pismeni zadatak, dobija ocjenu, prisustvuje odreenom asu i slino. Radnje koje uenik obavlja i koje se odnose na njega zovu se metodima (eng. methods) klase. Takoe uenik moe da reaguje na oreena deavanja u kolskom okruenju. Na primjer moe da reaguje na lou ili dobru ocjenu, izostanak iz kole u sluaju bolesti i slino predstavljaju dogaaje (eng. events) klase. Nakon detaljne analize svih osobina, reakcija i radnji uenika mogue je kreirati klasu koja moe detaljno da opie uenika sa svim potrebnim karakteristikama.

2.6. Fizika implementacija klase

Svojstva klase mogu biti i javno vidljiva, a to se postie na taj nain da se predstave varijablama i da se postavi da je ta varijabla javno vidljiva. U tu svrhu se koristi rezervisana rije public. Prvo je potrebno da korisnik koji eli koristiti klasu kreira objekte na osnovu te klase i uspostavi odreene vrijednosti varijabli i na taj nain e definisati objekat.Metode odreene klase mogu biti predstavljene funkcijama u klasi. Primjera radi, funkcija UradiZadatak koja kao ulazne parametre treba da sadri opis zadatka, vrijeme kada je zadat zadatak, predmet i rok izvravanja zadatka. Mogue je postii i da metod klase moe imati i povratnu vrjednost koja se koristi kao status izvravanja funkcije, odnosno metode. Ukoliko funkcija ima povratna vrednost nula to znai da je uspeno izvrena radnja, a ukoliko je povratna vrednost razliita od nule to znai problem definisan tim brojem. Da bismo to bolje predstavili naveemo jedan primjer radi demonstracije jedne klase, ali prvo je potrebno upoznati se sa nainom deklarisanja varijabli i funkcija u C# jeziku.

2.7. Deklaracija varijabli i funkcija

Kada je u pitanju programski jeziku C# sve promjenljive odnosno varijable moraju se deklarisati prije nego to ih upotrebimo. Ukoliko elimo da deklariemo varijablu moramo da navesti naziv varijable, tip varijable, vidljivost i poetnu vrijednost varijable (poetnu vrijednost nije obavezno navesti). Sintaksa deklaracije varijable je sledea:vidljivost tip varijable naziv = poetna vrednostNa primjer: public int SifraUcenika;private double ProsjecnaOcjena = 1;

Ovdje su navedena dva primjera, a u prvom nadeneom primjeru je definisana varijabla pod nazivom SifraUcenika a tip te varijable je cjelobrojna (eng. int), a to znai da ta varijbarija moe da poprimi vrijednost pozitivnog i negativnog celog broja u odreenom opsegu, a vidljivost varijable je javna (public). Vidljivost varijable moe biti definisana kao public (javna varijabla) i private (privatna varijabla) i vidljivost varijable govori o tome odakle se sve varijabli moe pristupiti. Ako je varijabla definisana kao public to znai da je ona javna u cijelom opsegu u kome je definisana odnosno u cijeloj klasi i da je takoe vidljiva korisnicima te klase gdje je varijabla definisana. U drugom primjeru definisana je varijabla pod nazivom ProsjecnaOcjena koja pripada tipu double (decimalni broj) sa privatnom vidljivou odnosto ta rije privata nam govori da je ta varijabla dostupna samo u okviru dijela u kome je definisan, ali ne i korisnicima klase. Poetna vrijednost varijable je postavljen na 1. Pored javnih privatnih (eng. private) i (eng. public) tipova vidljivosti postoji jo nekoliko varijanti o kojima ovdje nee biti govora. Na poetku je dovoljno je da znate da su javne varijable vidljive izvan klase, a private nisu. Kada su u pitanju funkcije, deklaracija funkcija je slina kao i deklaracija varijabli. Takoe se definie vidljivost funkcije, ime funkcije, tip (koji kada je u pitanju funkcija znai tip vrednosti koju funkcija vraa) uz jo jedan dodatak o deklaraciji ulaznih argumenata funkcije ukoliko postoje.

Ovdje je naveden jedan primjer funkcije koja vraa vrijednost proizvoda dva cijela broja:

public int Proizvod (int s, int n){return s * n;}

Funkcija Proizvod je javna to znai da je dostupna korisnicima klase i kao rezultat vraa tip int (cijeli pozitivni ili negativni broj). U ovoj funkciji imamo dva ulazna parametra s i n koji su takoe tipa int. Tijelo funkcije je odreeno otvorenom i zatvorenom vitiastom zagradom. Naredba return oznaava bezuslovni zavretak rada funkcije i povratnu vrijednost funkcije. U ovom primjeru funkcije postoji samo naredba return koja vraa proizvod dva broja. U nekim sloenijim klasama moe postojati dosta funkcija koje implementiraju razliite metode klase. Neke od tih funkcija mogu da imaju povratnu vrijednost, a neke nemaju. Ukoliko funkcija nema povratnu vrijednost onda se ona definie kao tip void. Na primjer:

public void FunkcijaPokreni (string MjestoPrograma){// ovdje se pie kod koji pokree programreturn;}

U ovom navedenom primjeru navedena je samo kljuna rije return bez parametra. U ovom sluaju je prikazan i nain za upisivanje komentara u programskom jeziku C#. U pitanju je jednolinijski komentar: // ovdje se pie kod koji pokree program.

Primjer klaseSada znamo dovoljno da bismo mogli da kreiramo jednostavnu klasu kao primjer. Sama deklaracija klase je jednostavna: Class NazivKlase{/*tijelo klase sa svim potrebnim svojstvima, metodima i dogaajima*/}2.8. Tipovi podatakaTipovi podataka u C# su dati u tabeli 2.Tip Znaenje

Bool Predstavlja true/false vrednosti

Byte 8-bitni pozitivna celobrojna vrednost

char Znakovne vrednosti

decimal Numeriki tip vrednosti za finansijske obraune

double Realne vrednosti dvostruke preciznosti

float Realne vrednosti

int Celobrojne vrednosti(32 bitne)

long Celobrojne vrednosti veeg opsega (64 bitne)

sbyte 8-bitna celobrojna oznaena (+ i -) vrednost

short16 -bitna celobrojna vrednost

uint Neoznaena celobrojna vrednost

ulong Neoznaena celobrojna vrednost veeg opsega

ushort Neoznaena celobrojna vrednost manjeg opsega

Tabela 2. Tipovi podataka u C#

2.9. Greke u programuGreke u .NET okruenju su predstavljane klasom Exception. Ustvari postoji nekoliko vrsta ovakvih klasa koji se mogu vezivati za specifine greke. Kao primer mogu se navesti greke u radu sa bazama podataka, greke u radu sa datotekama i slino. Klasa Exception predstavlja generalnu klasu za predstavljanje greki i to je klasa koja se najee koristi.

Obrada greake u programu

Prilikom izvravanja programa postoji mogunost da neki od dijelova programa ne funkcioniu ispravno i moe da doe do greke to e izazvati nasilan prekid aplikacije. Ovo to e ovdje biti navedeno odnosi na sve mogue greke koje mogu nastati u radu neke isprogramirane aplikacije, a ne samo na primer koji je ovdje naveden.

Greke se mogu podijeliti u dvije grupe:

1. Greke u vreme izvravanja (eng. runtime errors) - Greke se mogu dogoditi ili se ne moraju dogoditi u vrijeme izvravanja programa. Greke koje nastaju najee su rezultat neprovjerenih vrijednosti promjenljivih i pogrenog unosa podataka od strane korisnika. Prilino lako se pronalaze i ispravljaju.

2. Sintaksne greke (eng. syntax errors) - Sintaksne greke su rezultat pogreno napisane naredbe u nekom dijelu programa, nedeklarisane varijable ili neto slino. Kada je u pitanju ovaj vid greaka najee nisu problematine jer program obavjesti progrmara o vrsti greke i liniji koda u kojem je greka nastala. Program koji ima sintaksnu greku ne moe da se kompajlira.

Da bi se u C# obradila greka koriste se naredbe try i catch. Upotreba ovih naredbi je jednostavna, svaku liniju koda ili vie njih koje mogu generisati greku treba smestiti u try blok. U sluaju da doe do greke u vrijeme izvravanja programa, tok programa se automatski preusmerava na catch blok. U catch bloku se pie kod koji ispravlja greku ili se moe postaviti pojavljivanje prozora u kojem e korisnik biti obavjeten o greci. Na ovaj nain nee doi do nasilnog prestanka rada programa. Pomou Exception varijable moemo provjeriti koja vrsta greka se dogodila, moemo da vidimo opis greke i u zavisti od toga izvriti odgovarajuu akciju.

3. Kreiranje aplikacije Kalkulator

U ovom poglavlju bie objanjeno na koji nain je kreirana aplikacija Kalulator. Aplikacija se sastoji iz dugmadi na kojima se nalaze brojevi od 0 do 9, zatim etiri dugmeta na kojia se nalaze ispisane osnovne matematike operacije (sabiranje, oduzimanje, mnoenje i dijeljenje), zatim dugmeta jednako je i jo dva dugmeta za brisanje (jedno od dugmadi brie sav uneeni tekst, a drugo dugme brie posljednji broj).

3.1. Planiranje izgleda aplikacijaPrije poetka izrade aplikacije napravljen je plan, odnosno ema kako treba da izgleda gotova aplikacija. Izgled plana aplikacije dat je na slici 1.

Slika 1. Plan izgleda aplikacije

3.2. Izrada formeUkoliko smo odluili da napravimo Windows aplikaciu ta aplikacija mora da se sastoji od najmanje jedne forme (formulara), mada eto postoji potreba da se aplikacija sastoji i od nekoliko formi, a u sloenim aplikacijama moe da se nalazi i do nekoliko desetina formi. Da bismo kreirali formu potrebno nauiti kako tu formu programski otvoriti, zatvoriti je i kako postaviti eljene osobine forme. Ovdje dolazi do potrebe objektno orijentisanog programiranje, zato to svaka forma prilikom kreiranja aplikacije predstavlja jednu klasu. Princip kreiranja forme je jednostavan: obino se poinje od kreiranje "glavne" forme. - glavna forma je ona forma koja prva otvara prilikom pokretanja aplikacije i onda se dodaju sve ostale forme koje su nam potrebne u radu aplikacije.

Ve sam pomenula da svaka forma predstavlja klasu koja je nasleena od bazne .NET Framework klase Form iz imenovanog prostora System.Windows.Forms. Bazna klasa prua mnoge fukcionalnosti naoj klasi (formi) koje moemo odmah koristiti.

Pri kreiranju aplikacije, trebamo programski definisati ovu klasu kako bi mogli da nastavimo sa ostalim aktivnostima i programiranjem prilikom kreiranja eljene aplikacije. Prilikom dizajniranja forme, moemo po elji postavljati razliita svojstva - osobine forme, ali ih takoe moemo i naknadno mijenjati u vrijeme izvravanja.

U izradi ove aplikacije koriten je progrmski jezik C# u verziji Microsoft Visual Studio 2010. Nakon to sam izabrala ikonu za pokretanje programa Microsoft Visual Studio 2010 prikazao se prozor u kojem je potrebno izabrati naredbu New Project...U dobijenom prozoru izabrau opciju Windows Forms Aplication... poto elim da kreiram Windows aplikaciju (slika 2.).

Slika 2. Izbor vrste projektaNakon pritiska na dugme OK prkazae se programsko okruenje kao to je prikazano na slici3.

Slika 3. Programsko okruenje za izradu Windows Forms alikacije

Sa lijeve strane prozora nalazi se paleta Toolbox u kojoj se nalaze razni elementi koje moemo da postavimo na formu. Forma na koju emo da postavljamo elemente nalazi se u srednjem dijelu prozora. Pri izradi aplikacije Kalkulator na fomu u da postavljam elemente Button (dugmad) i TextBox (tekstualno polje za unos i prikaz podataka).Prvo u malo proiriti veliinu forme, a zatim u krenuti sa postavljenjem elemenata. U vrhu forme postavljeno je polje TextBox. U tom polju e se prikazivati uneeni brojevi kao i rezultati primjenjenih operacija.Osali elementi na formi su dugmad. Dugmadima je prilikom postavljanja mjenjana veliina i unoen odgovarajui tekst.Na kraju forma treba da izama izgled kao to je prikazano na slici 4.

Slika 4. Izgled gotove forme

Svojstvo Name

Kada sam dodala prvo dugme na formu ono je automatski dobilo ime "Button1", i na njemu se nalazi tekst "Button1". Vano svojstvo svakog elementa u kreiranju korisnikog interfejsa je svojstvo Name. Ovo svojstvo predstavlja jedinstveno ime elementa na koje se referiemo kada postavljamo sva ostala njegova svojstva, na primjer, kada piemo kod za njegove dogaaje i koristimo njegove metode. Svojstvo Name predstavlja ime klase koja predstavlja taj element, na potpuno isti nain kao to se u programiranju imenuju promjenjive. Postoje odreena pravila prilikom imenovanja svojstva Name, a ona su sledee: maksimalna duina imena je 128 znakova, ime moe sadrati brojeve i slova, ali ime ne moe poeti brojem, ime ne smije sadravati razmake i specijalne karaktere. Ukoliko potujemo ova pravila i preporuen prefiks, Name svojstvo dugmeta emo postaviti na dugme1. Kliknite jedanput na dugme i u prozoru Properties (dole desno u razvojnom okruenju) slika 5. pronaite svojstvo Name i promjenite ga u dugme1 kao to je prikazano na slici 5. i pritisnite Enter taster. U ovom primjeru na prvom dugmetu kojeg sam postavila na formu nalazi se broj 1.

Slika 5. Promjena svojstva Name oznaenom dugmetuVidjeete da se natpis koji se nalazi na dugmetu nije promenio. Natpis na dugmetu ne prikazuje njegovo ime ve ono pokazuje neto drugo. Svaki element korisnikog interfejsa koji ima neki natpis na sebi, ukljuujui i formu ima svojstvo Text koje odreuje ovaj natpis. U listi svojstava (Properties dijalog ovaj dijalog prozor se obino nalazi sa donje desne strane) za komandno dugme pronaite svojstvo Text i izmenite ga na "1". Text svojstvo ne podljee pravilima za zadavanje imena klasama i varijablama, tako da moete upisati ta god elite. Ono to upiete u ovo polje pisae i na dugmetu. Promjeniu svojstva Name za svako od postavljenih dugmadi kao to je dato u tabeli 3.

Tekt na dugmetuVrijednost svojstva Name

0dugme0

1dugme1

2dugme2

3dugme3

4dugme4

5dugme5

6dugme6

7dugme7

8dugme8

9dugme9

+dugmeplus

-dugmeminis

*dugmeputa

/dugmepodijeli

=dugmejedanko

Obrii svedugmeobrisi

Brii znakbrisanje

Tabela 3. Prikaz svojstava Name za svako od dugmadi na formi

Slika 6. Prozor Properties u kojem se mogu mjenjati svojstva izabrane kontrole

3.3. Programiranje kontrola postavljenih na formuNakon dizajniranja forme slijedi korak programiranja kontrola koje su postavljene na formu.

3.3.1. Programiranje dugmadi na kojim se nalaze brojeviDa bih podesila da kada kliknem na neki od brojeva koji se nalaze na formi da se ispie njihov vrijednost u polju TextBox1 koji se nalazi u vrhu prozpra, prvo je potrebno dvokliknuti na jeno od dugmadi na formi na kojimm su ispisani brojevi. Na ovaj nain otvorie nam se novi prozor u kojem moemo da isprogramiramo odreene aktivnosti za izabranu kontrolu. Kursor e biti postavljen na mjesto na koji treba da unesemo eljeni kod. Izgled dobijenog prozora prikazan je na slici 7.

Slika 7. Prozor u kojem se vri unos kod za pojedine kontrole

Nakon to smo dvokliknuli na dugme1, odnosno dugme na kojem u ovom sluaju pie broj 1 dobili smo prozor prikazan kao na slici 7. Na mjestu gdje treperi kursor dodau sledeu liniju koda:textBox1.Text += dugme1.Text;

Ova linija koda omuguie da kada kliknem na dugme u kojem se nalazi broj 1 u tekstboxb kontroli koja se nalazi u vrhu prozora da se ispie broj 1. Koliko puta klinem na ovo dugme tolika puta e se ispisati broj 1.

Ovu liniju koda potebno je kopirati i za ostalu dugmad na kojima se nalaze ispisani brojevi, ali sa jednom malom, ali bitnom izmjenom. Svako od dugmadi pored toga to ima razliit ispisan tekst (to su u ovom sluaju brojevi od 0 do 9) sadri i svoj naziv. U ovom primjeru dugme na kojem je ispisan broj 1 ima naziv dugme1. Ostala dugmad, imaju nazive onako kao to je prikazano u tabeli 3. Znai kod za dugme na kojem pie broj 2 bie:textBox1.Text += dugme2.Text;Kod za dugme na kojem pie broj 3 bie:textBox1.Text += dugme3.Text;I tako redom kopirala sam kod i za ostalu dugmad na kojima se nalaze ispisani brojevi, s tim da sam promjenila naziv dugmeta za koji postavljam kod.Da bi provjerili kako nam trenutno radi aplikacija potrebno je da kliknete na funkcijski taster F5 na tastaturi.Trenurno, ova aplikacija radi na sledei nain: kada pritisnete odreeni broj na aplikaciji onda se vrijednost tog broja ispie u TextBox polju.

3.3.2. Programiranje dugmeta Obrii sveSledei korak je da isprogramiramo aktivnost za dugme na kojem pie Obrii sve. Cilj je da kada kliknemo na ovo dugme da se u TextBox isprazni sadaj koji se u njoj nalazio, odnosno ukoliko su u tom polju pisali neki brojevi da nakon klika na ovo dugme ne pie nita.Dvokliknuu na formi na dugme Obrii sve. Progrm e me prebaciti uprozor u kojem je potrebno unijeti odreeni kod za ovo dugme. Na mjestu gdje treperi kursor potrebno je ispisati sledei kod:textBox1.Text = " ";

3.3.3. Programiranje dugmeta Brii znakDa bi isprogramirali aktivnost dugmeta na kojem pie Brii znak (ovo dugme brie samo poslijednji ujijeti broj) potrebno je dvokliknuti na dugme i na mjesto gdje treperi kurskor unijeti sledei kod:textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length-1,1);

Ovdje je koritena naredba Remove koja kao parametre ima ukupnu duinu uneenog stringa (Length je funkcija koja daje numeriku vrijednost duine posmatranog stringa) -1. Drugi parametar ove naredbe Remove je broj 1, to znai da e se izbrisati samo jedan znak.

3.3.4. Programoranje dugmadi za raunanje (+,-,*,/)Prije nego to isprogramiramo aktivnosti za dugmad koja vre osnovne matematike operacije dodaemo na poetku nekoliko varijabli.

private int rezultat = 0; private string op; private Boolean opp = false;

To su sledee varijable: Varijabla rezulat koja je cjelobrojna (int). Vidljivost te varijable je samo u okviru ove klase koja se zove Forma1 to je definisano sa rezervisanom rijeiju private i ova varijabla je inicijalizovana, odnosno dojeljenja joj je poetna vrijednost nula. Varijabla op koja je definisana kao niz znakova (string). Ova varijabla e nam sluiti da znamo sa kojom operacijom radimo (+,-,/, ili *). Varijabla opp koja je definisana kao logika promjenjiva (Boolean) koja moe imati samo vrijednosti la (false) i istina (true), a poetna vrijednost promjenjive je postavljena na false. Pomou ove varijable emo znati u kojoj fazi je kalkulator, odnosno da li neto raunamo ili unosmimo brojeve.Metoda za raunanjeOvu metodu moete postaviti ispod koda za dugmadi na kojima piu brojevi. Naredba Switch je naredba uslovnog grananja gdje na osnovu pritisnutog dugmeta, odnosno operacije na kojoj se izvravaju odreene aktivnosti. Naredba int.Parse slui da vrijednost varijable textBox1.Text pretvorimo u broj, poto je promjenjiva rezultat definisana kao cjelobrojna (int). Naredba break slui da bismo izali iz odreenog dijela Case-a. Case su pojedini sluajevi koje naredba Switch moe poprimiti. Nakon to promjenjiva rezulat dobije svoju vrijednost, odnosno nakon to se izvri izraunavanje potrebno je tu vrijednost ispisati u polje TextBox1 to se postie prisanjem naredbe: textBox1.Text = rezultat.ToString(); Vrijednost varijable rezultat je konvertovana u string da bi se mogla ispisati.Jo je ostalo da vrijednost varijable opp postavimo na true poto je koriteno neko od dugmadi za izraunavanje. Sve ovo je prikazano u slijedeem dijelu koda:

private void racunaj() { switch (op) { case "+": rezultat += int.Parse(textBox1.Text); break; case "-": rezultat -= int.Parse(textBox1.Text); break; case "*": rezultat *= int.Parse(textBox1.Text); break; case "/":

rezultat /= int.Parse(textBox1.Text); break; } textBox1.Text = rezultat.ToString(); opp = true; }Potrebo je urediti i kod za dugme Obrii sve. Treba dodati jo jednu liniju koda ispod ve postojeeg (rezultat = 0;), tako da kod za dugme Obrii sve sada izgleda ovako: private void dugmeobrisi_Click(object sender, EventArgs e) { textBox1.Text = ""; rezultat = 0; }

Programiranje aktivnosti za dugme +Dvokliknuu na dugme + i na mjestu gdje treperi kurskor uniju sledee linije koda:opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "+";

Ova naredba If (naredba uslovnog grananja) nam slui da znamo koji put smo pritisnuli na dugme +.Programiranje aktivnosti za dugme -Dvokliknuu na dugme - i na mjestu gdje treperi kurskor uniju sledee linije koda:opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "-";

Programiranje aktivnosti za dugme *Dvokliknuu na dugme * i na mjestu gdje treperi kurskor uniju sledee linije koda:opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "*";

Programiranje aktivnosti za dugme /Dvokliknuu na dugme / i na mjestu gdje treperi kurskor uniju sledee linije koda:opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "/";

3.3.5. Programiranje aktivnosti za dugme =Ovdje emo pozvati metodu racunaj, a nakon toga potrebno je vrijenost varijable op postaviti na =. Dvokliknuu na dugme = i na mjestu gdje treperi kurskor uniju sledee dvije linije koda: racunaj(); op = "=";

3.3.6. Metoda koja isti predhodno uneeni tekst Kada pokrenem i testiram aplikaciju Kalkulator (funkcijski taster F5) deava se to da kada unesem neki broj, a zatim pritisnem neko od dugmadi na kojima se nalazi matematika operacija (+,-,/,*) ne izbrie se predhovno uneeni broj. Da bih rijeila taj nedostatak napisau kod za jo jednu metodu (ovu metodu sam smjestila ispod koda za dugmad na kojima se nalaze brojevi):private void ocisti_tekst() { if(opp) textBox1.Text=""; opp=false; }

Ovu metodu potrebno je pozvati prilikom pritiska na neko od dugmadi na kojima se nalaze upisani brojevi, odnosno pozvau ovu funkciju kada god se pritisne na dugme sa brojem dodavanjem sledee linije koda:ocisti_tekst();

Ovu liniju koda kopirala sam u kod za svako dugme na kojem pie broj.

3.4. Onemoguavanje unosa znakova sa tastaturePoto se kada pokrenem ovu aplikaciju u polje TextBox1 mogu unijeti i znakovi sa tastature, na kojoj je pored brojeva nalaze i slova i ostali znakovi onemoguiu unos znakova sa tastaure. Potrebno je kliknuti na ikonu Event koja se nalazi u odjeljku Properties (u donjem dijelu prozora desno) kao to je prikazano na slici 8. Zatim je potreno pronai naredbu KeyPress i dvokliknuti na polje desno od naredbe slika 8.

Ovdje je potrebno dvokliknutiEventSlika 8. Prozor PropertiesNa mjestu gdje treperi kursor potrebno je upisati liniju koda:e.Handled = true;

Na ovaj nain onemoguena je upotreba tastature.

3.5. Djeljenje sa nulom nije dozvoljenoU C# okruenju postoji odlina podrka i mogunost za upravljanje grekama u vrijeme izvravanja programa. U ovom programskom jeziku je usvojena klasina struktura za obradu greaka koja postoji u C / C++ programskim jezicima. Sintaksa za obradu greke je sledea:try{// linije koda gdje moe da nastane greka}catch (Exception e1){// obrada greke, ta e se desiti ukoliko doe do greke}finally{// dio koji se uvek izvrava}Kada su u pitanju naredbe za obradu greke postoje tri bloka od kojih je poslednji (finally) opcion. U bloku try nalazi se jedna ili nekoliko linija koda u kojima se moe desiti da doe do greke u toku izvravanja programa. U bloku catch se nalazi kod koji obrauje greke (eng. error handler). Ako se na bilo kojoj liniji koda u try bloku dogodi greka, tok programa se automatski preusmjerava na prvu naredbu u catch bloku.Ovdje moete pokuati da ispravite greku, ili moete samo da informiete korisnika i prikaete mu poruku o greci.Moe postojati vie catch blokova koji hvataju razliite grupe greaka. Zavisno od tipa greke, kod se automatski preusmjerava na odgovarajui catch blok.Blok finally (ako postoji) se izvrava uvijek, bez obzira da li je do greke zaista dolo ili ne. Ovdje upisujemo linije koda koje uvijek treba da se izvre.

U sluaju aplikacije Kalkulator ukoliko korisnik pokua da izvri operaciju dijeljenja nekog broja sa nulom ispisae se greka i aplikacija e prestati da radi.Da bih to izbjegla napravila sam jednu metodu koju sam nazvala dijeli i ukoliko doe do pojave greke pri djeljenju progrm e da prikae prozor za porukom GREKA: djeljenje sa nulom nije dozvoljeno. Tu metoru sam pozvala u Sitch naredbi u sluaju da korisnik pritisne taster za djeljenje. Funkcija je dodata ispod koda za dugmad na kojima su ispisani brojevi i ima sledeu strukturu:private void dijeli() { try { rezultat /= int.Parse(textBox1.Text); } catch { MessageBox.Show("GREKA: djeljenje sa nulom nije dozvoljeno");

} }

3.6. Prikaz cijelog koda aplikacije Kalkulatorusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;

namespace WindowsFormsApplication1{ public partial class Form1 : Form { private int rezultat = 0; private string op; private Boolean opp = false; public Kalkulator() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme7.Text; }

private void button7_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme0.Text; }

private void dugme1_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme1.Text; }

private void dugme2_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme2.Text; }

private void dugme3_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme3.Text; }

private void dugme4_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme4.Text; }

private void dugme5_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme5.Text; }

private void dugme6_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme6.Text; }

private void dugme8_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme8.Text; }

private void dugme9_Click(object sender, EventArgs e) { ocisti_tekst(); textBox1.Text += dugme9.Text; } private void dijeli() { try { rezultat /= int.Parse(textBox1.Text); } catch { MessageBox.Show("GREKA: djeljenje sa nulom nije dozvoljeno");

} } private void ocisti_tekst() { if(opp) textBox1.Text=""; opp=false; }

private void racunaj() { switch (op) { case "+": rezultat += int.Parse(textBox1.Text); break; case "-": rezultat -= int.Parse(textBox1.Text); break; case "*": rezultat *= int.Parse(textBox1.Text); break; case "/": dijeli(); break;

} textBox1.Text = rezultat.ToString(); opp = true; } private void dugmeobrisi_Click(object sender, EventArgs e) { textBox1.Text = ""; rezultat = 0; }

private void brisanje_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length-1,1); }

private void dugmejednako_Click(object sender, EventArgs e) { racunaj(); op = "="; }

private void dugmeplus_Click(object sender, EventArgs e) { opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "+"; }

private void dugmeminus_Click(object sender, EventArgs e) { opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "-"; }

private void dugmeputa_Click(object sender, EventArgs e) { opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "*"; }

private void dugmepodjeli_Click(object sender, EventArgs e) { opp = true;

if (rezultat != 0) { racunaj(); } else { rezultat = int.Parse(textBox1.Text); }

op = "/"; }

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = true; } }}

4. Zakljuak Ovaj seminarski rad je obuhvatio tek jedan mali dio onoga to programski jezik C# i .NET Framework pruaju. Ovdje je predstavljena jedna jednostavna aplikacija koja izvrava osnovne matematike operacije (sabiranje, oduzimanje, mnoenje i dijeljenje). U ovoj aplikaciji sadraj se unosi iskljuivo upotrebom mia i klikom na dugmadi koje se nalaze na aplikaciji. Upotreba tastature je onemoguena zbog toga da korisnik ne bi sluajno unio neki znak sa kojim ne moe biti izvrena matematika operacija. Poto postoji mogunost da se aplikacija nasilno zaustavi pojavom greke pri izvravanju ukoliko korisnik pokua broj da dijeli sa nulom, u tom sluaju e se na ekranu ispisati poruka da djeljenje sa nulom nije dozvoljeno.Sam .NET framework sadri na hiljade klasa koje moete koristiti u svojim programima. Za detaljniji opis svih klasa, njihovih metoda te moguih naina upotrebe, trebale bi biti napisane hiljade i deseci hiljada stranica. I sam jezik C# nudi jo mnogo elemenata i metoda koje vam mogu olakati posao programiranja. Ovaj seminarsi rad je obuhvatio samo ono osnovno za ulazak u svijet programiranja sa C# jezikom. Posao programera zahtijeva konstantno uenje i usavravanje, razumijevanje kako odreene mogunosti mogu olakati ivot, ali u nekim sluajevima i oteati. Naalost, samo razumijevanje programerskih ideja, algoritama i principa, iako nuno, predstavlja samo poetni korak prema razvoju kvalitetnih i optimizovanih sistema.

5. Literatura1. Mala kola programiranja C#, Microsoft. Na adresi: http://www.microsoftsrb.rs/download/obrazovanje/pil/Mala_skola_programiranja_Csharp.pdf . Oitano: 8.8.2015.2. C# Kalkulator aplikacija, Aron Margeti. Na adersi: https://www.youtube.com/watch?v=lR3dHbh6xNQ . Oitano: 1.8.2015.3. Osnove programiranja u okruenju grafikih operativnih sistema, Programski jezij C#, Prirunik za nastavnike, Microsofr, Beograd 2007.4. C# 4.0 Kako do reenja, Reeni zadaci iz programiranja na jeziki C# 4.0, Ben Watson, Novi Sad 2010.19