程序实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4..模拟打印小票的功能。
设计模式主要采用了抽象工厂模式和建造者模式。
设计抽象基类AbstractFood,供生成食物。
public abstract class AbstractFood {
protected String foodname;
protected int num;
protected float price;
public Float money() {
return num * price;
}
}
设计饮料类、汉堡类、薯条类,供顾客选择。
public abstract class Drink extends AbstractFood implements FoodMessage {
public String getMessage() {
return (this.foodname + " " + this.num + " " + this.price + " ");
}
}
public class AppleJuice extends Drink {
protected double money;
public AppleJuice(){
this.money=6.00f;
}
public AppleJuice(int num) {
this.foodname = "鲜榨苹果汁";
this.num = num;
this.price = 6.00f;
}
public double getMoney(double money){
return money;
}
}
其余两类类似食物类。
食物是工厂的成员,在食物工厂中创建。
//创建具体的KFC工厂,生成具体事物
public class FoodFatory implements Fctory {
@Override
public Drink createAppleJuice(int num) {
// TODO Auto-generated method stub
return new AppleJuice(num);
}
@Override
public BeefHamburger createBeefHamburger(int num) {
// TODO Auto-generated method stub
return new BeefHamburger(num);
}
@Override
public PotatoChips createPotatoChips(int num) {
// TODO Auto-generated method stub
return new PotatoChips(num);
}
}
建造者模式将KfcBuilder设为Director的成员。
public class Director {
//套餐1的应用
private static KfcBuilder firstSetmeal = new FirstSetmeal();
//套餐2的应用
private static KfcBuilder secondSetmeal = new SecondSetmeal();
//生产套餐一
public static Setmeal getFirstSetmeal() {
return firstSetmeal.getSetmeal();
}
//生产套餐二
public static Setmeal getSecondSetmeal() {
return secondSetmeal.getSetmeal();
}
}
public abstract class KfcBuilder {
protected final Setmeal kfcpackage = new Setmeal();
//套餐的种类
public void setKind(String kind) {
this.kfcpackage.setKind(kind);
}
//套餐的价格
public void setPrice(double price) {
this.kfcpackage.setPrice(price);
}
//套餐的数量
public void setNum(int num) {
this.kfcpackage.setNum(num);
}
//构造一个完整的套餐
public abstract Setmeal getSetmeal();
}
public class FirstSetmeal extends KfcBuilder {
public Setmeal getSetmeal() {
super.kfcpackage.setKind("深海鳕鱼汉堡、香辣鸡翅、薯条、橙汁、原味冰欺凌");
super.kfcpackage.setNum(1);
super.kfcpackage.setPrice(99.0);
return super.kfcpackage;
}
}
Discount类实现优惠券的设置
import java.util.Scanner;
public class Discount {
protected double discount;
//Scanner in = new Scanner(System.in);
public double getDiscount(){
System.out.println("活动一:1,活动二 :2,活动三:3");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
switch(num){
case 1:
discount=0.9;
return discount;
case 2:
discount=0.8;
return discount;
case 3:
discount=0.75;
return discount;
}
return discount;
}
}
主函数在顾客类中,主要实现三种方式金额的结算和找零。
import java.util.Scanner;
public class Costom {
private FoodFatory kfcFactory;
public Costom(FoodFatory kfcFactory) {
this.kfcFactory = kfcFactory;
}
public Costom(){}
public void getBill(){
System.out.println("订购套餐1,参与优惠活动2,以上都没有3");
Scanner bill = new Scanner(System.in);
int number = bill.nextInt();
switch(number){
case 1:
System.out.println("本店提供的套餐如下:");
Setmeal firstSetmeal = Director.getFirstSetmeal();
System.out.println("套餐一:");
System.out.println(firstSetmeal.getKind());
System.out.println("价格:"+firstSetmeal.getPrice());
//生产套餐二
Setmeal secondSetmeal = Director.getSecondSetmeal();
System.out.println("套餐二:");
System.out.println(secondSetmeal.getKind());
System.out.println("价格:"+secondSetmeal.getPrice());
Scanner scan = new Scanner(System.in);
System.out.println("请选择是否订购套餐,是请输入9,否则输入0");
int num = scan.nextInt();
if(num == 9) {
System.out.println("请选择你选则的套餐:1:套餐一 2:套餐二");
int number1 = scan.nextInt();
if( number == 1) {
System.out.println("------------------账单------------------");
System.out.println(firstSetmeal.getKind());
System.out.println("价格:"+firstSetmeal.getPrice()+"\t 数量:"+firstSetmeal.getNum());
//System.out.println("累计消费:"+(salesclerk.orderAppleJuice(1)+salesclerk.orderBeefHamburger(1))+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
int money = scan.nextInt();
System.out.println("找零钱"+(money-firstSetmeal.getPrice())+"元");
}
else{
System.out.println("------------------账单------------------");
System.out.println(secondSetmeal.getKind());
System.out.println("价格:"+secondSetmeal.getPrice()+"\t 数量:"+secondSetmeal.getNum());
System.out.println("累计消费:"+(secondSetmeal.getPrice())+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
int money = scan.nextInt();
System.out.println("找零钱"+(money-(secondSetmeal.getPrice()))+"元");
}
}
break;
case 2:
System.out.println("请选择是否参与优惠活动:是输入8,否输入0");
Scanner numer = new Scanner(System.in);
int s = numer.nextInt();
if(s==8){
System.out.println("------------------账单------------------");
Discount dis = new Discount();
dis.getDiscount();
Fctory factory = new FoodFatory();
Salesclerk salesclerk = new Salesclerk(factory);
salesclerk.orderPotatoChips(3);
salesclerk.orderAppleJuice(2);
salesclerk.orderBeefHamburger(1);
System.out.println(salesclerk.getMessage());
System.out.println("累计消费:"+((salesclerk.orderPotatoChips(3)+salesclerk.orderAppleJuice(2)+salesclerk.orderPotatoChips(3)))*dis.discount+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
int money = numer.nextInt();
System.out.println("找零钱"+(int)(money-((salesclerk.orderPotatoChips(3)+salesclerk.orderAppleJuice(2)+salesclerk.orderPotatoChips(3)))*dis.discount)+"元");
}
break;
case 3:
System.out.println("------------------账单------------------");
Fctory factory = new FoodFatory();
Salesclerk salesclerk = new Salesclerk(factory);
salesclerk.orderPotatoChips(3);
System.out.println(salesclerk.getMessage());
System.out.println("累计消费:"+(salesclerk.orderPotatoChips(3))+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
Scanner in =new Scanner(System.in);
int money = in.nextInt();
System.out.println("找零钱"+(money-(salesclerk.orderPotatoChips(3)))+"元");
}
}
public static void main(String[] args) {
Costom costom = new Costom();
costom.getBill();
}
}