Meeskond Taksobaas: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 86: Line 86:
= Lõpptoode =
= Lõpptoode =
== Failid ==
== Failid ==
* Rakendus(release):
* Rakendus(release): [http://enos.itcollege.ee/~mkirillo/Taksobaas1.2%20Final/Release%20-%20Taksobaas.rar]
* Rakendus(kood):
* Rakendus(kood):[http://enos.itcollege.ee/~mkirillo/Taksobaas1.2%20Final/Kood%20-%20Taksobaas.rar]
* Kasutusjuhend : [http://enos.itcollege.ee/~mkirillo/Taksobaas1.2%20Final/Manual%20-%20Taksobaas.pdf]
* Kasutusjuhend : [http://enos.itcollege.ee/~mkirillo/Taksobaas1.2%20Final/Manual%20-%20Taksobaas.pdf]
* Lahenduse kirjeldus:
* Lahenduse kirjeldus: [http://enos.itcollege.ee/~mkirillo/Taksobaas1.2%20Final/Lahenduse%20kirjeldus%20-%20Taksobaas.pdf]
== Kasutusjuhend ==
== Kasutusjuhend ==
*Sissejuhatus<br>
*Sissejuhatus<br>
Line 117: Line 117:


== Lahenduse kirjeldus ==
== Lahenduse kirjeldus ==
*Mudelid<br>
'''Andmete kuvamine'''<br>
Andmete kuvamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd, selleks, et sisulehel vastavaid andmeid kuvada. Lisaks tehakse ka üks tühi konstruktor, mille kaudu saab vastavate väljade poole pöörududa.<br>
'''Blokeerimine'''<br>
Blokeerimise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd ning konstruktor, mis võtab endaga kaasa kaks parameetrit – kasutajanime ja blokeerimise aja. Konstruktoris väärtustatakse privaatsed väljad objektile kaasta antud väärtusetga, selleks, et neid meetodis blokeeri kasutada. Blokeerimise meetodis tekitatakse ajutine ühendus andmebaasiga ning saadetakse sinna päring. Päringus pöörudutakse andmebaasis oleva tabeli Kasutajad poole ning küsitakse sealt üks kasutaja, mille kasutajanimi on võrdne konstrukorile kaasa antud kasutajanimega. Kui see kasutaja baasis eksisteerib, siis määratakse kasutaja blokeeritud kuni väljale aeg, mis eelnevalt konstruktorile kaasa anti.<br>
'''Globaalmiuutujad'''<br>
Globaalmuutujate klassis defineeritakse ära need muutujad, millele on vaja ligi pääseda mitmetes erinevates klassides ja meetodites.
Kasutaja kuvamine
Kasutajate kuvamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd, selleks, et kasutajate haldamise lehel vastavaid andmeid kuvada. Lisaks tehakse ka üks tühi konstruktor, mille kaudu saab vastavate väljade poole pöörududa.<br>
'''Krüpteerimine'''<br>
Krüpteerimise mudelis on meetod, mis võtab sisendiks sõne kujul parooli ning krüpteerib sõne, kasutades MD5 tüüpi krüpteerimismeetodit ja tagastab selle.<br>
'''Logi'''<br>
Logi pidamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd ning konstruktor, mis võtab endaga kaasa kaks parameetrit – kasutajanime ja tegevuse. Konstruktoris väärtustatakse privaatsed väljad objektile kaasta antud väärtusetga, selleks, et neid meetodis blokeeri kasutada. Meetodis pea logi tehakse ajutine ühendus andmebaasiga. Kõigepealt kontrollitakse, kas kasutaja on sisse loginud või on tegemist registreerimata kasutajaga. Seejärel tehakse andmebaasi tabelisse Logi uus sisestus, kus määratakse kasutajanimi, konstruktorile kaasa antud tegevus ja aeg, millal tegevus tehti. Seejärel lisatakse sisestus andmebaasi.<br>
'''Logi kuvamine'''<br>
Log kuvamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd, selleks, et logi lehel vastavaid andmeid kuvada. Lisaks tehakse ka üks tühi konstruktor, mille kaudu saab vastavate väljade poole pöörududa.<br>
'''Login'''<br>
Logi pidamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd ning konstruktor, mis võtab endaga kaasa kaks parameetrit – kasutajanime ja parooli. Konstruktoris väärtustatakse privaatsed väljad objektile kaasa antud väärtusetga, selleks, et neid järgnevates meetodites kasutada.
Meetodis kasutajaLogin tekitaktakse ajutine andmebaasiühendus, mille käigus tehakse kaks päringut. Esimene teeb päringu selleks, et saada andmebaasist vaste kaasa antud kasutajanime ja parooli jaoks. Teine teeb päringu selleks, et võtta nende samade andmete blokeeritud kuni väljalt väärtus. Seejärel kontrollitakse, kas päringud olid tühjad või mitte ning kas blokeeritud kuni väärtus on suurem või väiksem kui aeg sel hetkel ja tehakse otsus, kas lasta kasutajal sisse logida või anda veateade.
Meetodis kasutajaTüüp määratakse ära, kas kasutaja on admin, tavakasutaja või registreerimata kasutaja. Tehakse ajutine andmebaasiühendus ning päring, milles pöördutakse eelnevalt antud kasutajanime poole tabelis Kasutajad ja valitakse sealt välja kastuaja õigus väärtus ning see omistatakse globaalsele muutujale kastutajatüüp. Kasutaja tüübi muutujat kasutatakse järgnevalt kõigis vaadetes selleks, et ära tunda, mis tüüpi kasutajaga tegemist on ja, mida talle kuvada.<br>
*Vaatemudelid<br>
'''Kasutajate haldus'''<br>
Kasutajate halduse vaatemudelis tehakse üks privaatväli, milleks on  mudeli kasutajakuvamine tüüpi objektide kollektsioon. Seejärel tehakse sellele property ning konstruktor, milles tekitatakse uus kollektsioon. Meetodis laeKasutajad tekitatakse ajutine ühendus andmebaasiga ning tehakse päring andmebaasi. Päringus küsitakse andmebaasi tabelist Kasutajad kõik andmed veerust kasutaja ning seejärel käiakse need ükshaaval läbi tehakse iga kord uus kasutajakuvamine objekt, määratakse selle objekti väljale kasutajanimi väärtus ning lisatakse see objekt kasutajakuvamine tüüpi kollektsiooni.<br>
'''Logi vaatamine'''<br>
Logi vaatamise vaatemudelis tehakse üks privaatväli, milleks on  mudeli logiuvamine tüüpi objektide kollektsioon. Seejärel tehakse sellele property ning konstruktor, milles tekitatakse uus kollektsioon. Meetodis laeLogi tekitatakse ajutine ühendus andmebaasiga, mille käis tehakse andmebaasi tabelisse Logi päring. Päringus küsitakse kogu tabeli sisu ajalises kahanevas järjekorras. Seejärel käiakse läbi kogu päringu tulemusena saadud kolletsioon, kus iga sissekande kohta tehakse uus logikuvamine tüüpi objekt, mille väljad väärtustatakse andmebaasist saadud väärtustega ning seejärel listatakse tehtud objekt logikuvamine tüüpi objektide kollektsiooni.<br>
'''Sisu'''<br>
Sisu vaatemudelis tehakse üks privaatväli, milleks on  mudeli andmetekuvamine tüüpi objektide kollektsioon. Seejärel tehakse sellele property ning konstruktor, milles tekitatakse uus kollektsioon.
Meetodis laeAndmed tehakse ajutine andmebaasiühendus ning päritakse tabelist Andmed kõik väljad. Tulemuseks saadud kollektsioon käitakse foreach tsükkliga läbi ning iga tabelis Andmed oleva rea kohta tehakse üks uus AndmeteKuvamine tüüpi objekt ja väärtustatakse selle väljad tabelist saadud väärtustega. Tehakse ka kontroll kas litsents on kehtv või kehtetu. Seejärel lisatakse objektid avakuvaandmete kollektsiooni.
Meetodile järjestaAndmed antakse kaasa sõne, mis määrab ära, millise veeru järgi Sisu lehe sisu järjestatakse. Vastavalt saadud sõnele tehakse järjestuse tingimusega päring andmebaasi ja edasi toimitakse täpselt sama moodi nagu laeAndmed meetodis.
Meetodile otsiAndmed antakse kaasa sõne, mis on märksõnõ, mille järgi otsida tahetakse. Seejärel tehakse ajutine andmebaasiühendus ja päring andmebaasi, kus küsitakse kõik need väljad, mis sisaldavad endas meetodile kaasa andtud sõne. Edasi toimitakse sama moodi nagu laeAndmed meetodis.<br>
*Vaated<br>
'''Blokeerimine(Code behind)'''<br>
Blokeerimise peameetodis Blokeerimine, määratakse tekstivälja sisu.
Nupu blokeeri meetodis (button bntblokk click handler) kontrollitakse kõigepealt, et ega keegi ei ürita Mainadmin kasutajat blokeerida. Kui jah siis antakse veatedae, vastasel juhul kontrollitakse, kas checkbox on märgitud. Kui on märgitud, siis eemaldatakse nupuvajutusega blokeering, kui ei ole märgitud , siis lisatakse nupuvajutusega blokeering. Blokeeringu lisamine ja eemaldamine toimub sama moodi, väikse erinevusega. Tehakse uus blokk tüüpi objekt, millele antakse ette eelevalt valitud kasutaja ning kuupäev kaua blokeering kehtib. Eemaldamise puhul määratakse lihtsalt kehtib kuni väljale juba möödunud ajaväärtus. Seejärel sulgetakse see ja avatakse Kasutaja_halduse vaade.<br>
'''Kasutaja haldus (XAML)'''<br>
Vaade, kus administraatoriõigustega kasutajal on võimalik liikuda vaadetesse, kus saab lisada uusi kasutajaid, blokeerida kasutajaid, vaadata nende andmeid ning sulgeda ja kustutada kasutajat. „Main“ admini kasutajat kustutada ei saa. Vaates on lisbox kasutajanimede kuvamiseks ja 5 nuppu. Listboxi binditakse kasutajate halduse vaatemudeli ja kasutaja kuvamise mudeli kaudu kasutajanimed, mille peale klikkides antakse vastavale globaalmuutujale selle valitud kasutajanime väärtus, et seda saaks järgmises vaates kasutada.<br>
'''Kasutaja haldus (Code behind)'''<br>
Peameetodis kutsutakse välja meetod näitaKasutajaid, milles tekitatakse uus Kasutaja_haldusVM tüüpi obejekt, ning kutsutakse välja selle meetod laeKasutajad. Listboxi sees oleva gridi datacontextiks antakse seesama loodud objekt.
Nuppude meetodid sulge, lisa uus, blokeeri ja vaata sulgevad selle ja avavad uue vaate.
Meetod kustuta kontrollib kõigepealt, et valitud kasutaja pole Admin (seda kustutada ei saa) , seejärel tekitab andmebaasiühenduse, teeb kasutajanime järgi päringu andmebaasi ja kustutab sealt saadud vaste andmebaasist.<br>
'''Kasutaja lisamine (Code behind)'''<br>
Kasutaja lisamise vaate peameetodis kontrollitakse, kas detailse halduse linnuke on märgitud, kui jah lastakse valida kasutajatüüp, kui ei pannakse kasutajatüüp automaatselt tavakasutajaks.
Nupu lisa meetodis tehakse andmebaasi päring, millega kontrollitakse kas selline kasutajanimi on juba olemas. Lisaks kontrollitakse, et sisestatud paroolid oleks rohkem kui 5 ühikut ja, et need ühtiksid ning, kas täidetud on kõik vajalikud väljad. Seejärel tehakse andmebaasi Kasutajad tabelisse uus sisestus. Kui mõni tingimustest pole täidetud, antakse vastavasse kohta veateade.<br>
'''Kasutajte andmed (Code behind)'''<br>
Selle vaate peameetodis kutsutakse esile meetod laeandmed, mis tekidab ühenduse andmebaasiga, küsib sealt kasutajanime järgi rea andmeid, ning väärtustab textboxide teksti vastavate andmete väärtusega. Meetod nupud, hoolitseb selle eest, et tavaõigustega kasutaja, ei satuks kuidagi võimaluse ette teiste kasutajate andmeid muuta.
Muuda nupp, avab need andmeväljad, mida adminstraatoritel on võimalik muuta ning salvesta saadab muudetud andmed andmebaasi, tehes andmebaasiühenduse ja pärides sealt kasutajanime järgi andmed ning kirjutades need üle.
Sulge nupp avab eelneva vaate, sõltuvalt sellest, kas eelnev vaade oli Kasutajate haldamine (admin) või Lisa (tava/admin).
Tavakasutajal on võimalik vaadata ja muuta AINULT enda andmeid.<br>
'''Logi vaatamine (Code behind)'''<br>
Logi vaatamise peameetoodist pöördutakse Logi vaatamise vaatemudeli meetodi laeLogi poole. Vaates olevale gridile antakse data contextiks ette Logi poole pöördumiseks tehtud objekt.
Tühjenda nupp, tekitab andmebaasiühenduse ning teeb sinna päringu, mis kustutab tabeli Logi sisu. Seejärel laetakse logi uuesti, et kasutaja saaks aru, et logi on tühjendtatud. Logi ise tekib peale igat andmebaasiga seotud toimingut välja kutsutud meetodiga peaLogi, millele antakse kaasa sisse logitud kasutajanimi ja tegevus, mida ta parasjagu tegi.<br>
'''MainWindow (Code behind)'''<br>
Main vaates ehk sisselogimise vaates on meetodid vaata, sisene ja sulge. Meetod vaata, avab sisu vaate ning siseneb sinna kasutajatüübiga registreerimata kasutaja. Meetod sisene, tekitab andmebaasiühenduse, kontrollib kas selle kasutajanimega üksusele tabelis vastab parool krüpteeritud kujul. Kui jah, kontrollitakse, kas tegemist on tavakasutaja või administraatoriga ning avatakse sisu vaade. Vastasel juhul kuvatakse veateade, et parool või kasutajanimi pole õiged.<br>
'''Profiil (Code behind)'''<br>
Profiili vaates kuvatakse kasutajale selle sisestuse andmed, millise rea peale ta eelnevas vaates vajutas. Peameetodis kutsutakse välja nupud ja laeAndmed meetod. Nupud meetodis n-ö blokeeritakse võimaluse klikkida muuda, prindi,salvesta ja kustuta nuppudel, kui kasutaja pole sisse loginud. Salvesta nupp aktiveerub sisseloginud kasutajal siis, kui ta on klikkinud muuda nupule. Muuda nupp aktiveerib ka tekstiväljad, mida on seejärel võimalik muuta.  LaeAndmed meetod pöördub eelmises vaates klikitud rea idga andmebaasi ja küsib sealt selle idga seotud andmed ning kirjutab need vastavatesse textboxidesse.
Nupp prindi käivitab meetodi, mis avab print dialog akna, millest on võimalik valida printeri ja profiiliaken välja printida. Nupp kustuta, pöörub andmebaasi, kustutab hetkel avatud idga seotud rea tabelist ja sulgeb akna. Nupp salvesta uuendab selle id'ga seotud andmebaasi tabeli rida.<br>
'''Salvestatud'''<br>
Vaade avatakse, kui kasutaja on edukalt andmed tabelisse lisanud.<br>
'''Seaded ehk Lisa (Code behind)'''<br>
Selles vaates kuvatakse 4 nuppu, millest kaks – sulge ja minu andmed on klikitavad ka tavakasutajale, teised kaks – logi ja halda kasutajaid -  ainult administraatoritele. Minu andmed nupp avab hetkel sisse loginud kasutaja andmete lehe, kus tal on võimalik neid muuta. Avatakse vaade Kasutajate andmed. Logi avab vaate, kus administraator saab vaadata logi ja kasutajate haldus avab vaate, kus administraator saab hallata kasutajaid. <br>
'''Sisu (tab1 – XAML)'''<br>
Sisu vaates on tekitatud listbox, mille sees on grid. Gridile antakse datacontextiks Sisu vaatemudel. Gridi sees on listbox, mille item source'ks on vaatemudelis tekitatav kollektsioon Avakuvaandmed.
Listboxi sees asub stackpanel ning selle sees on mitu textboxi, milledele binditakse Avakuvaandmete tüüpi kollektsioonist erinevaid andmeid, mida on vaja kuvada avaekraanil.<br>
'''Sisu (Code behind)'''<br>
Sisu vaates on palju erinevaid meetodeid ja nuppe. Peameetodis kutsutakse välja meetodid preaguneKP , staatus, disableButtons ja laeAndmed. Meetodis praeguneKp määratakse vajalikele väljadele funktsiooniga Datetime.Now hetkel olev kuupäev. Meetod staatus kirjeldab sisu vaate all servas oleva staatuse kirjelduse. Vastavalt, kas globaalmuutuja kasutajatüüp on 0(registreerimata) ,1(admin) ,2(tavakasutaja), tekib kirjeldus. DisableButtons blokeerib vajalikud nupud, millele ei tohi  ligi saada registreerimata kasutaja ja määrab ära ka all oleva nupu (Logi sisse/Välja) teksti. LaeAndmed meetod, tekitab uue sisu vaatemudel objekti ning annab gridile selle datacontextiks.
Nupud algusega jrk tegelevad tabelis kuvatavate andmete järjestamisega. Peale nupuvajatust saadetakse andmebaasi vastava order by käsuga päring ning laetakse andmed uuesti. Otsi nupp, otsib andmebaasist kõikide ridade ja tähtsamate veergude seast vasteid ja laeb need andmed uuesti. Nupp uuenda laeb kõik andmed uuesti. Nupp lisa, avab lisavalikud registreeritud kasutajatele.
Tab2'l olev salvesta nupp saadab andmebaasi tabelisse Andmed uue sisestuse, kuid enne seda kontroliitakse, et tärniga tähistatud väljad ei oleks tühjad ja ,et numbrilisi väärtusi nõudvad väljad sisaldaks numbreid.


= Logi =
= Logi =

Revision as of 08:54, 18 December 2012

Kirjeldus

Ülivägev andmebaas-rakendus taksodest (Algne idee meeskonna projektijuhi kunagisest katki jäänud projektist Eesti Politseile). Põhieesmärk on anda kiirelt infot taksode, juhtide, firmade ja nende litsentside kohta.

Tööjaotus

  • Marek Kirillov - Projektijuht,osa analüüsist,wiki lehe haldamine,kasutajaliides ja login, kasutajatüübi määramine, andmebaasiga seotud meetodid, andmete kuvamise lahendus, otsing,
  • Rando Laisaar - Osa analüüsist,seadete aken, kasutajate haldamise aken, logiaken, disain , prototüübi retsensioon
  • Siim Treilmann - Osa analüüsist,analüüsi retsensiooni koosatamine,profiiliaken, printimise funktsioon,paroolide krüpteerimine
  • Tiit Tallermaa - Osa analüüsist, kasutajate haldamise funktsioon, üldine tööloogika, lõpptoote retsensioon

Tööd jaotame rakenduse loomise käigus.

Analüüs

Rakendus Taksobaas sisaldab endas andmebaasi taksode kohta, mis on ideejärgi mõeldud kasutamiseks politseile või mõnele muule korrakaitseüksusele. Taksobaasi eesmärk on teha võimalikult lihtsaks ja kiireks kontroll taksode õigsuse, taksojuhtide litsentside ja rikkumiste üle. Rakendusel on kolm kasutajagruppi: superadmin, registreeritud kasutaja ja registreerimata kasutaja. Kõik järgnevalt kirjeldatud lõikudes kuulub enamjaolt must-have funktsionaalsuste alla.
Registreerimata kasutajal on peale rakenduse käivitamist võimalik vaadata rakenduse avaaknas ilmuvaid admeid, neid järjestada omale meelepärassesse järjekorda ning kasutada otsingut. Otsing otsib kõikide andmete seast valitud märksõna ja kategooria järgi välja andmeid (näiteks: märksõna „Peeter“ ,kategooria „eesnimi“ ; märksõna „kehtetu“ , kategooria „kehtivus“ jne). Märksõna sisestatakse vastavalt textbox'i ningi kategooria saab valida dropdown-listist. Sellega registreerimata kasutajate õigused ka piirduvad.
Registreeritud kasutajal on lisaks eelnevalt kirjeldatule rohkem võimalusi. Rakenduse käivitamisel küsitakse eelnevalt määratud kasutajanime ja parooli, mille maksimaalseks pikkuseks on 15 tähemärki. Edasi kuvatakse aken, milles on kasutajal võimalik valida kahe „tab“i vahel. Esimesel toimub andmete kuvamine ja otsing nagu eelnevas lõigus kirjeldatud. Lisaks sellele on võimalik kustutada valitud andmeid ja neid printida. Andmerea peale klikkides avatakse uus aken, milles kuvatakse tabelis olevaid andmeid ning lisainformatsiooni konkreetse sisestuse kohta. Avanud akent võib võtta kui konkreetse isiku profiili, kus kajastatakse temaga seostuvaid andmeid. Seda on võimalik muuta, klikkides nupule muuda (mis aktiveerib tekstiväljad) ja salvestada (update käsklus andmebaasi) ning kustutada ja profiililehte ka printida. Lisaks on esimesel „tab“il veel nupp, mis uuendab tabeli sisu ning võimalusel ka muid Nice-To-Have funktsionaalsusi, mis on kirjeldatud analüüsile järgnevas loendis. Teine „tab“ sisaldab endas kõikvõimalikke taksodega seotud andmete lisamise võimalusi. Tühju kirjeid pole võimalik lisada ning tärniga on märgitud väljad, mille täitmine on kohustuslik.
Superadmin on kasutaja, kes omab kõikidele eelnevalte kirjeldatud võimalusetele veel võimalusi vaadata sisse/väljalogimise ja andmete muutmise, otsimise logi ning registreerida uusi ja muuta vanu kasutajaid. Superadmin siseneb sarnaselt registreeritud kasutajale rakendusse eelnevalt määratud kasutajanime ja parooliga. Superadmini vaates ilmuvad lisanupud „Kasutajate haldamine“ ja „Logi“.
Lisaks tabidele kuvatakse alati rakenduse all servas kasutaja olekut (näiteks: „Oled registreeritud kasutaja režiimis.“, „Oled tavakasutaja režiimis, logi sisse selleks,et muuta andmeid“ jne) ning kaks nuppu: Logi Sisse/Välja(muutub sõltuvalt kasutaja olekust) ja Sulge. Välja logimisel kuvatakse taas Sisselogimise akent, sulgemisel aga logitakse baasist välja ja sulgetakse kogu rakendus. Lisaks on kõikidel kasutajatel võimalik muuta andmebaasi serveriga seotud andmeid (kui näiteks tekib vajadus andmebaas teise serverisse kolida) ning on ka võimalus nende andmete salvestamiseks, kuid see kehtib ainult superadminile, selleks , et kui tavakasutaja kogemata midagi ära muudab ja salvestab , siis ta ei saa enam baasile ligi. Kui aga neid ära ei salvestata, siis piisab tavakasutajal programmi taaskäivitamisest,et uuesti andmetele ligi pääseda.

Must-Have funktsioonide loend:

  • Sisselogimise süsteem
  • Erinevad kasutajatüübid
  • Otsing ja andmete kuvamine
  • "Profiiliakna" kuvamine
  • Tabide kuvamine
  • Lihtne disain
  • Andmete lisamine
  • Eelistuste salvestamine (järgneval käivitusel ei ole seaded algseks muutnud vaid säilitavad oma muudetud oleku) (registreeritud kasutajale)
  • Andmete järjestamise valik (dropdown-list)
  • Osaliselt on logi pidamine ka nice-to-have funktsionaalsus (superadminile),



Nice-to-Have funktsioonide loend:

  • Printimine tabelist ja profiilist (registreeritud kasutajale)
  • Otsing, kus ei pea valima kategooriat vaid otsitakse kõikide tabeli veergude seast. (registreeritud kasutaja)
  • Eelistused, kus saab vahetada rakenduse teemat ja määrata tabeli automaatne uuendus ning ajavahemik, millal tabel ennast uuendab (registreeritud kasutajale)
  • "Fancy" disain
  • Kasutaja automaatne blokeerimine kui parooli on järjest sisestatud valesti 3 korda
  • Lisaaken, reaalajas kommunikatsiooniks (registreeritud kasutajale)
  • Teema mitte ei muuda ainult värve ja fonte vaid ka kujundust (registreeritud kasutajale)
  • Libataksod ja kehtetu litsentsiga taksod eristatavad
  • Sisselogimisel „jäta parool meelde“ checkbox (registreeritud kasutajale)
  • Pildi kuvamine profiilis (registreeritud kasutajale)
  • Serveriga ühendamiseks vajalke andmete vahetamine/sisestamine (kõikidele kasutajatele)

Nice to have funktsionaalsustest teeme valmis nii palju kui ajaliselt jõuame ja oskused lubavad. Eelnevalt keskendume Must Have osa loomisele.

Retsensioon

Retsensioon on koostatud meeskonna Kajarist[1] analüüsi kohta.

Prototüüp

Rakenduse prototüübi ja selle kasutamiseks vajalikud failid: [2]. Selleks, et rakendust kasutada on vaja SQL Serverit (2012) ja SQL Server Management Studiot. Lahtipakkimisel tekkivas kaustas on kaks SQL scriptifaili. Esmalt tuleb luua SQL Server Management Studios uus andmebaas nimega "Taksobaas". Seejärel kasutada "Andmebaaside_tekitamine" scripti ,et luua tabelid andmebaasi ning "Admin_kasutaja_lisamine" scripti, et tekitada üks administraatoriõigustega kasutaja, millega saab rakendusse siseneda. Kasutajanimi: "admin" , parool: "parool".

Rakendusel puuduvad:

  • Printimise funktsioon (kood peaaegu olemas)
  • Seadete funktsioon (ideeliselt olemas)
  • Kasutajate muutmise ja blokeerimise funktsioon (ideeliselt olemas)
  • Andmete järjestamise funktsioon (kood peaaegu olemas)
  • Stiili muutmise funktsioon (ideeliselt olemas)
  • Korralik disain (kood peaaegu olemas)
  • Kasutajaandmete krüpteerimine
  • Automaatne uuendamine
  • Tuleb veel erinevaid funktsionaalsusi,lisaks nendele ja nice-to-have'idele, juhul kui ajaliselt jõuab.


Rakendusel töötavad:

  • Kasutaja autentimine ja kasutajatüübi määramine
  • Erinevate väljade kontrollid ja veateated (Näiteks andmete lisamisel kohustuslikkude väljade mittetäitmisel, kasutaja lisamisel kui kasutajanimi juba olemas või sisestatud paroolid erinevad, sisselogimisel vale parooliga jne)
  • Andmete lisamine
  • Andmete otsimine (kõikide sisestuse hulgast)
  • Litsentsi kehtivuse kontroll
  • Profiiliaken
  • Andmete muutmine profiiliaknas
  • Uuendamine
  • TB nupu alt, (Administraatoriõigustega kasutajaga jaoks) logi vaatamine/pidamine ning kasutajate lisamine ja kustutamine


Lõpptoode

Failid

  • Rakendus(release): [3]
  • Rakendus(kood):[4]
  • Kasutusjuhend : [5]
  • Lahenduse kirjeldus: [6]

Kasutusjuhend

  • Sissejuhatus

Rakendus Taksobaas sisaldab endas andmebaasi taksode kohta, mis on ideejärgi mõeldud kasutamiseks politseile või mõnele muule korrakaitseüksusele. Taksobaasi eesmärk on teha võimalikult lihtsaks ja kiireks kontroll taksode õigsuse, taksojuhtide litsentside ja rikkumiste üle. Rakendusel on kolm kasutajagruppi: superadmin, registreeritud kasutaja ja registreerimata kasutaja.

  • Sisselogimine

Rakenduse käivitamisel tekib sisselogimise aken. Sisselogimise aknast saab edasi minna kas sisselogituna, sisestades kasutajanime ja parooli ning nuppu Sisene või nupust Vaata andmeid, mida saab ka ilma sisselogimiseta kasutada. Sulge nupp sulgeb rakenduse.

  • Andmete vaatamine ( registreerimata kasutaja )

Registreerimata kasutajal on peale rakenduse käivitamist võimalik vaadata rakenduse avaaknas ilmuvaid andmeid, neid järjestada omale meelepärasesse järjekorda ning kasutada otsingut. Otsing otsib kõikide andmete seast valitud märksõna järgi välja andmeid. Märksõna sisestatakse vastavalt textbox'i. Vajutades tabelil olevale reale on võimalik vaadata profiililehte, mis avaneb eraldi akans. Sellega registreerimata kasutajate õigused ka piirduvad.

  • Andmete vaatamine ( registreeritud kasutaja )

Registreeritud kasutajal on lisaks eelnevalt kirjeldatule rohkem võimalusi. Rakenduse käivitamisel küsitakse eelnevalt määratud kasutajanime ja parooli, mille maksimaalseks pikkuseks on 15 tähemärki. Edasi kuvatakse aken, milles on kasutajal võimalik valida kahe „tab-i“ vahel. Esimesel toimub andmete kuvamine ja otsing täpselt samamoodi nagu sisselogimata kasutaja puhul.

  • Profiilivaade

Andmerea peale klikkides avatakse uus aken, milles kuvatakse tabelis olevaid andmeid ning lisainformatsiooni konkreetse sisestuse kohta. Avanud akent võib võtta kui konkreetse isiku profiili, kus kajastatakse temaga seostuvaid andmeid. Seda on võimalik muuta, klikkides nupule muuda (mis aktiveerib tekstiväljad) ja salvestada ning kustutada ja profiililehte ka printida .

  • Andmete lisamine

Teine „tab“ sisaldab endas kõikvõimalikke taksodega seotud andmete lisamise võimalusi. Tühju kirjeid pole võimalik lisada ning tärniga on märgitud väljad, mille täitmine on kohustuslik. Peale salvestamise nupule vajutamist saab kasutaja kas kinnituse, et andmed on lisatud või kuvatakse valesti sesestatud andmete kohta veateade.

  • Admin - Lisad

Superadmin on kasutaja, kes omab kõikidele eelnevatele kirjeldatud võimalustele veel võimalusi vaadata sisse/väljalogimise ja andmete muutmise, otsimise logi ning registreerida uusi ja muuta vanu kasutajaid. Superadmin siseneb sarnaselt registreeritud kasutajale rakendusse eelnevalt määratud kasutajanime ja parooliga. Superadmini vaates ilmuvad lisanupud „Halda kasutajaid“ ja „Vaata logi“, mida saab sisu akna alt nupust „Lisad“.

  • Logi

Logi vaatamisel tekib aken, kus on näha andmete, millal on kasutaja sisse loginud, andmeid muudetud, salvestatud ja kustutatud . Samuti saab Logi akna sisu vajadusel tühjendada.

  • Kasutajate haldus

Lisade aknas olev Halda kasutajaid näitab olemasolevaid kasutajad, saab lisada uue kasutaja, blokeerida ja kustutada olemasolevaid kasutajaid.

  • Kasutaja lisamine

Lisa uus tekitab kasutajate lisamise akna, kus superadminil on õigus lisada uusi kasutajaid ja neile anda vastav kasutaja õigus, kas siis tavakasutaja või superadmini õigustega kasutaja.

  • Kasutaja blokeerimine

Lisade all olev nupp Blokeeri annab superadminile õiguse olemasolevaid kasutajaid blokeerida teatud ajani ning samuti blokeeringust eemaldada.

Lahenduse kirjeldus

  • Mudelid

Andmete kuvamine
Andmete kuvamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd, selleks, et sisulehel vastavaid andmeid kuvada. Lisaks tehakse ka üks tühi konstruktor, mille kaudu saab vastavate väljade poole pöörududa.
Blokeerimine
Blokeerimise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd ning konstruktor, mis võtab endaga kaasa kaks parameetrit – kasutajanime ja blokeerimise aja. Konstruktoris väärtustatakse privaatsed väljad objektile kaasta antud väärtusetga, selleks, et neid meetodis blokeeri kasutada. Blokeerimise meetodis tekitatakse ajutine ühendus andmebaasiga ning saadetakse sinna päring. Päringus pöörudutakse andmebaasis oleva tabeli Kasutajad poole ning küsitakse sealt üks kasutaja, mille kasutajanimi on võrdne konstrukorile kaasa antud kasutajanimega. Kui see kasutaja baasis eksisteerib, siis määratakse kasutaja blokeeritud kuni väljale aeg, mis eelnevalt konstruktorile kaasa anti.
Globaalmiuutujad
Globaalmuutujate klassis defineeritakse ära need muutujad, millele on vaja ligi pääseda mitmetes erinevates klassides ja meetodites. Kasutaja kuvamine Kasutajate kuvamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd, selleks, et kasutajate haldamise lehel vastavaid andmeid kuvada. Lisaks tehakse ka üks tühi konstruktor, mille kaudu saab vastavate väljade poole pöörududa.
Krüpteerimine
Krüpteerimise mudelis on meetod, mis võtab sisendiks sõne kujul parooli ning krüpteerib sõne, kasutades MD5 tüüpi krüpteerimismeetodit ja tagastab selle.
Logi
Logi pidamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd ning konstruktor, mis võtab endaga kaasa kaks parameetrit – kasutajanime ja tegevuse. Konstruktoris väärtustatakse privaatsed väljad objektile kaasta antud väärtusetga, selleks, et neid meetodis blokeeri kasutada. Meetodis pea logi tehakse ajutine ühendus andmebaasiga. Kõigepealt kontrollitakse, kas kasutaja on sisse loginud või on tegemist registreerimata kasutajaga. Seejärel tehakse andmebaasi tabelisse Logi uus sisestus, kus määratakse kasutajanimi, konstruktorile kaasa antud tegevus ja aeg, millal tegevus tehti. Seejärel lisatakse sisestus andmebaasi.
Logi kuvamine
Log kuvamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd, selleks, et logi lehel vastavaid andmeid kuvada. Lisaks tehakse ka üks tühi konstruktor, mille kaudu saab vastavate väljade poole pöörududa.
Login
Logi pidamise mudelis tekitatakse vajalike andmete jaoks privaatsed väljad ja propertyd ning konstruktor, mis võtab endaga kaasa kaks parameetrit – kasutajanime ja parooli. Konstruktoris väärtustatakse privaatsed väljad objektile kaasa antud väärtusetga, selleks, et neid järgnevates meetodites kasutada. Meetodis kasutajaLogin tekitaktakse ajutine andmebaasiühendus, mille käigus tehakse kaks päringut. Esimene teeb päringu selleks, et saada andmebaasist vaste kaasa antud kasutajanime ja parooli jaoks. Teine teeb päringu selleks, et võtta nende samade andmete blokeeritud kuni väljalt väärtus. Seejärel kontrollitakse, kas päringud olid tühjad või mitte ning kas blokeeritud kuni väärtus on suurem või väiksem kui aeg sel hetkel ja tehakse otsus, kas lasta kasutajal sisse logida või anda veateade. Meetodis kasutajaTüüp määratakse ära, kas kasutaja on admin, tavakasutaja või registreerimata kasutaja. Tehakse ajutine andmebaasiühendus ning päring, milles pöördutakse eelnevalt antud kasutajanime poole tabelis Kasutajad ja valitakse sealt välja kastuaja õigus väärtus ning see omistatakse globaalsele muutujale kastutajatüüp. Kasutaja tüübi muutujat kasutatakse järgnevalt kõigis vaadetes selleks, et ära tunda, mis tüüpi kasutajaga tegemist on ja, mida talle kuvada.

  • Vaatemudelid

Kasutajate haldus
Kasutajate halduse vaatemudelis tehakse üks privaatväli, milleks on mudeli kasutajakuvamine tüüpi objektide kollektsioon. Seejärel tehakse sellele property ning konstruktor, milles tekitatakse uus kollektsioon. Meetodis laeKasutajad tekitatakse ajutine ühendus andmebaasiga ning tehakse päring andmebaasi. Päringus küsitakse andmebaasi tabelist Kasutajad kõik andmed veerust kasutaja ning seejärel käiakse need ükshaaval läbi tehakse iga kord uus kasutajakuvamine objekt, määratakse selle objekti väljale kasutajanimi väärtus ning lisatakse see objekt kasutajakuvamine tüüpi kollektsiooni.
Logi vaatamine
Logi vaatamise vaatemudelis tehakse üks privaatväli, milleks on mudeli logiuvamine tüüpi objektide kollektsioon. Seejärel tehakse sellele property ning konstruktor, milles tekitatakse uus kollektsioon. Meetodis laeLogi tekitatakse ajutine ühendus andmebaasiga, mille käis tehakse andmebaasi tabelisse Logi päring. Päringus küsitakse kogu tabeli sisu ajalises kahanevas järjekorras. Seejärel käiakse läbi kogu päringu tulemusena saadud kolletsioon, kus iga sissekande kohta tehakse uus logikuvamine tüüpi objekt, mille väljad väärtustatakse andmebaasist saadud väärtustega ning seejärel listatakse tehtud objekt logikuvamine tüüpi objektide kollektsiooni.
Sisu
Sisu vaatemudelis tehakse üks privaatväli, milleks on mudeli andmetekuvamine tüüpi objektide kollektsioon. Seejärel tehakse sellele property ning konstruktor, milles tekitatakse uus kollektsioon. Meetodis laeAndmed tehakse ajutine andmebaasiühendus ning päritakse tabelist Andmed kõik väljad. Tulemuseks saadud kollektsioon käitakse foreach tsükkliga läbi ning iga tabelis Andmed oleva rea kohta tehakse üks uus AndmeteKuvamine tüüpi objekt ja väärtustatakse selle väljad tabelist saadud väärtustega. Tehakse ka kontroll kas litsents on kehtv või kehtetu. Seejärel lisatakse objektid avakuvaandmete kollektsiooni. Meetodile järjestaAndmed antakse kaasa sõne, mis määrab ära, millise veeru järgi Sisu lehe sisu järjestatakse. Vastavalt saadud sõnele tehakse järjestuse tingimusega päring andmebaasi ja edasi toimitakse täpselt sama moodi nagu laeAndmed meetodis. Meetodile otsiAndmed antakse kaasa sõne, mis on märksõnõ, mille järgi otsida tahetakse. Seejärel tehakse ajutine andmebaasiühendus ja päring andmebaasi, kus küsitakse kõik need väljad, mis sisaldavad endas meetodile kaasa andtud sõne. Edasi toimitakse sama moodi nagu laeAndmed meetodis.

  • Vaated

Blokeerimine(Code behind)
Blokeerimise peameetodis Blokeerimine, määratakse tekstivälja sisu. Nupu blokeeri meetodis (button bntblokk click handler) kontrollitakse kõigepealt, et ega keegi ei ürita Mainadmin kasutajat blokeerida. Kui jah siis antakse veatedae, vastasel juhul kontrollitakse, kas checkbox on märgitud. Kui on märgitud, siis eemaldatakse nupuvajutusega blokeering, kui ei ole märgitud , siis lisatakse nupuvajutusega blokeering. Blokeeringu lisamine ja eemaldamine toimub sama moodi, väikse erinevusega. Tehakse uus blokk tüüpi objekt, millele antakse ette eelevalt valitud kasutaja ning kuupäev kaua blokeering kehtib. Eemaldamise puhul määratakse lihtsalt kehtib kuni väljale juba möödunud ajaväärtus. Seejärel sulgetakse see ja avatakse Kasutaja_halduse vaade.
Kasutaja haldus (XAML)
Vaade, kus administraatoriõigustega kasutajal on võimalik liikuda vaadetesse, kus saab lisada uusi kasutajaid, blokeerida kasutajaid, vaadata nende andmeid ning sulgeda ja kustutada kasutajat. „Main“ admini kasutajat kustutada ei saa. Vaates on lisbox kasutajanimede kuvamiseks ja 5 nuppu. Listboxi binditakse kasutajate halduse vaatemudeli ja kasutaja kuvamise mudeli kaudu kasutajanimed, mille peale klikkides antakse vastavale globaalmuutujale selle valitud kasutajanime väärtus, et seda saaks järgmises vaates kasutada.
Kasutaja haldus (Code behind)
Peameetodis kutsutakse välja meetod näitaKasutajaid, milles tekitatakse uus Kasutaja_haldusVM tüüpi obejekt, ning kutsutakse välja selle meetod laeKasutajad. Listboxi sees oleva gridi datacontextiks antakse seesama loodud objekt. Nuppude meetodid sulge, lisa uus, blokeeri ja vaata sulgevad selle ja avavad uue vaate. Meetod kustuta kontrollib kõigepealt, et valitud kasutaja pole Admin (seda kustutada ei saa) , seejärel tekitab andmebaasiühenduse, teeb kasutajanime järgi päringu andmebaasi ja kustutab sealt saadud vaste andmebaasist.
Kasutaja lisamine (Code behind)
Kasutaja lisamise vaate peameetodis kontrollitakse, kas detailse halduse linnuke on märgitud, kui jah lastakse valida kasutajatüüp, kui ei pannakse kasutajatüüp automaatselt tavakasutajaks. Nupu lisa meetodis tehakse andmebaasi päring, millega kontrollitakse kas selline kasutajanimi on juba olemas. Lisaks kontrollitakse, et sisestatud paroolid oleks rohkem kui 5 ühikut ja, et need ühtiksid ning, kas täidetud on kõik vajalikud väljad. Seejärel tehakse andmebaasi Kasutajad tabelisse uus sisestus. Kui mõni tingimustest pole täidetud, antakse vastavasse kohta veateade.
Kasutajte andmed (Code behind)
Selle vaate peameetodis kutsutakse esile meetod laeandmed, mis tekidab ühenduse andmebaasiga, küsib sealt kasutajanime järgi rea andmeid, ning väärtustab textboxide teksti vastavate andmete väärtusega. Meetod nupud, hoolitseb selle eest, et tavaõigustega kasutaja, ei satuks kuidagi võimaluse ette teiste kasutajate andmeid muuta. Muuda nupp, avab need andmeväljad, mida adminstraatoritel on võimalik muuta ning salvesta saadab muudetud andmed andmebaasi, tehes andmebaasiühenduse ja pärides sealt kasutajanime järgi andmed ning kirjutades need üle. Sulge nupp avab eelneva vaate, sõltuvalt sellest, kas eelnev vaade oli Kasutajate haldamine (admin) või Lisa (tava/admin). Tavakasutajal on võimalik vaadata ja muuta AINULT enda andmeid.
Logi vaatamine (Code behind)
Logi vaatamise peameetoodist pöördutakse Logi vaatamise vaatemudeli meetodi laeLogi poole. Vaates olevale gridile antakse data contextiks ette Logi poole pöördumiseks tehtud objekt. Tühjenda nupp, tekitab andmebaasiühenduse ning teeb sinna päringu, mis kustutab tabeli Logi sisu. Seejärel laetakse logi uuesti, et kasutaja saaks aru, et logi on tühjendtatud. Logi ise tekib peale igat andmebaasiga seotud toimingut välja kutsutud meetodiga peaLogi, millele antakse kaasa sisse logitud kasutajanimi ja tegevus, mida ta parasjagu tegi.
MainWindow (Code behind)
Main vaates ehk sisselogimise vaates on meetodid vaata, sisene ja sulge. Meetod vaata, avab sisu vaate ning siseneb sinna kasutajatüübiga registreerimata kasutaja. Meetod sisene, tekitab andmebaasiühenduse, kontrollib kas selle kasutajanimega üksusele tabelis vastab parool krüpteeritud kujul. Kui jah, kontrollitakse, kas tegemist on tavakasutaja või administraatoriga ning avatakse sisu vaade. Vastasel juhul kuvatakse veateade, et parool või kasutajanimi pole õiged.
Profiil (Code behind)
Profiili vaates kuvatakse kasutajale selle sisestuse andmed, millise rea peale ta eelnevas vaates vajutas. Peameetodis kutsutakse välja nupud ja laeAndmed meetod. Nupud meetodis n-ö blokeeritakse võimaluse klikkida muuda, prindi,salvesta ja kustuta nuppudel, kui kasutaja pole sisse loginud. Salvesta nupp aktiveerub sisseloginud kasutajal siis, kui ta on klikkinud muuda nupule. Muuda nupp aktiveerib ka tekstiväljad, mida on seejärel võimalik muuta. LaeAndmed meetod pöördub eelmises vaates klikitud rea idga andmebaasi ja küsib sealt selle idga seotud andmed ning kirjutab need vastavatesse textboxidesse. Nupp prindi käivitab meetodi, mis avab print dialog akna, millest on võimalik valida printeri ja profiiliaken välja printida. Nupp kustuta, pöörub andmebaasi, kustutab hetkel avatud idga seotud rea tabelist ja sulgeb akna. Nupp salvesta uuendab selle id'ga seotud andmebaasi tabeli rida.
Salvestatud
Vaade avatakse, kui kasutaja on edukalt andmed tabelisse lisanud.
Seaded ehk Lisa (Code behind)
Selles vaates kuvatakse 4 nuppu, millest kaks – sulge ja minu andmed on klikitavad ka tavakasutajale, teised kaks – logi ja halda kasutajaid - ainult administraatoritele. Minu andmed nupp avab hetkel sisse loginud kasutaja andmete lehe, kus tal on võimalik neid muuta. Avatakse vaade Kasutajate andmed. Logi avab vaate, kus administraator saab vaadata logi ja kasutajate haldus avab vaate, kus administraator saab hallata kasutajaid.
Sisu (tab1 – XAML)
Sisu vaates on tekitatud listbox, mille sees on grid. Gridile antakse datacontextiks Sisu vaatemudel. Gridi sees on listbox, mille item source'ks on vaatemudelis tekitatav kollektsioon Avakuvaandmed. Listboxi sees asub stackpanel ning selle sees on mitu textboxi, milledele binditakse Avakuvaandmete tüüpi kollektsioonist erinevaid andmeid, mida on vaja kuvada avaekraanil.
Sisu (Code behind)
Sisu vaates on palju erinevaid meetodeid ja nuppe. Peameetodis kutsutakse välja meetodid preaguneKP , staatus, disableButtons ja laeAndmed. Meetodis praeguneKp määratakse vajalikele väljadele funktsiooniga Datetime.Now hetkel olev kuupäev. Meetod staatus kirjeldab sisu vaate all servas oleva staatuse kirjelduse. Vastavalt, kas globaalmuutuja kasutajatüüp on 0(registreerimata) ,1(admin) ,2(tavakasutaja), tekib kirjeldus. DisableButtons blokeerib vajalikud nupud, millele ei tohi ligi saada registreerimata kasutaja ja määrab ära ka all oleva nupu (Logi sisse/Välja) teksti. LaeAndmed meetod, tekitab uue sisu vaatemudel objekti ning annab gridile selle datacontextiks. Nupud algusega jrk tegelevad tabelis kuvatavate andmete järjestamisega. Peale nupuvajatust saadetakse andmebaasi vastava order by käsuga päring ning laetakse andmed uuesti. Otsi nupp, otsib andmebaasist kõikide ridade ja tähtsamate veergude seast vasteid ja laeb need andmed uuesti. Nupp uuenda laeb kõik andmed uuesti. Nupp lisa, avab lisavalikud registreeritud kasutajatele. Tab2'l olev salvesta nupp saadab andmebaasi tabelisse Andmed uue sisestuse, kuid enne seda kontroliitakse, et tärniga tähistatud väljad ei oleks tühjad ja ,et numbrilisi väärtusi nõudvad väljad sisaldaks numbreid.



Logi

  • 22.10.2012 - Wiki lehe loomine
  • 29.10.2012 - Arutlus üldise idee ja kasutajaliidese üle + visuaalne skeem
  • 02.11.2012 - Analüüsi osade kokku panemine
  • 04.11.2012 - Analüüsi viimistlus ja wiki lehe uuendamine
  • 06.11.2012 - Sisselogimise ja kasutajatüübi määramise funktsiooni loomine
  • 11.11.2012 - Retsensiooni koostamine
  • 17.11.2012 - Üleminek MySql'ilt Linq'le
  • 18.11.2012 - Andmete lisamise aken ja funktsioon, profiilivaate, seadete, logi, kasutajahaldamise ja -lisamise aknad. Erinevate meetodite katsetamine.
  • 24.11.2012 - Andmete kuvamise funktsiooni loomine, disain, printimise funktsioon katsetamine, kasutajahalduse testimine
  • 25.11.2012 - Otsingu funktsioon, kasutajate lisamise funktsioon, uuendamine, logi salvestamine ja kuvamine,
  • 26.11.2012 - Profiililehe funktsioon, kasutajate kustutamise funktsioon, Profiililehe muutmise ja salvestamise funktsioon
  • 02.12.2012 - Prototüübi retsensioon
  • 10.12.2012 - Printimise funktsiooni lisamine, disaini silumine, testimine, turvaaukude otsimine
  • 12.12.2012 - Ideede kogumine ja meetodite testimine paroolide krüpteerimiseks
  • 16.12.2012 - Rakenduse testimine. Dokumentatsiooni tegemine ja vormistus

Pildid

?
Taksobaas - Algne visuaalne skeem asjast (Tehtud maailma parima fototöötlus programmiga MS Paint)