Meeskond "C terav"
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
- 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.
Andmebaas:
Koodinäited
Link kogu teenuse osa jaoks koos kõigi classidega asub siin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "KohvikWCF" in code, svc and config file together.
public class KohvikWCF : IKohvikWCF
{
//Annab konkreetse menüü
public MenyyKirjeClass AnnaMenyy(int menyyID)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.LaeMenyy(menyyID);
return vajalik;
}
//Annab konkreetse menüü kirje
public MenyyKirjeClass AnnaMenyyKirje(int menyyKirjeID)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.LeaMenyyKirje(menyyKirjeID);
return vajalik;
}
//Annab kohviku kõik menüüd
public MenyyKirjeClass AnnaKoikMenyyd(int kohvikID)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.laeKoikMenyyd(kohvikID);
return vajalik;
}
//Lisab kohvikule uue nenüü
public MenyyKirjeClass lisaMenyy(int kohvikID, DateTime alates, DateTime kuni, int kasutajaID)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.lisaMenyy(kohvikID, alates, kuni,kasutajaID);
return vajalik;
}
//Lisab kohviku menüüle kirjed
public MenyyKirjeClass lisaMenyyKirje(int menyyID, int toitID, string hind, int kohvikID, int kasutajaID)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.lisaMenyyKirje(menyyID, toitID, hind, kohvikID, kasutajaID);
return vajalik;
}
//uuendab infot menüü kehtivuse kohta
public MenyyKirjeClass updateMenyy(int menyyID, DateTime alates, DateTime kuni)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.muudaMenyy(menyyID, alates, kuni);
return vajalik;
}
//uuendab kindla kohviku menüü sisu
public MenyyKirjeClass updateMenyyKirje(int menyyKirjeID, int fkToitID, string hind, bool otsas)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.muudaMenyyKirje(menyyKirjeID, fkToitID, hind, otsas);
return vajalik;
}
//eemaldab menüü muutes selle mitte aktiivseks
public MenyyKirjeClass delMenyy(int menyyID) {
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.kustutaMenyy(menyyID);
return vajalik;
}
//Eemaldab menüült toidu
public MenyyKirjeClass delMenyyKirje(int menyyKirjeID) {
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.kustutaMenyyKirje(menyyKirjeID);
return vajalik;
}
//lisab toidule menüüs poolt hääle
public MenyyKirjeClass addtUpMenyyKirje(int menyyKirjeID) {
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.tUpMenyyKirje(menyyKirjeID);
return vajalik;
}
//lisab toidule menüüs vastu hääle
public MenyyKirjeClass addtDownMenyyKirje(int menyyKirjeID)
{
MenyyKirjeClass vajalik = new MenyyKirjeClass();
vajalik.tDownMenyyKirje(menyyKirjeID);
return vajalik;
}
//Tagastab info kõikide olemasolevate kohvikute kohta
public KohvikKirjeClass AnnaKohvikud()
{
KohvikKirjeClass vajalik = new KohvikKirjeClass();
vajalik.laeKohvikud();
return vajalik;
}
//Tagastab info ühe kindla kohviku kohta
public KohvikKirjeClass AnnaKohvik(int kohvikID) {
KohvikKirjeClass vajalik = new KohvikKirjeClass();
vajalik.laeKohvik(kohvikID);
return vajalik;
}
//Lisab andmebaasi uue kohviku
public KohvikKirjeClass addKohvik(string nimi, string tanav, string maja, string linn, string riik, int laius, int pikkus) {
KohvikKirjeClass vajalik = new KohvikKirjeClass();
vajalik.lisaKohvik(nimi, tanav, maja, linn, riik, laius, pikkus);
return vajalik;
}
//Eemaldab andmebaasist kohviku
public KohvikKirjeClass delKohvik(int kohvikID) {
KohvikKirjeClass vajalik = new KohvikKirjeClass();
vajalik.kustutaKohvik(kohvikID);
return vajalik;
}
//uuendab infot kohviku kohta
public KohvikKirjeClass upKohvik(int kohvikID, string nimi, string tanav, string maja, string linn, string riik, int laius, int pikkus) {
KohvikKirjeClass vajalik = new KohvikKirjeClass();
vajalik.uuendaKohvik(kohvikID, nimi, tanav, maja, linn , riik, laius, pikkus);
return vajalik;
}
//Tagastab info kindlas kohikus pakkutava toidu kohta
public ToiduKirjeClass annaKohvikuToidud(int kohvikID) {
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.laeKohvikuToidud(kohvikID);
return vajalik;
}
//tagastab info kõikide olemasolevate toitude kohta
public ToiduKirjeClass annaToidud()
{
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.laeToidud();
return vajalik;
}
//Tagastab info kindla toidu kohta, mis liiki toiduga on tegu
public ToiduKirjeClass annaToiduTyyp(int tyypID)
{
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.laeToiduTyyp(tyypID);
return vajalik;
}
//Tagastab kõik olemas olevad toitude liigid
public ToiduKirjeClass annaToiduTyybid()
{
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.laeToiduTyybid();
return vajalik;
}
//Tagastab info vastava toidu lisandite kohta
public ToiduKirjeClass annaLisandid()
{
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.laeLisandid();
return vajalik;
}
//Lisab uue toidu
public ToiduKirjeClass addToit(int toitTyypID, int toitKohvikID, string nimi, string kirjeldus){
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.lisaToit(toitTyypID, toitKohvikID, nimi, kirjeldus);
return vajalik;
}
//Uendab infot toidu kohta
public ToiduKirjeClass upToit(int toitID, int toitTyypID, string nimi, string kirjeldus) {
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.muudaToit(toitID, toitTyypID, nimi, kirjeldus);
return vajalik;
}
//Eemaldab toidu
public ToiduKirjeClass delToit(int toitID) {
ToiduKirjeClass vajalik = new ToiduKirjeClass();
vajalik.kustudaToit(toitID);
return vajalik;
}
//Tagastab kõik kasutajad
public KasutajaKirjeClass annaKasutajad() {
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.laeKasutajad();
return vajalik;
}
//Tagastab info kindla kasutaja kohta
public KasutajaKirjeClass annaKasutaja(int KasutajaID)
{
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.laeKasutaja(KasutajaID);
return vajalik;
}
//kasutaja parooli muutmine
public KasutajaKirjeClass upKasutaja(int kasutajaID, string kasutajaPass)
{
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.muudaKasutaja(kasutajaID, kasutajaPass);
return vajalik;
}
//Eemaldab kasutaja
public KasutajaKirjeClass delKasutaja(int kasutajaID) {
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.suleKasutaja(kasutajaID);
return vajalik;
}
//Lisab uue kasutaja
public KasutajaKirjeClass addKasutaja(string kasutajaTunnus, string kasutajaPass) {
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.lisaKasutaja(kasutajaTunnus,kasutajaPass);
return vajalik;
}
//Lisab kasutaja kindalse kohvikuusse
public KasutajaKirjeClass AddKohvikuKasutaja(int kohvikID, int kasutajaID)
{
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.lisaKohvikuKasutaja(kohvikID, kasutajaID);
return vajalik;
}
//Eemaldab kasutaja kohvikust
public KasutajaKirjeClass delKohvikuKasutaja(int kohvikKasutajaID)
{
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.kustutaKohvikuKasutaja(kohvikKasutajaID);
return vajalik;
}
//Annab kõik kasutajad ühest kohvikust
public KasutajaKirjeClass annaKohvikuKasutajad(int kohvikID) {
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.laeKohvikuKasutajad(kohvikID);
return vajalik;
}
//Kontrollib kasutajat kas ta on ikka õige kasutaja või ei ole
public KasutajaKirjeClass checkKasutaja(string kasutajaTunnus, string kasutajaPass) {
KasutajaKirjeClass vajalik = new KasutajaKirjeClass();
vajalik.kasutajaKontroll(kasutajaTunnus, kasutajaPass);
return vajalik;
}
//Annab poolt hääle komentaarile
public KommentaarKirjeClass addtUpKommentaar(int kommentaarID)
{
KommentaarKirjeClass vajalik = new KommentaarKirjeClass();
vajalik.tUpKommentaar(kommentaarID);
return vajalik;
}
//Annab vastuhääle komentaarile
public KommentaarKirjeClass addtDownKommentaar(int kommentaarID)
{
KommentaarKirjeClass vajalik = new KommentaarKirjeClass();
vajalik.tDownKommentaar(kommentaarID);
return vajalik;
}
//Lisab uue komentarri kohvikus pakutavale toidule
public KommentaarKirjeClass addKommentaar(string nimi, string kommentaar, int fkMenyyKirje_ID)
{
KommentaarKirjeClass vajalik = new KommentaarKirjeClass();
vajalik.lisaKommentaar(nimi, kommentaar, fkMenyyKirje_ID);
return vajalik;
}
//Tagastab koik komenataarid ühe kindla toidu kohta menüüs
public KommentaarKirjeClass annaKommentaarid(int menyyKirjeID) {
KommentaarKirjeClass vajalik = new KommentaarKirjeClass();
vajalik.laeKommentaarid(menyyKirjeID);
return vajalik;
}
}