Meeskond "C terav": Difference between revisions

From ICO wiki
Jump to navigationJump to search
Ssarv (talk | contribs)
Ssarv (talk | contribs)
 
(63 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== Liikmed ==
*Madis Sarv
*Siim Sarv
*Jaanus Vallmann
== Idee ==
== Idee ==


Line 9: Line 15:
Hinnata saab aint komentaari lisades.
Hinnata saab aint komentaari lisades.
Tavakasutaja ei pea sisselogima.
Tavakasutaja ei pea sisselogima.
== Ülesanded ==
*Madis Sarv - xml,teenuse metoodid, klientrakendus, wiki, mobiiliklient
*Siim Sarv - xml,teenuse metoodid, klientrakendus, desktopiklient
*Jaanus Vallmann - xml,teenuse turva ja logi


== XML ==
== XML ==
Line 74: Line 86:
               <poolik>1</poolik>
               <poolik>1</poolik>
             </hinnad>
             </hinnad>
             <komentaarid>
             <kommentaarid>
               <komentaar>
               <kommentaar>
                 <nimi>Teet</nimi>
                 <nimi>Teet</nimi>
                 <text>Jõhker oli</text>
                 <text>Jõhker oli</text>
                 <hinnang>8</hinnang>
                 <hinnang>8</hinnang>
               </komentaar>
               </kommentaar>
             </komentaarid>
             </kommentaarid>
             <otsas>1</otsas>
             <otsas>1</otsas>
           </toit>
           </toit>
Line 91: Line 103:
               <poolik>2</poolik>
               <poolik>2</poolik>
             </hinnad>
             </hinnad>
             <komentaarid>
             <kommentaarid>
               <komentaar>
               <kommentaar>
                 <nimi>Aivar</nimi>
                 <nimi>Aivar</nimi>
                 <text>Külmaks oli läinud</text>
                 <text>Külmaks oli läinud</text>
                 <hinnang>2</hinnang>
                 <hinnang>2</hinnang>
               </komentaar>
               </kommentaar>
             </komentaarid>
             </kommentaarid>
             <otsas>0</otsas>
             <otsas>0</otsas>
           </toit>
           </toit>
Line 122: Line 134:


</source>
</source>
===XML Schema===
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="kohvikud">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="kohvik">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nimi" type="xs:string" />
              <xs:element name="aadress">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="riik" type="xs:string" />
                    <xs:element name="maakond" type="xs:string" />
                    <xs:element name="linnVald" type="xs:string" />
                    <xs:element name="tanav" type="xs:string" />
                    <xs:element name="majaNR" type="xs:string" />
                    <xs:element name="indeks" type="xs:integer" />
                  </xs:sequence>
                  <xs:attribute name="laius" type="xs:decimal" use="required" />
                  <xs:attribute name="pikkus" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="lahtiOlekuAjad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="aeg">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="nadalaPaevad">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="nadalaPaev" type="xs:string" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="avamisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="sulgemisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="erandPaevad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="kuuPaev">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="paev" type="xs:integer" />
                          <xs:element name="kuu" type="xs:integer" />
                          <xs:element name="aasta" type="xs:integer" />
                          <xs:element name="avamisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="sulgemisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="menyyd">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="menyy">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="kuuPaev">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="paev" type="xs:integer" />
                                <xs:element name="kuu" type="xs:integer" />
                                <xs:element name="aasta" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="toidud">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="toit">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="nimi" type="xs:string" />
                                      <xs:element name="liik" type="xs:string" />
                                      <xs:element name="info" type="xs:string" />
                                      <xs:element name="hinnad">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="tais" type="xs:decimal" />
                                            <xs:element name="poolik" type="xs:decimal" />
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="kommentaarid">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="kommentaar">
                                              <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element name="nimi" type="xs:string" />
                                                  <xs:element name="text" type="xs:string" />
                                                  <xs:element name="hinnang" type="xs:integer" />
                                                </xs:sequence>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="otsas" type="xs:boolean" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="lisad">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element maxOccurs="unbounded" name="lisa">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="nimi" type="xs:string" />
                                            <xs:element name="otsas" type="xs:boolean" />
                                          </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:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
</source>
===XSLT===
<source lang="xml">
<?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>Kohvikud</h2>
    <table border="1">
      <tr bgcolor="#FFFF00">
        <th>Kohvik</th>
        <th>Aadress</th>
        <th>Lahtiolekuajad</th>
        <th>Erandpäevad</th>       
      </tr>
      <xsl:for-each select="kohvikud/kohvik">
        <tr>
          <td>
            <xsl:value-of select="nimi"/>
          </td>
          <td>
            <xsl:value-of select="aadress"/>
          </td>
          <td>
            <xsl:value-of select="lahtiOlekuAjad"/>
          </td>
          <td>
            <xsl:value-of select="erandPaevad"/>
          </td>               
        </tr>
      </xsl:for-each>
    </table>
    <h2>Menüü</h2>
      <table border="1">
        <tr bgcolor="#FFFF00">
          <th>Toit</th>
          <th>Liik</th>
          <th>Info</th>               
          <th>Hind</th>
          <th>Kommentaar</th>         
          <th>Otsas</th>
        </tr>       
        <xsl:for-each select="kohvikud/kohvik/menyyd/menyy/toidud/toit">
          <tr>
            <td>
              <xsl:value-of select="nimi"/>
            </td>
            <td>
              <xsl:value-of select="liik"/>
            </td>
            <td>
              <xsl:value-of select="info"/>
            </td>                       
            <td>
              <xsl:for-each select="hinnad">
              <table>
                <tr>
                  Täis: <xsl:value-of select="tais"/>
                  <tr />
                  Poolik: <xsl:value-of select="poolik"/>
                </tr>               
              </table>
              </xsl:for-each>
            </td>
            <td>
              <xsl:for-each select="kommentaarid/kommentaar">
                <table>
                  <tr>
                    <td>
                      <xsl:value-of select="text"/> (<xsl:value-of select="nimi"/>) Hinnang: <xsl:value-of select="hinnang"/>
                    </td>
                  </tr>
                </table>               
              </xsl:for-each>
            </td>
            <td>             
              <xsl:value-of select="otsas"/>                   
            </td>
          </tr>
        </xsl:for-each>
      </table>
      <h3>Lisad</h3>
      <table border="1">
        <tr bgcolor="#FFFF00">
          <th>Liasd</th>
          <th>Otsas</th>
        </tr>
        <xsl:for-each select="kohvikud/kohvik/menyyd/menyy/toidud/lisad/lisa">
          <tr>
            <td>
              <xsl:value-of select="nimi"/>
            </td>
            <td>
              <xsl:value-of select="otsas"/>
            </td>
          </tr>
        </xsl:for-each>
      </table>
    </body>
    </html> 
  </xsl:template>
</xsl:stylesheet>
</source>
[[File:Xsl_cterav.jpg]]
==Veebiteenus==
===Klassijaotus===
*KasutajaKirjeClass - Sisaldab kasutajaga seotuid meetodeid näiteks Kasutaj kohta info saamine.
*KohvikKirjeClass - Sisaldab kohvikuga seaotud meedodeid näiteks kohvikute kuvamine ja nende kohta käiva info muutmine.
*KomentaarKirjeClass - Sisaldab meedodeid komenataaride vaatamiseks ja lisamiseks.
*LahtiKirjeClass - Sisaldab meedodeid kohviku lahit oleku eagade kohta.
*MenyyKirjeClass - Sisaldab infot kohviku menüüde lisamise muutmise kohta.
*ToiduKirjeClass - Sisadab infot toidude kuvamise liisamise ja muutmise kohta.
===Meedodite kirjeldused===
*AnnaMenyy() - Tagastab menüü vastavalt saadud menyyID-le.
*AnnaMenyyKirje() - Tagasatb menüü kireje sisu vastavalt menyyKirjeID-le .
*AnnaKoikMenyyd() - Tagastab kõik menüüd, mis ühel kohvikul võivad olla vastavlt kohvikID-le.
*lisaMenyy() - Lisab uue menüü kohvikule vastavalt kohvikID-le.
*lisaMenyyKirje() - Lisab uue menüü kirje vastavalt menyyID-le.
*updateMenyy() - Uuendab menüüd vastavalt menyyKirjeID-le.
*updateMenyyKirje() - Uuendab menüükirjet vastavalt menyyKirjeID-le.
*delMenyy() - Kustaub menüü vastavalt menyyKirjeID-le.
*delMenyyKirje() - Kustaub menüükirje vastavalt menyyKirjeID-le.
*addtUpMenyyKirje() - Lissab hääle toidule menüükirjes vastavalt menyyKirjeID-le.
*addtDownMenyyKirje() - Lissab  negatiivsehääle toidule menüükirjes vastavalt menyyKirjeID-le.
*AnnaKohvikud() - Tagastab kõik olemas olevad kohvikud.
*AnnaKohvik() - Tagastab info kohviku kohta vastavlt kohvikID-le.
*addKohvik() - Lisab uue kohviku andmebaasi.
*delKohvik() - Eemaldab kohviku vastavlt kohvikID-le.
*upKohvik() - Uuendab kohviku infot vastaval kohvikID-le.
*annaKohvikuToidud() - Tagasdab kohvikus pakutavad toidud vastavalt saadud kohvikID-le.
*annaToidud() - Annab kõikides kohvikutes olemasolevad toidud.
*annaToiduTyyp() - Tagastab toidu tüüpi nime vastavalt tyypID-le.
*annaToiduTyybid() - Tagastab kõik olemasolead erinevad toitude tüübid.
*annaLisandid() - Tagastab kõik olemasolevad lisandid.
*addToit() - Lisab uue toidu andmebaasi vajab toitTyypID ja toitKohvikID.
*upToit() -  Värskendab toidu infot andmebaasis vastavalt toitID-le ja toitTyypID-le.
*delToit() - Kustutab toidu vastavalt toitID-le.
*annaKasutajad() - Tagasdab kõik andmebaasis olemas olevad kasutajad.
*annaKasutaja() - Tagastab kasutaj kohta nime ja kas kasutaja on aktiivne vastavalt saadud KasutajaID-le.
*upKasutaja() - Uuendab kasutaja infot KasutajaID-le.
*delKasutaja() - Muudab kasuta mitteaktiivseks KasutajaID-le.
*addKasutaja() - Lisab uue kasutaja kasutajate tabelisse vaja ette anda kasutaja yunnus ja salasõna.
*AddKohvikuKasutaja() - Seob kasutaja kindla kohvikuga vastavalt kohvikID ja kasutajaID.
*delKohvikuKasutaja() - Kustutab kohviku kasutaja kohvikuKasutaja tabelis vastavalt kasutajaID-le.
*annaKohvikuKasutajad() - Tagastab kohviu kasutajaid ja kohvkuid kkohvikID järgi.
*checkKasutaja() - Kontrollib kas kasutaja sisestatud nimi ja parool on õiged.
*addtUpKommentaar() - Annab poolthääle komentaarile vastavalt kommentaarID-le.
*addtDownKommentaar() - Annab vastu hääle komentaaridele vastavalt kommentaarID-le.
*addKommentaar() - Lisab uue komentaari komentaaride tabelisse vaja ette anda MenyyKirje_ID.
*annaKommentaarid() - Annab komentaarid vastavlt menyyKirjeID-le.
*annaKohvikuLahtiOlek() - Tagastab info kohviku lahtioleku aegade kohta, vastavlt kohvikuID-le.
*addLahtiOlek() - Lisab kohvikule uue lahtioleku aja. Kasutades selleks kohvikuID.
*delLahti() - Kustudab lahtioleku aja, vastavalt lahtiID-le.
*updLahti() - Muudab lohtioleku aega, vastavalt lahtiID-le.
===Andmebaas:===
[[File:andmebaasCteravUus.png]]
==Klient Rakendus==
===Kirjeldus===
Otsustasime teha veebiklientrakenduse kasutades selleks .NET arendus keskonda.
Rakendus koosneb kahes osast:
====Esimene osa====
*Kasutaja saab vaadata andmebaasis olemasolevaid kohvikuid.
*Kohviku kohta saab vaadata selle aadressi ja lahtioleku aegu.
*Kohviku kohta saab ka vaadata ka menüüd.
*Kohviku menüüs saab erinevaid toite komenteerida ja lisada poolt ja vastu hääli toidule.
====Teine osa====
Tesieks pooleks on kohviku omaniku poolne vaade mis on turvatud. Turvamiseks kasutasime .net-i sisse ehitatud logimis funktsiooni.
Ka toimub pidev kasutaja õiguste kontroll kui tahetakse midagi kohvikuga seonduvat muuta.
*Kohiku omanik saab muuta kohviku aadersi ja lahtioleku aegu.
*Saab lisad muuta ja kustuda kohviku menyysi.
*Saab lisada muuta ja kustudada uusi toite.
*Saab Lisada toite menüüdese, neid muuta ja kustudada.
====Pildid====
Uue toidu lisamine
[[File:ToiduLisamine1.png]]
Omaniku pealeht
[[File:omanikPeaCterav.png]]
Menüü
[[File:menyy.png]]
Mobiil
[[File:telefon.png]]
Desktopklient
[[File:kassa.png]]
====Koodinäited====
Teenuse koos klientrakendusega, mobiilirakendusega ja desktopkliendiga saab kätte [http://enos.itcollege.ee/~msarv/vork2 siit]
Testimiseks tuleb teenuse aadress muuta rakenduses, sest teilvõivad olla portid erinevad mida kasutab. Lisaks tuleb ka rakenduse web.config failis pordid muuta. Teenus tuleb lisada nimega KohvikTeenus. Mobiilirakenduse puhul piisab uue refernici lisamisega soovitavalt nimeks panna KohvikTeenus.
====Kuidas kasutada====
Rakkendust on võimalik kasutada külalisena või siis kasutajane.
*Külalisena saab vaadata kohvikuid, kohviku asukoht, tööaehu ja menüüsi
*Kasutaja saab lisada uusi enda kohvikuid, muuta nede kohta infot, lisada uusi menüüsi, ja toite.
====Klassid rakkenduses====
*Kasutaja -Annab teenuses kasutajale määratud kohvikud.
*KasutajaKohvik -Annab kasutaj ühe kindal kohvkiu.
*KasutajaMenyy -Annab kasutajle valitud  kohiku menüü.
*Kohvik - Annab külalisele kogu info kohvikust.
*KohvikMuuda - Muudab kindla kohviku andmeid.
*Kohvikud - Annab külalisele kõik olemasolevad kohvikud.
*Kommenaarid - Kuvab olemas olevad komentaarid ja lisab uusi.
*LahtiAjad -Annab kohviku omanikule võimaluse muuda kohviku lahtioleku aegu ja lisada uusi.
*Login - Kohviku omaniku sisselogimiseks.
*Logout - väljalogimiseks.
*Menyy - Kuvab külastajale olemas oleva menüü sisu.
*MenyyKirje - Laseb Kohviku omanikul lisada uusi toite menüüse ja olemasolevaid muuta
*MenyyMuuda - Laseb muuta menüüd.
*Toidud - Tagastab omanikule olemasolevad toidud.
*ToidMuuda - Lubab omanikul muuta toite ja lisada neid juurde.
*audentimine - Kohviku sessionide cookide ja kasuta audentimine.
==Mobiili rakendus==
Loodud kiireks kasutamiseks kui peaks olema vajadus valida sõõgikohta lõunaks või õhtuks.
Rakendus võimaldab saada infot kohviku asukoha kohta ja saada teada ka pakutavat menüüd.
Rakkenduse käivitamiseks on vajalik tõmmata endale WP7 devoleper tools saab [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce siit].
Lisaks tuleb muuta reference ära ja nimeks panna KohvikTeenus.
==Desktop rakendus==
Loodud kassapidajale päevajooksul menüüs olevate asjade hinna muutmiseks või menüüst eemaldamiseks.
==Aruanne==
===Tegime valmis!===
Projektiks valisime kohvikute infosüsteemi, kust saab kasutaja teada milliseid toite kohvikus pakutakse.
Lisaks sai juurde tehtud ka võimalus, mis lubab erinevaid toite kohviku menüüs komenteerida ja rateida.
Kohviku omanikud saavad muuta informatsiooni oma kohviku kohta, ehk saavad lisada uusi lahtioleku aegu, koostatda uusi menüüsi
ja lisada uusi sööke menüüse. Projekti ehitamist alustasime XML, XML Schema ja XSLT. Pärast mida alustasime tööd andmebaasi loomiseks. Kui andmebaas oli valmis saanud alustasime tööd teenuse tegemiseks. Tehtud teenus võimaldab pärida infot andmebaasist, näiteks on olemas võimalus pärida infot ühe kindla kohviku kohta, või siis pärida millise kasutajaga on seaotud kindlad kohvikud. Pärast mida hakkasime ehitama veebiklienti.Veebiklient võimaldab tavalisel kasutajal, ehk siis mitteregisteeritud kasutajal saada infot kohviku kohta, näiteks kohviku aadress, lahtioleku ajad, pakutavad menüüd ja ka komenterida pakutavaid toite ja hinnata neid. Ka sisaldab veebiklient kohviku omaniku poolt, kus saab kohviku omanik lisada uusi menüüsi kohvikutele, mis on temaga seotud. Muuta kohvikuga seotud infot, ehk muuta lahtioleku aegu aadresi jne. Ka saab muuta menüüsi lisada uusi, lisada uusi toite, muuta menüüs olevate toidude hindu jne.Kuna selgus, et ühest jääb ikkagi vähest otsustasime teha ka eraldi windowsi kliendi ja WP7 kliendi.
Windowsi klient on mõeldud kassapidaja igapäevaseks tööks, mis võimaldab muuta hindu ja eemaldada juba läbimüüdud toite.
WP7 rakendus on mõeldud kiireks info leidmiseks kohviku kohta, mis võimaldab siis saada teada kohviku asukohta, pakutavaid menüüsi ja toite.
===Mida juurde õppisime===
*XML, XML Schema ja XSLT
*Kuidas luua teenust ja siduda seda andmebaasiga.
*Kuidas luua teenusele klienti.
*Kuidas luua WP7 klienti.
===Millised probleemid tekkisid töökäigus!===
*Teenuse ehitamine oli algul suhteliselt aeglane kuna kellegil polnud algul erilisi kogemusi kuidas sellist asja üldse teha tuleks
hilisemalt küll läks töö kiiremini kuna enamus probleemid olid juba lahendatud töö algus etapil.
*Veebiklienti tegemise ajal selgus, et teenust on vaja täiendada kuna osa vajaminevaid meetodeid ei suudedud ette näha teenuseehitamise käigus.
*Mobiili rakenduse tegemise algfaas sarnases oma rakuselt teenusele selle poolest, et puudus kogemus kuida seda korralikult ehitada, mille tõttu kanatas ka disain tugevalt.
===Mida paremini teha oleks saanud!===
*Oleks pidanud arvestama rohkema ajakuluga kuna arvestasime et kulub vähem aega kui tegelikult läks, mis oleks andnud võimaluse  rohkem siluda.
==Meeskoona Punktid==
*Madis Sarv - 25
*Siim Sarv - 27
*Jaanus Vallmann - 8

Latest revision as of 13:46, 6 June 2011

Liikmed

  • Madis Sarv
  • Siim Sarv
  • Jaanus Vallmann

Idee

Kohviku omanikud saavad lisada oma kohvikulue päeva menüüsi, mida saavad teised komenteerida. Kohviku kohta on ka asukoht ja ajakava millal see lahti on. Toite saavad lisada ainult regristreerinud kasutajad, kes on kohviku omanikud. Kohviku omanikud saavad ka muuta oma kohviku andmeid ja lahtioleku aegu ning lisada erandpäevi(kas on üldse kinni või on pikemalt lahti). Omanik lisab päevakohta menüü, kui see saab sel päeval otsa märgib, et on otsas. Menüüs saab ta lisada toidule nime, tüübi ja infot selle kohta ning täis- ja pooliku portsioni hinnad. Tavakasutajad saavad komenteerida toite (sisestades oma nime ja komentaari) ning neid hinnata. Hinnata saab aint komentaari lisades. Tavakasutaja ei pea sisselogima.

Ülesanded

  • Madis Sarv - xml,teenuse metoodid, klientrakendus, wiki, mobiiliklient
  • Siim Sarv - xml,teenuse metoodid, klientrakendus, desktopiklient
  • Jaanus Vallmann - xml,teenuse turva ja logi

XML

<?xml version="1.0" encoding="utf-8"?>
<kohvikud>
  <kohvik>
    <nimi>Kohvik1</nimi>
    <aadress laius="59.395515" pikkus="24.664993">
      <riik>Eesti</riik>
      <maakond>Harjumaa</maakond>
      <linnVald>Tallinn</linnVald>
      <tanav>Raja</tanav>
      <majaNR>C4</majaNR>
      <indeks>12315</indeks>
    </aadress>
    <lahtiOlekuAjad>
      <aeg>
        <nadalaPaevad>
          <nadalaPaev>esmaspäev</nadalaPaev>
          <nadalaPaev>teisipäev</nadalaPaev>
          <nadalaPaev>kolmapäev</nadalaPaev>
          <nadalaPaev>neljapäev</nadalaPaev>
          <nadalaPaev>reede</nadalaPaev>
        </nadalaPaevad>
        <avamisAeg>
          <tund>09</tund>
          <minut>00</minut>
        </avamisAeg>
        <sulgemisAeg>
          <tund>16</tund>
          <minut>00</minut>
        </sulgemisAeg>
      </aeg>
    </lahtiOlekuAjad>
    <erandPaevad>
      <kuuPaev>
        <paev>1</paev>
        <kuu>1</kuu>
        <aasta>2011</aasta>
        <avamisAeg>
          <tund>09</tund>
          <minut>00</minut>
        </avamisAeg>
        <sulgemisAeg>
          <tund>16</tund>
          <minut>00</minut>
        </sulgemisAeg>
      </kuuPaev>
    </erandPaevad>
    <menyyd>
      <menyy>
        <kuuPaev>
          <paev>23</paev>
          <kuu>2</kuu>
          <aasta>2011</aasta>
        </kuuPaev>
        <toidud>
          <toit>
            <nimi>Seljanka</nimi>
            <liik>Supp</liik>
            <info>Supp on kausis</info>
            <hinnad>
              <tais>1.80</tais>
              <poolik>1</poolik>
            </hinnad>
            <kommentaarid>
              <kommentaar>
                <nimi>Teet</nimi>
                <text>Jõhker oli</text>
                <hinnang>8</hinnang>
              </kommentaar>
            </kommentaarid>
            <otsas>1</otsas>
          </toit>
          <toit>
            <nimi>Pozarski kotlett</nimi>
            <liik>Praad</liik>
            <info>kotlett ja keedukartulid</info>
            <hinnad>
              <tais>2.5</tais>
              <poolik>2</poolik>
            </hinnad>
            <kommentaarid>
              <kommentaar>
                <nimi>Aivar</nimi>
                <text>Külmaks oli läinud</text>
                <hinnang>2</hinnang>
              </kommentaar>
            </kommentaarid>
            <otsas>0</otsas>
          </toit>
          <lisad>
            <lisa>
              <nimi>Praekartul</nimi>
              <otsas>0</otsas>
            </lisa>
            <lisa>
              <nimi>Riis</nimi>
              <otsas>0</otsas>
            </lisa>
            <lisa>
              <nimi>Ahjukartul</nimi>
              <otsas>0</otsas>
            </lisa>
          </lisad>
        </toidud>
      </menyy>
    </menyyd>
  </kohvik>
</kohvikud>

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="kohvikud">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="kohvik">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nimi" type="xs:string" />
              <xs:element name="aadress">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="riik" type="xs:string" />
                    <xs:element name="maakond" type="xs:string" />
                    <xs:element name="linnVald" type="xs:string" />
                    <xs:element name="tanav" type="xs:string" />
                    <xs:element name="majaNR" type="xs:string" />
                    <xs:element name="indeks" type="xs:integer" />
                  </xs:sequence>
                  <xs:attribute name="laius" type="xs:decimal" use="required" />
                  <xs:attribute name="pikkus" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="lahtiOlekuAjad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="aeg">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="nadalaPaevad">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="nadalaPaev" type="xs:string" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="avamisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="sulgemisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="erandPaevad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="kuuPaev">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="paev" type="xs:integer" />
                          <xs:element name="kuu" type="xs:integer" />
                          <xs:element name="aasta" type="xs:integer" />
                          <xs:element name="avamisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="sulgemisAeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:integer" />
                                <xs:element name="minut" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="menyyd">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="menyy">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="kuuPaev">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="paev" type="xs:integer" />
                                <xs:element name="kuu" type="xs:integer" />
                                <xs:element name="aasta" type="xs:integer" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="toidud">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="toit">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="nimi" type="xs:string" />
                                      <xs:element name="liik" type="xs:string" />
                                      <xs:element name="info" type="xs:string" />
                                      <xs:element name="hinnad">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="tais" type="xs:decimal" />
                                            <xs:element name="poolik" type="xs:decimal" />
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="kommentaarid">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="kommentaar">
                                              <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element name="nimi" type="xs:string" />
                                                  <xs:element name="text" type="xs:string" />
                                                  <xs:element name="hinnang" type="xs:integer" />
                                                </xs:sequence>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="otsas" type="xs:boolean" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="lisad">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element maxOccurs="unbounded" name="lisa">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="nimi" type="xs:string" />
                                            <xs:element name="otsas" type="xs:boolean" />
                                          </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: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>Kohvikud</h2>
    <table border="1">
      <tr bgcolor="#FFFF00">
        <th>Kohvik</th>
        <th>Aadress</th>
        <th>Lahtiolekuajad</th>
        <th>Erandpäevad</th>        
      </tr>
      <xsl:for-each select="kohvikud/kohvik">
        <tr>
          <td>
            <xsl:value-of select="nimi"/>
          </td>
          <td>
            <xsl:value-of select="aadress"/>
          </td>
          <td>
            <xsl:value-of select="lahtiOlekuAjad"/>
          </td>
          <td>
            <xsl:value-of select="erandPaevad"/>
          </td>                
        </tr>
      </xsl:for-each>
    </table>
    <h2>Menüü</h2>
      <table border="1">
        <tr bgcolor="#FFFF00">
          <th>Toit</th>
          <th>Liik</th>
          <th>Info</th>                
          <th>Hind</th>
          <th>Kommentaar</th>          
          <th>Otsas</th>
        </tr>        
        <xsl:for-each select="kohvikud/kohvik/menyyd/menyy/toidud/toit">
          <tr>
            <td>
              <xsl:value-of select="nimi"/>
            </td>
            <td>
              <xsl:value-of select="liik"/>
            </td>
            <td>
              <xsl:value-of select="info"/>
            </td>                         
            <td>
              <xsl:for-each select="hinnad">
              <table>
                <tr>
                  Täis: <xsl:value-of select="tais"/>
                  <tr />
                  Poolik: <xsl:value-of select="poolik"/>
                </tr>                 
              </table>
              </xsl:for-each>
            </td>
            <td>
              <xsl:for-each select="kommentaarid/kommentaar">
                <table>
                  <tr>
                    <td>
                      <xsl:value-of select="text"/> (<xsl:value-of select="nimi"/>) Hinnang: <xsl:value-of select="hinnang"/>
                    </td>
                  </tr>
                </table>                
              </xsl:for-each>
            </td>
            <td>              
              <xsl:value-of select="otsas"/>                    
            </td>
          </tr>
        </xsl:for-each>
      </table>
      <h3>Lisad</h3>
      <table border="1">
        <tr bgcolor="#FFFF00">
          <th>Liasd</th>
          <th>Otsas</th>
        </tr>
        <xsl:for-each select="kohvikud/kohvik/menyyd/menyy/toidud/lisad/lisa">
          <tr>
            <td>
              <xsl:value-of select="nimi"/>
            </td>
            <td>
              <xsl:value-of select="otsas"/>
            </td>
          </tr>
        </xsl:for-each>
      </table>
    </body>
    </html>  
  </xsl:template>
</xsl:stylesheet>

Veebiteenus

Klassijaotus

  • KasutajaKirjeClass - Sisaldab kasutajaga seotuid meetodeid näiteks Kasutaj kohta info saamine.
  • KohvikKirjeClass - Sisaldab kohvikuga seaotud meedodeid näiteks kohvikute kuvamine ja nende kohta käiva info muutmine.
  • KomentaarKirjeClass - Sisaldab meedodeid komenataaride vaatamiseks ja lisamiseks.
  • LahtiKirjeClass - Sisaldab meedodeid kohviku lahit oleku eagade kohta.
  • MenyyKirjeClass - Sisaldab infot kohviku menüüde lisamise muutmise kohta.
  • ToiduKirjeClass - Sisadab infot toidude kuvamise liisamise ja muutmise kohta.

Meedodite kirjeldused

  • AnnaMenyy() - Tagastab menüü vastavalt saadud menyyID-le.
  • AnnaMenyyKirje() - Tagasatb menüü kireje sisu vastavalt menyyKirjeID-le .
  • AnnaKoikMenyyd() - Tagastab kõik menüüd, mis ühel kohvikul võivad olla vastavlt kohvikID-le.
  • lisaMenyy() - Lisab uue menüü kohvikule vastavalt kohvikID-le.
  • lisaMenyyKirje() - Lisab uue menüü kirje vastavalt menyyID-le.
  • updateMenyy() - Uuendab menüüd vastavalt menyyKirjeID-le.
  • updateMenyyKirje() - Uuendab menüükirjet vastavalt menyyKirjeID-le.
  • delMenyy() - Kustaub menüü vastavalt menyyKirjeID-le.
  • delMenyyKirje() - Kustaub menüükirje vastavalt menyyKirjeID-le.
  • addtUpMenyyKirje() - Lissab hääle toidule menüükirjes vastavalt menyyKirjeID-le.
  • addtDownMenyyKirje() - Lissab negatiivsehääle toidule menüükirjes vastavalt menyyKirjeID-le.
  • AnnaKohvikud() - Tagastab kõik olemas olevad kohvikud.
  • AnnaKohvik() - Tagastab info kohviku kohta vastavlt kohvikID-le.
  • addKohvik() - Lisab uue kohviku andmebaasi.
  • delKohvik() - Eemaldab kohviku vastavlt kohvikID-le.
  • upKohvik() - Uuendab kohviku infot vastaval kohvikID-le.
  • annaKohvikuToidud() - Tagasdab kohvikus pakutavad toidud vastavalt saadud kohvikID-le.
  • annaToidud() - Annab kõikides kohvikutes olemasolevad toidud.
  • annaToiduTyyp() - Tagastab toidu tüüpi nime vastavalt tyypID-le.
  • annaToiduTyybid() - Tagastab kõik olemasolead erinevad toitude tüübid.
  • annaLisandid() - Tagastab kõik olemasolevad lisandid.
  • addToit() - Lisab uue toidu andmebaasi vajab toitTyypID ja toitKohvikID.
  • upToit() - Värskendab toidu infot andmebaasis vastavalt toitID-le ja toitTyypID-le.
  • delToit() - Kustutab toidu vastavalt toitID-le.
  • annaKasutajad() - Tagasdab kõik andmebaasis olemas olevad kasutajad.
  • annaKasutaja() - Tagastab kasutaj kohta nime ja kas kasutaja on aktiivne vastavalt saadud KasutajaID-le.
  • upKasutaja() - Uuendab kasutaja infot KasutajaID-le.
  • delKasutaja() - Muudab kasuta mitteaktiivseks KasutajaID-le.
  • addKasutaja() - Lisab uue kasutaja kasutajate tabelisse vaja ette anda kasutaja yunnus ja salasõna.
  • AddKohvikuKasutaja() - Seob kasutaja kindla kohvikuga vastavalt kohvikID ja kasutajaID.
  • delKohvikuKasutaja() - Kustutab kohviku kasutaja kohvikuKasutaja tabelis vastavalt kasutajaID-le.
  • annaKohvikuKasutajad() - Tagastab kohviu kasutajaid ja kohvkuid kkohvikID järgi.
  • checkKasutaja() - Kontrollib kas kasutaja sisestatud nimi ja parool on õiged.
  • addtUpKommentaar() - Annab poolthääle komentaarile vastavalt kommentaarID-le.
  • addtDownKommentaar() - Annab vastu hääle komentaaridele vastavalt kommentaarID-le.
  • addKommentaar() - Lisab uue komentaari komentaaride tabelisse vaja ette anda MenyyKirje_ID.
  • annaKommentaarid() - Annab komentaarid vastavlt menyyKirjeID-le.
  • annaKohvikuLahtiOlek() - Tagastab info kohviku lahtioleku aegade kohta, vastavlt kohvikuID-le.
  • addLahtiOlek() - Lisab kohvikule uue lahtioleku aja. Kasutades selleks kohvikuID.
  • delLahti() - Kustudab lahtioleku aja, vastavalt lahtiID-le.
  • updLahti() - Muudab lohtioleku aega, vastavalt lahtiID-le.

Andmebaas:

Klient Rakendus

Kirjeldus

Otsustasime teha veebiklientrakenduse kasutades selleks .NET arendus keskonda. Rakendus koosneb kahes osast:

Esimene osa

  • Kasutaja saab vaadata andmebaasis olemasolevaid kohvikuid.
  • Kohviku kohta saab vaadata selle aadressi ja lahtioleku aegu.
  • Kohviku kohta saab ka vaadata ka menüüd.
  • Kohviku menüüs saab erinevaid toite komenteerida ja lisada poolt ja vastu hääli toidule.

Teine osa

Tesieks pooleks on kohviku omaniku poolne vaade mis on turvatud. Turvamiseks kasutasime .net-i sisse ehitatud logimis funktsiooni. Ka toimub pidev kasutaja õiguste kontroll kui tahetakse midagi kohvikuga seonduvat muuta.

  • Kohiku omanik saab muuta kohviku aadersi ja lahtioleku aegu.
  • Saab lisad muuta ja kustuda kohviku menyysi.
  • Saab lisada muuta ja kustudada uusi toite.
  • Saab Lisada toite menüüdese, neid muuta ja kustudada.

Pildid

Uue toidu lisamine

Omaniku pealeht

Menüü

Mobiil

Desktopklient

Koodinäited

Teenuse koos klientrakendusega, mobiilirakendusega ja desktopkliendiga saab kätte siit


Testimiseks tuleb teenuse aadress muuta rakenduses, sest teilvõivad olla portid erinevad mida kasutab. Lisaks tuleb ka rakenduse web.config failis pordid muuta. Teenus tuleb lisada nimega KohvikTeenus. Mobiilirakenduse puhul piisab uue refernici lisamisega soovitavalt nimeks panna KohvikTeenus.

Kuidas kasutada

Rakkendust on võimalik kasutada külalisena või siis kasutajane.

  • Külalisena saab vaadata kohvikuid, kohviku asukoht, tööaehu ja menüüsi
  • Kasutaja saab lisada uusi enda kohvikuid, muuta nede kohta infot, lisada uusi menüüsi, ja toite.

Klassid rakkenduses

  • Kasutaja -Annab teenuses kasutajale määratud kohvikud.
  • KasutajaKohvik -Annab kasutaj ühe kindal kohvkiu.
  • KasutajaMenyy -Annab kasutajle valitud kohiku menüü.
  • Kohvik - Annab külalisele kogu info kohvikust.
  • KohvikMuuda - Muudab kindla kohviku andmeid.
  • Kohvikud - Annab külalisele kõik olemasolevad kohvikud.
  • Kommenaarid - Kuvab olemas olevad komentaarid ja lisab uusi.
  • LahtiAjad -Annab kohviku omanikule võimaluse muuda kohviku lahtioleku aegu ja lisada uusi.
  • Login - Kohviku omaniku sisselogimiseks.
  • Logout - väljalogimiseks.
  • Menyy - Kuvab külastajale olemas oleva menüü sisu.
  • MenyyKirje - Laseb Kohviku omanikul lisada uusi toite menüüse ja olemasolevaid muuta
  • MenyyMuuda - Laseb muuta menüüd.
  • Toidud - Tagastab omanikule olemasolevad toidud.
  • ToidMuuda - Lubab omanikul muuta toite ja lisada neid juurde.
  • audentimine - Kohviku sessionide cookide ja kasuta audentimine.

Mobiili rakendus

Loodud kiireks kasutamiseks kui peaks olema vajadus valida sõõgikohta lõunaks või õhtuks. Rakendus võimaldab saada infot kohviku asukoha kohta ja saada teada ka pakutavat menüüd. Rakkenduse käivitamiseks on vajalik tõmmata endale WP7 devoleper tools saab siit. Lisaks tuleb muuta reference ära ja nimeks panna KohvikTeenus.

Desktop rakendus

Loodud kassapidajale päevajooksul menüüs olevate asjade hinna muutmiseks või menüüst eemaldamiseks.

Aruanne

Tegime valmis!

Projektiks valisime kohvikute infosüsteemi, kust saab kasutaja teada milliseid toite kohvikus pakutakse. Lisaks sai juurde tehtud ka võimalus, mis lubab erinevaid toite kohviku menüüs komenteerida ja rateida. Kohviku omanikud saavad muuta informatsiooni oma kohviku kohta, ehk saavad lisada uusi lahtioleku aegu, koostatda uusi menüüsi ja lisada uusi sööke menüüse. Projekti ehitamist alustasime XML, XML Schema ja XSLT. Pärast mida alustasime tööd andmebaasi loomiseks. Kui andmebaas oli valmis saanud alustasime tööd teenuse tegemiseks. Tehtud teenus võimaldab pärida infot andmebaasist, näiteks on olemas võimalus pärida infot ühe kindla kohviku kohta, või siis pärida millise kasutajaga on seaotud kindlad kohvikud. Pärast mida hakkasime ehitama veebiklienti.Veebiklient võimaldab tavalisel kasutajal, ehk siis mitteregisteeritud kasutajal saada infot kohviku kohta, näiteks kohviku aadress, lahtioleku ajad, pakutavad menüüd ja ka komenterida pakutavaid toite ja hinnata neid. Ka sisaldab veebiklient kohviku omaniku poolt, kus saab kohviku omanik lisada uusi menüüsi kohvikutele, mis on temaga seotud. Muuta kohvikuga seotud infot, ehk muuta lahtioleku aegu aadresi jne. Ka saab muuta menüüsi lisada uusi, lisada uusi toite, muuta menüüs olevate toidude hindu jne.Kuna selgus, et ühest jääb ikkagi vähest otsustasime teha ka eraldi windowsi kliendi ja WP7 kliendi. Windowsi klient on mõeldud kassapidaja igapäevaseks tööks, mis võimaldab muuta hindu ja eemaldada juba läbimüüdud toite. WP7 rakendus on mõeldud kiireks info leidmiseks kohviku kohta, mis võimaldab siis saada teada kohviku asukohta, pakutavaid menüüsi ja toite.

Mida juurde õppisime

  • XML, XML Schema ja XSLT
  • Kuidas luua teenust ja siduda seda andmebaasiga.
  • Kuidas luua teenusele klienti.
  • Kuidas luua WP7 klienti.

Millised probleemid tekkisid töökäigus!

  • Teenuse ehitamine oli algul suhteliselt aeglane kuna kellegil polnud algul erilisi kogemusi kuidas sellist asja üldse teha tuleks

hilisemalt küll läks töö kiiremini kuna enamus probleemid olid juba lahendatud töö algus etapil.

  • Veebiklienti tegemise ajal selgus, et teenust on vaja täiendada kuna osa vajaminevaid meetodeid ei suudedud ette näha teenuseehitamise käigus.
  • Mobiili rakenduse tegemise algfaas sarnases oma rakuselt teenusele selle poolest, et puudus kogemus kuida seda korralikult ehitada, mille tõttu kanatas ka disain tugevalt.

Mida paremini teha oleks saanud!

  • Oleks pidanud arvestama rohkema ajakuluga kuna arvestasime et kulub vähem aega kui tegelikult läks, mis oleks andnud võimaluse rohkem siluda.

Meeskoona Punktid

  • Madis Sarv - 25
  • Siim Sarv - 27
  • Jaanus Vallmann - 8