Witam, po waszej pomocy udało mi się uporać z programem reprezentującym Bank ( parę postów poniżej ). No i w tym momencie pojawił się przede mną program z magazynem, ... niestety zasiadłem na tym już chyba konkretnie. Biorę się więc za czytanie książek o OOP(czas najwyższy ... bo egzamin tuż tuż), ale liczę, że w między czasie znajdzie się ktoś, kto znowu naprowadzi mnie na właściwą ścieżkę rozumowania tego języka (książkowe przykłady mieszają mi tylko we łbie ... a i tak mam już tam dobrze ..:-) )
Zadanie:
* Napisz klasę Magazyn służącą do przechowywania Towarów. Magazyn powinien umożliwiać dodawanie i usuwanie Towarów, a także sprawdzanie stanu magazynowego oraz dostępnej przestrzeni magazynowej.
* Każdy Towar ma nazwę oraz rozmiar. Magazyn ma określoną pojemność maksymalną. Należy kontrolować czy maksymalna pojemność Magazynu nie została przekroczona.
* Sprawdź jak Java obsługuje sytuacje wyjątkowe (np. referencja równa null)
* Dodaj własną obsługę sytuacji wyjątkowych (np. przekroczona dostępna przestrzeń magazynowa).
* Działanie Magazynu przetestuj przykładowym programem.
Wskazówki:
* Towar powinien zawierać:
o pola na nazwę i rozmiar,
o konstruktor z dwoma parametrami.
* Magazyn powinien zawierać:
o tablicę do przechowywania Towarów,
o kontruktor, przyjmujący jako parametr dostępną przestrzeń magazynową,
o metodę dodaj, przyjmującą Towar jako parametr,
o metodę usuń, przyjmującą jako parametr nazwę Towaru do usunięcia i zwracającą usuwany Towar,
o metodę toString, do wypisywania stanu i dostępnej pojemności Magazynu.
* Pamiętaj o zliczaniu dostępnej jeszcze przestrzeni przy dodawaniu i usuwaniu Towarów z Magazynu.
Wyjątki
* Stwórz odpowiednią hierarchię wyjątków (wszystkie powinny dziedziczyć z klasy Exception), reprezentujących różne rodzaje sytuacji wyjątkowych: niewłaściwa wartość parametru (np. ujemna pojemność lub rozmiar), przekroczona pojemność Magazynu, brak Towaru o podanej nazwie, etc.
* Klasy wyjątków mogą być puste - często już sama klasa jest wystarczającą informacją o rodzaju błędu. Możesz jednak dodać jakieś własne pola, konstruktory i metody, które pozwolą przechować nieco szerszą informację o napotkanym błędzie.
* W momencie napotkania błędnej sytuacji należy rzucać odpowiedni wyjątek instrukcją throw, np:
if(rozmiar <= 0)
throw new WyjatekZłyRozmiar();
* Metoda, w której znajduje się instrukcja rzucająca wyjątek powinna być oznaczona słowe kluczowym throws, np:
public void dodaj(Towar t) throws WyjatekPrzepełnienie
* Wywołanie metody otaczamy nawiasami try-catch, aby przechwycić wyjątek, np:
try {
. . .
mag.dodaj(new Towar("telewizor", 50));
. . .
} catch (WyjatekPrzepełnienie e) {
System.out.println("Błąd!");
e.printStackTrace();
}
Program
Testy możesz przeprowadzać na prostym programie, w którym cały scenariusz działania jest na stałe zapisany w funkcji main. Potem spróbuj rozbudować program tak, aby udostępniał swą funkcjonalność przyjmując polecenia przy pomocy wpisywanych komend ("naciśnij 1 aby dodać towar do magazynu", "podaj nazwę towaru", etc.)
I moje coś (prawdopodobnie pseudokod):
public class Towar {
String nazwaTowaru;
int rozmiar;
Towar (String nazwa, int rozm){
nazwaTowaru = nazwa;
rozmiar = rozm;
}
}
public class Magazyn {
private int pojemnoscMagazynu;
private int nrTowaru;
private Towar [] towary;
Magazyn(int rozm){
nrTowaru = 0;
towary = new Towar[100];
pojemnoscMagazynu = rozm;
}
public void dodajTowar(Towar towar){
if(pojemnoscMagazynu - towar.rozmiar <0){
System.out.println("Za mało miejsca w magazynie");
}
else
pojemnoscMagazynu = pojemnoscMagazynu - towar.rozmiar;
if(nrTowaru >= towary.length){
System.out.println("Przepełnienie");
}
else
towary[nrTowaru] = towar;
nrTowaru++;
}
public void usunTowar(int nazwTowaru){
// metoda powinna przyjmować jako parametr nazwę towaru do usunięcia i zwracać usuwany towar ??? w jaki sposób kur... ???
}
public int wolneMiejsce(){
return pojemnoscMagazynu;
}
public void stanMagazynu(){
System.out.println("W magazynie jest " + wolneMiejsce() + " miejsca");
}