Meeskond "C terav": Difference between revisions

From ICO wiki
Jump to navigationJump to search
Line 470: Line 470:
===Andmebaas:===
===Andmebaas:===


[[File:andmebaasCTerav.png]]
[[File:andmebaasCteravUus.png]]


==Klient Rakendus==
==Klient Rakendus==

Revision as of 20:31, 15 May 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
  • Siim Sarv - xml,teenuse metoodid, klientrakendus
  • 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

Koodinäited

Teenuse koos klientrakendusega saab kätte siit

Testimiseks tuleb teenuse aadress muut rakenduses, sest teilvõivad olla portid erinevad mida kasutab. Lisaks tuleb ka rakenduse web.config failis pordid muuta. Teenus tuleb lisada nimega 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.

Aruanne