Verkaufsautomat mit Java (domänengesteuert)

Hintergrund

Basierend auf den Ratschlägen von Shiracamus wurde es in DDD (Domain Driven) Weise umgeschrieben. Zu dieser Zeit haben wir auch einige der Logik überprüft, um es einfacher zu machen.

Verarbeitungsablauf

・ Instanzgenerierung ・ Initialisierung der Produktliste (Bestandsauffüllung) ・ Produktlistenanzeige (Anzeige der angezeigten Produkte) ・ Produktauswahl (Eingabe durch den Benutzer) ・ Einzahlung (Eingabe durch den Benutzer) ・ Verkauf (Abrechnungsprozess) ・ Änderung (Rückerstattungsverarbeitung)

Operationsbild

venderMachine_DDD.gif

Quellcode

Main.java


package vm;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //Instanzgenerierung
        Store venderMachine = new Store();
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);

        //Initialisierung der Produktliste
        Product water = new Product("Wasser", 80);
        Product coke = new Product("Cola", 100);
        Product orangejuice = new Product("Orangensaft", 120);
        venderMachine.addStock(water);
        venderMachine.addStock(coke);
        venderMachine.addStock(orangejuice);

        //Produktlistenanzeige
        System.out.println(""Es ist ein Produkt zum Verkauf"");
        venderMachine.showProductList();

        //Produktauswahl
        Product purchase = null;
        String purchaseSelectMessage = "Bitte geben Sie den Namen des Produkts ein, das Sie kaufen möchten.";
        int purchaseSelectCount = 0;
        do {
            if(purchaseSelectCount > 0) {
                purchaseSelectMessage = "Das Produkt ist nicht verfügbar. Bitte wählen Sie aus den angebotenen Produkten.";
            }

            System.out.println();
            System.out.println(purchaseSelectMessage);
            purchase = venderMachine.inStocker(scanner.next());
            purchaseSelectCount++;
        } while(!venderMachine.isExistsStock(purchase));


        //Zahlung
        String depositMessage = "Bitte machen Sie eine Anzahlung.";
        int depositCount = 0;
        do {
            if(depositCount > 0) {
                depositMessage = "Der Einzahlungsbetrag ist nicht ausreichend. Bitte fügen Sie den Fehlbetrag hinzu.";
            }

            System.out.println();
            System.out.println(depositMessage);
            venderMachine.addDeposit(scanner.nextInt());
            depositCount++;
        } while(!venderMachine.isEnoughDeposit(purchase));

        //Verkauf
        System.out.println();
        venderMachine.sale(purchase);

        //Veränderung
        System.out.println();
        venderMachine.change();
    }
}

Store.java


package vm;

public class Store {
    private Stocker stocker;
    private Casher casher;

    Store() {
        stocker = new Stocker();
        casher = new Casher();
    }

    void addDeposit(int deposit) {
        casher.addDeposit(deposit);
    }

    void addStock(Product product) {
        stocker.add(product);
    }

    void change() {
        System.out.println("Veränderung ist" + casher.change() + "Es ist ein Kreis.");
    }

    void showProductList() {
        stocker.showProductList();
    }

    boolean isExistsStock(Product product) {
        return stocker.isExistsProduct(product);
    }

    boolean isEnoughDeposit(Product purchase) {
        return casher.isEnoughDeposit(purchase);
    }

    Product inStocker(String productName) {
        return stocker.getProduct(productName);
    }

    void sale(Product purchase) {
        casher.charge(purchase);
        System.out.println(purchase.name() + "ist!");
        System.out.println("Danke für Ihren Einkauf.");
    }

}

Casher.java


package vm;

public class Casher {
    private int deposit;
    private int change;

    Casher(){
        deposit = 0;
        change = 0;
    }

    void addDeposit(int deposit) {
        this.deposit += deposit;
    }

    void charge(Product purchase) {
        change = deposit - purchase.price();
    }

    int change() {
        return change;
    }

    public boolean isEnoughDeposit(Product product) {
        if(deposit >= product.price()) {
            return true;
        }
        return false;
    }

}

Stocker.java


package vm;

import java.util.ArrayList;
import java.util.List;

public class Stocker {
    private List<Product> productList;

    Stocker() {
        productList = new ArrayList<>();
    }

    void add(Product product) {
        productList.add(product);
    }

    void showProductList() {
        for(Product product: productList) {
            System.out.println(product.info());
        }
    }

    boolean isExistsProduct(Product product) {
        for(Product stock: productList) {
            if(stock.name().equals(product.name())){
                return true;
            }
        }
        return false;
    }

    Product getProduct(String productName) {
        for(Product stock: productList) {
            if(stock.name().equals(productName)){
                return stock;
            }
        }
        return new Product();
    }

}

Product.java


package vm;

public class Product {
    private String productName;
    private int price;

    Product(String productName, int price) {
        this.productName = productName;
        this.price = price;
    }

    Product() {
        this.productName = "";
        this.price = 0;
    }

    String name() {
        return productName;
    }

    int price() {
        return price;
    }

    String info() {
        String formatStr = "%s : %d Yen";
        return String.format(formatStr, productName, price);
    }

}

Recommended Posts

Verkaufsautomat mit Java (domänengesteuert)
Beispielautomat mit Java
Beispiel eines mit Java hergestellten Verkaufsautomaten (Klassifizierung)
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
Führen Sie in Java8 geschriebene Anwendungen in Java6 aus
Überarbeitetes GUI-Tool, das 2016 mit Java8 + JavaFX erstellt wurde
Einfaches Hindernisrennen mit Java-Verarbeitung
Machen Sie mit JavaFX erstellte Kalender-Gadgets mit Java SE 9 kompatibel
Gesichtserkennungs-App mit Amazon Rekognition und Java
Java State Machine Auto
Installieren Sie Java mit Homebrew
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA