程式設計第四次作業-java“肯德基點餐系統-類圖+java程式+除錯測試截圖”
阿新 • • 發佈:2018-12-17
題目: 同學們應該都去麥當勞或肯德基吃過快餐吧?請同學們參考肯德基官網的資訊模擬肯德基快餐店的收銀系統,合理使用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("歡迎下次點餐,祝您用餐愉快!");
}
}
除錯及測試截圖:
此程式只實現了部分功能,還有待改進。