kubabebe

Sklep bez tablic v0.2

Aug 14th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.62 KB | None | 0 0
  1. package sklepkolekcje;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8. import java.io.Serializable;
  9. import java.util.ArrayList;
  10. import java.util.HashSet;
  11. import java.util.List;
  12. import java.util.Scanner;
  13. import java.util.Set;
  14.  
  15. class Pozycja implements Serializable {
  16.     String nazwaTowaru;
  17.     int ileSztuk;
  18.     double cena;
  19.     final static int RABAT_I_STOPNIA_MIN = 5;
  20.     final static int RABAT_I_STOPNIA_MAX = 10;
  21.     final static int RABAT_II_STOPNIA_MIN = 11;
  22.     final static int RABAT_II_STOPNIA_MAX = 20;
  23.     final static int RABAT_III_STOPNIA_MIN = 21;
  24.     final static double RABAT_I_STOPNIA = 0.05;
  25.     final static double RABAT_II_STOPNIA = 0.10;
  26.     final static double RABAT_III_STOPNIA = 0.15;
  27.  
  28.     public Pozycja(String nazwaTowaru, int ileSztuk, double cena) {
  29.         this.nazwaTowaru = nazwaTowaru;
  30.         this.ileSztuk = ileSztuk;
  31.         this.cena = cena;
  32.     }
  33.  
  34.     public double obliczWartosc() {
  35.         return ileSztuk * cena;
  36.     }
  37.  
  38.     public double obliczWartoscZRabatem() {
  39.         if (ileSztuk >= RABAT_I_STOPNIA_MIN && ileSztuk <= RABAT_I_STOPNIA_MAX) {
  40.             return obliczWartosc() * (1 - RABAT_I_STOPNIA); // rabat 5%
  41.         } else if (ileSztuk >= RABAT_II_STOPNIA_MIN && ileSztuk <= RABAT_II_STOPNIA_MAX) {
  42.             return obliczWartosc() * (1 - RABAT_II_STOPNIA); // rabat 10%
  43.         } else if (ileSztuk >= RABAT_III_STOPNIA_MIN) {
  44.             return obliczWartosc() * (1 - RABAT_III_STOPNIA); // rabat 15%
  45.         } else {
  46.             return obliczWartosc();
  47.         }
  48.     }
  49.  
  50.     @Override
  51.     public String toString() {
  52.         return String.format("%-20s %10.2f zł %4d szt. %10.2f zł (Rabat: %.2f)", nazwaTowaru, cena, ileSztuk,
  53.                 obliczWartosc(), obliczWartosc() - obliczWartoscZRabatem());
  54.     }
  55. }
  56.  
  57. class Zamowienie implements Serializable {
  58.     List<Pozycja> pozycje = new ArrayList<Pozycja>();
  59.     int maksRozmiar = 10;
  60.  
  61.     public Zamowienie(int maksRozmiar) {
  62.         this.maksRozmiar = maksRozmiar;
  63.     }
  64.  
  65.     public void dodajPozycje(Pozycja p) {
  66.         if (!pozycje.contains(p)) {
  67.             if (pozycje.size() < maksRozmiar) {
  68.                 pozycje.add(p);
  69.             } else {
  70.                 System.out.println("Element nie dodany. Przekroczono maksymalny romiar zamówienia");
  71.             }
  72.         } else {
  73.             for (Pozycja i : pozycje) {
  74.                 if (i.nazwaTowaru.equals(p.nazwaTowaru)) {
  75.                     i.ileSztuk += p.ileSztuk;
  76.                 }
  77.             }
  78.         }
  79.     }
  80.  
  81.     public double obliczWartosc() {
  82.         double wartosc = 0;
  83.         double wartoscZRabatem = 0;
  84.         for (Pozycja i : pozycje) {
  85.             wartosc += i.obliczWartosc();
  86.             wartoscZRabatem += i.obliczWartoscZRabatem();
  87.         }
  88.         System.out.format("Wartość zamówienia: %.2f zł\n", wartosc);
  89.         return wartoscZRabatem;
  90.     }
  91.  
  92.     public void usunPozycje(int indeks) {
  93.         pozycje.remove(indeks - 1);
  94.         }
  95.  
  96.     public void edytujPozycje(int indeks) {
  97.         Scanner scaner = new Scanner(System.in);
  98.         System.out.println("Edycja pozycji " + indeks + ".");
  99.         System.out.println(pozycje.get(indeks - 1));
  100.         System.out.println("Podaj nazwę towaru: ");
  101.         String nazwa = scaner.next();
  102.         System.out.println("Podaj ilość sztuk");
  103.         String sztuki;
  104.         do {
  105.             sztuki = scaner.next();
  106.         } while (sztukiCheck(sztuki));
  107.         if (nazwaDuplicateCheck(nazwa)) { // pozycje.contains(nazwa)
  108.             System.out.println(
  109.                     "W zamówieniu znaleziono produkt " + nazwa + ", ilość sztuk zostanie zwiększkona o" + sztuki + ".");
  110.             nazwaDuplicateChange(nazwa, Integer.valueOf(sztuki));
  111.             usunPozycje(indeks);
  112.  
  113.         } else {
  114.             System.out.println("Podaj cenę: ");
  115.             String cena;
  116.             do {
  117.                 cena = scaner.next();
  118.             } while (cenaCheck(cena));
  119.  
  120.             pozycje.set(indeks - 1, new Pozycja(nazwa, Integer.valueOf(sztuki), Double.valueOf(cena)));
  121.  
  122.         }
  123.     }
  124.  
  125.     private boolean nazwaDuplicateCheck(String nazwaTowaru) {
  126.         for (Pozycja i : pozycje) {
  127.             if (nazwaTowaru.equals(i.nazwaTowaru)) {
  128.                 return true;
  129.             }
  130.         }
  131.         return false;
  132.     }
  133.  
  134.     private void nazwaDuplicateChange(String nazwa, int sztuki) {
  135.         for (Pozycja i : pozycje) {
  136.             if (nazwa.equals(i.nazwaTowaru)) {
  137.                 i.ileSztuk += sztuki;
  138.  
  139.             }
  140.         }
  141.     }
  142.  
  143.     private boolean isDouble(String doubleNumber) {
  144.         try {
  145.             Double.parseDouble(doubleNumber);
  146.             return true;
  147.         } catch (NumberFormatException e) {
  148.             return false;
  149.         }
  150.     }
  151.  
  152.     private boolean cenaCheck(String doubleNumber) {
  153.         if (!isDouble(doubleNumber) || Double.valueOf(doubleNumber) < 0)
  154.             System.out.println("Nieprawidłowy format lub przedział");
  155.         return !isDouble(doubleNumber) || Double.valueOf(doubleNumber) < 0;
  156.     }
  157.  
  158.     private boolean sztukiCheck(String intNumber) {
  159.         if (!isInteger(intNumber) || Integer.valueOf(intNumber) < 0)
  160.             System.out.println("Nieprawidłowy format lub przedział");
  161.         return !isInteger(intNumber) || Integer.valueOf(intNumber) < 0;
  162.     }
  163.  
  164.     private boolean isInteger(String intNumber) {
  165.         try {
  166.             Integer.parseInt(intNumber);
  167.             return true;
  168.         } catch (NumberFormatException e) {
  169.             return false;
  170.         }
  171.     }
  172.  
  173.     @Override
  174.     public String toString() {
  175.         System.out.println("Zamówienie:");
  176.         for (Pozycja i : pozycje) {
  177.             System.out.println(i);
  178.         }
  179.         return String.format("Wartość zamówienia z rabatem: %.2f zł", obliczWartosc());
  180.     }
  181.  
  182.     public static void zapiszZamowienie(Zamowienie z, String nazwaPliku) {
  183.         try (FileOutputStream fos = new FileOutputStream(nazwaPliku);
  184.                 ObjectOutputStream oos = new ObjectOutputStream(fos);) {
  185.             oos.writeObject(z);
  186.         } catch (IOException e) {
  187.             System.out.println(e);
  188.         }
  189.     }
  190.  
  191.     public static Zamowienie wczytajZamowienie(String nazwaPliku) {
  192.         Zamowienie afterSerialization = null;
  193.         try (FileInputStream fis = new FileInputStream(nazwaPliku);
  194.                 ObjectInputStream ois = new ObjectInputStream(fis);) {
  195.             afterSerialization = (Zamowienie) ois.readObject();
  196.         } catch (IOException | ClassNotFoundException e) {
  197.             System.out.println(e);
  198.         }
  199.         return afterSerialization;
  200.     }
  201. }
  202.  
  203. public class Sklep {
  204.     public static void main(String[] args) {
  205.         String nazwaPliku = "koko.txt";
  206.         Pozycja p1 = new Pozycja("Chleb", 1, 3.5);
  207.         // System.out.println(p1);
  208.         Pozycja p2 = new Pozycja("Cukier", 3, 4);
  209.         // System.out.println(p2);
  210.         Pozycja p3 = new Pozycja("Kakałko", 2, 7.5);
  211.         Pozycja p4 = new Pozycja("Masło", 2, 5);
  212.         Pozycja p5 = new Pozycja("Mleko", 3, 2.5);
  213.         Zamowienie z = new Zamowienie(20);
  214.         z.dodajPozycje(p1);
  215.         z.dodajPozycje(p2);
  216.         z.dodajPozycje(p3);
  217.         z.dodajPozycje(p4);
  218.         z.dodajPozycje(p5);
  219.         System.out.println(z);
  220.         z.dodajPozycje(p1);
  221.         System.out.println(z);
  222.         z.edytujPozycje(2);
  223.         System.out.println(z);
  224.         z.usunPozycje(1);
  225.         System.out.println(z);
  226.         Zamowienie.zapiszZamowienie(z, nazwaPliku);
  227.         Zamowienie afterSerialization = null;
  228.         afterSerialization = Zamowienie.wczytajZamowienie(nazwaPliku);
  229.         System.out.println(afterSerialization);
  230.     }
  231.  
  232. }
Advertisement
Add Comment
Please, Sign In to add comment