设计模式之Java语言模拟肯德基点餐收银系统

本文介绍了如何使用Java语言结合多种设计模式,模拟实现肯德基快餐店的收银系统,包括正常餐品结算、基本套餐结算、优惠券购买结算、店内活动参与及打印小票等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.题目描述:

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:

1.正常餐品结算和找零。

2.基本套餐结算和找零。

3.使用优惠劵购买餐品结算和找零。

4.可在一定时间段参与店内活动(自行设计或参考官网信息)。

5.模拟打印小票的功能(写到文件中)。

二.程序源代码:

//餐品接口
public interface Food {
 void printInf();//显示所选餐品结算结果
}
//食物信息父类
public class FoodInf {
 protected String nam;//食物名称
 protected double price;//食物价格
 protected int num; //食物数量
 public double totalPrice()//餐品总计
 {
  return num*price;
 }
}
import java.io.FileWriter;
import java.io.IOException;
//汉堡包父类
public class Hamburgers extends FoodInf implements Food{
 @Override
 public void printInf() {
  
  System.out.println("----------------------------------------------------------------------");
  System.out.println("     "+nam+"                                        "+num+"            "+price+"         "+totalPrice());
 }
 public void Write()/*模拟小票写入文件*/
 {
  try {
   FileWriter bw = new FileWriter("Bill.txt",true);
   bw.write("----------------------------------------------------------------------"+"\r\n");
   bw.write("     "+nam+"                                        "+num+"            "+price+"         "+totalPrice()+"\r\n");
   bw.close();
  }catch(IOException e) {
   e.printStackTrace();
  }
 }
}
public class Hamburger_1 extends Hamburgers{
 public Hamburger_1(int num) {
  nam="香辣鸡腿堡";
  price=10;
  this.num=num;
 }
}
public class Hamburger_2 extends Hamburgers{
 public Hamburger_2(int num) {
  nam="田园鸡腿堡";
  price=8;
  this.num=num;
 }
}
public class Hamburger_3 extends Hamburgers{
 public Hamburger_3(int num) {
  nam="奶油鸡腿堡";
  price=11;
  this.num=num;
 }
}
import java.io.FileWriter;
import java.io.IOException;
//饮品父类
public class Drinkings extends FoodInf implements Food{
 @Override
 public void printInf() {
  System.out.println("----------------------------------------------------------------------");
  System.out.println("        "+nam+"                                               "+num+"            "+price+"          "+totalPrice());
 }
 public void Write()/*模拟小票写入文件*/
 {
  try {
   FileWriter bw = new FileWriter("Bill.txt",true);
   bw.write("----------------------------------------------------------------------"+"\r\n");
   bw.write("        "+nam+"                                               "+num+"            "+price+"          "+totalPrice()+"\r\n");
   bw.close();
  }catch(IOException e) {
   e.printStackTrace();
  }
 }
}
public class Drinking_1 extends Drinkings{
 public Drinking_1(int num) {
  nam="可乐";
  price=5;
  this.num=num;
 }
}
public class Drinking_2 extends Drinkings{
 public Drinking_2(int num) {
  nam="奶茶";
  price=10;
  this.num=num;
 }
}
public class Drinking_3 extends Drinkings{
 public Drinking_3(int num) {
  nam="橙汁";
  price=6;
  this.num=num;
 }
}
import java.io.FileWriter;
import java.io.IOException;
//炸鸡父类
public class Chickens extends FoodInf implements Food{
 @Override
 public void printInf() {
  System.out.println("----------------------------------------------------------------------");
  System.out.println("     "+nam+"                                           "+num+"            "+price+"         "+totalPrice());
 }
 public void Write()/*模拟小票写入文件*/
 {
  try {
   FileWriter bw = new FileWriter("Bill.txt",true);
   bw.write("----------------------------------------------------------------------"+"\r\n");
   bw.write("     "+nam+"                                           "+num+"            "+price+"         "+totalPrice()+"\r\n");
   bw.close();
  }catch(IOException e) {
   e.printStackTrace();
  }
 }
}
public class Chicken_1 extends Chickens{
 public Chicken_1(int num) {
  nam="香辣炸鸡";
  price=11;
  this.num=num;
 }
}
public class Chicken_2 extends Chickens{
 public Chicken_2(int num) {
  nam="原味炸鸡";
  price=12;
  this.num=num;
 }
}
public class Chicken_3 extends Chickens{
 public Chicken_3(int num) {
  nam="奶油炸鸡";
  price=15;
  this.num=num;
 }
}
import java.io.FileWriter;
import java.io.IOException;
//套餐父类
public class Combos extends FoodInf implements Food{
 protected Hamburgers H;
 protected Drinkings D;
 protected Chickens C;
 @Override
 public void printInf() {
  System.out.println("----------------------------------------------------------------------");
  System.out.println("     "+nam+"                "+num+"            "+price+"         "+totalPrice());
 }
 public void Write()/*模拟小票写入文件*/
 {
  try {
   FileWriter bw = new FileWriter("Bill.txt",true);
   bw.write("----------------------------------------------------------------------"+"\r\n");
   bw.write("     "+nam+"                "+num+"            "+price+"         "+totalPrice()+"\r\n");
   bw.close();
  }catch(IOException e) {
   e.printStackTrace();
  }
 }
}
public class Combo_1 extends Combos{
 public Combo_1(int num) {
  H=new Hamburger_1(1);
  D=new Drinking_2(1);
  C=new Chicken_1(1);
  price=24;
  nam=H.nam+"+"+D.nam+"+"+C.nam;
  this.num=num;
 }
}
public class Combo_2 extends Combos{
 public Combo_2(int num) {
  H=new Hamburger_2(1);
  D=new Drinking_1(1);
  C=new Chicken_1(1);
  price=19;
  nam=H.nam+"+"+D.nam+"+"+C.nam;
  this.num=num;
 }
}
public class Combo_3 extends Combos{
 public Combo_3(int num) {
  H=new Hamburger_2(1);
  D=new Drinking_2(1);
  C=new Chicken_1(1);
  price=22;
  nam=H.nam+"+"+D.nam+"+"+C.nam;
  this.num=num;
 }
}
//餐品工厂接口
public interface FoodFactory {
 Hamburgers creatHamburger(int kind,int num);
 Drinkings creatDrinking(int kind,int num);
 Chickens creatChicken(int kind,int num);
 Combos creatCombo(int kind,int num);
}
//肯德基工厂类
public class KFCFoodFactory implements FoodFactory{
 public Hamburgers creatHamburger(int kind,int num) {//创建具体的汉堡包对象
  switch(kind) {
  case 1:
   return new Hamburger_1(num);  
  case 2:
   return new Hamburger_2(num);
  default:
   return new Hamburger_3(num);
  }
 }
 public Drinkings creatDrinking(int kind,int num) {//创建具体的饮品对象
  switch(kind) {
  case 1:
   return new Drinking_1(num);
  case 2:
   return new Drinking_2(num);
  default:
   return new Drinking_3(num);
  }
 }
 public Chickens creatChicken(int kind,int num) {//创建具体的炸鸡对象
  switch(kind) {
  case 1:
   return new Chicken_1(num);
  case 2:
   return new Chicken_2(num);
  default:
   return new Chicken_3(num);
  }
 }
 @Override
 public Combos creatCombo(int kind, int num) {//创建具体的套餐对象
  switch(kind) {
  case 1:
   return new Combo_1(num);
  case 2:
   return new Combo_2(num);
  default:
   return new Combo_3(num);
  }
 }
}
//点餐类
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Scanner;
public class OrderFoods {
 private int[] num=new int[4];//保存几种餐品的数量信息
 private int[] kind=new int[4];//保存几种餐品的种类信息
 private double total;//应付价格
 private double reduce;//减免去的钱
 private double money;//支付的钱的面值总和
 private double money_1;//找零
 private FoodFactory F=new KFCFoodFactory();
 class Token{//内部类优惠券类
  private final double token=5;
     public void useToken() {
      reduce=token;
     } 
 }
 class TimeDiscount {//内部类时段打折类
  private final double dis=0.8;
  public boolean isDiscount() {
   Calendar calendar=Calendar.getInstance();
   int date=calendar.get(Calendar.DATE);
   if(date%5==0) {//每逢5的倍数的日子打折
    return true;
   }else
    return false;
  }
  public void discount() {
   boolean Y=isDiscount();
   if(Y)
   reduce=reduce+total-total*dis;
  }
 }
 public void orderHamburgers() {//创造汉堡包对象并实现相应汉堡包结算信息显示和写入文件
  Hamburgers H=F.creatHamburger(kind[0], num[0]);
  total=total+H.totalPrice();
  H.Write();
  H.printInf();
 }
 public void orderDrinkings() {//创造饮品对象并实现相应饮品结算信息显示和写入文件
  Drinkings D=F.creatDrinking(kind[1], num[1]);
  total=total+D.totalPrice();
  D.Write();
  D.printInf();
 }
 public void orderChickens() {//创造炸鸡对象并实现相应炸鸡结算信息显示和写入文件
  Chickens C=F.creatChicken(kind[2], num[2]);
  total=total+C.totalPrice();
  C.Write();
  C.printInf();
 }
 public void orderCombos() {//创造套餐对象并实现相应套餐结算信息显示和写入文件
  Combos Co=F.creatCombo(kind[3], num[3]);
  total=total+Co.totalPrice();
  Co.Write();
  Co.printInf();
 }
 public void set1(int num,int kind) {//为保存所选汉堡包的数量和种类的元素赋值
  this.num[0]=num;
  this.kind[0]=kind;
 }
 public void set2(int num,int kind) {//为保存所选饮品的数量和种类的元素赋值
  this.num[1]=num;
  this.kind[1]=kind;
 }
 public void set3(int num,int kind) {//为保存所选炸鸡的数量和种类的元素赋值
  this.num[2]=num;
  this.kind[2]=kind;
 }
 public void set4(int num,int kind) {//为保存所选套餐的数量和种类的元素赋值
  this.num[3]=num;
  this.kind[3]=kind;
 }
 public void Write()/*写入顶栏*/
 {
  try {
   FileWriter bw = new FileWriter("Bill.txt",true);
   bw.write("    餐品名称                                       餐品数量    单价            总计"+"\r\n");
   bw.close();
  }catch(IOException e) {
   e.printStackTrace();
  }
 }
 public void Write_1() {//写入应付和实付信息
  try {
   FileWriter bw = new FileWriter("Bill.txt",true);
   bw.write("应付:"+total+"\r\n");
   bw.write("实付:"+(total-reduce)+"\r\n");
   bw.write("支付的钱的面值总和:"+money+"\r\n");
   bw.write("找零:"+money_1+"\r\n");
   bw.close();
  }catch(IOException e) {
   e.printStackTrace();
  } 
 }
 public void showList() {//菜单
  System.out.println("菜单:");
  System.out.println("A.汉堡包");
  System.out.println("1--------------香辣鸡腿堡------10.0");
  System.out.println("2--------------田园鸡腿堡-------8.0");
  System.out.println("3--------------奶油鸡腿堡------11.0");
  System.out.println("B.饮料");
  System.out.println("1--------------可乐-------------5.0");
  System.out.println("2--------------奶茶------------10.0");
  System.out.println("3--------------橙汁-------------6.0");
  System.out.println("C.炸鸡");
  System.out.println("1--------------香辣炸鸡--------11.0");
  System.out.println("2--------------原味炸鸡--------12.0");
  System.out.println("3--------------奶油炸鸡--------15.0");
  System.out.println("D.超值套餐");
  System.out.println("1--------------超值套餐A-------31.0");
  System.out.println("2--------------超值套餐B-------24.0");
  System.out.println("3--------------超值套餐C-------29.0");
 }
 public void order() {//点餐
  int num;
  int kind;
  Scanner sc=new Scanner(System.in);
  showList();
  System.out.println("请依次按照菜单选择您的餐品(非菜单上的数字即为不选此类餐品):");
  System.out.println("请选择汉堡包的种类:");
  kind=sc.nextInt();
  if(kind==1||kind==2||kind==3) {
    System.out.println("请选择该汉堡包的数量:");
    num=sc.nextInt();
             set1(num, kind); 
   }           
  System.out.println("请选择饮品的种类:");
  kind=sc.nextInt();
  if(kind==1||kind==2||kind==3) {
    System.out.println("请选择该饮品的数量:");
    num=sc.nextInt();
          set2(num, kind); 
   }              
  System.out.println("请选择炸鸡的种类:");
  kind=sc.nextInt();
  if(kind==1||kind==2||kind==3) {
    System.out.println("请选择该炸鸡的数量:");
    num=sc.nextInt();
          set3(num, kind);
   }
  System.out.println("请选择套餐的种类:");
  kind=sc.nextInt();
  if(kind==1||kind==2||kind==3) {
    System.out.println("请选择该套餐的数量:");
    num=sc.nextInt();
          set4(num, kind);
   }
  showResult();
  System.out.println("您是否要使用优惠券?是的话按1,不是则按2");
  int k;
  k=sc.nextInt();
  if(k==1) {
   Token T=new Token();
   T.useToken();
  }
  TimeDiscount Ti=new TimeDiscount();
  Ti.discount();
  System.out.println("应付:"+total);
  System.out.println("实付:"+(total-reduce));
  while(true) {
   System.out.println("请输入您选择支付的钱的面值总和");
   money=sc.nextInt();
   if(money<total-reduce) {
    System.out.println("您所选择的钱的面值过小,请重新选择");
   }
   else
   {
    money_1=money-(total-reduce);
    break;
   }
  }
  System.out.println("支付的钱的面值总和:"+money);
  System.out.println("找零:"+money_1);
  Write_1();
  sc.close();
 }
 public void showResult() {//显示点餐信息并写入文件
  Write();
  System.out.println("    餐品名称                                       餐品数量    单价            总计");
  if(kind[0]!=0) {
   orderHamburgers();
  }
  if(kind[1]!=0) {
   orderDrinkings();
  }
  if(kind[2]!=0) {
   orderChickens();
  }
  if(kind[3]!=0) {
   orderCombos();
  }
 }
}
//客户端类
public class Client {
 public static void main(String[] args) {
  OrderFoods od=new OrderFoods();
  od.order();
 }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值