Uporabniški vmesnik za vodenje nagradnih iger v igralnici

Uporabniški vmesnik za vodenje nagradnih iger v igralnici

Avtor: Sabina Oražem

Učni cilji: Aplikacija uporabniku ponuja pregled in urejanje podatkov o nagradnih igrah, nagradah in nagrajencih.

Uvodne besede

V večini igralnic po Sloveniji potekajo animacijske nagradne igre. To so igre, ki potekajo v živo in jih vodi osebje igralnice. Za razliko od igralnih avtomatov pri teh igrah gostje ne stavijo denarja, ampak so tako rekoč brezplačne.

Ko je nagradna igra zaključena je na vrsti podelitev nagrad. Nagrade so seveda denarne, izplačane v gotovini ali igralnih lističih. Igralnica za to potrebuje dobro evidenco in obrazce, ki jih je potrebno podpisati in shraniti.

(igralnica1.png)
Simbolična slika vodenja nagradne igre. Vir: http://www.facebook.com/photo.php?fbid=314527555287850&set=a.314526831954589.73304.128388553901752&type=3&theater

Opis problema

Za tovrstne potrebe je nujno vspostaviti povezavo z bazo nagrajencev in podeljenih nagrad, nagradnih iger ter dobitkov. Poleg tega je seveda potrebna tudi aplikacija, ki bo omogočala delo z vsemi temi podatki.

Aplikacija mora nuditi:

  • Pregled nagrajencev in nagrad, ki so jih že prejeli
  • Dodajanje novih nagrajencev
  • Urejanje podatkov o nagrajencih
  • Vpis na novo dobljenih nagrad
  • Urejanje oziroma brisanje že podeljenih nagrad
  • Samodejno izpolnjevanje obrazcev, ki gredo v tisk
  • Pregled trenutno aktualnih nagradnih iger in njej pripadajočih nagrad
  • Dodajanje novih nagradnih iger in njenih dobitkov
  • Urejanje oziroma brisanje nagradnih iger in nagrad

Opis problema

Ker so podatki o gostih v igralnici in tudi o nagradah, ki so jih gostje prejeli zaupne narave, je nujno omejiti dostop do podatkov. V ta namen je v aplikacijo vključen tako imenovan »Login«, torej vpis uporabnika preden mu je dovoljeno pregledovanje in urejanje podatkov. Aplikacija dovoljuje dve vrsti uporabnikov. Prvi uporabniki so tisti, ki imajo popoln dostop do podatkov. To naj bi bili, na primer nadrejeni ali morda skrbniki podatkov. Uporabniki z omejenim dostopom, pa naj bi bili, na primer zaposleni v igralnici, torej voditelji nagradne igre.

Aplikacija tako nudi tudi:

  • Pregled vseh uporabnikov aplikacije
  • Urejanje in brisanje uporabnikov
  • Dodajanje novih uporabnikov
  • Urejanje gesla (prvotno geslo določi skrbnik (vodstvo), nadaljnje urejanje je dovoljeno le uporabniku)
(igralnica2.png)
Simbolična slika vodenja nagradne igre. Vir: http://www.facebook.com/photo.php?fbid=314527585287847&set=a.314526831954589.73304.128388553901752&type=3&theater

Login

Program je namenjen uporabi osebja in njihovih nadrejenih. Zaradi zaupne narave podatkov, nekateri podatki ne smejo biti vidni osebju. Zaradi pomembnosti podatkov, osebju ne sme biti omogočeno spreminjanje določenih podatkov.

Osebju mora biti omogočeno delo z uporabniškimi računi.

Ko se program zažene, je delo z njim onemogočeno, razen gumba za vpis in gumba za prekinitev aplikacije. Po kliku na gumb 'Vpiši se', se odpre modalno okno, ki od uporabnika zahteva vnos uporabniškega imena in gesla. Če uporabniško ime ali geslo ni pravilno, ali pa je bilo kakšno vnosno polje neizpolnjeno, je uporabnik obveščen o nepravilnem poskusu vstopa v program.

(zaslonska_vpis_uporabnika_opozorilo.png)
Opozorilo o napačnem poskusu vpisa uporabnika

Login

Pri pisanju gesla se zaradi zaupnosti gesla ne izpisujejo tipkani znaki, vendar zvezdice ('*'). Po opozorilu se geslo v vnosnem polju izbriše, uporabniško ime pa ostaja.

Na modalnem oknu za vpis uporabnika je tudi gumb, s katerim zapremo modalno okno.

(zaslonska_vpis_uporabnika-1.png)
Zaslonska slika modalnega okna za vpis uporabnika

Ob pravilnem vnosu uporabniškega imena in gesla se omogoči delo s programom. Dostop je omejen za uporabnike z 'delnim dostopom' in popolnoma omogočen za uporabnike s 'polnim dostopom'. Če vpis uporabnika ni bil uspešen, delo s podatki ostaja onemogočeno.

Poskusni uporabniški imeni in gesli sta:

  • polni dostop- uporabniško ime = sabinao, geslo = orazem
  • delni dostop- uporabniško ime = matijal, geslo = lokar

Poišči, popravi ali dodaj podatke o nagrajencu

Glavno okno ima tri zavihke. Prvi izmed teh, je zavihek, kjer je omogočeno delo s podatki o nagrajencu. Prvi, je ob predpostavki, da je s tovrstnimi podatki v igralnici največ dela.

V glavnem je razdeljen nekako na dva dela. Levo vpisujemo podatke, ki jih imamo na voljo, desno pa se izpisujejo nagrajenci, ki ustrezajo izpisu. Če je nagrajencev, ki ustrezajo danim podatkom več, se izpišejo vsi. Zaradi preglednosti se izpišejo le številke gosta, imena in priimki. Izpišejo pa se ne nagrade, saj mora biti za izpis le-teh, izbran le en nagrajenec.

(zaslonska_nagrajenci_prva_stran-1.png)
Zaslonska slika prvega zavihka

Iskanje nagrajenca

Za iskanje nagrajenca potrebujemo vsaj en njegov podatek. Na voljo je iskanje nagrajenca po številki gosta, imenu, priimku, davčni števili ali enotni matični številki občana. Vpišemo lahko tudi več podatkov, za natančnejše iskanje. Gostje so enolično določeni po številki gosta, zato se v primeru vpisa številke gosta, izpiše le en gost. Če je gostov, ki ustrezajo podanim podatkom več, potem se izpišejo vsi, ki ustrezajo iskanju. V tem primeru se ne izpišejo nagrade, ki jih je gost že prijel, prav tako se ne izpiše podatek o tem koliko nagrad je do zdaj že prejel. Za tovrstne podatke moramo izbrati smo enega nagrajenca.

Po kliku na gumb za izpis podatkov se podatki izpišejo na desni strani okna. Če je nagrajencev več, se pojavi tudi drsnik, s katerim lahko pregledamo vse izpisano.

Če nagrajenca z danimi podatki ni v evidenci nagrajencev, se izpiše ustrezno opozorilo, ki nas o tem obvesti.

Na desni strani okna se poleg polja, kjer se izpišejo nagrajenci, nahaja tudi gumb za izpis vseh nagrajencev, katerih podatke že imamo shranjene v bazi.

Izpis podatkov o nagrajencu

Na desni strani okna sta dva okvirčka za izpis. V višjem se izpisujejo podatki o nagrajencu, v spodnjem pa podatki o nagradah, ki jih je izbrani nagrajenec že prejel.

Če nagrajenec ni izbran, nas na to opozarja tudi izpis v teh dveh poljih.

(zaslonska_nagrajenci_izpis.png)

Podeljenih nagrad sicer ne moremo urejati, lahko pa jih brišemo. Izbrisane nagrade so označene z zaporednimi številkami. Za izbris določene podeljene nagrade, v vnosno polje pod izpisom, vpišemo zaporedno številko le-te, nato pa kliknemo na gumb za izbris, desno poleg.

Poprava podatkov o nagrajencu

Poprava podatkov je mogoča samo, ko je izbran nagrajenec. To pomeni, da mora biti v okvirčku desno izpisan en, in to samo en, nagrajenec.

Po kliku na gumb za popravo podatkov se odpre modalno okno. V oknu je več vnosnih polj. Vsa polja so že zapolnjena. Za lažje popravljanje podatkov so le-ti že izpisani, tako imamo pregled nad trenutnim stanjem v evidenci, hkrati pa popravimo le želene podatke.

Ko želimo evidenco posodobiti, kliknemo na gumb, ki shrani podatke. Vnosna polja ob posodobitvi ne smejo biti prazna. Če je kakšno vnosno polje prazno, o tem obvestimo uporabnika in od njega zahtevamo popolne podatke.

Da bi omogočili kar se da pravilen vnos v evidenco, ima uporabnik še nekaj omejitev pri vnosu. Uporabnik mora vnesti 8 mestno številko za davčno številko in 13 mestno številko za enotno matično številko. Datum rojstva mora biti oblike llll.mm.dd. Datum in EMŠO se morata ujemati, torej prvih 7 številk EMŠO more ustrezati datumu rojstva. Rezidentski status uporabnik lahko izbira le med danimi možnostmi, ki sta 'Rezident' in 'Nerezident'.

Poprava podatkov o nagrajencu

(zaslonska_nagrajenci_poprava.png)

Če je niz vpisan v vnosno polje obdan (pred ali za vnesenim podatkom) z enim ali več belih znakov, se le-ti izpustijo. Drugih omejitev pri vnosu ni.

Dodajanje podatkov o novem nagrajencu

Ko nagrajenec nagrado prejme prvič, je v evidenco potrebni zapisati vse njegove podatke.

Dodajanju novega nagrajenca je namenjeno zelo podobno okno kot pri popravljanju podatkov. Razlika je le v tem, da so vnosna polja še prazna. Uporabniku je delo olajšano le toliko, da je zapolnjeno že polje z državo v kateri nagrajenec domuje. Privzeta vrednost je Slovenija, ker večina gostov v igralnici živi v Republiki Sloveniji. Če gost prihaja iz druge države, se podatek le pobriše in vnese drugo ime države.

(zaslonska_nagrajenci_dodaj.png)

Podelitev nove nagrade - Izbira nagrajenca in nagrade

Za izbiro nagrajenca nujno potrebujemo številko gosta. Nagrajenci so v evidenci enolično določeni le po tem podatku. Po vnosu številke gosta in kliku na gumb 'Ok' se izpišejo podatki o nagrajencu. Podatke lahko uporabnik pregleda in popravi (popravlja jih lahko v prejšnjem zavihku). Če izbrani nagrajenec ni tisti, ki smo ga iskali, le zamenjamo številko gosta in še enkrat kliknemo na gumb 'OK'. Podatki o prej izbranem nagrajencu se bodo izbrisali, izpisali pa novi podatki.

(zaslonska_nova_nagrada_1.png)
Zaslonska slika podelitve nagrade- izbira nagrajenca

Podelitev nove nagrade - Izbira nagrajenca in nagrade

Nagradno igro in nagrado izbiramo v poljih na desni strani okna. Uporabnik mora najprej izbrati nagradno igro, šele neto lahko izbira tudi nagrado. To je zelo praktično, saj uporabniku izpišejo le igri pripadajoče nagrade. Tudi izbira datuma podelitve je olajšana. Datum ima privzeto vrednost, kar trenutni datum. Če pa, na primer, je bila nagrada podeljena že nekaj dni nazaj in potrebujemo le obrazec, ali pa smo jo pozabili shraniti, lahko datum poljubno spreminjamo. Datum je ustrezen, če je ene od oblik naštetih že pri zgornjem poglavju (Poprava podatkov o nagrajencu). Bruto in neto vrednost nagrade se izpiše samodejno po izbiri nagrade. Vse kar še preostane podatek o tem ali je bila nagrada že podeljena ali ne. Tudi tukaj je že dana izbira. Uporabnik lahko izbere le eno možnost.

(zaslonska_nova_nagrada_2.png)
Zaslonska slika podelitve nagrade- izbira nagrade

Podelitev nove nagrade - Shrani/ pobriši nagrado

  • Shrani nagrado

Ob kliku ga gumbn za shranitev podeljene nagrade se podatki o podelitvi shranijo v evidenco.

  • Izbriši podeljeno nagrado

Zavihek žal ne omogoča urejanje nagrade. Podeljeno nagrado pa lahko izbrišemo v zavihku za urejanje nagrajenca

Podelitev nove nagrade - Natisni obrazec

S klikom na gumb se podatki, ki jih je uporabnik vnesel prepišejo v tekstovno datoteko. Odpre se pogovorno okno, ki omogoča tiskanje obrazca.

Če uporabnik ni izpolnil vseh potrebnih podatkov, je o tem obveščen. V obrazec se podatki ne prepišejo, prav tako ni omogočeno tiskanje.

(obrazec_neizpolnjen.png)
Primer neizpolnjenega obrazca za prevzem nagrade

Podelitev nove nagrade - Natisni obrazec

(obrazec_izpolnjen.png)
Primer izpolnjenega obrazca za prevzem nagrade

Podelitev nove nagrade - Natisni obrazec

Podobno velja za obrazec 'Zlati list'.

(zlati_list_neizpolnjen.png)
Primer neizpolnjenega Zlatega Lista

Podelitev nove nagrade - Natisni obrazec

(zlati_list_izpolnjen.png)
Primer izpolnjenega Zlatega Lista

Pregled in poprava nagradnih iger in pripadajočih nagrad

Zavihek omogoča delo z nagradnimi igrami in nagradami. Delo s tem zavihkom je omogočeno le uporabnikom s polnim dostopom do aplikacije. V praksi naj bi to pomenilo, da lahko do podatkov o nagradnih igrah dostopajo le nadrejeni.

Pregled nagradnih iger

Levo zgoraj v zavihku lahko izbiramo med nagradnimi igrami, ki so trenutno aktualne. Ko igro izberemo, se na desni strani zavihka izpišejo podatki o igri in dobitkih, ki jih je v sklopu le-te mogoče dobiti.

(zaslonska_igre_izpis.png)

Urejanje podatkov o nagradnih igrah

Urejanje nagradne igre je mogoče le tako, da izbrano igro popolnoma izbrišemo in jo nato ponovno dodamo v evidenco. Gumb za brisanje igre je omogočen, če je izbrana igra.

Dodajanje nove nagradne igre

Za dodajanje nove nagradne igre se odpre modalno okno. Tukaj v vnosna polja vpišemo potrebne podatke. Za vnos igre morajo biti izpolnjena vsa polja. Vpis imen igre in nagrad ni omejen, omejeni pa smo pri vnosu datuma in dobitnega zneska. Datum mora biti v eni izmed oblik, ki so že naštete zgoraj v odstavku, ki opisuje popravo podatkov o nagrajencu.

(zaslonska_igre_dodaj.png)

Urejanje uporabnikov aplikacije

Za urejanje uporabnikov mora uporabnik imeti polni dostop v aplikaciji. Mišljeno je, da bi dostop do urejanja uporabnikov imeli le nadrejeni oziroma skrbnik evidence. To omogoča varnost dela s podatki.

Pregled vseh uporabnikov aplikacije

S klikom na gumb za izpis uporabnikov se izpišejo vsi, ki imajo trenutno dovoljenje za uporabo aplikacije. Izpišejo se le uporabniška imena in identifikacijske številke.

V izpisanem seznamu lahko izbiramo uporabnike. Po kliku nanj se uporabnik označi, po dvojnem kliku pa se njegovi podatki izpišejo še v zavihku desno. Izpis je tokrat bolj podroben in v vpogled nudi vse shranjene podatke o uporabniku.

Šele po izbiri uporabnika se omogočita gumba za urejanje.

(zaslonska_uporabniki_izpis.png)
Zaslonska slika pregleda uporabnikov aplikacije

Urejanje uporabnika

Ob kliku na gumb za izbris uporabnika se pobrišejo vsi podatki o izbranem uporabniku.

Ob kliku na gumb za urejanje uporabnika pa na mestih, kjer so bili prej podatki izpisani, pojavijo vnosna polja, kjer lahko uporabnika uredimo. Spreminjati ne moremo identifikacijske številke uporabnika, saj ga le-ta enolično določa. Prav tako ne moremo spremeniti gesla uporabnika, saj ima dovoljenje za to le on sam. Pred klikom na gumb, ki shrani posodobitve, morajo biti zapolnjena vsa vnosna polja in izbran način dostopa.

Omejitev za vnos uporabniškega imena in gesla ni. Če polja niso zapolnjena, je uporabnik o tem obveščen. Obvestilo se izpiše tudi ob uspešni posodobitvi. Po kliku na gumb 'Shrani posodobitve', se vnosna polja onemogočijo in prikrijejo, prav tako gumb, prikažeta pa se ponovno gumba, ki nudita možnost urejanja podatkov.

(zaslonska_uporabniki_urejanje.png)
Zaslonska slika urejanja podatkov o uporabniku aplikacije

Dodajanje uporabnika aplikacije

Novega uporabnika aplikacije dodamo na dnu zavihka. Zapolniti moramo obe vnosni polji ter izbrati dostop do aplikacije. S klikom na gumb pa se uporabnik shrani in že je, tudi s tem uporabniškim imenom in geslom, omogočeno delo z aplikacijo.

(zaslonska_uporabniki_nov.png)
Zaslonska slika dodajanja novega uporabnika aplikacije

Nadrejen,i oziroma skrbnik, uporabniku določi le prvotno geslo.Nato naj si uporabnik geslo čim prej spremeni.

Po uspešni posodobitvi se vnosna polja samodejno pobrišejo, nov uporabnik pa se že prikaže na seznamu vseh uporabnikov.

Filmček o uporabi aplikacije

Uporaba jezika C# in Visual Studio

Na naslednjih prosojnicah so predstavljeni oprijemi pri sestavljanju aplikacije v jeziku C# in programu Visual Studio.

Predstavljeno je:

  • uporaba modalnega okna
  • najpogoteje uporabljene metode
  • uporabljeni gradniki
  • najpogosteje uporabljene lastnosti gradnikov
  • povezava z bazo (PostgreSQL)
  • SQL Injection

Modalno okno

Za izdelavo uporabniškega vmesnika, potrebujemo obrazec (okno) ali Form, kot ga poimenuje Visual Studio. Le-temu nato dodajamo gumbe, vnosna poja, menuje,... in ostale gradnike.

Kaj pa, ko želimo več obrazcev oziroma oken? Tu nastopijo tako imenovana modalna okna.

Poznamo dve vrsti obrazcev (Form):

  • nemodalna okna
  • pogovorna okna oziroma dialogi

Obrazca sta pravzaprav istega tipa, le odpiramo ju na drugačen način.

Nemodalno okno:

  • odpremo jih z metodo Show
  • obrazec uporabniku dovoljuje nadeljevanje dela v drugem istočano odprtem obrazcu, ne da bi obrazec prej zaprl
  • uporabnik se lahko kadarkoli vrne v to odprto okno

Modalno okno:

  • odpremo ga z metodo ShowDialog
  • tovrsten obrazec prikažemo uporabniku, ko mu želimo ponuditi določene vnose ali pa uporabnika vprašamo po njegovi odločitvi
  • uporabimo ga, ko nadaljevanje programa ni smiselno, dokler uporabnik ne vpiše vnosa ali se kako drugače odzove na modalni obrazec
  • modalno okno ne dovoljuje sočasno uporabo z ostalimi okni v aplikaciji, vse dokler je le-ta odprt (focus je na modalnem oknu)
  • ko uporabnik obrazec zapre, le-ta vrne vrednost na osnovi katere poteka nadaljnje izvajanje aplikacije

Pri obeh obrazcih, obrazec najprej pripravimo(ga ustvariti, nanj postaviti ustrezne gradnike,…), razlikujeta pa se v načinu odpiranja.

Kako ustvarimo novo modalno okno?

Najprej ustvarimo nov obrazec. To storimo tako, da v zgorjem meniju izberemo obcije: Project --> Add Windows Form... --> Windows Form (spodaj določimo ime modalnega okna) --> Add

(modalno_1.png)
Ustvarjanje novega okna

Kako ustvarimo novo modalno okno?

Odpre se okno, kjer projektu dodamo novo okno.

Tukaj določimo ime novega obrazca.

(modalno_2.png)
Zaporedje ukazov pri ustvarjanju novega okna

Kako ustvarimo novo modalno okno?

Na obrazec nato postavljamo gradnike in pišemo odzivne metode tako kot pri osnovnem obrazcu. Na koncu obrazec shranimo.

(modalno_3.png)
Primer kode: ukaz, ki odpre modalno okno

Kako ustvarimo novo modalno okno?

Primer kode:

Modalno_okno modalno = new Modalno_okno();
modalno.ShowDialog();

Modalnemu oknu določimo nadrejeno okno, tako, da v kodo modalnega okna dodamo metodo public Form1 mainform, v kodi glavnema okna pa pri odpiranju modalnega okna določimo, katero je nadrejeno okno z metodo modalno.mainform = this.

Ob zagonu programa se odpre le prvi obrazec. Odpiranje drugih obrazcev, tako nemodalnih kot tudi modalnih, je potrebno zagotoviti programsko, s kodo.

(modalno_izgled.png)
Prikaz modalnega okna nad osnovnim oknom

Kako zapremo okno?

Obrazec (nemodalni, kot tudi modalni) lahko zapremo na dva načina:

  • s pomočjo sistemskega gumba v zgornjem desnem delu okna (pri tem modalni obrazec vrne takšno vrednost, kot če bi kliknili na modalni gumb)
  • z metodo Close (pri neki odzivni metodi). Pri modalnem obrazcu s pomočjo modalnega gumba. Modalni gumb je gumb, ki ima nastavljeno lastnost DialogResult. Lastnost DialogResult vrača podatek o tem kako smo okno zaprli.

POZOR! Ko obrazec zapremo se ne uniči in še kar zaseda prostor v pomnilniku (seveda le dokler se ne konča blok, v katerem je bil odprt oz. kreiran z operatorjem new ). Programsko obrazec uničimo in sprostimo pomnilnik z metodo Dispose.

Ko obrazca ne želimo zapreti ali uničiti, ampak le začasno skriti, lahko uporabimo metodo Hide. Kasneje lahko obrazec ponovno prikažemo z metodo Show.

Modalni obrazci pri zapiranju vračajo podatek o tem, kako jih je uporabnik zaprli.

Zapiranje okenca je včasih nenamerno. Morda smo pozabili shraniti podatke in ko bi okno zaprli, bi bili podatki izgubljeni.

Ko želi uporabnik zapreti obrazec, v njem pa so ostali neshranjeni podatki, ga na to opozorimo. Aplikacija je zasnovana tako, da se po vsaki posodobitvi podatkov, vnosi v vnosnih poljih pobrišejo. Torej, če želi uporabnik zapreti obrazec, v vnosnih poljih pa ostajajo podatki, sklepam, da uporabnnik z delom še ni zakjučil.

Odpre se modalno okno, ki uporabnika povpraša o njegovi resnični nameri, ali je zares želel prekiniti delo? Na tem koraku lahko uporabnik izbira, ali z delom prekine (neshranjeni podatki so izgubljeni) ali nadaljuje (vpisani podatki ostajajo nespremenjeni).

Primer kode:

DialogResult odgovor = MessageBox.Show("Vnešeni so podatki, ki jih niste shranili. Ali želite vseeno zaključiti z delom?",
                       "Potrditev zaključka z delom", MessageBoxButtons.YesNo, MessageBoxIcon.Warning,
                       MessageBoxDefaultButton.Button2);
                if (odgovor == DialogResult.Yes) // če uporabnik želi zaključiti z delom, čeprav podatki še niso shranjeni
                {
                    this.Close(); // zapremo modalno okno
                }
(zapri.png)
Opozorilo, ko uporbnik želi zapreti okno, podatke pa pred tem ni shranil

Opozorila / obvestila (MessageBox)

Sporočilno oknoMessageBox je namenjeno posredovanju sporočil ali uporabnikovim odločitvam.

MessageBox je razred, metoda Show pa statična metoda tipa DialogResult. Vrednost, ki jo metoda Show vrne je tipa DialogResult, odvisna od uporabnikovega klika na izbrani gumb. Od le-te vrednosti pa je odvisno nadaljevanje programa, za kar poskrbimo z kodo. Vrednosti tipa DialogResult je sedem.

V nalogi so uporabljene vrednosti:

  • Yes (Da)
  • No (Ne)
  • OK (V redu)

V nalogi ga uporabim v dva namena:

  • ko želim uporabnika o nečem obvestiti, na primer o uspešni posodobitvi podatkov...
  • ko želim uporabnika opozoriti na primer na napačen ali pomankljiv vnos podatkov, ali pa, da podatkov, ki jih želi, v bazi ni...

Prikažemo ga s pomočjo metode Show.

Obstaja kar 21 različnih načinov (preobtežitev) uporabe te metode.

V nalogi sem uporabila naslednje:

MessageBox.Show (string, string, MessageBoxButtons, MessageBoxIcon)

Sporočilno okno s tekstom v oknu, napisom na oknu, odločitvenimi gumbi in ikono v oknu.

Prva dva parametra sta dva niza (tipa String) in sicer napis v oknu in na oknu.

Tretji parameter je tipa MessageBoxButtons in določa število in vrsto gumbov, ki se bodo prikazali v sporočilnem oknu. MessageBoxButtons ima šest možnih konstant.

V nalogi uporabljena:

  • MessageBoxButtons.OK --> sporočilno okno vsebuje gumb OK ('V redu')
  • MessageBoxButtons.YesNo --> sporočilno okno vsebuje dva gumba Yes (Da) in No (Ne)

Opozorila / obvestila (MessageBox)

Četrti parameter (tipa MessageBoxIcon) je ena od vnaprej pripravljenih ikon (vprašaj, klicaj, napaka, opozorilo). To je naštevni tip s konstantami (vseh možnih konstant je devet), ki določajo katera ikona se bo prikazala v sporočilnem oknu.

V nalogi uporabljena:

  • MessageBoxIcon.Information --> sporočilno okno vsebuje grafični simbol z malo črko i (informacija)
  • MessageBoxIcon.Warning --> sporočilno okno vsebuje grafični simbol z znakom ! (opozorilo)

Kadar sem v nalogi pri sporočilnem oknu uporabila več kot le en gumb, sem vnaprej določila privzeti gumb (peti parameter tipa MessageBoxDefaultButton). To pomeni, da je izbrani gumb že v naprej označen (aktiviran), torej tudi po kliku na gumb enter, se sproži le-ta.

MessageBox.Show (string, string, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)

Primer uporabe iz naloge:

MessageBox.Show("Naslednje strani imajo vnešene podatke, ki jih niste shranili: " + strani + ". Ali želite vseeno zaključiti z
 delom?", "Potrditev zaključka z delom", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);

Opozorila / obvestila (MessageBox)

Primeri uporabe iz naloge:

  • informativno sporočilo z enim gumbom

    MessageBox.Show("Geslo je bilo spremenjeno.", "Spremenjeno geslo", MessageBoxButtons.OK, MessageBoxIcon.Information);
(./opozorilo_primer_1.png)
Informativno sporočilno okno z gumbom OK
  • opozorilno sporočilo z enim gumbom

    MessageBox.Show("Novi gesli se ne ujemata.", " Nepravilen vnos ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
(opozorilo_primer_2.png)
Opozorilno sporočilno okno z gumbom OK
  • sporočilo z vprašanjem

    DialogResult odgovor = MessageBox.Show("Vnešeni so podatki, ki jih niste shranili. Ali želite vseeno zaključiti
                           z delom?", "Potrditev zaključka z delom", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                           MessageBoxDefaultButton.Button1);
                    if (odgovor == DialogResult.Yes)
                    // če uporabnik želi zaključiti z delom, četudi podatki niso shranjeni
                    {
                        this.Close(); // zapremo modalno okno
                    }
                }
                else { this.Close(); } // zapremo modalno okno
(./opozorilo_primer_3.png)
Sporočilno okno, ki pričakuje nek odziv uporabnika z gumbom OK

TextBox, RichTextBox (vnosno polje)

TextBox

V TextBox-u lahko izpišemo neoblikovano bsesedilo ali besedilo le z nekaj oblikovanja, na primer Bold, Italic in Underline oblika pisave. Pisavi lahko določimo tudi barvo.

Vso besedilo v TextBoxu je enako oblikovano.

RichTextBox

RichTextBox nam omogoča različno oblikovanje posameznih delov besedila. Tako lahko na primer del besedila zapišemo v rdeči barvi drugi del pa v črni.

Poleg barve in stila pisave, lahko določimo tudi ozadje besedila. RichTextBox omogoča tudi delo s tabelami.

Dober primer TextBox-a je Notepad, RichTextBox-a pa Wordpad.

Nekaj metod

Iz vnosnega polja preberemo besedilo z metodo .Text. Podobno v vnosno polje tudi vpišemo željeno besedilo.

Primer uporabe:

  • vnosno_polje.Text = "niz"; --> v vnosno polje zapišemo besedilo "niz"
  • string niz = vnosno_polje.Text; --> besedilo iz vnosnega polja shranimo v niz 'niz'

Če uporabnik v vnosno polje, pred besedilo ali za njim, vnese tudi bele znake, jih odvzamemo z metodo .Trim().

Znake, ki jih uporabnik vnaša lahko tudi prikrijemo. To bi na primer želeli, če se vnaša geslo ali kakšno drugo besedilo, ki je zaupne narave. v ta namen uporabimo metodo .PasswordChar.

Primer uporabe:

  • vnosno_polje.PasswordChar = '*'; --> podamo znak, ki naj se izpisuje namesto vnešenih znakov

ListBox in ComboBox

ListBox

ListBox je nekakšen seznam nizov. V tem seznamu lahko niz izbiramo, tako, da nanj kliknemo z miško. V nalogi se odziv na dogodek sproži ko z levo miškino tipko dvakrat zaporednoma kliknemo nad izbranim elementom.

(ListBox.png)
Primer ListBox-a

Niz, ki ga je uporabnik v ListBox-u izbral, poizvemo z metodo.SelectedItem.

Metoda .Items.RemoveAt(i) odstrani i-ti element v ListBox-u (i je celo število).

Primer uporabe:

  • ListBox.SelectedItem.ToString(); --> izbrani element ListBox-a pretvorimo v niz
  • ListBox.Items.RemoveAt(i);

ComboBox

Tukaj uporabniku podamo nekaj izbir. Ko uporabnik klikne (enojni levi klik miške) na željeno, se izvede odziv na nek dogodek.

(ComboBox.png)
Primer ComboBox-a
  • ComboBox.Items.Add(niz); --> v ComboBox dodamo element (niz)
  • ComboBox.Items.Clear(); --> počistimo celotem izbor v ComboBox-u
  • ComboBox.SelectedIndex = i; --> izberemo i-ti element v ComboBox-u (i je celo število)

Button in RadioButton

Button

Ob dogodku, na primer klik na gumb, se izvede odziv na določeno metodo. Klik na gumb lahko izvedemo tudi programsko preko kode, in sicer, z metodo .PerformClick().

RadioButton

To so nekakšni krogci, ki jih uporabnik izbere. Obkljukan krogec pomeni, da se bo ob nekem dogodku izvedla metoda, ki je določena s tem "krogcom". Uporabnik lahko obkljuka le en krogec, znotraj definirane skupine objektov.

Primer uporabe:

  • if (RadioButton.Checked) --> preverimo ali je krogec izbran
  • RadioButton.Checked = true; --> določimo, da je krogec že izbran
(RadioButton.png)
Primer RadioButton

Lastnosti objekt.Enabled in objekt.Visible

S pojmom lastnost označujemo nastavitev, ki nam pove nekaj o gradniku.

Lastnosti spreminjamo (določamo) tako, da na obrazcu izberemo ustrezen gradnik in v oknu Properties spremenimo (nastavimo) poljubno lastnost. Spremembe v datoteki . designer.cs opravi razvojno okolje samo.

Lastnosti lahko določamo tudi med samim delovanjem aplikacije s pomočjo programske kode.

Lastnosti določamo vrednost ali true ali false. V nalogi sta uporabljeni za omejevanje dostopa do podatkov in urejanje le-teh.

objekt.Enabled

Če je vrednost lastnosti .Enabled, false, potem objekt ni omogočen. Kar v praksi pomeni, da je objekt v oknu slabše viden in ga ne moremo uporabiti, torej se ne more izvesti funkcija povezana s tem objektom.

Obratno deluje vrednosttrue. Tokrat je objekt omogočen in ga lahko uporabimo, na primer s klikom nanj.

Primer uporabe:

  • gumb.Enabled = false; --> gumb je onemogočen
  • vnosno_polje.Enabled = true; --> vnosno polje je omogočeno

objekt.Visible

Lastnost določa vidnost objekta.

Če je vrednost lastnosti false, objekta v oknu ne vidimo. Obratno velja pri true, kjer je objekt v oknu viden.

Če je objekt neviden ni pa tudi onemogočen, kot se sprva zdi. Klik na obrazec, kjer naj bi gradnik ležal, sicer odziva na dogodek ne bo sprožil. A pozor, ker gradnik ni onemogočen, dogodek povezan z gradnikom še vedno lahko sprožimo programsko.

Primer uporabe:

  • gumb.Visible = false; --> gumb v oknu ni viden
  • vnosno_polje.visible = true; --> vnosno polje je v oknu vidno

List<>

List<> je v programskem jeziku C# tabela, ki se samodejno povečuje oziroma zmanjšuje.

to je generični razred, zato ob inicializaciji povemo kaj bomo v tabeli hranili.

Na primer:

  • List<string>
  • List<int>
  • List<bool>

V nalogi sem List<> uporabila za shranjevanje tekočih podatkov. Na primer za shranjevanje podatkov o nagrajencu, možnih nagradnih iger ali nagrad,...

Kako definiramo nov List<>, ki hrani le podatke v obliki niza (string):

  • List<string> seznam = new List<string>();

Dodajanje elementvo v List<>:

  • seznam.Add(element, ki ga dodajamo);

Počistimo List<>:

  • seznam.Clear();

Preštejemo elemente List<>-a. Metoda .Lenght tukaj ne deluje.

  • seznam.Count();

Povezava z bazo

Osnova aplikacije, ki dela z bazo podatkov, je priklop (connect) na bazo. V Visual Studiu lahko priklop na bazo in prikaz vsebine poljubne tabele ali več tabel iz baze realiziramo s pomočjo čarovnika, ali programsko (pri izdelavi bolj kompleksnih aplikacij nam uporaba čarovnika v večini primerov ne zadošča).

Baza s sistemom PostgreSQL

Pri programskem dostopu do baze podatkov potrebujemo dostop do razredov, ki tak dostop omogočajo. Ti razredi se nahajajo v imenskem prostoru Npgsql, ki ga dodamo v naš projekt.

Datoteko Npgsql.dll si lahko brezplačno naložimo na svoj računalnik (na primer s spletne strani originaldll.com ), nato pa pri projektu v Visual Studio le dodamo referenco na to datoteko.

Primer:

using Npgsql;

Povezava z bazo

Najprej deklarirajmo nov objekt NpgsqlConnection.

NpgsqlConnection je podrazed, ki je namenjen povezavam z bazami podatkov tipa PostgreSQL Server.

Z metodo new NpgsqlConnection določimo povezavo do podatkovnega vira. Podamo niz, ki vsebuje podatke o tem kje je podatkovni vir in kako se do njega dostopa.

V našem primeru je niz za povezavo

"Server=baza.fmf.uni-lj.si; User Id=student11; Password=student; Database=SabinaOrazemSN"

Podatkovni vir je spletni strežnik.

Povezavo odpremo z metodo .Open().

Metoda NpgsqlCommand je kazalec. V terminologiji baz podatkov prostor v pomnilniku, ki vsebuje podatke, ki jih dobimo iz tabel v bazi. Za parametra podamo niz, ki predstavlja SQL ukaz in pa ime spremenljivke, ki določa povezavo do baze.

Ukaz .ExecuteReader() vrača tabelo podatkov, ki jih dobimo z SQL poizvedbo. S tem ukazom lahko podatke iz baze le beremo. Za izvajanje drugih SQL ukazov, kot so INSERT, DELETE, UPDATE,..., pa uporabimo ukaz .ExecuteNonQuery, ki izvede dani SQL stavek nad bazo.

Primer zaporedja ukazov:

NpgsqlConnection povezava = new NpgsqlConnection(baza_niz);
povezava.Open();
NpgsqlCommand kazalec = new NpgsqlCommand(poizvedba_niz, povezava);
NpgsqlDataReader beri = kazalec.ExecuteReader();
kazalec.Close();
povezava.Close();

Povezava z bazo

Z lastnostjo .HasRowspreverimo ali ima prebrana tabela vsaj eno vrstico. Preko te lastnosti lahko ugotovimo/preverimo ali v bazi sploh so podatki, ki ustrezajo poizvedbi. Lastnost ima lahko vrednost true ali false.

Primer uporabe:

  • if (beri.HasRows)

Če poizvedba vrača vsaj eno vrstico uporabimo metodo .Read, za branje tabele.

Če poskušamo brati prazno tabelo, pride do napake. Zato predhodno preverimo ali ima tabela vsaj eno vrstico. Če uporabimo zanko while, ni pomembno ali je tabela prazna. Če podatkov ni, se program v zanko ne spusti.

(napaka_branje.png)
Primer napake pri poskusu branja prazne tabele

SQL Injection (napad)

SQL napad (SQL injection attack ali SQLIA) je tehnika, ki se uporablja za napad nad zbirko podatkov, ki so dostopni preko aplikacije (baza podatkov). Gre za vrivanje in izvajanje SQL ukazov, na primer preko vnosnih polj v aplikaciji.

Gre za izkoriščanje varnostne ranljivosti v programski opremi neke aplikacije. Program je ranljiv, ko uporabnikov vnos ni filtriran. SQL napada je najbolj znan kot napad na spleten strani, vendar se lahko uporablja kot napad na vse SQL baze.

Primer:

Pri vpisu uporabnika sem uporabila naslednjo poizvedbo:

select * from login where uporabnisko_ime = '" + vnos_up_ime.Text.Trim() + "' and geslo ='" + vnos_geslo.Text.Trim() + "'"
  • vpišemo se lahko z veljavnim uporabniškim imenom in ustreznim geslom, ali pa z veljavni uporabniškim imenom, namesto gesla pa v vnosno polje zapišemo " t' or't'='t ". Na primer uporabniško ime "sabinao" in geslo "t' or 't'='t".

Originalnemu stavku smo vrinili "t' or 't' = 't". Ker je ta vedno veljaven (t = t vedno velja), nas aplikacija prijavi kot uporabnika z danim uporabniškim imenom, če le-ta seveda obstaja. Napadalec lahko z ugibanjem ugotavlja polja oziroma atribute in imena tabel v zbirki podatkov SQL.

  • vpišemo se lahko tudi tako, da vpišemo veljavno uporabniško ime takoj za njim pa še " ' -- ". Na primer uporabniško ime "sabinao' --". Gesla pač ne potrebujemo.

Vrinili smo "--" in ker v jeziku SQL velja, da se vse, kar je za nizom -- ignorira, je tudi tako mogoče pridobiti dostop samo ob pomoči pravilno ugotovljenega uporabniškega imena.

  • S podpičjem lahko uporabnik ukazu doda celoten ukaz SQL in tako izvede poljubne operacije.

SQL Injection (napad)

Za preprečitev SQL Injection v programu ni poskrbljeno.

Da bi preprečila tovrsten napad, bi morala uporabljati eno od sintaks, ki preprečuje vrivanje SQL ukaza, na primer:

 NpgsqlCommand  ukaz = povezava.CreateCommand();
 ukaz.CommandText = "select * from login where uporabnisko_ime = @up_ime and geslo = @geslo";
 ukaz.Parameters.AddWithValue("@up_ime", vnos_up_ime.Text.Trim());
 ukaz.Parameters.AddWithValue("@geslo", vnos_geslo.Text.Trim());

Namesto:

NpgsqlCommand ukaz = new NpgsqlCommand("select * from login where uporabnisko_ime = '" + vnos_up_ime.Text.Trim() + "'
 and geslo ='" + vnos_geslo.Text.Trim() + "'", povezava);

Povzetek

Aplikacija je namenjena igralnicam, ki gostom nudijo tudi brezplačne igre, ki niso vezane na igralne avtomate ali rulete.

Aplikacija nudi pregled in urejanje nagrajencev, pregled in urejanje nagradnih igre ter nagrad.

Kaj gradivo nudi bralcu:

  • primer pristopa k reševanju podobnega problema
  • opis nekaterih metod, ki so pogosto uporabljene pri sestavljanju tovrstnih aplikacij
0%
0%