JAvaシミュレーションによるKFCレジシステムの実現

52329 ワード

皆さんはマクドナルドやケンタッキーにファーストフードを食べに行ったことがありますか?ケンタッキーの公式サイトの情報を参考にケンタッキーのファーストフード店のレジシステムをシミュレートしてください.C++またはJavaまたはPythonを合理的に使用して設計モード(2種類以上)を組み合わせて、少なくともシステムの以下の機能を実現する:1.正常な食事の決済とお釣り.2.基本的なプランの決済とお釣り.3.割引券を使って食事の決済とお釣りを購入する.4.一定の時間帯に店内活動に参加することができる(自分で設計または公式サイト情報を参照).5.チケットのアナログ印刷機能(書類に書く).
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();
		}
	}
	
}