• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z doborem typu zmiennej do aplikacji - Skaner kasy fiskalnej symulacja

VPS Starter Arubacloud
0 głosów
238 wizyt
pytanie zadane 7 maja 2017 w Java przez Jedyn Obywatel (1,200 p.)
Witam. Piszę aplikację symulująca kasę fiskalną, gdzie mamy input kod kreskowy , następnie ten kod jest sprawdzany w naszej bazie danych, jeżeli jest poprawny to dodaje go do paragonu, jeżeli nie to wywala error. Mam problem z doborem typu "bazy danych". Nie ma to być jakiś mysql itd lecz coś typu ArrayList albo Map. I tutaj pytanie. Jakiego typu zmiennej bym mógł użyć by odwołać się do elementu ID z utworzonej klasy w naszej bazie? Mam klasę produkty w której określiłem jak produkt ma być tworzony id, name, price. Chcę odwołać się do np Map<0,Product1.ID>.
komentarz 7 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Każdy typu obiektowy. Np Long albo String. Wtedy możesz zrobić mape typu

Map<String,Product> gdzie w String reprezentuje Id produktu.
komentarz 7 maja 2017 przez Jedyn Obywatel (1,200 p.)

Tak tak ja zrobiłem coś takiego (kod poniżej) ale to nie jest poprawne i się zastanawiam, ponieważ muszę mieć listę produktów które będą już w bazie, oraz chcę po podaniu id sprawdzać czy takie id znajduje się w bazie, nie wiem jak porównań klucze tzn ID oraz jak dodać produkt do bazy Map. Stworzyłem sobie Arrayliste, do niej metodą add dodaje nowe produkty, później chce te produkty przypisać do Mapy bo z samym Map<Integer, Product> wywala mi błąd niepoprawnej zmiennej. Chciałbym by nowo tworzone produkty po przez Arraylist były dodawane jako kolejne ID w mapie a tak nie jest, muszę za kazdym razem tworzyć nową Arraylist bo Mapa dodaje mi wszystko do jednego recordu Kod:


 

public class Main {
    public static void main(String[] args) {
        Map<Integer, List<Products>> produkty = new HashMap<Integer, List<Products>>();
        ArrayList<Products> products0 = new ArrayList<Products>();
        ArrayList<Products> products1 = new ArrayList<Products>();
        ArrayList<Products> products2 = new ArrayList<Products>();
        ArrayList<Products> products3 = new ArrayList<Products>();
        Products est = new Products(0,"Jajka",new BigDecimal(5.30));
        List<Products> rachunek = new ArrayList<Products>();





        products0.add(new Products(0,"Jajka",new BigDecimal(5.30)));
        products1.add(new Products(1,"Kiełbasa",new BigDecimal(80.387465468)));
        products2.add(new Products(2,"Chleb",new BigDecimal(1.751111)));
        products3.add(new Products(3,"Maslo",new BigDecimal(3.50)));



        produkty.put(0,products0);
        produkty.put(1,products1);
        produkty.put(2,products2);
        produkty.put(3,products3);
        System.out.println("Podaj id do zeskanowania");
        Scanner scan = new Scanner(System.in);




       // System.out.println(produkty.toString());
        System.out.println(produkty);


    }




}


 

 

 

komentarz 7 maja 2017 przez Jedyn Obywatel (1,200 p.)

Gdzie klasa product wygląda tak:
 

 

public class Products {

    int idProduct;
    String nameProduct;
    BigDecimal price;

    public Products(int idProduct, String nameProduct, BigDecimal price)
    {
        this.idProduct = idProduct;
        this.nameProduct = nameProduct;
        this.price=price.setScale(2,BigDecimal.ROUND_HALF_UP);
    }


    @Override
    public String toString()
    {
       return "Produkt: " + nameProduct + " cena: " + price + "zł";
    }

    void productsCreator(int id, String name, BigDecimal price )
    {
        Products p = new Products(id,name,price);


    }




    public int getIdProduct() {
        return idProduct;
    }

    public void setIdProduct(int idProduct) {
        this.idProduct = idProduct;
    }

    public String getNameProduct() {
        return nameProduct;
    }

    public void setNameProduct(String nameProduct) {
        this.nameProduct = nameProduct;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }





}

 

komentarz 7 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
package main;

import java.util.*;
import main.Products;
import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {

       Map<Integer, Products> produkty = new HashMap<>();
       Products products0 = new Products(0,"Jajka",new BigDecimal(5.30));
       Products products1 = new Products(1,"Kiełbasa",new BigDecimal(80.387465468));
       Products products2 = new Products(2,"Chleb",new BigDecimal(1.751111));
       Products products3 = new Products(3,"Maslo",new BigDecimal(3.50));
 
 
        produkty.put(0,products0);
        produkty.put(1,products1);
        produkty.put(2,products2);
        produkty.put(3,products3);
        System.out.println("Podaj id do zeskanowania");
        Scanner scan = new Scanner(System.in);
 
 
 
 
       // System.out.println(produkty.toString());
        System.out.println(produkty);
 
 
    }
 
 
 
 
}

Mi bez problemu działa

komentarz 7 maja 2017 przez Jedyn Obywatel (1,200 p.)
Tak już mi działa, miałem głupią literówkę przy tworzeniu Mapy :). Właśnie już w ten sposób tworzę program . Pozdrawiam :)
komentarz 7 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
W takim razie powodzenia w dlaszym pisaniu

2 odpowiedzi

+1 głos
odpowiedź 7 maja 2017 przez Wiciorny Ekspert (269,120 p.)
wybrane 7 maja 2017 przez Jedyn
 
Najlepsza
Map class była by najlepsza: ten rodzaj kolekcji ma tę zaletę że np tworząc mape <int,string> dla danego stringu, klucz bedzie UNIKATEM- zawsze taki sam bedzie sam, przez co nie spowoduje to "powtórzeń" i z góry wiadomo będzie co pod kluczem się kryje, a żę mapa zawiera pary "klucz""wartosc" to juz sam masz odpowiedz.

 

Możesz też skorzystać z Set: no sam w sobie jest zbiorem elementów które się nie powtarzaja, ale tutaj osobno trzeba by przypisywac wartosci dla odpowiedniego elementu zbioru np. Set[1] = " wartość druga"
komentarz 7 maja 2017 przez Jedyn Obywatel (1,200 p.)
Właśnie tak mi się wydawało, że Map będzie najlepsze ale nie wiem w jaki sposób porównać zeskanowane ID z tym z bazy. Wiem, że ma się to odbyć w pętli gdzie kolejno przeszukamy od 0 do produkty.size() ale jak to porównać. Po prostu siedzę już drugi dzień chyba 8mą godzinę i kombinuję, będę bardzo ale to bardzo wdzięczny jak zaprezentujesz mi mniej więcej jak to zrobić
komentarz 7 maja 2017 przez Wiciorny Ekspert (269,120 p.)
posiedze na tym po południu i dam Ci znać, nawet jeśli problem rozwiązany będzie :D

to prostu może przedstawie wtedy inny punkt spojrzenia, nie zaszkodzi !
komentarz 7 maja 2017 przez Jedyn Obywatel (1,200 p.)
Bardzo Ci dziękuje! :D Normalnie nie mogłem przez to spać, 3h snu i znowu zacząłem nad tym siedzieć, szukałem wszędzie jak porównywać id Map ale już może z przemęczenia nie kontaktowałem. Pozdrawiam! :D
0 głosów
odpowiedź 7 maja 2017 przez Jedyn Obywatel (1,200 p.)
edycja 7 maja 2017 przez Jedyn

Jeszcze mam pytanie. Napisałem funkcję scan która jest odpowiedzialna za sprawdzanie czy dany produkt jest w bazie, i kolejno sprawdza jeżeli id znajduje się w bazie to idź dalej, jeżeli cena z id produktu oraz nazwa zgadza sie z tym z bazy to dodaj produkt do mapy a jeżeli nie to wywal błąd "Invalid bar-code".

I w tym problem, że jak widać w kodzie sprawdzam bazę produktów iterując od 0 do produkty.size()-1 i wyświetla mi się przy tym kilka razy "Invalid bar-code" a chciałbym żeby wyświetlało się tylko raz.

Jest ktoś w stanie pomóc? Kod ponizej:

 

import java.math.BigDecimal;
import java.util.*;

public class CashRegister {
    private static Map<Integer, Products> produkty = new HashMap<Integer, Products>();
    private static Map<Integer, Products> paragon = new HashMap<Integer, Products>();
    static BigDecimal a = new BigDecimal(0);
    private static int f=0;
    public static void start()
    {
        produkty.put(0,new Products(0,"Smietana",new BigDecimal(130)));
        produkty.put(1,new Products(1,"Masło",new BigDecimal(7.3123)));
        produkty.put(2,new Products(2,"Mleko",new BigDecimal(3.8)));
        produkty.put(3,new Products(3,"Bułka",new BigDecimal(0.832)));
        produkty.put(4,new Products(4,"Czipsy",new BigDecimal(8.42)));
        produkty.put(5,new Products(5,"Płatki śniadaniowe",new BigDecimal(7.00)));
        System.out.println(produkty.get(5));
    }
    void scan(Products p)
    {
    String ErrorException = "Good";

            if(produkty.containsKey(p.getIdProduct()))
            {
                for(int i=0;i<produkty.size();i++)
                {
                    if((produkty.get(i).getNameProduct().equals(p.getNameProduct())) && (produkty.get(i).getPrice().equals(p.getPrice())))
                    {
                            paragon.put(f,p);
                            f++;
                            //System.out.println(paragon);

                    }
                    else if(!((produkty.get(i).getNameProduct().equals(p.getNameProduct())) || (produkty.get(i).getPrice().equals(p.getPrice()))))
                    {

                        {   System.out.println("Invalid bar-code");
                            ErrorException = "Invalid bar-code";
                        }

                }



        }
            else
                System.out.println("ID: " + p.getIdProduct() + " is not found");
        System.out.println(paragon);



    }

 

Podobne pytania

0 głosów
1 odpowiedź 474 wizyt
pytanie zadane 9 stycznia 2020 w Sieci komputerowe, internet przez rem007 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 191 wizyt
0 głosów
1 odpowiedź 217 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez Kubaluk Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...