Kihagyás

Kocsmaszimulátor feladat

Kocsmaszimulátor

Az itt bemutatott feladat gyakorlatilag az objektum-orientált programozást hivatott gyakoroltatni, de csak az alapokat. A feladat két részből áll, először csak hagyományos osztályokat kell készíteni, a második részben jön be az öröklődés.

Amennyiben az órán nem hallottad még az öröklődést, csak az első részt oldd meg. A feladat megoldása előtt olvasd végig a feladatsort, és készíts hozzá UML osztálydiagramot.

Kocsmaszimulátor part 1

public class Ember {
    private String nev;
    private int kor;
    private boolean ferfi;

  // konstruktorok

  // getterek és szetterek
}

Bővítsük ki a már létező Ember osztályt egy privát pénz, és részegség int, és egy kocsmában boolean változókkal. Legyen egy új konstruktor, ez fogadjon a már meglévő paramétereken kívül egy pénz paramétert is, amit állítson be az Ember pénzének. A részegség 0, a kocsmában false legyen alapértelmezetten. Legyen az Embernek egy iszik(Kocsmáros kocsmaros) metódusa, ami egy Kocsmárost vár majd. Ha ezt meghívják, akkor ha az illető a kocsmában van, fogyjon 1 a pénzéből, nőjön 1-gyel a részegsége, generáljon 1 koszos poharat, és adjon 1 pénzt a kocsmárosnak, akit paraméterül kapott. Majd látjuk, hogy a poharat hova kell eltárolni, és mi a Kocsmáros. Ha nincs a kocsmában, akkor írjon ki egy üzenetet erről. Legyen egy alszik() metódusa is, ami nullázza a részegséget és kiírja, hogy elaludt, egy hazamegy() metódusa, ami false-ra állítja a kocsmában változót, és egy jön() metódusa, ami true-ra. Ezekről is történjen kiírás.

Legyen egy Kocsmáros osztály is. Neki is legyen privát pénze, amit konstruktorban is meg lehet adni. Az összes kocsmáros ugyanazokon a koszos poharakon osztozzon (static), és legyen egy elmos() metódusa, ami csökkenti eggyel a koszos poharak számát, és kiírja, hogy elmosott egy poharat. Ha nincs koszos pohár, akkor azt írja ki.

Legyen egy Ital osztály is, aminek a következő privát tulajdonságai lesznek: ár, alkoholtartalom.

Az Embernek legyen egy olyan iszik metódusa is, aminek fejléce iszik(Kocsmáros kocsmáros, Ital ital), azaz italt is tud fogadni. Ekkor az ital árát adja át az Ember a Kocsmárosnak 1 helyett. Az Ember részegsége az ital alkoholtartalmával nőjön.

Ha a részegség eléri a 40-et, akkor az Ember mindkét iszik() függvényénél automatikusan aludjon el.

Az összes osztály privát változóihoz legyenek getter, setter metódusok, és az osztályokhoz értelmes toString metódus.

Legyen egy main függvény, mondjuk Main nevű osztályban, itt írjatok egy rövidke futtatást, amiben eljátszogattok egy kicsit az emberekkel, bemutattok pár esetet, igyanak, aludjanak, stb...

Kocsmaszimulátor part 2

A meglévő Kocsmáros osztályunkat örököltessük az Ember-ből, mivel a kocsmárosok is emberek. Ettől automatikusan megkapja az Ember osztályban deklarált adattagokat (változókat) is. A Kocsmároshoz írjunk egy új paraméteres konstuktort, ami az Ember (tehát az ős) konstruktorát is meghívja (super kulcsszó). Elvileg a Kocsmáros így működőképes lesz, ha nem, akkor hozzuk működőképes állapotba további hibaelhárítással.

Az Ember osztályunkból örököltessünk egy Diákot is, aki egy különleges ember lesz. A diák rendelkezzen privát ösztöndíj változóval, ami megadja, hogy mennyi pénzt keres a tanulással. Legyen egy tanul() metódusa, amitől az ösztöndíja mennyiségével nő a pénze. Legyen egy paraméteres tanul(int mennyit) metódusa is, amivel be lehet állítani, mennyit tanuljon, és ennek megfelelő pénzt kap.

Az Emberből származzon még egy Kidobó is. Neki legyen egy privát boolean dolgozik adattagja. Legyen egy static változója is, ami azt fogja megadni, hogy hány olyan kidobó van, aki dolgozik éppen. Ez alapból 0. Új kidobó példányok konstruktorába rakjuk ennek a változónak a növelését, és változtassuk mindig megfelelően, ha a dolgozik változó értéke változhat (setter, szolgalatbaAll(), szolgalatbolKilep()). Legyen tehát szolgalatbaAll(), és szolgalatbolKilep() metódusa is, amelyek a dolgozik értékét állítják. Írjuk felül az iszik függvényét úgy, hogy ellenőrizze le, az adott kidobó éppen dolgozik-e, mivel szolgálatban nem ihat alkoholtartalmú italt, azonban 0 alkoholtartalmút igen. Ha nincs szolgálatban, hívjuk meg az Ember (tehát super) iszik függvényét.

A Diák, és a Kidobó is rendelkezzen paraméteres konstruktorral.

A Diák, Kocsmáros, és Kidobó toString()-jét írjuk felül, hívjuk meg benne az Ember toString()-jét is, valamint írjuk ki az adott osztályra jellemző egyéb adatokat is.

Az Ember rendelkezzen egy kötözködik(Ember kivel) metódussal, ami egy másik embert vár paraméterül. Le kell ellenőrizni, hogy van-e szolgálatban lévő kidobó, ha igen, az első embert hazaküldjük. Ha nincs, kiírjuk, hogy jót kötözködött.

Italok

Az Ital osztályból örököltessünk egy Sör, Bor, és egy Kevert osztályt.

A Bor rendelkezzen egy privát int évjárat változóval. A Sörnek ne legyen új változója. Ezek kapjanak megfelelő konstruktort.

A Kevert osztálynak legyen 2, 3, 4 paraméteres konstruktora is, ami italokat vár paraméterül, például: public Kevert(Ital it1, Ital it2, Ital it3, Ital it4)

Ezek az italok lehetnek sima Ital, Sör, vagy Bor tipusúak, ezt nem kell külön lekezelnünk, mert erre is jó az öröklődés, mivel ezek mind kezelhetőek Italként.

A konstruktor a Kevert ital alkoholtartalmát a megadott italok átlag-alkoholtartalmára állítsa be. Egy példa a konstruktor hívására:

Kevert kevert1 = new Kevert(sor1, sor2, bor1, ital1);

Minden osztály privát adattagjainak legyenek getterei és setterei.

A main függvényben játsszunk kicsit a beépített új funkciókkal is.


Utolsó frissítés: 2024-04-11 07:54:27