Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.81 KB | None | 0 0
  1. package Market;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class PayDesk {
  6.  
  7.     private double turnover;
  8.     private double purchaseVal;
  9.     private String cardType;
  10.     private double discountRate;
  11.     private double discount;
  12.  
  13.     public PayDesk() {
  14.     }
  15.  
  16.     // Това са тия Getter и Setter методи, автоматично генерирани през Alt + Insert. Долу съм обяснил с коментар къде свършват.
  17.  
  18.     public double getTurnover() {
  19.         return turnover;
  20.     }
  21.  
  22.     public void setTurnover(double turnover) {
  23.         this.turnover = turnover;
  24.     }
  25.  
  26.     public double getPurchaseVal() {
  27.         return purchaseVal;
  28.     }
  29.  
  30.     public void setPurchaseVal(double purchaseVal) {
  31.         this.purchaseVal = purchaseVal;
  32.     }
  33.  
  34.     public String getCardType() {
  35.         return cardType;
  36.     }
  37.  
  38.     public void setCardType(String cardType) {
  39.         this.cardType = cardType;
  40.     }
  41.  
  42.     public double getDiscountRate() {
  43.         return discountRate;
  44.     }
  45.  
  46.     public void setDiscountRate(double discountRate) {
  47.         this.discountRate = discountRate;
  48.     }
  49.  
  50.     public double getDiscount() {
  51.         return discount;
  52.     }
  53.  
  54.     public void setDiscount(double discount) {
  55.         this.discount = discount;
  56.     }
  57.  
  58.     /* До тук са Getter и Setter методите. Малко е странно в началото, но се свиква бързо.
  59.        Идеята е когато създадеш един обект от класа, т.е. в случая един PayDesk,
  60.        то данните му да бъдат достъпвани за четене (чрез Getter) и за запис (чрез Setter).
  61.        Ще го онагледя с пример тук:
  62.             PayDesk payDesk = new PayDesk();
  63.  
  64.             payDesk.getDiscount(); // самото име представлява и какво извършва метода, връща полето discount като стойност (връщания тип е същия като на променливата)
  65.             payDesk.setCardType("Bronze"); // settera получава String, чиято стойност запазва на полето cardType на конкретния обект.
  66.     */
  67.  
  68.  
  69.     /*
  70.         Променливите са по няколко на един ред. Всяка трябва да е на отделен ред и съответно да има отделен идентификатор. (Това е конценцията.)
  71.  
  72.         Повечето от тия полета са public, т.е. нямаш капсулиране на данните (външни методи не трябва да работят с тях). Всичко трябва да е private/protected
  73.         и се достъпват със get() и set() методи. в Intellij като създадеш поле в класа напр. private int x; можеш директно да си генерираш get() и set() методи
  74.         Alt + Insert и избереш да генерира Getter and Setter. Те са публични и с тях достъпваш данните в класа, които иначе са капсулирани и защитени заради ограничената им видимост.
  75.  
  76.         Всички полета са ти статични, т.е. те са полета на самия клас, а не на обектите от този клас. Това значи че колкото и обекта да направиш от този клас,
  77.         всички ще имат едни и същи стойности в тия полета. Идеята е когато създаваш обекти всеки обект да има уникални данни.
  78.         Ако имаме клас Human, полето му EGN винаги трябва да е различно тъй като всеки обект има различно ЕГН и следователно полето не е статично, тъй като при статично поле
  79.         ще имаме едно и също ЕГН за всички обекти от класа Human.
  80.      */
  81.  
  82.     public double calcDiscountRate(String cardType) {
  83.         double turnOver = this.getTurnover();
  84.  
  85.         if (cardType.equals("Bronze")) {
  86.             return calcBronzeCardDiscRate(turnOver);
  87.         } else if (cardType.equals("Silver")) {
  88.             return calcSilverCardDiscRate(turnOver);
  89.         } else {
  90.             return calcGoldCardDiscRate(turnOver);
  91.         }
  92.     }
  93.  
  94.     public double calcBronzeCardDiscRate(double turnover) {
  95.         if (turnover <= 100.0)
  96.             return 0.0;
  97.         else if (turnover > 100.0 && turnover <= 300.0)
  98.             return 1.0;
  99.         else
  100.             return 2.5;
  101.     }
  102.  
  103.     public double calcSilverCardDiscRate(double turnover) {
  104.         if (turnover > 300)
  105.             return 3.5;
  106.         else
  107.             return 2.0;
  108.     }
  109.  
  110.     public double calcGoldCardDiscRate(double turnover) {
  111.         double discRate = 2.0;
  112.  
  113.         if (turnover > 100) {
  114.             while (turnover != 0.0 && discRate < 10.0) {
  115.                 discRate += 1.0;
  116.                 turnover -= 100.0;
  117.             }
  118.             return discRate;
  119.         } else return 2.0;
  120.     }
  121.  
  122.     public double calcDiscount(double purchaseVal, double discountRate) {
  123.         return purchaseVal * (discountRate / 100);
  124.     }
  125.  
  126.     public static void printDetails(PayDesk payDesk) {
  127.  
  128.         System.out.println("Turnover:" + payDesk.getTurnover() + "$" + ", Purchase value " + payDesk.getPurchaseVal() + "$");
  129.         System.out.println("Discount rate:" + payDesk.getDiscountRate() + "%" + "\nDiscount :" + payDesk.getDiscount() + "$");
  130.         System.out.println("Total :" + (payDesk.getPurchaseVal() - payDesk.getDiscount()) + "$");
  131.  
  132.     }
  133.  
  134.  
  135.     public static void main(String[] args) {
  136.  
  137.         PayDesk payDesk = new PayDesk();
  138.         Scanner scanner = new Scanner(System.in);
  139.  
  140.         String cardType;
  141.  
  142.         do {
  143.  
  144.             System.out.println("Please enter card's type:");
  145.             cardType = scanner.nextLine();
  146.  
  147.         } while (!cardType.equals("Bronze") && !cardType.equals("Silver") && !cardType.equals("Gold"));
  148.  
  149.         payDesk.setCardType(cardType);
  150.  
  151.         System.out.println("Please enter Turnover:");
  152.         double turnover = scanner.nextDouble();
  153.  
  154.         payDesk.setTurnover(turnover);
  155.  
  156.         System.out.println("Please enter Purchase value:");
  157.         double purchaseVal = scanner.nextDouble();
  158.  
  159.         payDesk.setPurchaseVal(purchaseVal);
  160.  
  161.         payDesk.setDiscountRate(payDesk.calcDiscountRate(cardType));
  162.  
  163.         payDesk.setDiscount(payDesk.calcDiscount(purchaseVal, payDesk.getDiscountRate()));
  164.  
  165.         PayDesk.printDetails(payDesk);
  166.  
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement