Distributeur automatique fabriqué avec Java (piloté par domaine)

Contexte

Sur la base des conseils de shiracamus, il a été réécrit de manière DDD (domaine conduit). À ce moment-là, nous avons également examiné une partie de la logique pour la simplifier.

Flux de traitement

・ Génération d'instances ・ Initialisation de la liste de produits (réapprovisionnement des stocks) ・ Affichage de la liste des produits (affichage des produits affichés) ・ Sélection de produit (saisie par l'utilisateur) ・ Dépôt (saisie par l'utilisateur) ・ Ventes (processus de facturation) ・ Changement (traitement des remboursements)

Image d'opération

venderMachine_DDD.gif

Code source

Main.java


package vm;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //Génération d'instance
        Store venderMachine = new Store();
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);

        //Initialisation de la liste de produits
        Product water = new Product("eau", 80);
        Product coke = new Product("Cola", 100);
        Product orangejuice = new Product("du jus d'orange", 120);
        venderMachine.addStock(water);
        venderMachine.addStock(coke);
        venderMachine.addStock(orangejuice);

        //Affichage de la liste de produits
        System.out.println("≪C'est un produit à vendre≫");
        venderMachine.showProductList();

        //Selection de produit
        Product purchase = null;
        String purchaseSelectMessage = "Veuillez saisir le nom du produit que vous souhaitez acheter.";
        int purchaseSelectCount = 0;
        do {
            if(purchaseSelectCount > 0) {
                purchaseSelectMessage = "Le produit n'est pas disponible. Veuillez choisir parmi les produits en vente.";
            }

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


        //Paiement
        String depositMessage = "Veuillez effectuer un dépôt.";
        int depositCount = 0;
        do {
            if(depositCount > 0) {
                depositMessage = "Le montant du dépôt est insuffisant. Veuillez ajouter le manque à gagner.";
            }

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

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

        //changement
        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("Le changement est" + casher.change() + "C'est un cercle.");
    }

    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() + "est!");
        System.out.println("Merci pour votre achat.");
    }

}

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

Distributeur automatique fabriqué avec Java (piloté par domaine)
Distributeur automatique d'échantillons fabriqué avec Java
Échantillon de distributeur automatique fabriqué avec Java (classification)
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
Exécuter des applications écrites en Java8 en Java6
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
Course d'obstacles facile avec traitement pour Java
Rendre les gadgets de calendrier créés avec JavaFX compatibles avec Java SE 9
Application de reconnaissance faciale conçue avec Amazon Rekognition et Java
voiture de machine d'état de Java
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Téléchargement confortable avec JAVA
Changer java avec direnv
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
Conversion Endian avec JAVA