Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Market;
- import java.util.Scanner;
- public class PayDesk {
- private double turnover;
- private double purchaseVal;
- private String cardType;
- private double discountRate;
- private double discount;
- public PayDesk() {
- }
- // Това са тия Getter и Setter методи, автоматично генерирани през Alt + Insert. Долу съм обяснил с коментар къде свършват.
- public double getTurnover() {
- return turnover;
- }
- public void setTurnover(double turnover) {
- this.turnover = turnover;
- }
- public double getPurchaseVal() {
- return purchaseVal;
- }
- public void setPurchaseVal(double purchaseVal) {
- this.purchaseVal = purchaseVal;
- }
- public String getCardType() {
- return cardType;
- }
- public void setCardType(String cardType) {
- this.cardType = cardType;
- }
- public double getDiscountRate() {
- return discountRate;
- }
- public void setDiscountRate(double discountRate) {
- this.discountRate = discountRate;
- }
- public double getDiscount() {
- return discount;
- }
- public void setDiscount(double discount) {
- this.discount = discount;
- }
- /* До тук са Getter и Setter методите. Малко е странно в началото, но се свиква бързо.
- Идеята е когато създадеш един обект от класа, т.е. в случая един PayDesk,
- то данните му да бъдат достъпвани за четене (чрез Getter) и за запис (чрез Setter).
- Ще го онагледя с пример тук:
- PayDesk payDesk = new PayDesk();
- payDesk.getDiscount(); // самото име представлява и какво извършва метода, връща полето discount като стойност (връщания тип е същия като на променливата)
- payDesk.setCardType("Bronze"); // settera получава String, чиято стойност запазва на полето cardType на конкретния обект.
- */
- /*
- Променливите са по няколко на един ред. Всяка трябва да е на отделен ред и съответно да има отделен идентификатор. (Това е конценцията.)
- Повечето от тия полета са public, т.е. нямаш капсулиране на данните (външни методи не трябва да работят с тях). Всичко трябва да е private/protected
- и се достъпват със get() и set() методи. в Intellij като създадеш поле в класа напр. private int x; можеш директно да си генерираш get() и set() методи
- Alt + Insert и избереш да генерира Getter and Setter. Те са публични и с тях достъпваш данните в класа, които иначе са капсулирани и защитени заради ограничената им видимост.
- Всички полета са ти статични, т.е. те са полета на самия клас, а не на обектите от този клас. Това значи че колкото и обекта да направиш от този клас,
- всички ще имат едни и същи стойности в тия полета. Идеята е когато създаваш обекти всеки обект да има уникални данни.
- Ако имаме клас Human, полето му EGN винаги трябва да е различно тъй като всеки обект има различно ЕГН и следователно полето не е статично, тъй като при статично поле
- ще имаме едно и също ЕГН за всички обекти от класа Human.
- */
- public double calcDiscountRate(String cardType) {
- double turnOver = this.getTurnover();
- if (cardType.equals("Bronze")) {
- return calcBronzeCardDiscRate(turnOver);
- } else if (cardType.equals("Silver")) {
- return calcSilverCardDiscRate(turnOver);
- } else {
- return calcGoldCardDiscRate(turnOver);
- }
- }
- public double calcBronzeCardDiscRate(double turnover) {
- if (turnover <= 100.0)
- return 0.0;
- else if (turnover > 100.0 && turnover <= 300.0)
- return 1.0;
- else
- return 2.5;
- }
- public double calcSilverCardDiscRate(double turnover) {
- if (turnover > 300)
- return 3.5;
- else
- return 2.0;
- }
- public double calcGoldCardDiscRate(double turnover) {
- double discRate = 2.0;
- if (turnover > 100) {
- while (turnover > 100.0 && discRate < 10.0) {
- discRate += 1.0;
- turnover -= 100.0;
- }
- return discRate;
- } else return 2.0;
- }
- public double calcDiscount(double purchaseVal, double discountRate) {
- return purchaseVal * (discountRate / 100);
- }
- public static void printDetails(PayDesk payDesk) {
- System.out.println("Turnover:" + payDesk.getTurnover() + "$" + ", Purchase value " + payDesk.getPurchaseVal() + "$");
- System.out.println("Discount rate:" + payDesk.getDiscountRate() + "%" + "\nDiscount :" + payDesk.getDiscount() + "$");
- System.out.println("Total :" + (payDesk.getPurchaseVal() - payDesk.getDiscount()) + "$");
- }
- public static void main(String[] args) {
- PayDesk payDesk = new PayDesk();
- Scanner scanner = new Scanner(System.in);
- String cardType;
- do {
- System.out.println("Please enter card's type:");
- cardType = scanner.nextLine();
- } while (!cardType.equals("Bronze") && !cardType.equals("Silver") && !cardType.equals("Gold"));
- payDesk.setCardType(cardType);
- System.out.println("Please enter Turnover:");
- double turnover = scanner.nextDouble();
- payDesk.setTurnover(turnover);
- System.out.println("Please enter Purchase value:");
- double purchaseVal = scanner.nextDouble();
- payDesk.setPurchaseVal(purchaseVal);
- payDesk.setDiscountRate(payDesk.calcDiscountRate(cardType));
- payDesk.setDiscount(payDesk.calcDiscount(purchaseVal, payDesk.getDiscountRate()));
- PayDesk.printDetails(payDesk);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement