题目描述:
请参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用Java,结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
采用抽象工厂模式;
静态建模如下:
代码模块:
1.抽象食物的建立
1.1食物的抽象类:
package com.demo.factory.model;
import java.util.Scanner;
/**
* 食物基类
*/
public abstract class AbstractBaseFood {
//类别
protected String kind;
//数量
protected int num;
//价格
protected float price;
//合计
public float totalPrice(){
return this.num * this.price;
}
}
1.2.食物接口:
package com.demo.factory.model;
/**
* 抽象食物接口
*/
public interface IFood {
/**
* 打印输出食物信息
*/
void printMessage();
}
2.不同抽象食物的基类:
2.1:鸡翅基类-ChickenWings
package com.demo.factory.model;
/**
* 鸡翅基类
*/
public abstract class ChickenWings extends AbstractBaseFood implements IFood{
public void printMessage(){
System.out.println("--"+this.kind+"风味鸡翅,\t单价:"+this.price+
",\t数量:"+this.num+",\t合计:"+this.totalPrice());
}
}
2.2:薯条基类-FrenchFries
package com.demo.factory.model;
/**
* 薯条基类
*/
public abstract class FrenchFries extends AbstractBaseFood implements IFood{
public void printMessage(){
System.out.println("--"+this.kind+"风味薯条,\t单价:"+this.price+
",\t数量:"+this.num+",\t合计:"+this.totalPrice());
}
}
2.3:汉堡基类-Hamburg
package com.demo.factory.model;
/**
* 汉堡基类
*/
public abstract class Hamburg extends AbstractBaseFood implements IFood{
public void printMessage(){
System.out.println("--"+this.kind+"风味汉堡,\t单价:"+this.price+
",\t数量:"+this.num+",\t合计:"+this.totalPrice());
}
}
2.4:饮品基类-Juice
package com.demo.factory.model;
/**
* 饮料基类
*/
public abstract class Juice extends AbstractBaseFood implements IFood{
public void printMessage(){
System.out.println("--"+this.kind+"拿铁,\t单价:"+this.price+
",\t数量:"+this.num+",\t合计:"+this.totalPrice());
}
}
3.创建具体的食物:
3.1.具体的汉堡食物
package com.demo.factory.model.kfc;
import com.demo.factory.model.Hamburg;
/**
* 柚香风味的麻辣鸡腿汉堡
*/
public class ChinaHamburg extends Hamburg{
/**
* 构造方法
* @param num
*/
public ChinaHamburg(int num) {
this.kind = "柚香";
this.price = 14.0f;
this.num = num;
}
}
3.2 具体的薯条食物
package com.demo.factory.model.kfc;
import com.demo.factory.model.FrenchFries;
/**
* 薯条实现类
*/
public class ChinaFrenchFries extends FrenchFries{
public ChinaFrenchFries(int num) {
this.kind = "不好吃";
this.price = 8.0f;
this.num = num;
}
}
3.3具体的鸡翅食物
package com.demo.factory.model.kfc;
import com.demo.factory.model.ChickenWings;
/**
* 鸡翅实现类
*/
public class ChinaChickenWings extends ChickenWings{
/**
* 构造方法
*/
public ChinaChickenWings(int num) {
this.kind = "麻辣";
this.price = 2.5f;
this.num = num;
}
}
3.4具体的饮品食物
package com.demo.factory.model.kfc;
import com.demo.factory.model.Juice;
/**
* 饮料实现类
*/
public class ChinaJuice extends Juice{
public ChinaJuice(int num) {
this.kind = "香草风味";
this.price = 7.0f;
this.num = num;
}
}
4.1.建立抽象的肯德基工厂:
package com.demo.factory.itf;
import com.demo.factory.model.Juice;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
/**
* 肯德基抽象工厂
*/
public interface IKfcFactory {
//生产汉堡
public Hamburg createHamburg(int num);
//生产薯条
public FrenchFries createFrenchFries(int num);
//生产鸡翅
public ChickenWings createChickenWings(int num);
//生产饮料
public Juice createJuice(int num);
}
4.2.建立具体的肯德基工厂:
package com.demo.factory.itf;
import com.demo.factory.model.Juice;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
import com.demo.factory.model.kfc.ChinaJuice;
import com.demo.factory.model.kfc.ChinaChickenWings;
import com.demo.factory.model.kfc.ChinaFrenchFries;
import com.demo.factory.model.kfc.ChinaHamburg;
/**
* 具体工厂
*/
public class ChinaKfcFactory implements IKfcFactory{
//生产汉堡
public Hamburg createHamburg(int num) {
return new ChinaHamburg(num);
}
//生产薯条
public FrenchFries createFrenchFries(int num) {
return new ChinaFrenchFries(num);
}
//生产鸡翅
public ChickenWings createChickenWings(int num) {
return new ChinaChickenWings(num);
}
//生产饮料
public Juice createJuice(int num) {
return new ChinaJuice(num);
}
}
5.1建立客户类:
package com.demo.factory.custom;
import com.demo.factory.itf.IKfcFactory;
import com.demo.factory.model.Juice;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
public class Customer {
//抽象工厂
private IKfcFactory kfcFactory;
//构造方法将抽象工厂作为参数传入
public Customer(IKfcFactory kfcFactory){
this.kfcFactory = kfcFactory;
}
/**
* 订购食物
*/
//订购汉堡
public float orderHamburg(int num){
//获得汉堡
Hamburg hamburg = kfcFactory.createHamburg(num);
//输出订购信息
hamburg.printMessage();
//返回总价
return hamburg.totalPrice();
}
//订购鸡翅
public float orderChickenWings(int num){
//获得烤鸡翅
ChickenWings chickenWings = kfcFactory.createChickenWings(num);
//输出订购信息
chickenWings.printMessage();
//返回总价
return chickenWings.totalPrice();
}
//订购薯条
public float orderFrenchFries(int num){
//获得薯条
FrenchFries frenchFries = kfcFactory.createFrenchFries(num);
//输出订购信息
frenchFries.printMessage();
//返回总价
return frenchFries.totalPrice();
}
//订购饮品
public float orderJuice(int num){
//获得饮品
Juice juice = kfcFactory.createJuice(num);
//输出订购信息
juice.printMessage();
//返回总价
return juice.totalPrice();
}
}
5.2 客户点餐:
package com.demo.factory.custom;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import com.demo.factory.custom.Customer;
import com.demo.factory.itf.ChinaKfcFactory;
import com.demo.factory.itf.IKfcFactory;
public class MainApp {
public static void main(String[] args) throws Exception {
int diancan=1;
double sum=0;
double sumt=0;
int edu=0;
int huodong=3;
int num=-1;//用户输入0返回菜单
boolean isExit=false; //标志用户是否退出系统;true 为退出系统
//获取当前时间并与开业时间进行比较确定是否可以参加活动
Date date1=new Date();
Date date2=new Date();
Date date3=new Date();
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date1=f.parse(f.format(new Date())); //这是获取当前时间
date2=f.parse("2018-10-25 1:59:59");
date3=f.parse("2019-10-27 1:59:59");
if(date1.getTime()>date2.getTime()&date1.getTime()<date3.getTime()){//数据比较
huodong=3;
}
else{
huodong=0;
}
/**
* 定义一个肯德基(IKfcFactory类型)
*/
IKfcFactory kfcFactory = new ChinaKfcFactory();
/**
* 创建客户
*/
Customer customer = new Customer(kfcFactory);
/**
* 客户开始点餐
*/
Scanner sc=new Scanner(System.in);
System.out.println("\t欢迎使用*有点low*点餐系统”");
do{
System.out.println("**************************************");
System.out.println("\t1、单品点餐\t");
System.out.println("\t2、套餐点餐");
System.out.println("\t3、查看单品菜单");
System.out.println("\t4、查看套餐");
System.out.println("\t5、了解店铺活动");
System.out.println("\t6、我没啥事,就想点进来看看\t");
System.out.println("**************************************");
System.out.println("请选择:");
int choose = sc.nextInt();
switch(choose){
case 1:
System.out.println("**************"+"\n"+"1.柚香风味汉堡\n"+"2.麻辣风味鸡翅\n"+"3.不好吃特色薯条\n"+"4.香草味拿铁\n"+"**************");
while(diancan==1){
String shijian=new Date().toLocaleString();
System.out.println("是否继续点餐(y/n)");
String dianbudian=sc.next();
if(dianbudian.equals("n")){
System.out.println("您的点餐时间为"+shijian);
System.out.println("您的总消费为"+sum);
System.out.println("请输入付款金额");
int fukuan=sc.nextInt();
System.out.println("请输入是否有优惠券(1/0)");
int youhuiquan=sc.nextInt();
if(youhuiquan==1){
System.out.println("请输入优惠券额度");
edu=sc.nextInt();
}
double zhaoling=fukuan+edu-sum+huodong;
if(huodong==3){
System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前您可参与店内满5减3的活动"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);
}
else{
System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前暂无店内活动参与"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);
}
break;
}
System.out.println("请输入所选食物编号");
int chisha=sc.nextInt();
System.out.println("数量");
int jifen1=sc.nextInt();
if(chisha==1){
float sum1 = customer.orderHamburg(jifen1);
sum +=sum1;
// continue;
}
else if(chisha==2){
float sum2 = customer.orderChickenWings(jifen1);
sum +=sum2;
// continue;
}
else if(chisha==3){
float sum3 = customer.orderFrenchFries(jifen1);
sum +=sum3;
// continue;
}
else if(chisha==4){
float sum4 = customer.orderJuice(jifen1);
sum +=sum4;
// continue;
}
System.out.println("总花费"+sum);
// diancan=0;
// System.out.println("总计:"+(hamburgMoney+chickenWingsMoney+frenchFriesMoney+beverageMoney));
}
break;
case 2:
System.out.println("1.套餐1:愤怒的汉堡午餐套餐");
System.out.println("\t**柚香汉堡 *1**\n\t**拿铁 *2**\n\t**鸡翅 *3**\n");
System.out.println("2.套餐2:柚香鸡腿堡午餐套餐");
System.out.println("\t**柚香鸡腿汉堡 *2\n\t**香草风味拿铁1杯 *2**\n\t**不好吃的薯条 *1**\n");
System.out.println("3.套餐3:随便什么午餐套餐");
System.out.println("\t**反正有肉的汉堡 *2**\n\t**能喝的饮料 *2**\n\t**不知道好吃不好吃的薯条 *2**\n");
while(diancan==1){
String shijian=new Date().toLocaleString();
System.out.println("是否继续点餐(y/n)");
String dianbudian=sc.next();
if(dianbudian.equals("n")){
System.out.println("您的点餐时间为"+shijian);
System.out.println("您的总消费为"+sum);
System.out.println("请输入付款金额");
int fukuan=sc.nextInt();
System.out.println("请输入是否有优惠券(1/0)");
int youhuiquan=sc.nextInt();
if(youhuiquan==1){
System.out.println("请输入优惠券额度");
edu=sc.nextInt();
}
double zhaoling=fukuan+edu-sum+huodong;
if(huodong==3){
System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前您可参与店内满5减3的活动"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);
}
else{
System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前暂无店内活动参与"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);
}
break;
}
System.out.println("请输入所选食物编号");
int chisha=sc.nextInt();
System.out.println("数量");
int jifen1=sc.nextInt();
if(chisha==1){
float sum1 = customer.orderHamburg(jifen1);
float sum2 = customer.orderJuice(jifen1);
float sum3 = customer.orderChickenWings(jifen1);
sum +=(sum1+sum2+sum3);
sumt +=sum;
}
else if(chisha==2){
float sum3 = customer.orderFrenchFries(jifen1);
float sum1 = customer.orderHamburg(jifen1);
float sum4 = customer.orderJuice(jifen1);
sum +=(sum3+sum4+sum1);
sumt +=sum;
}
else if(chisha==3){
float sum3 = customer.orderFrenchFries(jifen1);
float sum2 = customer.orderFrenchFries(jifen1);
float sum1 = customer.orderHamburg(jifen1);
sum +=(sum1+sum2+sum3);
sumt +=sum;
}
System.out.println("总花费"+sumt);
}
break;
case 3:
System.out.println("**************"+"\n"+"1.柚香风味汉堡\n"+"2.麻辣风味鸡翅\n"+"3.不好吃特色薯条\n"+"4.香草味拿铁\n"+"**************");
break;
case 4:
System.out.println("1.套餐1:愤怒的汉堡午餐套餐");
System.out.println("\t**柚香汉堡 *1**\n\t**拿铁 *2**\n\t**鸡翅 *3**\n");
System.out.println("2.套餐2:柚香鸡腿堡午餐套餐");
System.out.println("\t**柚香鸡腿汉堡 *2\n\t**香草风味拿铁1杯 *2**\n\t**不好吃的薯条 *1**\n");
System.out.println("3.套餐3:随便什么午餐套餐");
System.out.println("\t**反正有肉的汉堡 *2**\n\t**好吃的鸡翅 *2**\n\t**不知道好吃不好吃的薯条 *2**\n");
break;
case 5:System.out.println("亲,本店正值开业一天庆,为答谢广大顾客的支持,"
+ "\n本店决定凡在2018-10-27至2019-10-27内在本店消费的顾客"
+ "\n可享受满5元减3元的活动!!!!!!!");
break;
case 6:
System.out.println("亲看这系统怎么样?");
break;
default:
isExit=true;
break;
}
if(!isExit){
System.out.println("输入0返回");
num=sc.nextInt();
}
}while(num==0);
}
}
6.结果展示: