Hurtownia Java

0

Witam. Robię takie zadanie:

Hurtownia sprzedaje sklepom podzespoły komputerowe np. procesory, płyty główne, dyski itp. Każdy sklep identyfikowany jest w hurtowni po numerze NIP. Dodatkowo przechowywane są pozostałe dane sklepów takie jak nazwa i adres. Na adres składa sie nazwa ulicy, numer domu i lokalu.
Hurtownia przechowuje informacje o wszystkich zakupach dokonywanych przez sklep. Poza
podzespołami hurtowni sprzedaje również gotowe komputery stacjonarne oraz laptopy. Każdy towar ma niepowtarzalny numer identyfikacyjny oraz cenę i opis. Napisz program, który umożliwi:

  1. Przechowywanie informacji o wszystkich sklepach
  2. Dodawanie do programu nowego sklepu
  3. Wyświetlanie informacji o sklepie tj. jego nazwę i adres
  4. Wyświetlanie informacji o zakupach dokonanych przez sklep z danego miesiąca i roku zakupu
  5. Przechowywanie informacji o wszystkich sprzedawanych produktach
  6. Dodawanie nowego produktu
  7. Wyświetlanie informacji o sklepie, który zakupił w danym miesiącu i roku najwięcej wskazanego produktu
  8. Dokonanie zakupu produktów przez sklep

Przeszedłem przez 3 kroki i zatrzymałem się na 4 (coś zrobiłem ale nie wiem czy dobrze). Proszę o pomoc co zrobić dalej? Jakie klasy utworzyć?

To co napisałem:

Klasa z mainem:

public class Hurtownia {

    public static void main(String[] args) {
        Sklep sklep1 = new Sklep("6055548","uGosi","Wojska Polskiego",34,17);
        Sklep sklep2 = new Sklep("6054878","Babka","Wesoła",40,3);

        //Hurtownia h1 = new Hurtownia();
        sklep1.zwrocInfo();
        sklep2.zwrocInfo();

        Towar t1 = new Towar(03,33.90,"To jest cos");
        Zamowienie zam1= new Zamowienie(sklep1,"Luty",2006);

        zam1.dodajTowar(t1);

        zam1.zwrocZamowienie();



    }
}

Sklep.class

public class Sklep {

    private String NIP;
    private String nazwa;
    private String ulica;
    private int nr_dom;
    private int nr_lok;

    public Sklep(String NIP, String nazwa, String ulica, int nr_dom, int nr_lok) {
        this.NIP = NIP;
        this.nazwa = nazwa;
        this.ulica = ulica;
        this.nr_dom = nr_dom;
        this.nr_lok = nr_lok;
    }

    public String getNIP() {
        return NIP;
    }

    public void setNIP(String NIP) {
        this.NIP = NIP;
    }

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public String getUlica() {
        return ulica;
    }

    public void setUlica(String ulica) {
        this.ulica = ulica;
    }

    public int getNr_dom() {
        return nr_dom;
    }

    public void setNr_dom(int nr_dom) {
        this.nr_dom = nr_dom;
    }

    public int getNr_lok() {
        return nr_lok;
    }

    public void setNr_lok(int nr_lok) {
        this.nr_lok = nr_lok;
    }


    public void zwrocInfo(){
        System.out.println("Sklep: '"+getNazwa()+"' znajduje sie na ul."+getUlica()+" "+getNr_dom()+"/"+getNr_lok());
    }

}

ListaSklepow.class

public class ListaSklepow {

    private List<Sklep> skleps;

    public ListaSklepow(List<Sklep> skleps){
        this.skleps = new ArrayList<Sklep>();
    }

    public void dodajSklep(Sklep sklep){
        this.skleps.add(sklep);
    }



}

Towar.class

public class Towar {

    private int ID;
    private double cena;
    private String opis;

    public Towar(int ID, double cena, String opis) {
        this.ID = ID;
        this.cena = cena;
        this.opis = opis;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public double getCena() {
        return cena;
    }

    public void setCena(double cena) {
        this.cena = cena;
    }

    public String getOpis() {
        return opis;
    }

    public void setOpis(String opis) {
        this.opis = opis;
    }

}

ListaTowarow.class

public class ListaTowarow {

    private List<Towar> towars;

    public ListaTowarow(List<Towar> towar){
        this.towars = new ArrayList<Towar>();
    }

    public void dodajTowar(Towar towar){
        this.towars.add(towar);
    }



}

Zamowienie.class

public class Zamowienie {

    private Sklep skleps;
    private List<Towar> towars;
    private String msc;
    private int rok;

    public Zamowienie(Sklep skleps, String msc, int rok){
        this.skleps = skleps;
        this.towars = new ArrayList<Towar>();
        this.msc = msc;
        this.rok = rok;
    }

    public void dodajTowar(Towar towar){
        this.towars.add(towar);
    }

    public Sklep getSkleps() {
        return skleps;
    }

    public String getMsc() {
        return msc;
    }

    public int getRok() {
        return rok;
    }

    public void zwrocZamowienie(){
        System.out.println("Sklep: "+getSkleps().getNazwa() +" Miesiąc: "+getMsc()+" Rok: "+getRok());
    }

}

ListaZamowien.class

public class ListaZamowien {

    private List<Zamowienie> zamowienies;

    public ListaZamowien(List<Zamowienie> zamowienies){
        this.zamowienies = new ArrayList<Zamowienie>();
    }

    public void dodajZamowienie(Zamowienie zamowienie){
        this.zamowienies.add(zamowienie);
    }

    public Zamowienie zwrocInfoZam(String msc){
        Zamowienie zamowienie = null;
        for(Zamowienie t: zamowienies){
            if(t.getMsc().equals(msc)){
                zamowienie = t;
            }
        }
        return zamowienie;
    }

}

Proszę o pomoc. Pozdrawiam

1

"Napisz program, który umożliwi: (...) Przeszedłem przez 3 kroki"

hardcodowane dane nie pozwalają programowi przetrzymywać(nie są zapisane nigdzie, po prostu są inicjowane) informacji o sklepach , załóż że przybywa nowy klient, będziesz hardcodował każdego? każde zamówienie dodasz ?

MOIM ZDANIEM : zrób to jak normalny człowiek z bazą danych, tam już będziesz mógł sobie filtrować wyniki jak chcesz (4. ... z danego miesiąca i roku zakupu),
tabele :

  1. DANE KONTRAHENTÓW (id, nazwa_sklepu, nip, nazwa_ulicy, nr_domu, nr_lokalu, timestamp(opcjonalnie))
  2. PRZEDMIOTY (id, numer_identyfikacyjny, nazwa, opis, stan_magazynowy, w_sprzedaży, timestamp)
  3. ZAKUPY (id, id_sklepu(foregin key z tabeli DANE KONTRAHENTÓW),ścieżka_do)_faktury, timestamp)
  4. SZCZEGÓŁY ZAKUPÓW (id, id_zamówienia(foregin key z tabeli ZAKUPY), id_przedmiotu/numer_identyfikacyjny(to jak już chcesz, foregin key z tabeli PRZEDMIOTY), cena(zakładam że cena się może zmieniać, trzymamy cenę za którą klient kupił przedmiot)

i kolejno

  1. Przechowywanie informacji o wszystkich sklepach: chyba nie muszę tłumaczyć jak działa baza :)
  2. Dodawanie do programu nowego sklepu: dodajesz wpis do tabeli DANE KONTRAHENTÓW.
  3. Wyświetlanie informacji o sklepie tj. jego nazwę i adres: pobierasz dane z bazy.
  4. Wyświetlanie informacji o zakupach dokonanych przez sklep z danego miesiąca i roku zakupu : filtrujesz i robisz join.
  5. Przechowywanie informacji o wszystkich sprzedawanych produktach: czyli tabela przedmioty, jak dodasz pole boolean w_sprzedaży to będziesz przechowywał wszystkie przedmioty, czyli np. klient kupił coś czego już nie sprzedajecie, więc nie możesz tego sprzedać ale trzymasz historię tego co kiedyś sprzedałeś.
  6. Dodawanie nowego produktu: dodajesz przedmiot do bazy
  7. Wyświetlanie informacji o sklepie, który zakupił w danym miesiącu i roku najwięcej wskazanego produktu: wyciągasz dane z bazy.
  8. Dokonanie zakupu produktów przez sklep - tu nie do końca rozumiem, apka ma udostępniać panel zakupowy dla klientów? hurtownia ma zamawiać produkty których jest niewystarczająco ? wydaje mi się to pierwsze, ale to drugie też jest logiczne. więc rozwiązanie do 1. dajesz logowanie, koszyk, generujesz fakturę z terminem płatności (rozumiem że zadanie do szkoły, nie musisz kombinować z potwierdzaniem płatności :P ) tyle.

apropos baz danych https://pl.wikipedia.org/wiki/Posta%C4%87_normalna_(bazy_danych)

0

Wszystko się zgadza ale taka implementacja jest na tym poziomie zadania raczej zbędna i mi chodzi tu o to tak jak napisales czyli: hardcode

1

@kubasseek, baza danych jest tu zbędna. Jeżeli aplikacja zostanie odpowiednio podzielona to dodanie bazy danych w dowolnej formie będzie bardzo proste.

@darexx,

  1. czy napisałeś testy?
  2. czy możesz je tu wrzucić?

krok 4 polega na odpowiednim filtrowaniu listy zamówień. W klasie ListaZamówień dodaj metodę raportuj, która będzie wyglądać mniej więcej w ten sposób:

public Collection<Zamowienie> raportuj(Predicate<Zamowienie> filtr){
     return zamowienias.stream().filter(filtr).collect(Collectors.toList());
}

Filtr będzie to predykat, w którym ustawisz odpowiednie elementy z zamówienia.

0

@Koziołek hmm testy? Nie wiem o co Ci chodzi.. to co napisałem wrzuciłem do swojego pierwszego postu

0

wiem, wiem :) ALE :) ja jestem zwolennikiem zaczynania od szkieletu bazy, a później dodawać ciało kodu, szczególnie że powinieneś filtrować dane z db przed wysłaniem ich, a nie wysyłać X rekordów i filtrować je. (apropos pkt. 7)

0

@kubasseek, można budować filtry sqlowe na bazie predykatów.

@darexx, chodzi mi o testy jednostkowe → https://pl.wikipedia.org/wiki/Test_jednostkowy. Są to niewielkie, specjalne programy za pomocą, których możesz zweryfikować poprawność kodu. Przydatne szczególnie jak masz tak ładnie rozpisaną specyfikację w postaci zadania.

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