kubabebe

Sklep v0.1

Jul 28th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.07 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. class Pozycja {
  4.     String nazwaTowaru;
  5.     int ileSztuk;
  6.     double cena;
  7.     private static final int RABAT_1_MIN = 5; // Rabat 5-10 sztuk -> 5%
  8.     private static final int RABAT_1_MAX = 10;
  9.     private static final double RABAT_1_ILE = 0.05;
  10.     private static final int RABAT_2_MIN = 11; // Rabat 11-20 sztuk -> 10%
  11.     private static final int RABAT_2_MAX = 20;
  12.     private static final double RABAT_2_ILE = 0.1;
  13.     private static final int RABAT_3_MIN = 21; // Rabat 21+ sztuk -> 15%
  14.     private static final double RABAT_3_ILE = 0.15;
  15.  
  16.     public Pozycja(String nazwaTowaru, int ileSztuk, double cena) {
  17.         this.nazwaTowaru = nazwaTowaru;
  18.         this.ileSztuk = ileSztuk;
  19.         this.cena = cena;
  20.     }
  21.  
  22.     public double obliczWartosc() {
  23.         return this.ileSztuk * cena;
  24.     }
  25.  
  26.     public double obliczWartoscZRabatem() {
  27.         if (ileSztuk >= RABAT_1_MIN && ileSztuk <= RABAT_1_MAX)
  28.             return obliczWartosc() - obliczWartosc() * RABAT_1_ILE;
  29.         else if (ileSztuk >= RABAT_2_MIN && ileSztuk <= RABAT_2_MAX)
  30.             return obliczWartosc() - obliczWartosc() * RABAT_2_ILE;
  31.         else if (ileSztuk >= RABAT_3_MIN)
  32.             return obliczWartosc() - obliczWartosc() * RABAT_3_ILE;
  33.         else
  34.             return obliczWartosc();
  35.     }
  36.  
  37.     @Override
  38.     public String toString() {
  39.         return String.format("%-20s %10.2f zł %4d szt. %10.2f zł (rabat %.2f zł)", nazwaTowaru, cena, ileSztuk,
  40.                 obliczWartoscZRabatem(), obliczWartosc() - obliczWartoscZRabatem());
  41.     }
  42. }
  43.  
  44. class Zamowienie {
  45.     Pozycja[] pozycje;
  46.     int ileDodanych = 0;
  47.     int maksRozmiar;
  48.  
  49.     public Zamowienie() {
  50.         maksRozmiar = 10;
  51.         pozycje = new Pozycja[maksRozmiar];
  52.     }
  53.  
  54.     public Zamowienie(int maksRozmiar) {
  55.         this.maksRozmiar = maksRozmiar;
  56.         pozycje = new Pozycja[maksRozmiar];
  57.     }
  58.  
  59.     public void dodajPozycje(Pozycja p) {
  60.         if (!pozycjeDuplicateCheck(p)) {
  61.             if (ileDodanych < maksRozmiar) {
  62.                 pozycje[ileDodanych] = p;
  63.                 ileDodanych++;
  64.             } else {
  65.                 System.out.println("Przekroczono liczbę pozycji");
  66.             }
  67.         }
  68.     }
  69.  
  70.     private boolean pozycjeDuplicateCheck(Pozycja p) {
  71.         for (int i = 0; i < ileDodanych; i++) {
  72.             if (pozycje[i].nazwaTowaru == p.nazwaTowaru) {
  73.                 pozycje[i].ileSztuk += p.ileSztuk;
  74.                 return pozycje[i].nazwaTowaru == p.nazwaTowaru;
  75.             }
  76.         }
  77.         return false;
  78.     }
  79.  
  80.     public double obliczWartosc() {
  81.         double wartosc = 0;
  82.         for (int i = 0; i < ileDodanych; i++) {
  83.             wartosc += pozycje[i].obliczWartosc();
  84.         }
  85.         return wartosc;
  86.     }
  87.  
  88.     public double obliczWartoscZRabatem() {
  89.         double wartoscZRabatem = 0;
  90.         for (int i = 0; i < ileDodanych; i++) {
  91.             wartoscZRabatem += pozycje[i].obliczWartoscZRabatem();
  92.  
  93.         }
  94.  
  95.         return wartoscZRabatem;
  96.     }
  97.  
  98.     public void usunPozycje(int indeks) {
  99.  
  100.         for (int i = indeks - 1; i < ileDodanych; i++) {
  101.             pozycje[i] = pozycje[i + 1];
  102.         }
  103.         ileDodanych--;
  104.         pozycje[ileDodanych] = null; // Zeby nie duplikował się ostatni obiekt
  105.     }
  106.  
  107.     public void edytujPozycje(int indeks) {
  108.         Scanner scaner = new Scanner(System.in);
  109.         System.out.println("Edycja pozycji " + indeks + ".");
  110.         System.out.println(pozycje[indeks - 1]);
  111.         System.out.println("Podaj nazwę towaru: ");
  112.         String nazwa = scaner.next();
  113.         System.out.println("Podaj ilość sztuk");
  114.         String sztuki;
  115.         do {
  116.             sztuki = scaner.next();
  117.         } while (sztukiCheck(sztuki));
  118.         if (nazwaTowaruDuplicateCheck(nazwa) >= 0) { // nazwaTowaruDuplicateCheck
  119.                                                         // jeżeli znaleziono
  120.                                                         // zwraca indeks
  121.                                                         // duplikatu, jeżeli nie
  122.                                                         // znaleziono to -1
  123.             System.out.println(
  124.                     "W zamówieniu znaleziono produkt " + nazwa + ", ilość sztuk zostanie zwiększkona o" + sztuki + ".");
  125.             pozycje[nazwaTowaruDuplicateCheck(nazwa)].ileSztuk += Integer.valueOf(sztuki);
  126.             usunPozycje(indeks);
  127.  
  128.         } else {
  129.             System.out.println("Podaj cenę: ");
  130.             String cena;
  131.             do {
  132.                 cena = scaner.next();
  133.             } while (cenaCheck(cena));
  134.  
  135.             pozycje[indeks - 1] = new Pozycja(nazwa, Integer.valueOf(sztuki), Double.valueOf(cena));
  136.             // pozycjeDuplicateCheck(pozycje[indeks-1]);
  137.         }
  138.     }
  139.  
  140.     private int nazwaTowaruDuplicateCheck(String nazwaTowaru) {
  141.         for (int i = 0; i < ileDodanych; i++) {
  142.             if (nazwaTowaru.equals(pozycje[i].nazwaTowaru))
  143.                 return i;
  144.  
  145.         }
  146.         return -1; // żeby poinformować, że nie znaleziono żadnych duplikatów
  147.     }
  148.  
  149.     private boolean isDouble(String doubleNumber) {
  150.         try {
  151.             Double.parseDouble(doubleNumber);
  152.             return true;
  153.         } catch (NumberFormatException e) {
  154.             return false;
  155.         }
  156.     }
  157.  
  158.     private boolean cenaCheck(String doubleNumber) {
  159.         if (!isDouble(doubleNumber) || Double.valueOf(doubleNumber) < 0)
  160.             System.out.println("Nieprawidłowy format lub przedział");
  161.         return !isDouble(doubleNumber) || Double.valueOf(doubleNumber) < 0;
  162.     }
  163.  
  164.     private boolean sztukiCheck(String intNumber) {
  165.         if (!isInteger(intNumber) || Integer.valueOf(intNumber) < 0)
  166.             System.out.println("Nieprawidłowy format lub przedział");
  167.         return !isInteger(intNumber) || Integer.valueOf(intNumber) < 0;
  168.     }
  169.  
  170.     private boolean isInteger(String intNumber) {
  171.         try {
  172.             Integer.parseInt(intNumber);
  173.             return true;
  174.         } catch (NumberFormatException e) {
  175.             return false;
  176.         }
  177.     }
  178.  
  179.     @Override
  180.     public String toString() {
  181.         System.out.println("Zamówienie:");
  182.         for (int i = 0; i < ileDodanych; i++) {
  183.             System.out.println(i + 1 + ". " + pozycje[i]);
  184.         }
  185.         return String.format("Razem: %.2f zł\nRazem po udzieleniu rabatu: %.2f", obliczWartosc(),
  186.                 obliczWartoscZRabatem());
  187.     }
  188. }
  189.  
  190. public class Sklep {
  191.     public static void main(String[] args) {
  192.         Pozycja p1 = new Pozycja("Chleb", 6, 3.5);
  193.         Pozycja p2 = new Pozycja("Cukier", 3, 4);
  194.         Pozycja p3 = new Pozycja("Mleko", 3, 2.5);
  195.         Pozycja p4 = new Pozycja("Masło", 1, 4.4);
  196.         Pozycja p5 = new Pozycja("Dżemor", 3, 5.19);
  197.         Pozycja p6 = new Pozycja("Masło", 5, 4.4);
  198.         Zamowienie z = new Zamowienie(20);
  199.         z.dodajPozycje(p1);
  200.         z.dodajPozycje(p2);
  201.         z.dodajPozycje(p3);
  202.         z.dodajPozycje(p4);
  203.         z.dodajPozycje(p5);
  204.         System.out.println(z);
  205.         z.dodajPozycje(p6);
  206.         System.out.println(z);
  207.         z.edytujPozycje(2);
  208.         System.out.println(z);
  209.         System.out.println("Usuwa pozycję numer 4");
  210.         z.usunPozycje(4);
  211.         System.out.println(z);
  212.     }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment