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