Zamówienie Java zadanie

0

Witam, potrzebuje pomocy w zadaniu z Javy polecenie:

  1. Napisać program do obsługi zamówień. Program powinien składać się z dwóch
    klas: Zamowienie oraz Pozycja , przy czym każde zamówienie zawierać może
    jedną lub więcej pozycji.
    Klasa Pozycja powinna zawierać następujące pola:
    • nazwaTowaru (String)
    • ileSztuk (int) – liczba zamówionych sztuk
    • cena (double) – cena pojedynczej sztuki
    oraz metody:
    • konstruktor z parametrami umożliwiającymi ustalenie wartości pól klasy,
    • metodę double obliczWartosc() zwracającą wartość pozycji zamówienia,
    • metodę String toString() zwracającą łańcuch w formacie: nazwa towaru
    (20 znaków), cena (10 znaków), liczba sztuk (4 znaki), wartość zamówienia
    (10 znaków), przykład:
    Cukier 4,00 zł 3 szt. 12,00 zł
    Klasa Zamowienie powinna zawierać następujące pola:
    • pozycje (tablica obiektów kl. Pozycja) – pozycje składowe zamówienia,
    • ileDodanych (int) – liczba pozycji w zamówieniu,
    • maksRozmiar (int) – maksymalna liczba pozycji w zamówieniu
    oraz metody:
    • konstruktor bezparametrowy – maksRozmiar ustalany na wartość 10,
    • konstruktor z parametrem określającym maksymalną liczbę pozycji w zamówieniu,
    • metodę void dodajPozycje(Pozycja p) , która dodaje podaną pozycję do
    zamówienia,
    • metodę double obliczWartosc() zwracającą wartość zamówienia,
    • metodę String toString() , która zwraca łańcuch zawierający spis pozycji
    zamówienia oraz łączną wartość zamówienia.
    Przykładowa metoda korzystająca z wspomnianych klas:
    public static void main(String [] args) throws IOException {
    Pozycja p1 = new Pozycja("Chleb", 1, 3.5);
    System.out.println(p1);
    Pozycja p2 = new Pozycja("Cukier", 3, 4);
    System.out.print(p2);
    Zamowienie z = new Zamowienie(20);
    z.dodajPozycje(p1);
    z.dodajPozycje(p2);
    System.out.println(z);
    }
    Przykładowy wynik:
    Chleb 3,50 zł 1 szt. 3,50 zł
    Cukier 4,00 zł 3 szt. 12,00 zł
    Zamówienie:
    Chleb 3,50 zł 1 szt. 3,50 zł
    Cukier 4,00 zł 3 szt. 12,00 zł
    Razem: 15,50 zł
  2. W klasie Zamowienie :
    • zaimplementować metodę void usunPozycje(int indeks) , która usuwa
    z zamówienia pozycję o podanym indeksie
    • zaimplementować metodę void edytujPozycje(int indeks) , która umożliwi
    edycję wybranej pozycji zamówienia, tj. nazwy towaru, ceny oraz liczby
    sztuk
    • zmodyfikować metodę void dodajPozycje(Pozycja p) , tak by w stytuacji,
    gdy dodawany jest ten sam towar nie dodawała kolejnej pozycji, lecz
    zwiększała liczbę sztuk w już istniejącej
  3. W klasie Pozycja :
    • zaimplementować metodę double obliczWartoscZRabatem , która oblicza
    wartość pozycji zamówienia po uwzględnieniu rabatu zależnego od liczby
    sztuk:
    – 5–10 szt. rabat 5%
    – 10–20 szt. rabat 10%
    – powyżej 20 szt. rabat 15%.
  4. Zmodyfikować metodę obliczWartosc w klasie Zamowienie, tak by również wyświetlała
    informacje o rabacie i łączny koszt zamówienia po jego uwzględnieniu.
  5. zmodyfikować metodę toString , by wyświetlała również naliczony rabat i wartość
    z rabatem.
  6. W obu klasach zaimplementować interfejs Serializable umożliwiający zapis i
    odczyt danych z pliku realizowany przez metody:
    • metodę public static void zapiszZamowienie(Zamowienie z, String nazwaPliku) ,
    która zapisze podane w parametrze zamówienie do pliku o nazwie podanej
    drugim parametrem.
    • metodę public static Zamowienie wczytajZamowienie(String nazwaPliku) ,
    która wczyta z pliku o podanej nazwie zamówienie i zwróci je jako wynik.

Z góry dziękuje za pomoc.

0

@jacex:
public class Pozycja
{

    String nazwaTowaru;
    int ileSztuk; 
    double cena; 
    double wartosc;
    String a;

    Pozycja(String nazwaTowaru, int ileSztuk, double cena)
    {
        this.nazwaTowaru = nazwaTowaru;
        this.ileSztuk = ileSztuk;
        this.cena = cena;
    }
    
    public double obliczWartosc()
    {
        wartosc = ileSztuk * cena;
        return wartosc;
    }


    public String toString(String nazwaTowaru, String cena,
            String ileSztuk, String wartoscZamowienia)
    {
        this.nazwaTowaru = nazwaTowaru;
        this.cena = Double.Parse(cena);
        this.ileSztuk = int.Parse(ileSztuk);
        this.wartosc = Double.Parse(wartoscZamowienia);
        a = nazwaTowaru + " " + cena + " " + ileSztuk + " " + wartosc;
        return a;
    }

}

public class Zamowienie
{

    int ileDodanych;
    int maxRozmiar;
   Pozycja[] pozycje = new Pozycja[10]; 

    Zamowienie()
    {
        maxRozmiar = 10;
    }

    Zamowienie(int maxRozmiar)
    {
        this.maxRozmiar = maxRozmiar;
    }

    public void DodajPozycje(Pozycja[] p)
    {
        this.pozycje = p;
    }

    public double ObliczWartosc()
    {
        double wartoscZam = 10;
        return wartoscZam;
    }

   
}
2

Nie sprecyzowałeś z czym masz problem, więc ciężko Ci pomóc, poza jakimiś luźnymi obserwacjami:

  1. Czy używasz IDE? Bo klasa Pozycja powinna na czerwono Ci się wyświetlać.

  2. W klasie Pozycja w metodzie toString znowu robisz to samo co w konstruktorze tj np. this.nazwaTowaru = nazwaTowaru; Jest tam co usuwać generalnie. Punkt pierwszy Ci podpowie co i jak ;)

  3. toString nie powinno przyjmować argumentów właściwie. Ma dostęp do zmiennych z klasy

  4. Jest powód czemu tablica Pozycje ma bezpośrednio ustawione 10 elementów? Pomyśl o zmiennych które zadeklarowałeś w klasie Zamówienie. Czy nie są pomocne do określenia ile ta tablica powinna mieć elementów?

  5. Metoda DodajPozycje powinna przyjmować obiekt jako argument, a nie tablice obiektów. Tym samym, całe ciało metody też jest złe. To raczej służy do tego żeby dodawać pozycje do tablicy. Właściwie to nie wiem czemu wam listy nie dał w zadaniu zamiast tablicy. Ładniej by było z listą.

  6. Tu już zaczynam wymiękać, bo kompletnie nie rozumiem, czemu w metodzie obliczWartosc klasy Zamówienie wpisujesz (bez żadnych obliczeń) wartość 10. Generalnie uparłeś się na to 10 ;)

  7. Widać, że masz problem z tym toString, ale jak poradzisz sobie w klasie Pozycja, to i zamówienie przyjdzie łatwo.

  8. Wydaję mi się, że masz nad czym pracować. Zgaduję, że to przedmiot w stylu podstawy programowania obiektowego czy coś w tym stylu? Zadanie jest łatwe, dasz radę, jak masz z czymś problem musisz dokładnie opisać z czym. Nikt Ci gotowca nie da.

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