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.
・ 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)
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