Zadanie- klasy,dziedziczenie,kolekcje

Otrzymałeś(aś) rozwiązanie do zamieszczonego zadania? - podziękuj autorowi rozwiązania! Kliknij
GangbangZmija
Witam na forum
Witam na forum
Posty: 1
Rejestracja: 21 kwie 2022, 00:49

Zadanie- klasy,dziedziczenie,kolekcje

Post autor: GangbangZmija »

Serdeczne szalom potrzebuje pomocy z zadaniem, a java dla mnie to chinszczyzna.

Oto treść:

Oto treść:

Napisać aplikację symulujacą proces rezerwacji pokoi w pewnej sieci hoteli.
Sieć hoteli oferuje różne rodzaje pokoi, każdy pokój ma swoją nazwę (jedynka, dwójka, rodzina, ...) oraz typ (budżetowy, standardowy, premium, ...). Ceny pokoi (za noc) znajdują się w cenniku.
Klienci po rejestracji otrzymują identyfikatory oraz deklarują kwotę pieniędzy, którą chce wydać na rezerwacje. Klienci wybierają pokoje i umieszczają je na swojej tzw. liście życzeń. Następnie (być może po jakimś czasie) w celu finalizacji rezerwacji przepakowują ją do koszyka i zapłacą za jego zawartość. Klienci mogą płacić kartą lub przelewem bankowym.

Aplikacja powinna być napisana tak, aby następujacy, przykładowy program

public class BookingTest {

// cena pokoi (o podanym typie) z koszyka
static int cena(Koszyk k, String typ) {
/*<- tu trzeba wpisać ciało metody */ ( TO JEST NA ZIELONO ORGINALNIE )
}

public static void main(String[] args) {

// cennik
Cennik cennik = Cennik.pobierzCennik();

// dodawanie nowych cen do cennika
cennik.dodaj("jedynka", "standard", 100, 80, 4); // pokój jednoosobowy typu standardowego kosztuje 100 zł/noc jeśli klient zarezerwuje mniej niż 4 noce,
// w innym przypadku kosztuje 80 zł/noc

cennik.dodaj("dwojka", "budzet", 140); // pokój dwuosobowy typu budżetowego kosztuje 140 zł/noc niezależnie od liczby nocy

cennik.dodaj("trojka", "standard", 300); // pokój trzyosobowy typu standardowego kosztuje 300 zł/noc niezależnie od liczby nocy

cennik.dodaj("rodzina", "premium", 500); // pokój rodzinny typu premium kosztuje 500 zł/noc niezależnie od liczby nocy

// Klient ocean deklaruje kwotę 2200 zł na rezerwacje
Klient ocean = new Klient("ocean", 2200);

// Klient ocean dodaje do listy życzeń różne rodzaje pokoi:
// 4 noce w pokoju jednoosobowym typu standardowego, 5 nocy w pokoju trzyosobowym typu standardowego,
// 3 noce w pokoju dwuosobowym typu premium, 3 noce w pokoju dwuosobowym budżetowym
ocean.dodaj(new Jedynka("standard", 4));
ocean.dodaj(new Trojka("standard", 5));
ocean.dodaj(new Dwojka("premium", 3));
ocean.dodaj(new Dwojka("budzet", 2));

// Lista życzeń klienta ocean
ListaZyczen listaOceanu = ocean.pobierzListeZyczen();

System.out.println("Lista życzeń klienta " + listaOceanu);

// Przed płaceniem, klient przepakuje pokoje z listy życzeń do koszyka.
// Możliwe, że na liście życzeń są pokoje niemające ceny w cenniku,
// w takim przypadku zostałyby usunięte z koszyka (ale nie z listy życzeń)
Koszyk koszykOceanu = new Koszyk(ocean);
ocean.przepakuj(koszykOceanu);

// Co jest na liście życzeń klienta ocean
System.out.println("Po przepakowaniu, lista życzeń klienta " + ocean.pobierzListeZyczen());

// Co jest w koszyku klienta ocean
System.out.println("Po przepakowaniu, koszyk klienta " + koszykOceanu);

// Ile wynosi cena wszystkich pokoi typu standardowego w koszyku klienta ocean
System.out.println("Pokoje standardowe w koszyku klienta ocean kosztowały: "
+ cena(koszykOceanu, "standard"));

// Klient zapłaci...
ocean.zaplac(false); // false = płaci kartą płatniczą, bez prowizji

// Ile klientowi ocean zostało pieniędzy?
System.out.println("Po zapłaceniu, klientowi ocean zostało: " + ocean.pobierzPortfel() + " zł");

// Mogło klientowi zabraknąć srodków, wtedy pokoje są odkładane,
// w innym przypadku koszyk jest pusty po zapłaceniu
System.out.println("Po zapłaceniu, koszyk klienta " + ocean.pobierzKoszyk());
System.out.println("Po zapłaceniu, koszyk klienta " + koszykOceanu);

// Teraz przychodzi klient morze,
// deklaruje 780 zł na rezerwacje
Klient morze = new Klient("morze", 780);

// Zarezerwował za dużo jak na tę kwotę
morze.dodaj(new Jedynka("standard", 3));
morze.dodaj(new Dwojka("budzet", 4));

// Co klient morze ma na swojej liście życzeń
System.out.println("Lista życzeń klienta " + morze.pobierzListeZyczen());

// Przepakowanie z listy życzeń do koszyka,
// może się okazać, że na liście życzeń są pokoje niemające ceny w cenniku,
// w takim razie zostałyby usunięte z koszyka (ale nie z listy życzeń)
Koszyk koszykMorza = new Koszyk(morze);
morze.przepakuj(koszykMorza);

// Co jest na liście życzeń morze
System.out.println("Po przepakowaniu, lista życzeń klienta " + morze.pobierzListeZyczen());

// A co jest w koszyku klienta morze
System.out.println("Po przepakowaniu, koszyk klienta " + morze.pobierzKoszyk());

// klient morze płaci
morze.zaplac(true); // true = płaci przelewem, prowizja 5 PLN

// Ile klientowi morze zostało pieniędzy?
System.out.println("Po zapłaceniu, klientowi morze zostało: " + morze.pobierzPortfel() + " zł");

// Co zostało w koszyku klienta morze (za mało pieniędzy miał)
System.out.println("Po zapłaceniu, koszyk klienta " + koszykMorza);

}
}

wyprowadził na konsolę podobne do poniższych wyniki:

Lista życzeń klienta ocean:
jedynka, typ: standard, ile: 4 nocy, cena 80
trojka, typ: standard, ile: 5 nocy, cena 300
dwojka, typ: premium, ile: 3 noce, cena -1.0
dwojka, typ: budzet, ile: 2 noce, cena 140
Po przepakowaniu, lista życzeń klienta ocean:
dwojka, typ: premium, ile: 3 noce, cena -1.0
Po przepakowaniu, koszyk klienta ocean:
jedynka, typ: standard, ile: 4 noce, cena 80
trojka, typ: standard, ile: 5 nocy, cena 300
dwojka, typ: budzet, ile: 2 noce, cena 140
Pokoje standardowe w koszyku klienta ocean kosztowały: 1820
Po zapłaceniu, klientowi ocean zostało: 100 zł
Po zapłaceniu, koszyk klienta ocean: -- pusto
Po zapłaceniu, koszyk klienta ocean: -- pusto
Lista życzeń klienta morze:
jedynka, typ: standard, ile: 3 noce, cena 100
dwojka, typ: budzet, ile: 4 noce, cena 140
Po przepakowaniu, lista życzeń klienta morze: -- pusto
Po przepakowaniu, koszyk klienta morze:
jedynka, typ: standard, ile: 3 noce, cena 100
dwojka, typ: budzet, ile: 4 noce, cena 140
Po zapłaceniu, klientowi morze zostało: 55 zł
Po zapłaceniu, koszyk klienta morze:
dwojka, typ: budzet, ile: 1 noc, cena 140

Kod programu testującego wolno zmienić wyłącznie w miejscu zaznaczonym na zielono.

Dodawanie nowych rodzajów pokoi musi być zrealizowane w sposób bardzo prosty, w takim przypadku modyfikacja pozostałych klas jest niedozwolona.
Wymagania dodatkowe:

korzystanie z klas abstrakcyjnych oraz z polimorfizmu jest obowiązkowe
pożądana jest minimalizacja kodu klas ListaZyczen oraz Koszyk
skorzystaj z singletonu w zdefiniowaniu klasy Cennik (w dowolnym momencie dostępny jest tylko jeden cennik)

Ważne uwagi:

Być może są pokoje niemające ceny w cenniku, wtedy przy przepakowaniu z listy życzeń do koszyka są one usuwane z koszyka (ale nie z listy życzeń).
Jeśli klient nie ma wystarczającej ilości pieniędzy na całą zawartość koszyka to zapłaci tylko za część koszyka. Po zapłaceniu, w koszyku zostaje część rezerwacji, za którą klient nie mógł zapłacić (liczba usuniętej rezerwacji danego rodzaju musi być wielokrotnością ceny za 1 noc, usunięty zostanie najpierw najdroższy rodzaj pokoi).
Niektóre pokoje posiadają cenę krótkoterminową (w przypadku rezerwacji mniejszej liczby nocy niż wcześniej ustalony limit) oraz cenę długoterminową (w przeciwnym przypadku).
Przy płaceniu przelewem klient zapłaci dodatkowo 5 zł prowizji.
Zdefiniowanie odpowiedniej metody toString() w niektórych klasach jest obowiązkowe.
Program powinien działać dla dowolnych danych a nie tylko dla tych podanych w teście.
ODPOWIEDZ