1. 程式人生 > >程式設計第四次作業-java“肯德基點餐系統-類圖+java程式+除錯測試截圖”

程式設計第四次作業-java“肯德基點餐系統-類圖+java程式+除錯測試截圖”

題目: 同學們應該都去麥當勞或肯德基吃過快餐吧?請同學們參考肯德基官網的資訊模擬肯德基快餐店的收銀系統,合理使用C++/python/Java,結合設計模式(2種以上)實現系統的以下功能: 1.正常餐品結算和找零。 2.基本套餐結算和找零。 3.使用優惠劵購買餐品 結算和找零。 4.可在一定時間段參與店內活動。 5.模擬列印小票的功能(寫到檔案中)。 本題採用工廠方法模式抽象工廠模式工廠方法模式: 核心工廠類不再負責所有產品的建立,而是將具體建立的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的介面,而不接觸哪一個產品類應當被例項化這種細節。 抽象工廠模式: 客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何建立及如何向客戶端提供。

類圖如下: 在這裡插入圖片描述

在這裡插入圖片描述 java程式碼如下: 1.抽象食 物——AbstractFood

public abstract class AbstractFood {
	//類別
    protected String kind;
    //數量
    protected int num;
    //價格
    protected float price;

    //合計
    public float totalPrice(){
        return this.num * this.price;
    }
}

2.食物介面——Food


public interface Food {
	/**
     * 列印輸出食物資訊
     */
    void printMessage();
}

3.抽象基類:

/**
 * 漢堡類
 * @author lenovo
 *
 */
public abstract class Hamburger extends AbstractFood implements Food{
	 public void printMessage(){
	        System.out.println("--"+this.kind+"  單價:"+this.price+
	                "  數量:"+this.num+"  合計:"+this.totalPrice());
	    }
}

/**
 * 雞肉類
 * @author lenovo
 *
 */
public abstract class Chicken extends AbstractFood implements Food{
	 public void printMessage(){
	        System.out.println("--"+this.kind+"  單價:"+this.price+
	                "  數量:"+this.num+"  合計:"+this.totalPrice());
	    }
}

/**
 * 甜點類
 * @author lenovo
 *
 */
public abstract class Dessert extends AbstractFood implements Food{
	 public void printMessage(){
	        System.out.println("--"+this.kind+"  單價:"+this.price+
	                "  數量:"+this.num+"  合計:"+this.totalPrice());
	    }
}

/**
 * 飲品類
 * @author lenovo
 *
 */
public abstract class Drinks extends AbstractFood implements Food{
	 public void printMessage(){
	        System.out.println("--"+this.kind+"  單價:"+this.price+
	                "  數量:"+this.num+"  合計:"+this.totalPrice());
	    }
}

/**
 * 套餐
 * @author lenovo
 *
 */
public abstract class Combo extends AbstractFood implements Food{
	 public void printMessage(){
	        System.out.println("--"+this.kind+"  單價:"+this.price+
	                "  數量:"+this.num+"  合計:"+this.totalPrice());
	    }
}

4.具體食物:

/**
 * 香辣雞腿堡
 * @author lenovo
 *
 */
public class ZingerBurger extends Hamburger {
	public ZingerBurger(int num) {
        this.kind = "香辣雞腿堡";
        this.price = 15f;
        this.num = num;
    }
}

/**
 * 超級牛肉堡
 * @author lenovo
 *
 */
public class BeefBurger extends Hamburger{
	public BeefBurger(int num) {
        this.kind = "超級牛肉堡";
        this.price = 17f;
        this.num = num;
    }
}

/**
 * 全蝦堡
 * @author lenovo
 *
 */
public class ShrimpBurger extends Hamburger{
	public ShrimpBurger(int num) {
        this.kind = "全蝦堡";
        this.price = 17f;
        this.num = num;
    }
}

/**
 * 奧爾良烤雞腿堡
 * @author lenovo
 *
 */
public class OrleansBurger extends Hamburger{
	public OrleansBurger(int num) {
        this.kind = "奧爾良烤雞腿堡";
        this.price = 17f;
        this.num = num;
    }
}

/**
 * 奧爾良烤翅
 * @author lenovo
 *
 */
public class ChickenWings extends Chicken{
	public ChickenWings(int num) {
        this.kind = "奧爾良烤翅";
        this.price = 6f;
        this.num = num;
    }
}

/**
 * 烤雞腿
 * @author lenovo
 *
 */
public class DrumStick extends Chicken{
	public DrumStick(int num) {
        this.kind = "烤雞腿";
        this.price = 12f;
        this.num = num;
    }
}

/**
 * 雞米花
 * @author lenovo
 *
 */
public class PopcornChicken extends Chicken{
	public PopcornChicken(int num) {
        this.kind = "雞米花";
        this.price = 11f;
        this.num = num;
    }
}

/**
 * 薯條
 * @author lenovo
 *
 */
public class Chips extends Dessert{
	public Chips(int num) {
        this.kind = "薯條";
        this.price = 8f;
        this.num = num;
    }
}

/**
 * 聖代
 * @author lenovo
 *
 */
public class Sundae extends Dessert{
	public Sundae(int num) {
        this.kind = "聖代";
        this.price = 6f;
        this.num = num;
    }
}

/**
 * 蛋撻
 * @author lenovo
 *
 */
public class EggTart extends Dessert{
	public EggTart(int num) {
        this.kind = "蛋撻";
        this.price = 4f;
        this.num = num;
    }
}

/**
 * 可樂
 * @author lenovo
 *
 */
public class Kola extends Drinks{
	public Kola(int num) {
        this.kind = "可樂";
        this.price = 6f;
        this.num = num;
    }
}

/**
 * 奶茶
 * @author lenovo
 *
 */
public class Milky extends Drinks{
	public Milky(int num) {
        this.kind = "奶茶";
        this.price = 6f;
        this.num = num;
    }
}

/**
 * 咖啡
 * @author lenovo
 *
 */
public class Coffee extends Drinks{
	public Coffee(int num) {
        this.kind = "咖啡";
        this.price = 12f;
        this.num = num;
    }
}

/**
 * 單人套餐
 * @author lenovo
 *
 */
public class OneCombo extends Combo{
	public OneCombo(int num) {
        this.kind = "單人套餐";
        this.price = 33f;
        this.num = num;
    }
}

/**
 * 雙人套餐
 * @author lenovo
 *
 */
public class TwoCombo extends Combo{
	public TwoCombo(int num) {
        this.kind = "雙人套餐";
        this.price = 54f;
        this.num = num;
    }
}

/**
 * 三人套餐
 * @author lenovo
 *
 */
public class ThreeCombo extends Combo{
	public ThreeCombo(int num) {
        this.kind = "三人套餐";
        this.price = 109f;
        this.num = num;
    }
}

5.抽象工廠

/**
 * 肯德基抽象工廠
 * @author lenovo
 *
 */
public interface Factory {
	public interface factory {
	    //生產漢堡
	    public Hamburger createHamburger(int num);

	    //生產炸雞類食物
	    public Chicken createChicken(int num);

	    //生產甜點
	    public Dessert createDessert(int num);

	    //生產飲品
	    public Drinks createDrinks(int num);
	}
	public Hamburger createZingerBurger(int num);
	public Hamburger createBeefBurger(int num);
	public Hamburger createOrleansBurger(int num);
	public Hamburger createShrimpBurger(int num);
	public Chicken createChickenWings(int num);
	public Chicken createDrumStick(int num);
	public Chicken createPopcornChicken(int num);
	public Dessert createChips(int num);
	public Dessert createEggTart(int num);
	public Dessert createSundae(int num);
	public Drinks createMilky(int num);
	public Drinks createKola(int num);
	public Drinks createCoffee(int num);
	public Combo createOneCombo(int num);
	public Combo createTwoCombo(int num);
	public Combo createThreeCombo(int num);
}

6.具體工廠


public class KFCFactory implements Factory{
	 //生產香辣雞腿堡
	public ZingerBurger createZingerBurger(int num) {
        return new ZingerBurger(num);
    }
	//生產超級牛肉堡
    public BeefBurger createBeefBurger(int num) {
        return new BeefBurger(num);
    }
    //奧爾良烤雞腿堡
    public OrleansBurger createOrleansBurger(int num) {
        return new OrleansBurger(num);
    }
    //生產全蝦堡
    public ShrimpBurger createShrimpBurger(int num) {
        return new ShrimpBurger(num);
    }
    //奧爾良烤翅
    public ChickenWings createChickenWings(int num) {
        return new ChickenWings(num);
    }
    //烤雞腿
    public DrumStick createDrumStick(int num) {
        return new DrumStick(num);
    }
    //雞米花
    public PopcornChicken createPopcornChicken(int num) {
        return new PopcornChicken(num);
    }
    //生產薯條
    public Chips createChips(int num){
    	return new Chips(num);
    }
    //生產蛋撻
    public EggTart createEggTart(int num){
    	return new EggTart(num);
    }
    //生產聖代
    public Sundae createSundae(int num){
    	return new Sundae(num);
    }
    //生產奶茶
    public Milky createMilky(int num){
    	return new Milky(num);
    }
    //生產可樂
    public Kola createKola(int num){
    	return new Kola(num);
    }
    //生產咖啡
    public Coffee createCoffee(int num){
    	return new Coffee(num);
    }
    //生產單人套餐
    public OneCombo createOneCombo(int num){
    	return new OneCombo(num);
    }
    //生產雙人套餐
    public TwoCombo createTwoCombo(int num){
    	return new TwoCombo(num);
    }
    //生產三人套餐
    public ThreeCombo createThreeCombo(int num){
    	return new ThreeCombo(num);
    }
}

7:客戶類

/**
 * 顧客類
 * @author lenovo
 *
 */
public class Customer {

    //抽象工廠
    private Factory factory;

    //構造方法將抽象工廠作為引數傳入
    public Customer(Factory factory){
        this.factory = factory;
    }

    /**
     * 點餐
     */
    public float orderZingerBurger(int num){
        //獲得香辣雞腿堡
        Hamburger zingerBurger = factory.createZingerBurger(num);
        //輸出訂購資訊
        zingerBurger.printMessage();
        //返回總價
        return zingerBurger.totalPrice();
    }
    public float orderBeefBurger(int num){
        //獲得超級牛肉堡
        Hamburger beefBurger = factory.createBeefBurger(num);
        //輸出訂購資訊
        beefBurger.printMessage();
        //返回總價
        return beefBurger.totalPrice();
    }
    public float orderOrleansBurger(int num){
        //獲得奧爾良烤雞腿堡
        Hamburger orleansBurger = factory.createOrleansBurger(num);
        //輸出訂購資訊
        orleansBurger.printMessage();
        //返回總價
        return orleansBurger.totalPrice();
    }
    public float orderShrimpBurger(int num){
        //獲得全蝦堡
        Hamburger shrimpBurger = factory.createShrimpBurger(num);
        //輸出訂購資訊
        shrimpBurger.printMessage();
        //返回總價
        return shrimpBurger.totalPrice();
    }
    public float orderChickenWings(int num){
        //獲得奧爾良烤翅
        Chicken chickenWings = factory.createChickenWings(num);
        //輸出訂購資訊
        chickenWings.printMessage();
        //返回總價
        return chickenWings.totalPrice();
    }
    public float orderDrumStick(int num){
        //獲得 烤雞腿
        Chicken drumStick = factory.createDrumStick(num);
        //輸出訂購資訊
        drumStick.printMessage();
        //返回總價
        return drumStick.totalPrice();
    }
    public float orderPopcornChicken(int num){
        //獲得雞米花
        Chicken popcornChicken = factory.createPopcornChicken(num);
        //輸出訂購資訊
        popcornChicken.printMessage();
        //返回總價
        return popcornChicken.totalPrice();
    }
    public float orderChips(int num){
        //獲得薯條
        Dessert chips = factory.createChips(num);
        //輸出訂購資訊
        chips.printMessage();
        //返回總價
        return chips.totalPrice();
    }
    public float orderEggTart(int num){
        //獲得蛋撻
    	Dessert eggTart = factory.createEggTart(num);
        //輸出訂購資訊
    	eggTart.printMessage();
        //返回總價
        return eggTart.totalPrice();
    }
    public float orderSundae(int num){
        //獲得聖代
    	Dessert sundae = factory.createSundae(num);
        //輸出訂購資訊
    	sundae.printMessage();
        //返回總價
        return sundae.totalPrice();
    }
    public float orderMilky(int num){
        //獲得奶茶
    	Drinks milky = factory.createMilky(num);
        //輸出訂購資訊
    	milky.printMessage();
        //返回總價
        return milky.totalPrice();
    }
    public float orderKola(int num){
        //獲得可樂
    	Drinks kola = factory.createKola(num);
        //輸出訂購資訊
    	kola.printMessage();
        //返回總價
        return kola.totalPrice();
    }
    public float orderCoffee(int num){
        //獲得咖啡
    	Drinks coffee = factory.createCoffee(num);
        //輸出訂購資訊
    	coffee.printMessage();
        //返回總價
        return coffee.totalPrice();
    }

	public float orderOneCombo(int num) {
		//單人套餐
		Combo oneCombo = factory.createOneCombo(num);
		//輸出訂購資訊
		oneCombo.printMessage();
        //返回總價
        return oneCombo.totalPrice();
	}

	public float orderTwoCombo(int num) {
		//雙人套餐
		Combo twoCombo = factory.createTwoCombo(num);
		//輸出訂購資訊
		twoCombo.printMessage();
		//返回總價
		return twoCombo.totalPrice();
	}

	public float orderThreeCombo(int num) {
		//三人套餐
	    Combo threeCombo = factory.createThreeCombo(num);
	    //輸出訂購資訊
	    threeCombo.printMessage();
		//返回總價
		return threeCombo.totalPrice();
	}

}

8.測試類

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
        /**
         * 定義一個肯德基(factory型別)
         */
        Factory factory = new KFCFactory();
        /**
         * 建立客戶
         */
        Customer customer = new Customer(factory);
        /**
         * 客戶點餐
         */
        Scanner input =new Scanner(System.in);
        float ZingerBurger = 0;float OrleansBurger= 0;
        float BeefBurger= 0;float ShrimpBurger = 0;
        float ChickenWings= 0;float DrumStick = 0;
        float PopcornChicken = 0; float Chips= 0;
        float EggTart= 0;float Sundae = 0;
        float Kola= 0; float Milky= 0;
        float Coffee = 0;float OneCombo= 0;
        float TwoCombo= 0;float ThreeCombo = 0;
        System.out.println("歡迎進入今晚吃雞漢堡店點餐系統!\n"
        		+"******************大吉大利選單******************\n"
        		+"漢堡類:\n"
        		+ "1.香辣雞腿堡--15.0元                          2.奧爾良烤雞腿堡--17.0元 \n"
        		+ "3.超級牛肉堡--17.0元                          4.全蝦堡--17.0元\n"
        		+"雞肉類:\n"
        		+ "5.奧爾良烤翅--6.0元                             6.烤雞腿--12.0元\n"
        		+ "7.雞米花--11.0元\n"
        		+ "甜點類:\n"
        		+ "8.薯條--8元                                              9.蛋撻--4元\n"
        		+ "10.聖代--6元\n"
        		+"飲品類:\n"
        		+ "11.可樂--6元                                           12.奶茶--6元\n"
        		+ "13.咖啡--12元\n"
        		+"套餐類:\n"
        		+"14.單人套餐--33元\n"
        		+ "  1個香辣雞腿堡+1個烤雞腿+1包薯條+1杯可樂/奶茶(任點)\n"
        		+"15.雙人套餐:--54元\n"
        		+ "  1個香辣雞腿堡+1個奧爾良烤雞腿堡/超級牛肉堡/全蝦堡(任點)\n"
        		+ "  1對奧爾良烤翅+2個蛋撻+2杯可樂/奶茶(任點)\n"
        		+"16.三人套餐--109元\n"
        		+ "  3個奧爾良烤雞腿堡/超級牛肉堡/全蝦堡(任點)\n"
        		+ "  1對奧爾良烤翅+1個烤雞腿+1包雞米花\n"
        		+ "  1包薯條+2杯聖代+2杯可樂/奶茶(任點)+1杯咖啡\n"
        		+"*********************************************\n");
        while(true){
        	System.out.println("請選擇序號點餐");
            int a=input.nextInt();
            System.out.println("請選擇數量");
            int b=input.nextInt();
            switch(a){
            case 1:
            	//香辣雞腿堡
            	ZingerBurger = customer.orderZingerBurger(b);
                break;
            case 2:
            	//奧爾良烤雞腿堡
                OrleansBurger = customer.orderOrleansBurger(b);
                break;
            case 3:
            	//超級牛肉堡
                BeefBurger = customer.orderBeefBurger(b);
                break;
            case 4:
            	//全蝦堡
                ShrimpBurger = customer.orderShrimpBurger(b);
                break;
            case 5:  
            	//奧爾良烤雞翅
                ChickenWings = customer.orderChickenWings(b);
                break;  
            case 6:  
            	//烤雞腿
                DrumStick = customer.orderDrumStick(b);
                break;
            case 7: 
            	 //雞米花
                PopcornChicken = customer.orderPopcornChicken(b);
                break;
            case 8: 
                //薯條
                Chips = customer.orderChips(b);
                break;
            case 9: 
                //蛋撻
                EggTart = customer.orderEggTart(b);
                break;
            case 10: 
                //聖代
                Sundae = customer.orderSundae(b);
                break;
            case 11: 
                //可樂
                Kola = customer.orderKola(b);
                break;
            case 12: 
                //奶茶
                Milky = customer.orderMilky(b);
                break;
            case 13: 
                //咖啡
                Coffee = customer.orderCoffee(b);
                break;
            case 14: 
                //單人套餐
                OneCombo = customer.orderOneCombo(b);
                break;
            case 15: 
                //雙人套餐
                TwoCombo = customer.orderTwoCombo(b);
                break;
            case 16: 
                //三人套餐
                ThreeCombo = customer.orderThreeCombo(b);
                break;
            }
            System.out.println("請選擇是否繼續點餐,1.是   2.否");
            int c=input.nextInt();
            if(c!=1){
            	break;
            }
        }
        float money1=ZingerBurger+OrleansBurger+BeefBurger+ShrimpBurger;
        float money2=+ChickenWings+DrumStick+PopcornChicken;
        float money3=+Chips+EggTart+Sundae;
        float money4=Kola+Milky+Coffee;
        float money5=OneCombo+TwoCombo+ThreeCombo;
        float money=money1+money2+money3+money4+money5;
        System.out.println("此次點餐共計:"+money);
        System.out.println("請問您是否具有優惠券? 1.是   2.否");
        int c=input.nextInt();
        int d=0;
        if(c==1){
        	System.out.println("請輸入優惠券金額");
        	d=input.nextInt();
        }
        System.out.println("請輸入實付金額");
        int e=input.nextInt();
        float changes=e-money-d;
        System.out.println("找零:"+changes);
        System.out.println("歡迎下次點餐,祝您用餐愉快!");
    }

}

除錯及測試截圖:

在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

此程式只實現了部分功能,還有待改進。