JAvaシミュレーションによるKFCレジシステムの実現
52329 ワード
皆さんはマクドナルドやケンタッキーにファーストフードを食べに行ったことがありますか?ケンタッキーの公式サイトの情報を参考にケンタッキーのファーストフード店のレジシステムをシミュレートしてください.C++またはJavaまたはPythonを合理的に使用して設計モード(2種類以上)を組み合わせて、少なくともシステムの以下の機能を実現する:1.正常な食事の決済とお釣り.2.基本的なプランの決済とお釣り.3.割引券を使って食事の決済とお釣りを購入する.4.一定の時間帯に店内活動に参加することができる(自分で設計または公式サイト情報を参照).5.チケットのアナログ印刷機能(書類に書く).
1、基礎インタフェース
2、食物抽象基類
3、工場
4、注文レジシステム
1、基礎インタフェース
/*
*
*/
public interface FoodMethod {
public abstract double getPrice();
public void setNum(int num);
}
2、食物抽象基類
/*
*
*/
public abstract class Food {
private String foodName;
private double price;
private int num;
}
3、工場
/*
*
*
*/
public class Kitchen {
public static Object ProduceFood(String foodName) {
try {
Class c = Class.forName("KFC." + foodName);
try {
Object obj = c.newInstance();
return obj;
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
4、注文レジシステム
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class KFC {
private final String[][] foodName =
{{"StapleFood_1", "StapleFood_2", "StapleFood_3", "StapleFood_4"},
{"Snack_1", "Snack_2", "Snack_3"},
{"Drink_1", "Drink_2", "Drink_3"},
{"ComboA", "ComboB", "ComboC"}};
private final String[] coupenCode = {"kfc0001", "kfc0002", "kfc0003", "kfc0004"};
private int fnum;
private int snum;
private int foodNum;
private double totalPrice = 0;
private double cash;
private double change;
private double coupon;
private double actual;
private ArrayList<FoodMethod> foodarr = new ArrayList<FoodMethod>();
//
private void FirstMenu() {
System.out.println(" KFC");
System.out.println(" 10 ");
System.out.println(" :");
System.out.println("·-----------------------------------·");
System.out.println("|1· ----------------------------|");
System.out.println("|---1、 --------18.5|");
System.out.println("|---2、 ----------------18.0|");
System.out.println("|---3、 ----------------17.5|");
System.out.println("|---4、 ------------16.0|");
System.out.println("|2· ----------------------------|");
System.out.println("|---1、 ----------------11.0|");
System.out.println("|---2、 ----------------11.5|");
System.out.println("|---3、 -----------------7.5|");
System.out.println("|3· ----------------------------|");
System.out.println("|---1、 -------------7.0|");
System.out.println("|---2、 ------------10.5|");
System.out.println("|---3、 ------------12.0|");
System.out.println("|4· ----------------------------|");
System.out.println("|-1、A : + + 32.0|");
System.out.println("|-2、B : + + 29.5|");
System.out.println("|-3、C : + + 36.5|");
System.out.println("·-----------------------------------·");
}
public void Manage() {
FirstMenu();
orderFood();
Cashier();
printreceipt();
}
//
private void orderFood() {
String flag;
Scanner sc = new Scanner(System.in);
loop1:while(true) {
Chiose();
FoodMethod food = (FoodMethod)Kitchen.ProduceFood(foodName[fnum - 1][snum - 1]);
food.setNum(foodNum);
foodarr.add(food);
System.out.println(" :" + food);
totalPrice += food.getPrice();
System.out.println(" :" + totalPrice);
loop2:while(true) {
System.out.println(" (Y: /N: )");
flag = sc.nextLine();
if("Y".equals(flag)) {
continue loop1;
} else if("N".equals(flag)) {
break loop1;
} else {
System.out.println(" ");
continue;
}
}
}
}
//
private void Chiose() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println(" ");
fnum = Integer.parseInt(sc.nextLine());
if(fnum >= 1 && fnum <= 4) {
while(true) {
System.out.println(" ");
snum = Integer.parseInt(sc.nextLine());
if(fnum == 1 && snum >= 1 && snum <= 4) {
System.out.println(" ");
foodNum = Integer.parseInt(sc.nextLine());
break;
}else if(snum >= 1 && snum <= 3) {
System.out.println(" ");
foodNum = Integer.parseInt(sc.nextLine());
break;
}else {
System.out.println(" ");
}
}
break;
}
else {
System.out.println(" ");
}
}
}
//
private void Cashier() {
Scanner sc = new Scanner(System.in);
Calendar calendar = Calendar.getInstance();
String coupenDay = "10";
DecimalFormat df = new DecimalFormat("######0.00");
actual = totalPrice;
if(coupenDay.equals("" + calendar.get(calendar.DAY_OF_MONTH))) {
System.out.println(" , ");
df.format(coupon = totalPrice * 0.12);
df.format(actual = totalPrice * 0.88);
}
loop1:while(true) {
System.out.println(" :");
System.out.println("1、 ");
System.out.println("2、 ");
String flag1 = sc.nextLine();
if("1".equals(flag1)) {
}else if("2".equals(flag1)) {
System.out.println(" :");
String c = sc.nextLine();
for(int i = 0; i < coupenCode.length; i++) {
if(coupenCode[i].equals(c)) {
coupon = totalPrice * 0.1;
df.format(coupon);
System.out.println(coupon);
actual *= 0.9;
df.format(actual);
System.out.println(actual);
break;
}
}
}
loop2: while(true) {
System.out.print(" " + actual + " ");
System.out.println(" :");
cash = Double.parseDouble(sc.nextLine());
if(cash >= actual) {
change = cash - actual;
change = Double.parseDouble(df.format(change));
System.out.println(" " + change + " ");
break loop1;
} else {
System.out.println(" ");
}
}
}
}
//
private void printreceipt() {
File file = new File("Dreceipt.txt");
FileWriter fw = null;
try {
// , ; ,
File f=new File("D:\\Information.txt");
fw = new FileWriter(f, true);
} catch (IOException e) {
e.printStackTrace();
}
PrintWriter pw = new PrintWriter(fw);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd HH:mm:ss ");
pw.println(" ");
pw.println("=======================================");
pw.println(" :" + sdf.format(new Date()));
pw.println(" ");
for(int i = 0; i < foodarr.size(); i++) {
pw.println(foodarr.get(i));
}
pw.println("=======================================");
pw.println(" " + totalPrice);
pw.println(" " + coupon);
pw.println(" " + cash);
pw.println(" " + change);
pw.println(" ");
pw.println();
pw.println();
pw.flush();
try {
fw.flush();
pw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}