Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- class Pozycja {
- String nazwaTowaru;
- int ileSztuk;
- double cena;
- private static final int RABAT_1_MIN = 5; // Rabat 5-10 sztuk -> 5%
- private static final int RABAT_1_MAX = 10;
- private static final double RABAT_1_ILE = 0.05;
- private static final int RABAT_2_MIN = 11; // Rabat 11-20 sztuk -> 10%
- private static final int RABAT_2_MAX = 20;
- private static final double RABAT_2_ILE = 0.1;
- private static final int RABAT_3_MIN = 21; // Rabat 21+ sztuk -> 15%
- private static final double RABAT_3_ILE = 0.15;
- public Pozycja(String nazwaTowaru, int ileSztuk, double cena) {
- this.nazwaTowaru = nazwaTowaru;
- this.ileSztuk = ileSztuk;
- this.cena = cena;
- }
- public double obliczWartosc() {
- return this.ileSztuk * cena;
- }
- public double obliczWartoscZRabatem() {
- if (ileSztuk >= RABAT_1_MIN && ileSztuk <= RABAT_1_MAX)
- return obliczWartosc() - obliczWartosc() * RABAT_1_ILE;
- else if (ileSztuk >= RABAT_2_MIN && ileSztuk <= RABAT_2_MAX)
- return obliczWartosc() - obliczWartosc() * RABAT_2_ILE;
- else if (ileSztuk >= RABAT_3_MIN)
- return obliczWartosc() - obliczWartosc() * RABAT_3_ILE;
- else
- return obliczWartosc();
- }
- @Override
- public String toString() {
- return String.format("%-20s %10.2f zł %4d szt. %10.2f zł (rabat %.2f zł)", nazwaTowaru, cena, ileSztuk,
- obliczWartoscZRabatem(), obliczWartosc() - obliczWartoscZRabatem());
- }
- }
- class Zamowienie {
- Pozycja[] pozycje;
- int ileDodanych = 0;
- int maksRozmiar;
- public Zamowienie() {
- maksRozmiar = 10;
- pozycje = new Pozycja[maksRozmiar];
- }
- public Zamowienie(int maksRozmiar) {
- this.maksRozmiar = maksRozmiar;
- pozycje = new Pozycja[maksRozmiar];
- }
- public void dodajPozycje(Pozycja p) {
- if (!pozycjeDuplicateCheck(p)) {
- if (ileDodanych < maksRozmiar) {
- pozycje[ileDodanych] = p;
- ileDodanych++;
- } else {
- System.out.println("Przekroczono liczbę pozycji");
- }
- }
- }
- private boolean pozycjeDuplicateCheck(Pozycja p) {
- for (int i = 0; i < ileDodanych; i++) {
- if (pozycje[i].nazwaTowaru == p.nazwaTowaru) {
- pozycje[i].ileSztuk += p.ileSztuk;
- return pozycje[i].nazwaTowaru == p.nazwaTowaru;
- }
- }
- return false;
- }
- public double obliczWartosc() {
- double wartosc = 0;
- for (int i = 0; i < ileDodanych; i++) {
- wartosc += pozycje[i].obliczWartosc();
- }
- return wartosc;
- }
- public double obliczWartoscZRabatem() {
- double wartoscZRabatem = 0;
- for (int i = 0; i < ileDodanych; i++) {
- wartoscZRabatem += pozycje[i].obliczWartoscZRabatem();
- }
- return wartoscZRabatem;
- }
- public void usunPozycje(int indeks) {
- for (int i = indeks - 1; i < ileDodanych; i++) {
- pozycje[i] = pozycje[i + 1];
- }
- ileDodanych--;
- pozycje[ileDodanych] = null; // Zeby nie duplikował się ostatni obiekt
- }
- public void edytujPozycje(int indeks) {
- Scanner scaner = new Scanner(System.in);
- System.out.println("Edycja pozycji " + indeks + ".");
- System.out.println(pozycje[indeks - 1]);
- System.out.println("Podaj nazwę towaru: ");
- String nazwa = scaner.next();
- System.out.println("Podaj ilość sztuk");
- String sztuki;
- do {
- sztuki = scaner.next();
- } while (sztukiCheck(sztuki));
- if (nazwaTowaruDuplicateCheck(nazwa) >= 0) { // nazwaTowaruDuplicateCheck
- // jeżeli znaleziono
- // zwraca indeks
- // duplikatu, jeżeli nie
- // znaleziono to -1
- System.out.println(
- "W zamówieniu znaleziono produkt " + nazwa + ", ilość sztuk zostanie zwiększkona o" + sztuki + ".");
- pozycje[nazwaTowaruDuplicateCheck(nazwa)].ileSztuk += Integer.valueOf(sztuki);
- usunPozycje(indeks);
- } else {
- System.out.println("Podaj cenę: ");
- String cena;
- do {
- cena = scaner.next();
- } while (cenaCheck(cena));
- pozycje[indeks - 1] = new Pozycja(nazwa, Integer.valueOf(sztuki), Double.valueOf(cena));
- // pozycjeDuplicateCheck(pozycje[indeks-1]);
- }
- }
- private int nazwaTowaruDuplicateCheck(String nazwaTowaru) {
- for (int i = 0; i < ileDodanych; i++) {
- if (nazwaTowaru.equals(pozycje[i].nazwaTowaru))
- return i;
- }
- return -1; // żeby poinformować, że nie znaleziono żadnych duplikatów
- }
- private boolean isDouble(String doubleNumber) {
- try {
- Double.parseDouble(doubleNumber);
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
- private boolean cenaCheck(String doubleNumber) {
- if (!isDouble(doubleNumber) || Double.valueOf(doubleNumber) < 0)
- System.out.println("Nieprawidłowy format lub przedział");
- return !isDouble(doubleNumber) || Double.valueOf(doubleNumber) < 0;
- }
- private boolean sztukiCheck(String intNumber) {
- if (!isInteger(intNumber) || Integer.valueOf(intNumber) < 0)
- System.out.println("Nieprawidłowy format lub przedział");
- return !isInteger(intNumber) || Integer.valueOf(intNumber) < 0;
- }
- private boolean isInteger(String intNumber) {
- try {
- Integer.parseInt(intNumber);
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
- @Override
- public String toString() {
- System.out.println("Zamówienie:");
- for (int i = 0; i < ileDodanych; i++) {
- System.out.println(i + 1 + ". " + pozycje[i]);
- }
- return String.format("Razem: %.2f zł\nRazem po udzieleniu rabatu: %.2f", obliczWartosc(),
- obliczWartoscZRabatem());
- }
- }
- public class Sklep {
- public static void main(String[] args) {
- Pozycja p1 = new Pozycja("Chleb", 6, 3.5);
- Pozycja p2 = new Pozycja("Cukier", 3, 4);
- Pozycja p3 = new Pozycja("Mleko", 3, 2.5);
- Pozycja p4 = new Pozycja("Masło", 1, 4.4);
- Pozycja p5 = new Pozycja("Dżemor", 3, 5.19);
- Pozycja p6 = new Pozycja("Masło", 5, 4.4);
- Zamowienie z = new Zamowienie(20);
- z.dodajPozycje(p1);
- z.dodajPozycje(p2);
- z.dodajPozycje(p3);
- z.dodajPozycje(p4);
- z.dodajPozycje(p5);
- System.out.println(z);
- z.dodajPozycje(p6);
- System.out.println(z);
- z.edytujPozycje(2);
- System.out.println(z);
- System.out.println("Usuwa pozycję numer 4");
- z.usunPozycje(4);
- System.out.println(z);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment