Meeskond "The TuX's": Difference between revisions
m →koodid |
|||
(14 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
Tiina Laast | Tiina Laast | ||
Tiia Tänav | Tiia Tänav | ||
==funktionaalsus== | ==funktionaalsus== | ||
Teeme kohviku menüüd, mida oleks võimalik näidata ekraanilt ning muutmiseks ligi pääsetav Internetist. | |||
Pärast valmimist peaks olema võimalik: | |||
vaadata tänast menüüd, otsas olevaid toite ei kuvata | |||
koostada iga päeva jaoks menüü valides toitud nimekirjast ja sidudes selle kuupäevaga | |||
lisada toitude nimekirja toite juurde | |||
märkida, kas toit on otsas või mitte (tänasel kuupäeval) | |||
kasutaja audentimine, et ainult kohviku töötajad saaks muudatusi teha | |||
==töökäik== | ==töökäik== | ||
Alustasime oma tegevust ajurünnakuga. Arutlesime funktsionaalsuse, välja nägemise, paigutuse, kujunduse ja xml ülesehituse üle. Samas naljatlesime, et millise pildi saaks see kord lisada oma teenusesse visuaalseks rosinaks :) | |||
Praeguse seisuga on meil töötav menüüsse lisamine, märkimine saadavuse kohta ja ka kaunis kujundus on valmis. | |||
==Seis millalgi aprillis== | |||
XML ja selle schema valmis, all xml arhitektuur | |||
<pre> | |||
<menu> | |||
<toidud> | |||
<toit> | |||
<nimi></nimi> | |||
<hind></hind> | |||
<liik></liik> | |||
</toit> | |||
</toidud> | |||
<menyyd> | |||
<menyy kuup=""> | |||
<menutoit otsas="false"> | |||
<nimi></nimi> | |||
<hind></hind> | |||
<liik></liik> | |||
</menutoit> | |||
</menyy> | |||
</menyyd> | |||
</menu> | |||
</pre> | |||
==Seis 3. mail== | |||
Projekt võtab juba ilmet. Enamus funktsionaalsusi on valmis. Saab lisada, kustutada, vaadata, märkida(otsas või mitte), sisse logida. | |||
hetkel polnud veel teinud teenuse funktsioone, kuna üritasime alles välja mõelda kuidas oleks mugavaim ülesandeid lahendada. | |||
järgmisena muudame 'rakenduses' kasutatud xml-ga seotud funktsioonid teenuse funktsioonideks. | |||
==Seis 5. mail== | |||
Teenus on valmis. funktsioonid: | |||
* addToMenu-kuupäevalisse menüüsse toidu lisamine | |||
* isMenu-kontroll kas kuupäeval on menüü | |||
* lisaToit-toidu lisamine (nimi, hind, liik) | |||
* looMenu-tühja menüü loomine kuupäevale | |||
* rmvFromMenu-kuupäevalisest menüüst toidu eemaldamine | |||
* seeFood-kõigi toitude vaatamine | |||
* seeMenu-menüü vaatamine kuupäeva järgi (otsas toite ei näita) | |||
* seeMenu2-menüü vaatamine kuupäeva järgi | |||
* toitOtsas-otsas toidu märkimine toidu nime ja kuupäeva järgi | |||
* loggedIn-kontroll kas kasutaja on siise logitud | |||
* logout-väljalogimine | |||
* Login- sisselogimine | |||
vaja lõpetada rakendus, nii et hetkel töötavad funktsioonid asenduksid teenuse funktsioonidega. | |||
==Seis 7. mail== | |||
otsustasime menüü koostamisel implementeerida kalendri kasutust...sellega sai tükk aega jamatud, aga tööle ta sai (enam-vähem :P ) | |||
==Seis 9. mail== | |||
Teenus edukalt rakendusse implementeeritud. ainuke asi veel hetkel jäänud on väljalogimine | |||
==Seis 10. mail== | |||
sisselogimise süsteemi pidime ümber tegema, aga nüüd see töötab. tegime eraldi rakenduse kliendile (näeb tänast menüüd) ja kohviku töötajale (menüü tegemine, muutmine, toitude lisamine, toitude otsa märkimine, menüü vaatamine) | |||
<gallery widths="150px" heights="150px" > | |||
File:login.png|sisselogimine | |||
File:menu.png|menu leht | |||
File:menukoost.png| menüü koostamise leht | |||
File:menuvaade.png| mida kunde näeb | |||
File:Sisestamine.png| toitude lisamine | |||
File:Toidud.png| toitude otsa märkimine</gallery> | |||
==koodid== | |||
===teenus=== | |||
<source lang="csharp">using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Web; | |||
using System.Web.Services; | |||
using System.Xml.Linq; | |||
namespace menuTeenus | |||
{ | |||
/// <summary> | |||
/// Summary description for Service1 | |||
/// </summary> | |||
[WebService(Namespace = "http://tempuri.org/")] | |||
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] | |||
[System.ComponentModel.ToolboxItem(false)] | |||
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. | |||
// [System.Web.Script.Services.ScriptService] | |||
public class Service1 : System.Web.Services.WebService | |||
{ | |||
[WebMethod(Description = "toidu lisamine (nimi, hind, liik)")] | |||
public void lisaToit(string nimi, string hind,string liik) | |||
{ | |||
if (nimi != "" && hind!= "" && liik!="") | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
XElement xtoit = new XElement("toit"); | |||
xtoit.Add(new XElement("nimi", nimi)); | |||
xtoit.Add(new XElement("hind", hind)); | |||
xtoit.Add(new XElement("liik", liik)); | |||
Mxml.Root.Element("toidud").Add(xtoit); | |||
Mxml.Save(Server.MapPath("menu.xml")); | |||
} | |||
} | |||
[WebMethod(Description = "otsas toidu märkimine toidu nime ja kuupäeva järgi")] | |||
public void toitOtsas(string kuup, string nimi) | |||
{ | |||
XDocument xD = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in xD.Root.Descendants("menutoit") | |||
where m.Parent.Attribute("kuup").Value.Equals(kuup) | |||
&& m.Element("nimi").Value == nimi | |||
select m; | |||
foreach (var hinne in sautsud) | |||
{ | |||
hinne.Attribute("otsas").Value = "true"; | |||
} | |||
xD.Save(Server.MapPath("menu.xml")); | |||
} | |||
[WebMethod(Description = "kõigi toitude vaatamine")] | |||
public List<string> seeFood() | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in Mxml.Root.Descendants("toit") | |||
orderby m.Element("liik").Value | |||
select new | |||
{ | |||
nimi = m.Element("nimi").Value, | |||
hind = m.Element("hind").Value, | |||
liik = m.Element("liik").Value, | |||
}; | |||
List<string> food = new List<string>(); | |||
foreach (var x in sautsud) | |||
{ | |||
food.Add(x.nimi + ";" + x.hind + ";" + x.liik); | |||
} | |||
return food; | |||
} | |||
[WebMethod(Description = "menüü vaatamine kuupäeva järgi (otsas toite ei näita)")] | |||
public List<string> seeMenu(string kuup) | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in Mxml.Root.Descendants("menutoit") | |||
where m.Parent.Attribute("kuup").Value.Equals(kuup) | |||
orderby m.Element("liik").Value | |||
select new | |||
{ | |||
nimi = m.Element("nimi").Value, | |||
hind = m.Element("hind").Value, | |||
liik = m.Element("liik").Value, | |||
otsas = m.Attribute("otsas").Value | |||
}; | |||
List<string> food = new List<string>(); | |||
foreach (var x in sautsud) | |||
{ | |||
if (x.otsas.Equals("false")) | |||
food.Add(x.nimi + ";" + x.hind + ";" + x.liik); | |||
} | |||
return food; | |||
} | |||
[WebMethod(Description = "menüü vaatamine kuupäeva järgi")] | |||
public List<string> seeMenu2(string kuup) | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in Mxml.Root.Descendants("menutoit") | |||
where m.Parent.Attribute("kuup").Value.Equals(kuup) | |||
orderby m.Element("liik").Value | |||
select new | |||
{ | |||
nimi = m.Element("nimi").Value, | |||
hind = m.Element("hind").Value, | |||
liik = m.Element("liik").Value, | |||
otsas = m.Attribute("otsas").Value | |||
}; | |||
List<string> food = new List<string>(); | |||
foreach (var x in sautsud) | |||
{ | |||
food.Add(x.nimi + ";" + x.hind + ";" + x.liik+";"+x.otsas); | |||
} | |||
return food; | |||
} | |||
[WebMethod(Description = "tühja menüü loomine kuupäevale")] | |||
public void looMenu(string kuup) | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
XElement xmenyy = new XElement("menyy"); | |||
xmenyy.Add(new XAttribute("kuup", kuup)); | |||
Mxml.Root.Element("menyyd").Add(xmenyy); | |||
Mxml.Save(Server.MapPath("menu.xml")); | |||
} | |||
[WebMethod(Description = "kontroll kas kuupäeval on menüü")] | |||
public bool isMenu(string kuup) | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in Mxml.Root.Descendants("menyy") | |||
where m.Attribute("kuup").Value.Equals(kuup) | |||
select m; | |||
bool onOlemas = false; | |||
foreach (var hinne in sautsud) | |||
{ | |||
if (hinne != null) onOlemas = true; | |||
} | |||
return onOlemas; | |||
} | |||
[WebMethod(Description = "kuupäevalisse menüüsse toidu lisamine")] | |||
public void addToMenu(string kuup,string nimi, string hind, string liik) | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in Mxml.Root.Descendants("menyy") | |||
where m.Attribute("kuup").Value.Equals(kuup) | |||
select m; | |||
foreach (var menyy in sautsud) | |||
{ | |||
XElement xtoit = new XElement("menutoit"); | |||
xtoit.Add(new XAttribute("otsas", false)); | |||
xtoit.Add(new XElement("nimi", nimi)); | |||
xtoit.Add(new XElement("hind", hind)); | |||
xtoit.Add(new XElement("liik", liik)); | |||
menyy.Add(xtoit); | |||
} | |||
Mxml.Save(Server.MapPath("menu.xml")); | |||
} | |||
[WebMethod(Description = "kuupäevalisest menüüst toidu eemaldamine")] | |||
public void rmvFromMenu(string kuup, string nimi) | |||
{ | |||
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml")); | |||
var sautsud = from m in Mxml.Root.Descendants("menutoit") | |||
where m.Parent.Attribute("kuup").Value.Equals(kuup) | |||
&& m.Element("nimi").Value ==nimi | |||
select m; | |||
sautsud.Remove(); | |||
Mxml.Save(Server.MapPath("menu.xml")); | |||
} | |||
[WebMethod(Description = "kontroll kas kasutaja on siise logitud")] | |||
public bool loggedIn(string sessionID) | |||
{ | |||
if (sessionID == "") return false; | |||
else | |||
{ | |||
string xmlFailiAsukoht = Server.MapPath("sessioonid.xml"); | |||
XDocument xDoc = XDocument.Load(xmlFailiAsukoht); | |||
XElement sessioon = (from x in xDoc.Descendants("sessioon") | |||
where x.Value == sessionID | |||
select x).FirstOrDefault(); | |||
if (sessioon == null) return false; | |||
else if (Convert.ToDateTime(sessioon.Attribute("aegumisAeg").Value) > DateTime.Now) | |||
return true; | |||
else | |||
return false; | |||
} | |||
} | |||
[WebMethod] | |||
public Guid Login(string userName,string passWord) | |||
{ | |||
if (userName == "kohvikuproua" && | |||
passWord == "latte") | |||
{ | |||
string xmlFailiAsukoht = Server.MapPath("sessioonid.xml"); | |||
Random uusSuva = new Random(); | |||
byte[] massiiv = new byte[16]; | |||
uusSuva.NextBytes(massiiv); | |||
Guid sessionID = new Guid(massiiv); | |||
XElement sessioon = new XElement("sessioon", sessionID); | |||
sessioon.Add(new XAttribute("user", userName)); | |||
sessioon.Add(new XAttribute("aegumisAeg", DateTime.Now.AddMinutes(5))); | |||
sessioon.Add(new XAttribute("kliendiIP", HttpContext.Current.Request.UserHostAddress)); | |||
XDocument xDoc = XDocument.Load(xmlFailiAsukoht); | |||
//.PasswordChar = '*'; | |||
string viimaneID = (from x in xDoc.Descendants("sessioon") | |||
orderby x.Attribute("id").Value descending | |||
select x.Attribute("id").Value).First(); | |||
int idV = int.Parse(viimaneID); | |||
idV++; | |||
sessioon.Add(new XAttribute("id", idV)); | |||
xDoc.Root.Add(sessioon); | |||
xDoc.Save(xmlFailiAsukoht); | |||
return sessionID; | |||
} | |||
else | |||
return Guid.Empty; | |||
} | |||
[WebMethod(Description = "väljalogimine")] | |||
public void logout(string sessid) | |||
{ | |||
XDocument xD = XDocument.Load(Server.MapPath("sessioonid.xml")); | |||
var sautsud = from m in xD.Root.Descendants("sessioon") | |||
where m.Value.Equals(sessid) | |||
select m; | |||
foreach (var hinne in sautsud) | |||
{ | |||
hinne.Attribute("aegumisAeg").Value = DateTime.Now.ToString(); | |||
} | |||
xD.Save(Server.MapPath("sessioonid.xml")); | |||
} | |||
} | |||
} | |||
</source> | |||
===rakendus=== | |||
<source lang="csharp">using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Web; | |||
using System.Web.UI; | |||
using System.Web.UI.WebControls; | |||
using System.Xml.Linq; | |||
using teenus; | |||
public partial class _Default : System.Web.UI.Page | |||
{ | |||
teenus.Service1 teenus = new teenus.Service1(); | |||
protected void Page_Load(object sender, EventArgs e) | |||
{ | |||
DateTime CurrTime = DateTime.Now; | |||
string kuu = CurrTime.Month+""; | |||
if (CurrTime.Month < 10) kuu = "0" + kuu; | |||
string paev = CurrTime.Day + ""; | |||
if (CurrTime.Day < 10) paev = "0" + paev; | |||
label_date.Text=paev+"."+kuu+"."+CurrTime.Year; | |||
peidak6ik(login); | |||
} | |||
protected void menu_koost_Click(object sender, EventArgs e) | |||
{ | |||
//menüü koostamisse...vaja lugeda kõik toidud listboxi koos_k6ik | |||
peidak6ik(menyykoostamine); | |||
var me = teenus.seeFood(); | |||
koos_k6ik.Items.Clear(); | |||
foreach (var x in me) { | |||
koos_k6ik.Items.Add(x); | |||
} | |||
} | |||
protected void menu_lisa_Click(object sender, EventArgs e) | |||
{ | |||
//toitude lisamisse leht... | |||
peidak6ik(lisamine); | |||
} | |||
protected void seemenu_Click(object sender, EventArgs e) | |||
{ | |||
//tänase menüü vaatamine kliendivaates DONE | |||
peidak6ik(menuyy); | |||
foods.Text = ""; | |||
var me = teenus.seeMenu(label_date.Text); | |||
foreach (var x in me) { | |||
//veidi t66tlust ka | |||
string[] words = x.Split(';'); | |||
foods.Text = foods.Text + words[0] + " " + words[1] + ".-<br/>"; | |||
} | |||
} | |||
protected void sis_lisa_Click(object sender, EventArgs e) | |||
{ | |||
//lisa toit xml-i ja tule tagasi et midagi veel lisada DONE | |||
if (sis_nim.Text != "" && sis_hind.Text != "") | |||
{ | |||
teenus.lisaToit(sis_nim.Text, sis_hind.Text, sis_liik.SelectedValue); | |||
sistyh(); | |||
} | |||
peidak6ik(lisamine); | |||
} | |||
protected void sis_tyhista_Click(object sender, EventArgs e) | |||
{ | |||
//ei lisa toitu, tühjenda väljad ja tagasi menüüsse | |||
sistyh(); | |||
backtomenu(); | |||
} | |||
protected void logout_Click(object sender, EventArgs e) | |||
{ | |||
//väljalogimine.. | |||
teenus.logout(sesid.Text); | |||
} | |||
protected void koos_tagasi_Click(object sender, EventArgs e) | |||
{ | |||
//menüü koostamise leht. ei taha menüüd koostada, tagasi menüüsse tühjendab kuupäeva välja | |||
koos_date.Text = ""; | |||
koos_vali.Items.Clear(); | |||
backtomenu(); | |||
} | |||
protected void koos_eemalda_Click(object sender, EventArgs e) | |||
{ | |||
//kuupäevaliselt menüült elemendi eemaldamine! allikas koos_vali | |||
peidak6ik(menyykoostamine); | |||
if (koos_date.Text != "" ) | |||
{ | |||
//kuupäev peab olema valitud siis saame eemaldada ja kuvada uus | |||
string[] words = koos_vali.SelectedValue.ToString().Split(';'); | |||
teenus.rmvFromMenu(koos_date.Text, words[0]); | |||
t2nakoos(); | |||
} | |||
else errorid.Text = "vali kuupäev!"; | |||
} | |||
protected void koos_lisa_Click(object sender, EventArgs e) | |||
{//kuupäevalisele menüüle toidu lisamine : allikaks on koos_k6ik | |||
peidak6ik(menyykoostamine); | |||
if (koos_date.Text != "") | |||
{ | |||
//kuupäev peab olema valitud siis saame lisada kuup'evale ja kuvada uus | |||
if (!teenus.isMenu(koos_date.Text)) | |||
{ | |||
//kui sellel valitud kuup'eval pole men[[d siis loome | |||
teenus.looMenu(koos_date.Text); | |||
} | |||
string[] words = koos_k6ik.SelectedValue.ToString().Split(';'); | |||
teenus.addToMenu(koos_date.Text,words[0],words[1],words[2]); | |||
t2nakoos(); | |||
} | |||
else errorid.Text = "vali kuupäev!"; | |||
} | |||
protected void toitotsas_Click(object sender, EventArgs e) | |||
{// näitab ainult tänaseid toite! | |||
peidak6ik(Pane); | |||
toit2na(); | |||
} | |||
protected void otsas_Click(object sender, EventArgs e) | |||
{ | |||
//otsas toit kuup'eval: t'na! toidud_tana listbox DONE | |||
string[] words = toidud_tana.SelectedValue.ToString().Split(';'); | |||
teenus.toitOtsas(label_date.Text,words[0]); | |||
toit2na(); | |||
//pane on toitude otsa märkimise paneel | |||
peidak6ik(Pane); | |||
} | |||
public void toit2na() { | |||
var me = teenus.seeMenu(label_date.Text); | |||
toidud_tana.Items.Clear(); | |||
foreach (var x in me) | |||
{ | |||
toidud_tana.Items.Add(x); | |||
} | |||
} | |||
protected void toidud_tagasi_Click(object sender, EventArgs e) | |||
{ | |||
backtomenu(); | |||
} | |||
public void sistyh() | |||
{ | |||
sis_hind.Text = ""; | |||
sis_nim.Text = ""; | |||
} | |||
public void backtomenu() { | |||
peidak6ik(menu); | |||
} | |||
public void peidak6ik(Panel mida) | |||
{ | |||
menyykoostamine.Visible = false; | |||
lisamine.Visible = false; | |||
menuyy.Visible = false; | |||
menu.Visible = false; | |||
Pane.Visible = false; | |||
label_date.Visible = false; | |||
login.Visible = false; | |||
if (sesid.Text != "" && teenus.loggedIn(sesid.Text)) | |||
mida.Visible = true; | |||
else login.Visible = true; | |||
errorid.Text = ""; | |||
} | |||
protected void Calendar1_SelectionChanged(object sender, EventArgs e) | |||
{ | |||
//valitakse kuupäev...kui on menüü siis võiks näidata! | |||
DateTime CurrTime = Calendar1.SelectedDate; | |||
string kuu = CurrTime.Month+""; | |||
if (CurrTime.Month < 10) kuu = "0" + kuu; | |||
string paev = CurrTime.Day + ""; | |||
if (CurrTime.Day < 10) paev = "0" + paev; | |||
koos_date.Text=paev+"."+kuu+"."+CurrTime.Year; | |||
//populiseerime listboxi | |||
t2nakoos(); | |||
peidak6ik(menyykoostamine); | |||
} | |||
public void t2nakoos() { | |||
koos_vali.Items.Clear(); | |||
var me = teenus.seeMenu2(koos_date.Text); | |||
foreach (var x in me) | |||
{ | |||
koos_vali.Items.Add(x); | |||
} | |||
} | |||
protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e) | |||
{ | |||
peidak6ik(menyykoostamine); | |||
} | |||
protected void b_login_Click(object sender, EventArgs e) | |||
{ | |||
sesid.Text=teenus.Login(kasutajanimi.Text,saladus.Text).ToString(); | |||
if (teenus.loggedIn(sesid.Text)) | |||
{ | |||
login.Visible = false; | |||
peidak6ik(menu); | |||
} | |||
else peidak6ik(login); | |||
} | |||
} | |||
</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" | |||
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> | |||
<xsl:output method="html" indent="yes"/> | |||
<xsl:template match="/menu"> | |||
<html> | |||
<body> | |||
<h2>Toidud</h2> | |||
<table border="1"> | |||
<tr bgcolor="#9acd32"> | |||
<th>nimi</th> | |||
<th>hind</th> | |||
</tr> | |||
<xsl:for-each select="./toidud/toit"> | |||
<tr> | |||
<td> | |||
<xsl:value-of select="./nimi"/> | |||
</td> | |||
<td> | |||
<xsl:value-of select="./hind"/> | |||
</td> | |||
</tr> | |||
</xsl:for-each> | |||
</table> | |||
</body> | |||
</html> | |||
</xsl:template> | |||
<xsl:template match="menu/menyyd"> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> |
Latest revision as of 15:54, 17 May 2010
Liikmed
Tiina Laast
Tiia Tänav
funktionaalsus
Teeme kohviku menüüd, mida oleks võimalik näidata ekraanilt ning muutmiseks ligi pääsetav Internetist.
Pärast valmimist peaks olema võimalik:
vaadata tänast menüüd, otsas olevaid toite ei kuvata
koostada iga päeva jaoks menüü valides toitud nimekirjast ja sidudes selle kuupäevaga
lisada toitude nimekirja toite juurde
märkida, kas toit on otsas või mitte (tänasel kuupäeval)
kasutaja audentimine, et ainult kohviku töötajad saaks muudatusi teha
töökäik
Alustasime oma tegevust ajurünnakuga. Arutlesime funktsionaalsuse, välja nägemise, paigutuse, kujunduse ja xml ülesehituse üle. Samas naljatlesime, et millise pildi saaks see kord lisada oma teenusesse visuaalseks rosinaks :)
Praeguse seisuga on meil töötav menüüsse lisamine, märkimine saadavuse kohta ja ka kaunis kujundus on valmis.
Seis millalgi aprillis
XML ja selle schema valmis, all xml arhitektuur
<menu> <toidud> <toit> <nimi></nimi> <hind></hind> <liik></liik> </toit> </toidud> <menyyd> <menyy kuup=""> <menutoit otsas="false"> <nimi></nimi> <hind></hind> <liik></liik> </menutoit> </menyy> </menyyd> </menu>
Seis 3. mail
Projekt võtab juba ilmet. Enamus funktsionaalsusi on valmis. Saab lisada, kustutada, vaadata, märkida(otsas või mitte), sisse logida. hetkel polnud veel teinud teenuse funktsioone, kuna üritasime alles välja mõelda kuidas oleks mugavaim ülesandeid lahendada. järgmisena muudame 'rakenduses' kasutatud xml-ga seotud funktsioonid teenuse funktsioonideks.
Seis 5. mail
Teenus on valmis. funktsioonid:
- addToMenu-kuupäevalisse menüüsse toidu lisamine
- isMenu-kontroll kas kuupäeval on menüü
- lisaToit-toidu lisamine (nimi, hind, liik)
- looMenu-tühja menüü loomine kuupäevale
- rmvFromMenu-kuupäevalisest menüüst toidu eemaldamine
- seeFood-kõigi toitude vaatamine
- seeMenu-menüü vaatamine kuupäeva järgi (otsas toite ei näita)
- seeMenu2-menüü vaatamine kuupäeva järgi
- toitOtsas-otsas toidu märkimine toidu nime ja kuupäeva järgi
- loggedIn-kontroll kas kasutaja on siise logitud
- logout-väljalogimine
- Login- sisselogimine
vaja lõpetada rakendus, nii et hetkel töötavad funktsioonid asenduksid teenuse funktsioonidega.
Seis 7. mail
otsustasime menüü koostamisel implementeerida kalendri kasutust...sellega sai tükk aega jamatud, aga tööle ta sai (enam-vähem :P )
Seis 9. mail
Teenus edukalt rakendusse implementeeritud. ainuke asi veel hetkel jäänud on väljalogimine
Seis 10. mail
sisselogimise süsteemi pidime ümber tegema, aga nüüd see töötab. tegime eraldi rakenduse kliendile (näeb tänast menüüd) ja kohviku töötajale (menüü tegemine, muutmine, toitude lisamine, toitude otsa märkimine, menüü vaatamine)
-
sisselogimine
-
menu leht
-
menüü koostamise leht
-
mida kunde näeb
-
toitude lisamine
-
toitude otsa märkimine
koodid
teenus
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Xml.Linq;
namespace menuTeenus
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod(Description = "toidu lisamine (nimi, hind, liik)")]
public void lisaToit(string nimi, string hind,string liik)
{
if (nimi != "" && hind!= "" && liik!="")
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
XElement xtoit = new XElement("toit");
xtoit.Add(new XElement("nimi", nimi));
xtoit.Add(new XElement("hind", hind));
xtoit.Add(new XElement("liik", liik));
Mxml.Root.Element("toidud").Add(xtoit);
Mxml.Save(Server.MapPath("menu.xml"));
}
}
[WebMethod(Description = "otsas toidu märkimine toidu nime ja kuupäeva järgi")]
public void toitOtsas(string kuup, string nimi)
{
XDocument xD = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in xD.Root.Descendants("menutoit")
where m.Parent.Attribute("kuup").Value.Equals(kuup)
&& m.Element("nimi").Value == nimi
select m;
foreach (var hinne in sautsud)
{
hinne.Attribute("otsas").Value = "true";
}
xD.Save(Server.MapPath("menu.xml"));
}
[WebMethod(Description = "kõigi toitude vaatamine")]
public List<string> seeFood()
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in Mxml.Root.Descendants("toit")
orderby m.Element("liik").Value
select new
{
nimi = m.Element("nimi").Value,
hind = m.Element("hind").Value,
liik = m.Element("liik").Value,
};
List<string> food = new List<string>();
foreach (var x in sautsud)
{
food.Add(x.nimi + ";" + x.hind + ";" + x.liik);
}
return food;
}
[WebMethod(Description = "menüü vaatamine kuupäeva järgi (otsas toite ei näita)")]
public List<string> seeMenu(string kuup)
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in Mxml.Root.Descendants("menutoit")
where m.Parent.Attribute("kuup").Value.Equals(kuup)
orderby m.Element("liik").Value
select new
{
nimi = m.Element("nimi").Value,
hind = m.Element("hind").Value,
liik = m.Element("liik").Value,
otsas = m.Attribute("otsas").Value
};
List<string> food = new List<string>();
foreach (var x in sautsud)
{
if (x.otsas.Equals("false"))
food.Add(x.nimi + ";" + x.hind + ";" + x.liik);
}
return food;
}
[WebMethod(Description = "menüü vaatamine kuupäeva järgi")]
public List<string> seeMenu2(string kuup)
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in Mxml.Root.Descendants("menutoit")
where m.Parent.Attribute("kuup").Value.Equals(kuup)
orderby m.Element("liik").Value
select new
{
nimi = m.Element("nimi").Value,
hind = m.Element("hind").Value,
liik = m.Element("liik").Value,
otsas = m.Attribute("otsas").Value
};
List<string> food = new List<string>();
foreach (var x in sautsud)
{
food.Add(x.nimi + ";" + x.hind + ";" + x.liik+";"+x.otsas);
}
return food;
}
[WebMethod(Description = "tühja menüü loomine kuupäevale")]
public void looMenu(string kuup)
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
XElement xmenyy = new XElement("menyy");
xmenyy.Add(new XAttribute("kuup", kuup));
Mxml.Root.Element("menyyd").Add(xmenyy);
Mxml.Save(Server.MapPath("menu.xml"));
}
[WebMethod(Description = "kontroll kas kuupäeval on menüü")]
public bool isMenu(string kuup)
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in Mxml.Root.Descendants("menyy")
where m.Attribute("kuup").Value.Equals(kuup)
select m;
bool onOlemas = false;
foreach (var hinne in sautsud)
{
if (hinne != null) onOlemas = true;
}
return onOlemas;
}
[WebMethod(Description = "kuupäevalisse menüüsse toidu lisamine")]
public void addToMenu(string kuup,string nimi, string hind, string liik)
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in Mxml.Root.Descendants("menyy")
where m.Attribute("kuup").Value.Equals(kuup)
select m;
foreach (var menyy in sautsud)
{
XElement xtoit = new XElement("menutoit");
xtoit.Add(new XAttribute("otsas", false));
xtoit.Add(new XElement("nimi", nimi));
xtoit.Add(new XElement("hind", hind));
xtoit.Add(new XElement("liik", liik));
menyy.Add(xtoit);
}
Mxml.Save(Server.MapPath("menu.xml"));
}
[WebMethod(Description = "kuupäevalisest menüüst toidu eemaldamine")]
public void rmvFromMenu(string kuup, string nimi)
{
XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
var sautsud = from m in Mxml.Root.Descendants("menutoit")
where m.Parent.Attribute("kuup").Value.Equals(kuup)
&& m.Element("nimi").Value ==nimi
select m;
sautsud.Remove();
Mxml.Save(Server.MapPath("menu.xml"));
}
[WebMethod(Description = "kontroll kas kasutaja on siise logitud")]
public bool loggedIn(string sessionID)
{
if (sessionID == "") return false;
else
{
string xmlFailiAsukoht = Server.MapPath("sessioonid.xml");
XDocument xDoc = XDocument.Load(xmlFailiAsukoht);
XElement sessioon = (from x in xDoc.Descendants("sessioon")
where x.Value == sessionID
select x).FirstOrDefault();
if (sessioon == null) return false;
else if (Convert.ToDateTime(sessioon.Attribute("aegumisAeg").Value) > DateTime.Now)
return true;
else
return false;
}
}
[WebMethod]
public Guid Login(string userName,string passWord)
{
if (userName == "kohvikuproua" &&
passWord == "latte")
{
string xmlFailiAsukoht = Server.MapPath("sessioonid.xml");
Random uusSuva = new Random();
byte[] massiiv = new byte[16];
uusSuva.NextBytes(massiiv);
Guid sessionID = new Guid(massiiv);
XElement sessioon = new XElement("sessioon", sessionID);
sessioon.Add(new XAttribute("user", userName));
sessioon.Add(new XAttribute("aegumisAeg", DateTime.Now.AddMinutes(5)));
sessioon.Add(new XAttribute("kliendiIP", HttpContext.Current.Request.UserHostAddress));
XDocument xDoc = XDocument.Load(xmlFailiAsukoht);
//.PasswordChar = '*';
string viimaneID = (from x in xDoc.Descendants("sessioon")
orderby x.Attribute("id").Value descending
select x.Attribute("id").Value).First();
int idV = int.Parse(viimaneID);
idV++;
sessioon.Add(new XAttribute("id", idV));
xDoc.Root.Add(sessioon);
xDoc.Save(xmlFailiAsukoht);
return sessionID;
}
else
return Guid.Empty;
}
[WebMethod(Description = "väljalogimine")]
public void logout(string sessid)
{
XDocument xD = XDocument.Load(Server.MapPath("sessioonid.xml"));
var sautsud = from m in xD.Root.Descendants("sessioon")
where m.Value.Equals(sessid)
select m;
foreach (var hinne in sautsud)
{
hinne.Attribute("aegumisAeg").Value = DateTime.Now.ToString();
}
xD.Save(Server.MapPath("sessioonid.xml"));
}
}
}
rakendus
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using teenus;
public partial class _Default : System.Web.UI.Page
{
teenus.Service1 teenus = new teenus.Service1();
protected void Page_Load(object sender, EventArgs e)
{
DateTime CurrTime = DateTime.Now;
string kuu = CurrTime.Month+"";
if (CurrTime.Month < 10) kuu = "0" + kuu;
string paev = CurrTime.Day + "";
if (CurrTime.Day < 10) paev = "0" + paev;
label_date.Text=paev+"."+kuu+"."+CurrTime.Year;
peidak6ik(login);
}
protected void menu_koost_Click(object sender, EventArgs e)
{
//menüü koostamisse...vaja lugeda kõik toidud listboxi koos_k6ik
peidak6ik(menyykoostamine);
var me = teenus.seeFood();
koos_k6ik.Items.Clear();
foreach (var x in me) {
koos_k6ik.Items.Add(x);
}
}
protected void menu_lisa_Click(object sender, EventArgs e)
{
//toitude lisamisse leht...
peidak6ik(lisamine);
}
protected void seemenu_Click(object sender, EventArgs e)
{
//tänase menüü vaatamine kliendivaates DONE
peidak6ik(menuyy);
foods.Text = "";
var me = teenus.seeMenu(label_date.Text);
foreach (var x in me) {
//veidi t66tlust ka
string[] words = x.Split(';');
foods.Text = foods.Text + words[0] + " " + words[1] + ".-<br/>";
}
}
protected void sis_lisa_Click(object sender, EventArgs e)
{
//lisa toit xml-i ja tule tagasi et midagi veel lisada DONE
if (sis_nim.Text != "" && sis_hind.Text != "")
{
teenus.lisaToit(sis_nim.Text, sis_hind.Text, sis_liik.SelectedValue);
sistyh();
}
peidak6ik(lisamine);
}
protected void sis_tyhista_Click(object sender, EventArgs e)
{
//ei lisa toitu, tühjenda väljad ja tagasi menüüsse
sistyh();
backtomenu();
}
protected void logout_Click(object sender, EventArgs e)
{
//väljalogimine..
teenus.logout(sesid.Text);
}
protected void koos_tagasi_Click(object sender, EventArgs e)
{
//menüü koostamise leht. ei taha menüüd koostada, tagasi menüüsse tühjendab kuupäeva välja
koos_date.Text = "";
koos_vali.Items.Clear();
backtomenu();
}
protected void koos_eemalda_Click(object sender, EventArgs e)
{
//kuupäevaliselt menüült elemendi eemaldamine! allikas koos_vali
peidak6ik(menyykoostamine);
if (koos_date.Text != "" )
{
//kuupäev peab olema valitud siis saame eemaldada ja kuvada uus
string[] words = koos_vali.SelectedValue.ToString().Split(';');
teenus.rmvFromMenu(koos_date.Text, words[0]);
t2nakoos();
}
else errorid.Text = "vali kuupäev!";
}
protected void koos_lisa_Click(object sender, EventArgs e)
{//kuupäevalisele menüüle toidu lisamine : allikaks on koos_k6ik
peidak6ik(menyykoostamine);
if (koos_date.Text != "")
{
//kuupäev peab olema valitud siis saame lisada kuup'evale ja kuvada uus
if (!teenus.isMenu(koos_date.Text))
{
//kui sellel valitud kuup'eval pole men[[d siis loome
teenus.looMenu(koos_date.Text);
}
string[] words = koos_k6ik.SelectedValue.ToString().Split(';');
teenus.addToMenu(koos_date.Text,words[0],words[1],words[2]);
t2nakoos();
}
else errorid.Text = "vali kuupäev!";
}
protected void toitotsas_Click(object sender, EventArgs e)
{// näitab ainult tänaseid toite!
peidak6ik(Pane);
toit2na();
}
protected void otsas_Click(object sender, EventArgs e)
{
//otsas toit kuup'eval: t'na! toidud_tana listbox DONE
string[] words = toidud_tana.SelectedValue.ToString().Split(';');
teenus.toitOtsas(label_date.Text,words[0]);
toit2na();
//pane on toitude otsa märkimise paneel
peidak6ik(Pane);
}
public void toit2na() {
var me = teenus.seeMenu(label_date.Text);
toidud_tana.Items.Clear();
foreach (var x in me)
{
toidud_tana.Items.Add(x);
}
}
protected void toidud_tagasi_Click(object sender, EventArgs e)
{
backtomenu();
}
public void sistyh()
{
sis_hind.Text = "";
sis_nim.Text = "";
}
public void backtomenu() {
peidak6ik(menu);
}
public void peidak6ik(Panel mida)
{
menyykoostamine.Visible = false;
lisamine.Visible = false;
menuyy.Visible = false;
menu.Visible = false;
Pane.Visible = false;
label_date.Visible = false;
login.Visible = false;
if (sesid.Text != "" && teenus.loggedIn(sesid.Text))
mida.Visible = true;
else login.Visible = true;
errorid.Text = "";
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
//valitakse kuupäev...kui on menüü siis võiks näidata!
DateTime CurrTime = Calendar1.SelectedDate;
string kuu = CurrTime.Month+"";
if (CurrTime.Month < 10) kuu = "0" + kuu;
string paev = CurrTime.Day + "";
if (CurrTime.Day < 10) paev = "0" + paev;
koos_date.Text=paev+"."+kuu+"."+CurrTime.Year;
//populiseerime listboxi
t2nakoos();
peidak6ik(menyykoostamine);
}
public void t2nakoos() {
koos_vali.Items.Clear();
var me = teenus.seeMenu2(koos_date.Text);
foreach (var x in me)
{
koos_vali.Items.Add(x);
}
}
protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
{
peidak6ik(menyykoostamine);
}
protected void b_login_Click(object sender, EventArgs e)
{
sesid.Text=teenus.Login(kasutajanimi.Text,saladus.Text).ToString();
if (teenus.loggedIn(sesid.Text))
{
login.Visible = false;
peidak6ik(menu);
}
else peidak6ik(login);
}
}
xslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/menu">
<html>
<body>
<h2>Toidud</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>nimi</th>
<th>hind</th>
</tr>
<xsl:for-each select="./toidud/toit">
<tr>
<td>
<xsl:value-of select="./nimi"/>
</td>
<td>
<xsl:value-of select="./hind"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="menu/menyyd">
</xsl:template>
</xsl:stylesheet>