Magazyn... cd pytan początkującego :-(

0

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");
	}

0

W zadaniu masz wyraźnie napisane, że musisz rzucać wyjątki, gdy coś jest nie tak. Wypisywanie użytkownikowi komunikatu o błędzie powinno być przy łapaniu wyjątku w klauzuli catch.
Co do usuwania, to możesz przejrzeć tablicę Towary lub użyć klasy HashMap<String, Towar> (jeżeli nazwy się nie powtarzają).

public void dodajTowar(Towar towar) throws WyjatekBrakMiejsca, WyjatekPrzepelnienie{   
                if(pojemnoscMagazynu - towar.rozmiar <0){
                        throw new WyjatekBrakMiejsca();
                }
                       
                if(nrTowaru >= towary.length){
                        throw new WyjatekPrzepelnienie();
                }

               pojemnoscMagazynu -= towar.rozmiar;

               towary[nrTowaru++] = towar;     
}
0

Dzięki. Z tymi wyjątkami już mnie j więcej rozumiem o co chodzi. Ale metody usuń dalej nie mam pojęcia jak napisać [???] . Te tablice mnie dobijają .... :-[

1 użytkowników online, w tym zalogowanych: 0, gości: 1