Megoldás: A feladatsor egy lehetséges megoldása elérhető ide kattintva.
Levente egy pizzázót üzemeltet, aminek el szeretné készíteni a weboldalát. Ehhez először modellezni szeretné a pizzázóval kapcsolatos fontosabb fogalmakat. Készítsd el az Etel
, Pizza
és Vasarlo
osztályokat JavaScript nyelven a feladatleírás alapján!
Etel
osztály (13 pont)Hozz létre egy Etel
nevű osztályt, amelynek legyen 3 adattagja: nev
(az étel neve), _kaloriaSzam
(az ételben található kalóriák száma) és egy _fogyaszthato
nevű logikai adattag (ez mondja meg azt, hogy az étel fogyasztható-e vagy sem)! (1 pont)
A konstruktor az étel nevét és az ételben található kalóriák számát várja paraméterben (ilyen sorrendben), és ezekkel inicializálja a nev
és _kaloriaSzam
adattagokat. A _fogyaszthato
adattag értékét minden esetben true
-ra állítsa be a konstruktor! (3 pont)
Készíts get és set property-t a _kaloriaSzam
adattaghoz, kaloriaSzam
néven! A getter adja vissza az adattag értékét, a setter pedig ellenőrizze, hogy az adattag ne vehessen fel negatív értéket! Negatív paraméter esetén a setter állítsa be 0-ra a kalóriaszám értékét! (3 pont)
Készíts get és set property-t a _fogyaszthato
adattaghoz is, fogyaszthato
néven! A setter az adattag értékének beállítása előtt ellenőrizze, hogy boolean típusú paramétert kap-e! Ha igen, állítsa be az adattag értékét a paraméterre! Ha nem, akkor false
-ra állítsa be az adattag értékét! (3 pont)
Írd át az osztály konstruktorát úgy, hogy a _kaloriaSzam
adattag értéke itt is ugyanúgy legyen beállítva, mint a kaloriaSzam
setterben! (1 pont)
Írj egy paraméter nélküli info
metódust, amely a következő formátumú szöveggel térjen vissza: {nev} ({_kaloriaSzam} kaloria), fogyaszthato: {igen/nem}
!
igen
szöveg kerüljön, ha a _fogyaszthato
adattag értéke igaz, egyébként pedig a nem
szöveget helyettesítsd be! (2 pont)Pizza
osztály (23 pont)Készíts egy Pizza
nevű osztályt, amely az Etel
osztályból öröklődik! Az örökölt adattagokon kívül a pizza rendelkezzen még egy _ar
és egy feltetek
adattaggal is! Az _ar
a pizza árát jelenti, a feltetek
adattag pedig egy tömb, ami a pizzán található feltétek neveit fogja tárolni. (1 pont)
Írd meg az osztály konstruktorát, amelynek paraméterei rendre a pizza neve, a pizzában található kalóriák száma és a pizza ára! Az árra vonatkozó paraméter értékét ne legyen kötelező megadni az osztály példányosításakor, alapértéke legyen 1500!
pizza
szöveg, akkor fűzd azt hozzá az étel nevéhez egy szóközzel az őskonstruktor hívása során (pl. a hawaii
szövegből hawaii pizza
lesz)!_ar
adattagot!feltetek
adattagot minden esetben egy üres tömbbel inicializáld! (5 pont)Készíts get és set property-t az _ar
adattaghoz, ar
néven! A setterben ellenőrizd, hogy az adattag ne vehessen fel negatív értéket! Negatív paraméter esetén az ár értéke legyen 1000! (2 pont)
Írd át az osztály konstruktorát úgy, hogy az ár értéke itt is úgy legyen beállítva, mint a setterben! (1 pont)
Írj egy paraméter nélküli megromlik
metódust, amely állítsa a _fogyaszthato
adattag értékét hamisra, és írja ki a konzolra, hogy A pizza megromlott.
! (2 pont)
Írj egy feltetetFelvesz
nevű metódust, amely egy pizzafeltétet reprezentáló object-et kap paraméterül! Az object a következőképpen épül fel: a nev
property-hez tartozik a feltét neve, és a kaloria
property-hez tartozik a feltétben található kalóriák száma (pl. { nev: 'sajt', kaloria: 90 }
).
nev
és kaloria
property-k valamelyike hiányzik az object-ből, akkor írasd ki a konzolra a HIBA! Nem egy feltet!
hibaüzenetet!nev
property-hez tartozó érték) szöveges típusú, a kalóriaszám (kaloria
property-hez tartozó érték) pedig szám típusú legyen! Hibás típus esetén írasd ki a konzolra a HIBA! Nem megfelelo tipus!
hibaüzenetet!feltetek
tömbben, akkor írasd ki a HIBA! Mar van ilyen feltet!
hibaüzenetet a konzolra!feltetek
tömb végére! Növeld meg a _kaloriaSzam
adattag értékét a feltétben található kalóriák számával, valamint az ár értékét is növeld meg 100-zal! Végül írasd ki a konzolra a Feltet felvetel sikeres!
szöveget! (9 pont)Definiáld felül az ősosztály info
metódusát úgy, hogy az a következő formátumú szöveggel térjen vissza: {nev} ({_kaloriaSzam} kaloria), fogyaszthato: {igen/nem}, ar: {_ar} forint, feltetek: {feltetSorozat}
, ahol feltetSorozat
a feltétek neveit tartalmazó szöveg!
feltetek
tömb tartalma ['sonka', 'kukorica', 'sajt']
, akkor a feltéteket tartalmazó szöveg: sonka, kukorica, sajt
.{nev} ({_kaloriaSzam} kaloria), fogyaszthato: {igen/nem}, ar: {_ar} forint
)! (3 pont)Vasarlo
osztály (14 pont)Írj egy Vasarlo
nevű osztályt, amelynek legyen 3 adattagja: nev
(a vásárló neve), penz
(a vásárló pénzének mennyisége) és egy rendelesek
nevű tömb, amely a vásárló rendeléseit tárolja! (1 pont)
Írd meg az osztály konstruktorát, amely rendre a vásárló nevét és pénzének mennyiségét kapja paraméterül, és ezek alapján inicializálja a nev
és penz
adattagokat! A rendelesek
adattagot minden esetben egy üres tömbbel inicializálja a konstruktor! (3 pont)
Írj egy pizzatRendel
metódust, amely egy Pizza
típusú objektumot vár paraméterben!
HIBA! Nem pizza!
hibaüzenetet!HIBA! Nincs eleg penz!
hibaüzenetet!HIBA! Nem eheto pizza!
hibaüzenetet!penz
adattag értékét a pizza árával!rendelesek
tömb végére!Sikeres rendeles!
szöveget! (6 pont)Írj egy paraméter nélküli pizzakatListaz
metódust! A metódus visszatérési értéke egy szöveg, amely vesszőkkel elválasztva, {mennyiseg} darab {pizzanev}
formában felsorolva tartalmazza azt, hogy az egyes pizzafajtákból mennyit rendelt a vásárló (rendelesek
tömb)!
rendelesek
tömb ['hawaii pizza', 'dupla sajtos pizza', 'hawaii pizza']
, akkor a visszatérési érték a 2 darab hawaii pizza, 1 darab dupla sajtos pizza
szöveg.rendelesek
tömb üres, akkor a visszatérési érték a Nincs rendeles!
szöveg legyen! (4 pont)const etel1 = new Etel('alma', 70); const etel2 = new Etel('sajt', -100); etel1.kaloriaSzam = 50; etel2.fogyaszthato = false; console.log(etel1); // Etel { nev: 'alma', _kaloriaSzam: 50, _fogyaszthato: true } console.log(etel2); // Etel { nev: 'sajt', _kaloriaSzam: 0, _fogyaszthato: false } console.log(etel1.info()); // 'alma (50 kaloria), fogyaszthato: igen' console.log(etel2.info()); // 'sajt (0 kaloria), fogyaszthato: nem' console.log('----------------------------------------------------------------------------------------------------'); const p1 = new Pizza('hawaii', 1000, 1800); const p2 = new Pizza('sonkas-kukoricas pizza', 1000); p1.ar = 2000; p1.megromlik(); // 'A pizza megromlott.' p1.feltetetFelvesz('sajt'); // 'HIBA! Nem egy feltet!' p1.feltetetFelvesz({nev: 'sajt'}); // 'HIBA! Nem egy feltet!' p1.feltetetFelvesz({nev: 'sajt', kaloria: 'otven'}); // 'HIBA! Nem megfelelo tipus!' p1.feltetetFelvesz({nev: 'sajt', kaloria: 50}); // 'Feltet felvetel sikeres!' p1.feltetetFelvesz({nev: 'sajt', kaloria: 70}); // 'HIBA! Mar van ilyen feltet!' p1.feltetetFelvesz({nev: 'sonka', kaloria: 120}); // 'Feltet felvetel sikeres!' p1.feltetetFelvesz({nev: 'kukorica', kaloria: 30}); // 'Feltet felvetel sikeres!' console.log(p1.info()); // 'hawaii pizza (1200 kaloria), fogyaszthato: nem, ar: 2300 forint, feltetek: sajt, sonka, kukorica' console.log(p2.info()); // 'sonkas-kukoricas pizza (1000 kaloria), fogyaszthato: igen, ar: 1500 forint' console.log('----------------------------------------------------------------------------------------------------'); const v1 = new Vasarlo('Sanyi', 5000); const v2 = new Vasarlo('Bela', 10000); v1.pizzatRendel('valami pizza'); // 'HIBA! Nem pizza!' v1.pizzatRendel(p1); // 'HIBA! Nem eheto pizza!' v1.pizzatRendel(p2); // 'Sikeres rendeles!' v1.pizzatRendel(new Pizza('negysajtos', 1200, 1200)); // 'Sikeres rendeles!' v1.pizzatRendel(p2); // 'Sikeres rendeles!' v1.pizzatRendel(p2); // 'HIBA! Nincs eleg penz!' console.log(v1.penz); // 800 console.log(v2.penz); // 10000 console.log(v1.pizzakatListaz()); // '2 darab sonkas-kukoricas pizza, 1 darab negysajtos pizza' console.log(v2.pizzakatListaz()); // 'Nincs rendeles!'