diff --git a/classes/data/data_initializer.py b/classes/data/data_initializer.py new file mode 100644 index 0000000..dbe7e37 --- /dev/null +++ b/classes/data/data_initializer.py @@ -0,0 +1,143 @@ +import xml.etree.ElementTree as ET +from posilek import Posilek +from klient import Klient +from kelner import Kelner +from stolik import Stolik +from zamowenie import Zamowienie +with open('database\\meals.xml', 'r') as file: + xml_data = file.read() +tree = ET.ElementTree(ET.fromstring(xml_data)) +root = tree.getroot() + +meals = [] +for meal in root.findall('meal'): + name_element = meal.find('name') + name = name_element.text if name_element is not None else '' + + surname_element = meal.find('type') + type = surname_element.text if surname_element is not None else '' + + age_element = meal.find('price') + price = float(age_element.text) if age_element is not None and age_element.text else 0.0 + + alergens_element = meal.find('alergens') + alergens = [alergen.text for alergen in alergens_element] if alergens_element is not None else [] + + vegetarian_element = meal.find('vegetarian') + vegetarian = vegetarian_element.text == 'true' if vegetarian_element is not None else False + + vegan_element = meal.find('vegan') + vegan = vegan_element.text == 'true' if vegan_element is not None else False + + meat_element = meal.find('meat') + meat = meat_element.text == 'true' if meat_element is not None else False + + meal_data = { + 'nazwa': name, + 'typ': type, + 'cena': price, + 'alergeny': alergens, + 'vegan_vegetarian_meat': (vegetarian, vegan, meat) + } + + meals.append(Posilek(**meal_data)) + # Use the posilek_instance as needed + +with open('database\\clients.xml', 'r') as file: + xml_data = file.read() + +tree = ET.ElementTree(ET.fromstring(xml_data)) +root = tree.getroot() + + + +clients = [] +for person in root.findall('person'): + name_element = person.find('name') + name = name_element.text if name_element is not None else '' + + surname_element = person.find('surname') + surname = surname_element.text if surname_element is not None else '' + + age_element = person.find('age') + age = int(age_element.text) if age_element is not None and age_element.text else 0 + + person_data = { + 'imie': name, + 'nazwisko': surname, + 'wiek': age + } + + clients.append(Klient(**person_data)) + # Use the person_instance as needed + + +with open('database\\servers.xml', 'r') as file: + xml_data = file.read() + +tree = ET.ElementTree(ET.fromstring(xml_data)) +root = tree.getroot() + +servers = [] +for server in root.findall('server'): + name_element = server.find('name') + name = name_element.text if name_element is not None else '' + + surname_element = server.find('surname') + surname = surname_element.text if surname_element is not None else '' + + employee_number_element = server.find('employee_number') + employee_number = int(employee_number_element.text) if employee_number_element is not None and employee_number_element.text else 0 + + server_data = { + 'imie': name, + 'nazwisko': surname, + 'numer_pracowniczy': employee_number + } + + servers.append(Kelner(**server_data)) + + + + + +# Prezentacja uzycia przykładowego +import random +stoliki = [] +for i in range(3): + stolik = Stolik(i+1) + stoliki.append(stolik) + stolik.przypisz_kelner(servers[i%len(servers)]) + + +zamowienia = [] +for i in range(6): + zamowienie = [] + for j in range(2): + zamowienie.append(meals[random.randint(0, len(meals)-1)]) + zamowienia.append(Zamowienie(i+1, zamowienie)) + + +for stolik in stoliki: + klient = clients[random.randint(0, len(clients)-1)] + klient.zloz_zamowienie(zamowienia[random.randint(0, len(zamowienia)-1)], stolik) + + + + +for klient in [k for k in clients if k.stolik is not None]: + print(f"Klient {klient.imie} {klient.nazwisko} ma następujące Zamowienia:") + print(f"\t{klient.rachunek} i sumą {klient.rachunek.suma()}") + + + + + +# for meal in meals: +# print(meal) + +# for client in clients: +# print(client) + +# for server in servers: +# print(server) \ No newline at end of file diff --git a/classes/kelner.py b/classes/data/kelner.py similarity index 66% rename from classes/kelner.py rename to classes/data/kelner.py index 9cb9d1d..c6c4dd6 100644 --- a/classes/kelner.py +++ b/classes/data/kelner.py @@ -1,7 +1,9 @@ import pygame -import prefs class Kelner: def __init__ (self, imie, nazwisko,numer_pracowniczy): self.imie = imie self.nazwisko = nazwisko self.numer_pracowniczy = numer_pracowniczy + def __str__(self): + return f"{self.imie} {self.nazwisko} ({self.numer_pracowniczy})" + diff --git a/classes/klient.py b/classes/data/klient.py similarity index 64% rename from classes/klient.py rename to classes/data/klient.py index 3050149..7d9c85e 100644 --- a/classes/klient.py +++ b/classes/data/klient.py @@ -1,17 +1,23 @@ import pygame -import prefs +from rachunek import Rachunek +import random + class Klient: def __init__(self,imie,nazwisko,wiek): self.imie = imie self.nazwisko = nazwisko self.wiek = wiek self.stolik = None + self.rachunek = Rachunek(random.randint(1,1000)) def zloz_zamowienie(self,zamowienie,stolik): if self.stolik is None: self.stolik = stolik - stolik.przypisz_kelnera(stolik.kelner) - stolik.dodaj_zamowienie(zamowienie) + stolik.przypisz_kelner(stolik.kelner) + self.rachunek.dodaj_zamowienie(zamowienie) print(f"Klinet {self.imie} {self.nazwisko} zlozyl zamowienie przy stoliku {stolik.numer_stolika} i przyjal je kelner {stolik.kelner.numer_pracowniczy}.") else: print("Klient ma juz przypisany stolik.") + + def __str__(self): + return f"Klient: {self.imie} {self.nazwisko} {self.wiek}" diff --git a/classes/data/posilek.py b/classes/data/posilek.py new file mode 100644 index 0000000..b81b67d --- /dev/null +++ b/classes/data/posilek.py @@ -0,0 +1,12 @@ +import pygame +class Posilek: + def __init__(self,nazwa,typ,cena,alergeny,vegan_vegetarian_meat): + self.nazwa = nazwa + self.typ = typ + self.cena = cena + self.alergeny = alergeny + self.vegan_vegetarian_meat = vegan_vegetarian_meat + + def __str__(self): + return f"Posilek: {self.nazwa}, Typ: {self.typ}, Cena: {self.cena}, Alergeny: {self.alergeny}, Vegan/Vegetarian/Meat: {self.vegan_vegetarian_meat}" + diff --git a/classes/data/rachunek.py b/classes/data/rachunek.py new file mode 100644 index 0000000..dd55979 --- /dev/null +++ b/classes/data/rachunek.py @@ -0,0 +1,21 @@ +import pygame + +from zamowenie import Zamowienie +class Rachunek: + def __init__(self,numer_zamowienia): + self.numer_zamowienia = numer_zamowienia + self.zamowienia = [] + + def dodaj_zamowienie(self,zamowienie): + self.zamowienia.append(zamowienie) + + def suma(self): + suma_rachunek = 0 + for zamowienie in self.zamowienia: + suma_rachunek += sum(zamowienie.sum() for zamowienie in self.zamowienia) + + return suma_rachunek + def __str__(self): + print(self.zamowienia) + return f"Rachunek nr {self.numer_zamowienia}:\n\tSuma: {self.suma()}\n\tZamówienia:\n\t\t{''.join([str(zamowienie) for zamowienie in self.zamowienia])}" + diff --git a/classes/stolik.py b/classes/data/stolik.py similarity index 93% rename from classes/stolik.py rename to classes/data/stolik.py index 93eee9e..c940744 100644 --- a/classes/stolik.py +++ b/classes/data/stolik.py @@ -1,5 +1,4 @@ import pygame -import prefs class Stolik: def __init__(self,numer_stolika): self.numer_stolika = numer_stolika diff --git a/classes/data/zamowenie.py b/classes/data/zamowenie.py new file mode 100644 index 0000000..f413d22 --- /dev/null +++ b/classes/data/zamowenie.py @@ -0,0 +1,15 @@ +import pygame +from stolik import Stolik +from kelner import Kelner +from posilek import Posilek +class Zamowienie: + def __init__(self,numer_zamowienia,posilek): + self.numer_zamowienia = numer_zamowienia + print(type(posilek)) + assert all(isinstance(p, Posilek) for p in posilek), "Zamowienie: posilek nie jest listą tylko typu Posilek" + self.posilek = posilek + def __str__(self): + return f"Zamowienie numer {self.numer_zamowienia} z posiłkami {[p.nazwa for p in self.posilek]}" + def sum(self): + return sum(p.cena for p in self.posilek) + diff --git a/classes/posilek.py b/classes/posilek.py deleted file mode 100644 index 3167770..0000000 --- a/classes/posilek.py +++ /dev/null @@ -1,10 +0,0 @@ -import pygame -import prefs -class Posilek: - def __init__(self,nazwa,typ,cena,alergeny,czy_wege): - self.nazwa = nazwa - self.typ = typ - self.cena = cena - self.alergeny = alergeny - self.czy_wege = czy_wege - diff --git a/classes/rachunek.py b/classes/rachunek.py deleted file mode 100644 index ff115e8..0000000 --- a/classes/rachunek.py +++ /dev/null @@ -1,16 +0,0 @@ -import pygame -import prefs -class Rachunek: - def __init__(self,numer_zamowienia): - self.numer_zamowienia = numer_zamowienia - self.zamowienia = [] - - def dodaj_zamowienie(self,zamowienie): - if zamowienie.numer_zamowienia == self.numer_zamowienia: - self.zamowienia.append(zamowienie) - - def suma(self): - suma_rachunek = 0 - for zamowienie in self.zamowienia: - suma_rachunek += zamowienie.posilek.cena - return suma_rachunek diff --git a/classes/zamowenie.py b/classes/zamowenie.py deleted file mode 100644 index f536a4f..0000000 --- a/classes/zamowenie.py +++ /dev/null @@ -1,8 +0,0 @@ -import pygame -import prefs -class Zamowienie: - def __init__(self,numer_zamowienia,stolik,kelner,posilek): - self.numer_zamowienia = numer_zamowienia - self.stolik = stolik - self.kelner = kelner - self.posilek = posilek \ No newline at end of file diff --git a/database/clients.xml b/database/clients.xml new file mode 100644 index 0000000..429312e --- /dev/null +++ b/database/clients.xml @@ -0,0 +1,22 @@ + + + David + Bowie + 21 + + + Kamil + Stop + 17 + + + Jon + Snow + 23 + + + Andrzej + Kowalski + 44 + + \ No newline at end of file diff --git a/database/meals.xml b/database/meals.xml new file mode 100644 index 0000000..cc48d8e --- /dev/null +++ b/database/meals.xml @@ -0,0 +1,115 @@ + + + Spaghetti Bolognese + Main + 12.99 + + Gluten + Dairy + + false + false + true + + + Schabowy + Main + 36.00 + + Gluten + Dairy + + false + false + true + + + Grochówka + Soup + 20.00 + + Gluten + Dairy + + true + false + false + + Fielt z Piersi Kurczaka + Main + 34 + + Gluten + Dairy + + false + false + true + + Tatar + Starter + 24.00 + + Gluten + Dairy + + false + false + true + + Pyra z Gzikiem + Starter + 12.99 + + Gluten + Dairy + + false + true + true + + Pomidorowa z Makaronem + Soup + 18.00 + + Gluten + Dairy + + true + false + false + + Szczawiowa z Jajkiem + Soup + 20 + + Gluten + Dairy + + true + false + false + + Boczniaki w Panierce + Main + 34.00 + + Gluten + Dairy + + true + false + false + + Wątróbka z Cebulą + Main + 30.00 + + Gluten + Dairy + + false + false + true + + \ No newline at end of file diff --git a/database/servers.xml b/database/servers.xml new file mode 100644 index 0000000..f137e23 --- /dev/null +++ b/database/servers.xml @@ -0,0 +1,13 @@ + + + Dzesika + Płot + 1 + + + Mariusz + Kamień + 2 + + + diff --git a/prolog.py b/prolog.py deleted file mode 100644 index 38f337a..0000000 --- a/prolog.py +++ /dev/null @@ -1,78 +0,0 @@ -from pyswip import Prolog -prolog = Prolog () - -prolog.assertz("kelner(marta,komar,01)") -prolog.assertz("kelner(adam,bocian,02)") -prolog.assertz("kelner(wanda,sowa,03)") -prolog.assertz("kelner(piotr,skowron,04)") - - -prolog.assertz("klient(adam,kowalski,17)") -prolog.assertz("klient(anna,nowak,19)") -prolog.assertz("klient(jan,wisniewski,18)") -prolog.assertz("klient(katarzyna,dabrowska,41)") -prolog.assertz("klient(zofia,dabrowska,11)") -prolog.assertz("klient(michal,lewandowski,67)") -prolog.assertz("klient(magdadalena,wozniak,24)") -prolog.assertz("klient(pawel,kaminski,33)") -prolog.assertz("klient(karolina,kozlowska,39)") -prolog.assertz("klient(tomasz,jankowski,29)") -prolog.assertz("klient(monika,wieczorek,56)") - - -prolog.assertz("posilek(rosol_z_makaronem,zupa,10.00,[seler,gluten,jaja],miesne)") -prolog.assertz("posilek(pomidorowa,zupa,10.00,[gluten,seler],wegetarianskie)") -prolog.assertz("posilek(zurek,zupa,10.00,[gluten,jaja,mleko,seler],miesne)") -prolog.assertz("posilek(brokulowa,zupa,10.00,[seler],weganskie)") - -prolog.assertz("posilek(kotlet_schabowy,danie_glowne,20.00,[gluten,jaja,mleko],miesne)") -prolog.assertz("posilek(devolay_z_maslem,danie_glowne,15.00,[gluten,jaja,mleko],miesne)") -prolog.assertz("posilek(grillowany_filet_z_kurczaka,danie_glowne,20.00,[gluten,soja,mleko,seler],miesne") -prolog.assertz("posilek(klopsiki_w_sosie_pomidorowym,danie_glowne,15.00,[gluten,jaja,seler],miesne)") -prolog.assertz("posilek(pieczone_udko_z_kurczaka,danie_glowne,25.00,[soja,seler],miesne)") - -prolog.assertz("posilek(placki_ziemniaczane,danie_glowne,10.00,[gluten,jaja],wegetarianskie)") -prolog.assertz("posilek(nalesniki_z_serem,danie_glowne,10.00,[gluten,jaja,mleko],wegeterianskie)") -prolog.assertz("posilek(camembert_z_zurawina,danie_glowne,15.00,[gluten,mleko],wegetarianskie)") -prolog.assertz("posilek(curry_z_tofu,danie_glowne,15.00,[soja,orzechy],weganskie)") - -prolog.assertz("posilek(ziemniaki,dodatek,8.00,[],weganskie)") -prolog.assertz("posilek(ryz,dodatek,6.00,[gluten,soja],weganskie)") -prolog.assertz("posilek(kasza_gryczna,dodatek,6.00,[gluten,soja],weganskie)") -prolog.assertz("posilek(frytki,dodatek,9.00,[],weganskie)") - -prolog.assertz("posilek(sernik,deser,12.00,[mleko,jaja,gluten],wegetarianskie)") -prolog.assertz("posilek(brownie,deser,15.00,[mleko,jaja,gluten,orzechy],wegetarianskie)") -prolog.assertz("posilek(lody_waniliowe,deser,5.00,[mleko],wegetarianskie)") -prolog.assertz("posilek(panna_cotta,deser,17.00,[mleko],wegetarianskie)") - -prolog.assertz("posilek(kawa_czarna,napoj_cieply,6.00,[],weganskie)") -prolog.assertz("posilek(kawa_biala,napoj_cieply,7.00,[mleko],wegetarianskie)") -prolog.assertz("posilek(herbata_zielona,napoj_cieply,5.00,[],weganskie)") - -prolog.assertz("posilek(cola,napoj_zimny,6.00,[],weganskie)") -prolog.assertz("posilek(fanta,napoj_zimny,6.00,[],weganskie)") -prolog.assertz("posilek(sprite,napoj_zimny,6.00,[],weganskie)") -prolog.assertz("posilek(woda_niegazowana,napoj_zimny,3.00,[],weganskie)") -prolog.assertz("posilek(woda_gazowana,napoj_zimny,3.00,[],weganskie)") -prolog.assertz("posilek(ice_tea,napoj_zimny,6.00,[],weganskie)") - -prolog.assertz("posilek(piwo,napoj_alkoholowy,12.00,[jeczmien,gluten,siarczyny,drodze],weganskie)") -prolog.assertz("posilek(whiskey,napoj_alkoholowy,15.00,[gluten],weganskie)") -prolog.assertz("posilek(wino,napoj_alkoholowy,17.00,[siarczyny],weganskie)") -prolog.assertz("posilek(wodka,napoj_alkoholowy,8.00,[],weganskie)") - - -prolog.assertz("stolik(1)") -prolog.assertz("stolik(2)") -prolog.assertz("stolik(3)") -prolog.assertz("stolik(4)") -prolog.assertz("stolik(5)") -prolog.assertz("stolik(6)") -prolog.assertz("stolik(7)") -prolog.assertz("stolik(8)") -prolog.assertz("stolik(9)") -prolog.assertz("stolik(10)") - - -prolog.assertz("zamowienie(Numer_zamowienia, Stolik, Kelner, Posilek) :- stolik(Stolik), kelner(_, _, Kelner), klient(_, _, _), posilek(Posilek, _, _, _, _).")