Meeskond Tool
Idee
Luuakse süsteem lumelaudadega. Lumelauad erinevate parameetritega on XML failis. Ühelt poolt on võimalus neid veebirakendusega XML faili lisada ning teiselt poolt on klientidel võimalus otsida endale kaalu ja pikkuse jms järgi uus lumelaud.
Antud rakendus lihtsustab inimestel endale lumalaua valimist ning säästab hulga aega - ühekaupa kõiki andmebaasis olevaid lumelaudu läbi vaadata oleks väga ajakulukas ning tüütu, arvestades seda, et niikuinii sobivad sõitmiseks vaid lumelauad, mis on vastavad sõitja pikkusele, kaalule, sõidustiilile.
Esialgne plaan on XML faili lumelaudu lisada järgmiste omaduste järgi: pikkus, keskkoha laius, paine, soovitatav sõidustiil, soovitatav kaal. Esialgse plaani järgi peab klient sisestama enda pikkuse, kaalu, jalanumbri ja sõidustiili, pärast mida kuvatakse talle sobivad lumelauad.
Analoogne süsteem Eesti poodides jne puudub. Kõvasti lihtsam oleks endale sobivat toodet leida, kui kõik Eesti lumelaudade edasimüüjad sisestaks enda kaubad andmebaasi - hoiaks kõvasti aega kokku.
Meeskond
- Erik Kaju - programm
- Reigo Männiste - programm
- Miina Sikk - Wikileht, programm, projekti koordinaator
- Indrek Tamm - Idee, programm
Miina - Wikileht, XML, Veebirakenduse kasutajate pool(statistika, haldamine, sessioonid) + esialgne struktuur, klientrakendus
Indrek - XML, Veebirakenduse lumelaua päringud, kommentaaride meetodid, debugimine, andmebaas, klientrakendus
Reigo - esialgne andmebaas + kommentaaride klass
Erik Kaju - lumelaua sisestamise meetodid
XML
XML fail
<?xml version="1.0" encoding="utf-8"?> <Lumelauad> <Lumelaud> <Tootja>Forum</Tootja> <Nimetus>Destroyer</Nimetus> <Edasimyyjad> <Edasimyyja> <Nimi>SurfHouse</Nimi> <Aadress>Pronksi 7/9</Aadress> <HindEUR>200</HindEUR> </Edasimyyja> </Edasimyyjad> <Pikkused> <PikkusCM>158</PikkusCM> <PikkusCM>153</PikkusCM> </Pikkused> <Laiused> <LaiusCM>25</LaiusCM> </Laiused> <PainduvusTase>6</PainduvusTase> <Kommentaarid> <Kommentaar> <Saatja> <Eesnimi>Mati</Eesnimi> <Perekonnanimi>Tati</Perekonnanimi> </Saatja> <Tekst>Hehe, kukkusin sellega hamba suust.</Tekst> </Kommentaar> </Kommentaarid> </Lumelaud> </Lumelauad>
XML Schema
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Lumelauad"> <xs:complexType> <xs:sequence> <xs:element name="Lumelaud"> <xs:complexType> <xs:sequence> <xs:element name="Tootja" type="xs:string"/> <xs:element name="Nimetus" type="xs:string"/> <xs:element name="Edasimyyjad"> <xs:complexType> <xs:sequence> <xs:element name="Edasimyyja"> <xs:complexType> <xs:sequence> <xs:element name="Nimi" type="xs:string" /> <xs:element name="Aadress" type="xs:string"/> <xs:element name="HindEUR" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Pikkused"> <xs:complexType> <xs:sequence> <xs:element name="PikkusCM" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Laiused"> <xs:complexType> <xs:sequence> <xs:element name="LaiusCM" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="PainduvusTase" type="xs:int"/> <xs:element name="Kommentaarid"> <xs:complexType> <xs:sequence> <xs:element name="Kommentaar"> <xs:complexType> <xs:sequence> <xs:element name="Saatja"> <xs:complexType> <xs:sequence> <xs:element name="Eesnimi" type="xs:string"/> <xs:element name="Perekonnanimi" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Tekst" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XSLT
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>Pakkumisel lumelauad</h2> <table border="1"> <tr> <th>Nimi</th> <th>Edasimüüjad</th> <th>Pikkused</th> <th>Laiused</th> <th>Painduvus</th> <th>Kommentaar(id)</th> </tr> <xsl:for-each select="Lumelauad/Lumelaud"> <tr> <td><xsl:value-of select="Tootja"/><br/><xsl:value-of select="Nimetus"/></td> <td> <xsl:for-each select="Edasimyyjad/Edasimyyja"> <table> <tr> <td> <xsl:value-of select="Nimi"/><br/><xsl:value-of select="Aadress"/><br/><xsl:value-of select="HindEUR"/>EUR<br/> </td> </tr> </table> </xsl:for-each> </td> <td> <xsl:for-each select="Pikkused"> <xsl:value-of select="PikkusCM"/> <br/> </xsl:for-each> </td> <td> <xsl:for-each select="Laiused"> <table> <tr> <td> <xsl:value-of select="LaiusCM"/> </td> </tr> </table> </xsl:for-each> </td> <td> <xsl:value-of select="PainduvusTase"/> </td> <td> <xsl:for-each select="Kommentaarid/Kommentaar"> <table> <tr> <td> <xsl:value-of select="Tekst" /><br/><xsl:value-of select="Saatja/Eesnimi" /> <xsl:value-of select="Saatja/Perekonnanimi" /> </td> </tr> </table> </xsl:for-each> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Veebiteenus
Töödeldavad andmed:
- Sisse võetakse: Inimese pikkus, kaal, sõidustiil.
- Mille alusel valitakse: Laua pikkus, laua painduvus, laua laius, twin tip/mitte
- Tagastatakse: Nimi, Edasimüüjad, Pikkused, Laiused, Painduvus, Kommentaarid
Inimese kõrgusele vastab teatud lauapikkuste vahemik, mis sõiduks sobivad. Samuti mõjutavad sõidustiil ja kaal laua pikkust.
Klassijaotus
- Kasutaja.cs - kirjeldab kasutajat ja tema parameetreid. Sisaldab järgmiseid kasutajaga seotud meetodeid:
- lisaKasutaja(string kasutajanimi, string eesnimi, string perenimi, string parool) - lisab kasutaja andmebaasi, kontrollides enne kasutajanime kordumist
- validKasutajanimi(string kasutajanimi) - kontrollib kasutajanime kordumist
- rollKasutajale(string kasutajanimi, Roll roll) - annab kasutajale rolli
- validKasutaja(int kasutajaID) - kontrollib, kas kasutaja on aktiivne
- kntrlParool(string kasutajanimi, string parool) - kontrollib, kas parool läheb kokku andmebaasis olevaga.
- kontrolliParool(string parool, string salt, string hash) - kontrollib parooli koos eelmise meetodiga
- IDkasutajanimest(string kasutajanimi) - returnib kasutaja ID kasutajanime järgi
- kasutajaSessist(string ID, string path) - returnib kasutajanime sessiooni ID järgi
- teeGuid(string kasutajanimi, string path) - genereerib kasutajale sisselogimisel unikaalse sessiooni ID
- salvestaSess(string kasutajanimi, Guid ID, string path) - salvestab sessiooni XML faili sess.xml
- muudaSessiooni(string ID, DateTime aeg, string path) - muudab sessiooni aegumisaega
- sessKestab(string ID, string path) - tagastab true, kui kasutaja sessioon ei ole läbi
- Kommentaar.cs - kirjeldab kommentaari ja tema parameetreid. Sisaldab meetodit:
- lisaKommentaar(string kommentaar, string sessiID,string kasutajanimi,int lumelauaID) - lisab kommentaari vastava kasutaja poolt vastava lumelaua kohta AB-sse
- Lumelaud.cs - kirjeldab lumelauda ja tema parameetreid. Sisaldab meetodeid:
- annaKeskminePikkus(int kaal, int pikkus, Lumelaud.s6iduStiilid s6iduStiil) - tagastab lumelaua pikkuse vastavalt kaalule ja pikkusele ja sõidustiilile
- kehamassiindeks(int kaal, int pikkus) - arvutab kehamassiindeksi, arvutamaks pikkuse nihet
- kesknihe(double avg, double i) - arvutab nihke lumelaua pikkusele, vastavalt kehamassiindeksile
- pikkusekontroll(int keskminePikkus, int isikuPikkus) - kui inimese pikkus on nii suur, et arvutuste järgi sobivat lumelauda ei ole, annab kõige pikemad lauad. Sama väga lühikestega - annab lühimad lauad.
- CheckBoardParams(string painduvus, string nimi, string tootja, string isTwin, string isMens)- andmete valideerimine enne uue lumelaua AB-sse sisestamist
- Passwd.cs - siin hashitakse ja soolatakse parool ning tehakse ka vastupidine protsess. Sisaldab meetodeid:
- GenerateSalt() - genereerib salt'i
- HashString(string tekst) - hashib parooli
- HashPassword(string password, string salt) - salted hashib parooli
- Statistika.cs - statistika klass ja parameetrid, meetodid logimiseks. Sisaldab meetodeid:
- logiStatistika(string kasutaja, string toimingu_tyyp) - logib kasutaja toimingu xml faili (logi.xml)
- kysiStatistika(string toimingu_tyyp) - tagastab statistika tegevuse kohta
- StatistikaK.cs - statistika küsimine kasutaja järgi. Sisaldab meetodit:
- kysiKasutajaStatistika(string kasutajanimi) - küsib statistika kasutaja kohta kasutajanime järgi
- WebService.cs - meetod, kus kutsutakse välja teistes klassides olevad meetodid. Siin on veebimeetodid.
Infot kasutatud süsteemide kohta
- Parooli krüpteerimine salted hashiga:
- Unikaalsete sessioonide genereerimine (Guid'i kohta info):
Kood
Teenuse source [1]
Klientrakendus
Üldist
Klientrakenduse tegime eraldi projektina. Testimiseks on vajalikud nii veebiteenus kui ka klientrakendus alla laadida. Veebiteenuse ühendamiseks klientrakendusega on vajalik veebiteenus tööle panna ja jätta /brauseris/. Seejärel klientrakendus avada Visual Studios. Klientrakenduse Solution menüüs Service Reference'ide all on reference Lumelauad. Paremklikk selle peal ning Configuration -> aadress muuta selleks, mis brauseris aadress on veebiteenusel.
Nimekirjade kuvamisel kasutasime DataGride. See võimaldab kasutajatel veerge enda mugavuse järgi ümber tõsta ning samuti sorteerida iga veeru järgi vastavalt. Kasutajaid andmebaasist klientrakenduse kaudu kustutada ei ole võimalik - kasutajaid saab aktiveerida ja deaktiveerida (statistika ja turvalisuse huvides). Samuti on võimalik muuta kasutajate rolle - kui kasutajal on üks roll, siis "muuda rolli" vajutades muutub see teiseks. Lumelauadadel võib andmebaasis olla mitu pikkust ja laiust - seetõttu on võimalik lisada lumelaud koos nime ja tootja ja muude parameetritega kui ka lihtsalt lisada lumelauale pikkus ja laius.
Kuidas kasutada
Klientrakendust on võimalik kasutada külalisena, tavakasutajana või administraatorina.
- Külaline - võimalik otsida lumelaudu, võimalik uus kasutaja teha (tavakasutaja) ning võimalik sisse logida.
- Tavakasutaja - lisaks eelnevale saab tavakasutaja lisada kommentaare otsitud lumelaudade kohta.
- Administraator - lisaks eelnevale saab vaadata kasutajate/toimingute statistikat, lisada/kustutada lumelaudu, lisada/deaktiveerda/aktiveerida kasutajaid, muuta rolle. Administraatoritele tekib sisselogides aknasse ka "Administreeri" nupp.
Statistikat logitakse kasutajate puhul. Võimalikes kohtades antakse kasutajale ka infot, kuidas kasutaja käituma peab (nt sõne sisestamisel pikkuseks jne). Kui viga on milleski muus ning programmis seda kirjeldatud ei ole, väljastatakse kinnipüütud error.
Klassijaotus
- MainWindow.xaml.cs - kõik, mis on seotud põhiaknaga - saab sisse/välja logida + teistesse akendesse. Sisaldab meetodeid kõikide nuppude kohta, mis mainwindow.xaml's on ja Algväärtustamise meetodit juhuks, kui sessioon lõppeb.
- UusKasutaja.xaml.cs - uue kasutaja loomise aken külalisele. Sisaldab meetodit tavakasutaja loomiseks.
- Admin.xaml.cs - administraatori aken, kust saab hallata lumelaudu, kasutajaid, vaadata statistikat.
Kood
Kood asub siin: (tulemas)
Administraatori testimiseks saab kasutada kasutajanime tester, parool test. Veebiteenuse ja klientrakenduse sidumise juhend on teema "Üldist" all.
Meeskonna aruanne
Captain's Log
06.05.2011
- debugimine, meetodite lisamine, täiendamine (Indrek, Miina)
- Jäänud on veel testimine ning koodi silumine
1.05-5.05
(Miina, Indrek)
- MainWindow, Adminni aken, UusKasutaja aken
- Sessioonide sidumine vajalike meetoditega
- Täiendused veebiteenusesse vastavalt klientrakendusele
- Veebiteenuse meetodite sidumine klientrakenduse meetoditega
- Enamus meetodeid on valmis.
25.04.2011
- Ettekandmine, vaja teha järgmised asjad:
- Wikileht täiendada (korras!)
- Kasutaja sessioonide logisse salvestada IP
- Statistika logisse rakenduse ID ka juurde
- Sessiooni aega lühemaks
- Projekti kommentaaridest lähtuvalt vaja dokumentatsiooni täiendada
18.04.2011
- lumelaua lisamise debugimine - OK (Indrek)
- statistika küsimine kasutajanime ja toimingu järgi (Miina)
- kasutajate sessioonid (Miina)
17.04.2011
- Kommentaaride lisamine (Reigo)
- Statistika (Miina)
16.04.2011
- Lumelaua lisamine - OK(Erik)
15.04.2011
- kasutajad - autentimine, regamine, deaktiveerimine, rollid - OK!(Miina)
14.04.2011
- lumelaua lisamine (Erik)
- lumelaua päringud AB-st: OK! (Indrek)
- debugimine (Reigo)
13.04.2011
- lumelaua lisamine - valideerimine (Erik)
- lumelaua päringud andmebaasist (Indrek)
12.04.2011
- lumelaudade päringud (Miina)
- kasutaja lisamine andmebaasi (Indrek)
- kasutajate pool veebiteenuses (Miina)
11.04.2011
- päringud (Indrek)
10.04.2011
- Web Service'i sidumine AB-ga + klassid (Miina)
- rollidejaotus:
- Veebiteenuse kasutaja pool: Miina
- Veebiteenuse toote pool: Indrek
- Toodete sisestamine AB-sse: Erik
06.04.2011
- Andmebaasi ümbermuutmine ja kirjed (Indrek, Reigo)
28.03.2011
- Reigo ja Erik tutvusid iseseisvalt web service loomisega selle kasutamisega, said kokku ja tegid miitingu. Toimus ülesannete konkreetsem jaotus.
28.02.2011
- XSLT ja XML ühildamine + täiendus(Reigo)
- Wiki, XML täiendus (Miina)
- XSLT (Indrek)
27.02.2011
- XML Schema (Reigo)
- XSLT (Miina)
- XML täiendus
21.02.2011
- Sündis Wikileht koos meeskonnanimega
- Esialgne XML kondikava (Miina)
18.02.2011
- Idee kooskõlastamine õppejõuga
14.02.2011
- Indrek pakkus, et võiks teha midagi lumelaudadest
- Indrek-Miina-Reigo arutasid idee täpsemaks