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

本文主要是介绍同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.基本要求

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。

**

2.设计模式

2.1工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
2.2抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
在这里插入图片描述
**

3.程序实现

3.1食物接口IFood

package com.kfc.factory.model;
/** 抽象食物接口*/
public interface IFood {/** 打印食物信息*/void printMessage();
}

3.2 抽象事物的建立
(1)食物基类

package com.kfc.factory.model;
/** 食物基类*/
public abstract class AbstractBaseFood {protected String kind;//类别protected int num;//数量protected float price;//价格public float totalPrice(){return this.num * this.price;}
}

(2)饮料基类

package com.kfc.factory.model;
/** 饮料基类*/
public abstract class Beverage extends AbstractBaseFood implements IFood {public void printMessage() {System.out.println("--" + this.kind + "饮料:\t" + this.price + "\t" + this.num + "\t" + this.totalPrice());}
}

(3)汉堡基类

package com.kfc.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());}
}

(4)鸡翅基类

package com.kfc.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());}
}

(5)薯条基类

package com.kfc.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());}
}

(6)套餐1基类

package com.kfc.factory.model;public class Num1 extends AbstractBaseFood implements IFood {public void printMessage() {System.out.println("---"+this.kind + "套餐: " + "  "+this.price + "     " + this.num + "       " + this.totalPrice());}}

(7)套餐2基类

package com.kfc.factory.model;public class Num2 extends AbstractBaseFood implements IFood{public void printMessage() {System.out.println("---"+this.kind + "套餐: " + ""+this.price + "     " + this.num + "       " + this.totalPrice());}
}

(8)套餐3基类

package com.kfc.factory.model;/** 套餐3*/
public class Num3 extends AbstractBaseFood implements IFood{public void printMessage() {System.out.println("---"+this.kind + "套餐: " + ""+this.price + "     " + this.num + "       " + this.totalPrice());}
}

3.3具体食物的建立
(9)饮料实现类

package com.kfc.factory.model;
import com.kfc.factory.model.Beverage;
/** 饮料实现类*/
public class KeleBeverage extends Beverage {public KeleBeverage(int num) {this.kind = "可乐";this.price = 7.0f;this.num = num;}
}

(10)汉堡实现类

package com.kfc.factory.model;
import com.kfc.factory.model.Hamburg;
/** 麻辣鸡腿汉堡*/
public class ChinaHanburm extends Hamburg{/** 构造方法*/public ChinaHanburm(int num) {this.kind = "麻辣";this.price = 14.0f;this.num = num;}
}

(11)薯条实现类

package com.kfc.factory.model;
import com.kfc.factory.model.FrenchFries;
/** 薯条实现类*/
public class ChinaFrenchFries extends FrenchFries {public ChinaFrenchFries(int num) {this.kind = "番茄";this.price = 8.0f;this.num = num;}
}

(12)鸡翅实现类

package com.kfc.factory.model;
import com.kfc.factory.model.ChickenWings;
public class ChinaChickenWings extends ChickenWings{/** 鸡翅实现类*/public ChinaChickenWings(int num) {this.kind = "奥尔良";this.price = 2.5f;this.num = num;}
}

(13)套餐1实现类

package com.kfc.factory.model;
import com.kfc.factory.model.Num1;
/** 套餐1*/
public class Num1Kind extends Num1{public Num1Kind(int num) {this.kind = "全家桶";this.price = 62.0f;this.num = num;}
}

(14)套餐2实现类

package com.kfc.factory.model;
import com.kfc.factory.model.Num2;
/** 套餐2*/
public class Num2Kind extends Num2{public Num2Kind(int num) {this.kind = "原味鸡桶";this.price = 88.0f;this.num = num;}
}

(15)套餐3实现类

package com.kfc.factory.model;
import com.kfc.factory.model.Num3;
/** 套餐3的类型实现*/
public class Num3Kind extends Num3{/** 构造函数*/public Num3Kind(int num) {this.kind = "翅桶辣堡";this.price = 99.0f;this.num = num;}
}

3.4 建立工厂

(16)创建抽象肯德基工厂——IKfcFactory 生产抽象食物

package com.kfc.factory.itf;
import com.kfc.factory.model.Beverage;
import com.kfc.factory.model.ChickenWings;
import com.kfc.factory.model.FrenchFries;
import com.kfc.factory.model.Hamburg;
import com.kfc.factory.model.Num1;
import com.kfc.factory.model.Num2;
import com.kfc.factory.model.Num3;
/** 肯德基抽象工厂基类*/
public interface IKfcFactory {public Hamburg createHamburg(int num);// 生产汉堡public FrenchFries createFrenchFries(int num);// 生产薯条public ChickenWings createChickenWings(int num);// 生产鸡翅public Beverage createBeverage(int num); // 生产饮料public Num1 createNum1(int num);//生产套餐1public Num2 createNum2(int num);//生产套餐2public Num3 createNum3(int num);//生产套餐3}

(17)创建具体肯德基工厂——ChinaKfcFactory 生产具体食物

package com.kfc.factory.itf;
import com.kfc.factory.itf.IKfcFactory;
import com.kfc.factory.model.Beverage;
import com.kfc.factory.model.ChickenWings;
import com.kfc.factory.model.FrenchFries;
import com.kfc.factory.model.Hamburg;
import com.kfc.factory.model.KeleBeverage;
import com.kfc.factory.model.Num1;
import com.kfc.factory.model.Num1Kind;
import com.kfc.factory.model.Num2;
import com.kfc.factory.model.Num2Kind;
import com.kfc.factory.model.Num3;
import com.kfc.factory.model.Num3Kind;
import com.kfc.factory.model.ChinaChickenWings;
import com.kfc.factory.model.ChinaFrenchFries;
import com.kfc.factory.model.ChinaHanburm;public class ChinaKfcFactory implements IKfcFactory{// 生产可乐public Beverage createBeverage(int num){return new KeleBeverage(num);}// 生产奥尔良烤鸡翅public ChickenWings createChickenWings(int num){return new ChinaChickenWings(num);}// 生产薯条public FrenchFries createFrenchFries(int num){return new ChinaFrenchFries(num);}// 生产麻辣风味鸡腿汉堡public Hamburg createHamburg(int num){return new ChinaHanburm(num);}//生产套餐1public Num1 createNum1(int num) {return new Num1Kind(num);}public Num2 createNum2(int num) {return new Num2Kind(num);}@Overridepublic Num3 createNum3(int num) {return new Num3Kind(num);}}

3.5 创建客户类
(18)创建客户类——Customer

package com.kfc.factory.custom;
import com.kfc.factory.itf.IKfcFactory;
import com.kfc.factory.model.Beverage;
import com.kfc.factory.model.ChickenWings;
import com.kfc.factory.model.FrenchFries;
import com.kfc.factory.model.Hamburg;
import com.kfc.factory.model.Num1;
import com.kfc.factory.model.Num2;
import com.kfc.factory.model.Num3;/** 客户类*/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 orderBeverage(int num){// 获得可乐Beverage beverage = kfcFactory.createBeverage(num);// 输出订购信息beverage.printMessage();// 返回总价return beverage.totalPrice();}/** 订购套餐1*/public float orderNum1(int num) {Num1 num1 = kfcFactory.createNum1(num);num1.printMessage();return num1.totalPrice();}/** 订购套餐2*/public float orderNum2(int num) {Num2 num2 = kfcFactory.createNum2(num);num2.printMessage();return num2.totalPrice();}/** 订购套餐3*/public float orderNum3(int num) {Num3 num3 = kfcFactory.createNum3(num);num3.printMessage();return num3.totalPrice();}}

3.6主函数界面的实现

/*
* author:软工1604 徐於敏 16408070731
*/
package com.kfc.factory;import com.kfc.factory.custom.Customer;
import com.kfc.factory.itf.ChinaKfcFactory;
import com.kfc.factory.itf.IKfcFactory;
import java.util.Date;
import java.util.Scanner;
import java.io.IOException;
import java.text.SimpleDateFormat;
public class OrderApp {@SuppressWarnings("resource")public static void main(String[] args) throws IOException {int a=0,b=0,c=0,d=0,e=0,f=0,g=0,n=0;//定义变量,控制食品数量int flag = 1;/** 定义一个肯德基(IKfcFactory类型)*/IKfcFactory kfcFactory = new ChinaKfcFactory();Customer customer = new Customer(kfcFactory);//开始点餐/** 点餐过程实现*/SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式while(flag !=0) {Scanner sc = new Scanner(System.in);System.out.println("欢迎进入肯德基点餐系统!");System.out.println("1.单点"+"2.套餐");int m = sc.nextInt();switch(m) {case 1:System.out.println("有如下食品:1.麻辣风味汉堡   2.奥尔良风味鸡翅   3.番茄风味薯条    4.可乐");System.out.println("麻辣风味汉堡个数:");a = sc.nextInt();System.out.println("奥尔良风味鸡翅:");b = sc.nextInt();System.out.println("番茄风味薯条:");c = sc.nextInt();System.out.println("可乐:");d = sc.nextInt();System.out.println("付款金额:");n = sc.nextInt();System.out.println("********************************************************************");System.out.println("                            欢迎光临肯德基                                                       ");System.out.println("订餐时间:"+df.format(new Date()));System.out.println("\t名称"+"\t单价"+"\t数量"+"\t合计");float hamhurgMoney = customer.orderHamburg(a);// 麻辣鸡腿汉堡float chickenWingsMoney = customer.orderChickenWings(b); // 奥尔良烤鸡翅float frenchFriesMoney = customer.orderFrenchFries(c);// 薯条float beverageMoney = customer.orderBeverage(d);// 可乐System.out.println("总计:" + (hamhurgMoney + chickenWingsMoney + frenchFriesMoney + beverageMoney));System.out.println("收款:"+n+"  "+"找零:"+(n - hamhurgMoney - chickenWingsMoney - frenchFriesMoney - beverageMoney));System.out.println("当前收银员:徐於敏");System.out.println("欢迎下次光临!");System.out.println("********************************************************************");break;case 2:System.out.println("有如下套餐:1.全家桶套餐     2.万圣节辣堡桶   3.翅桶辣堡套餐   ");System.out.println("1.全家桶套餐的个数:");e = sc.nextInt();System.out.println("万圣节日辣堡桶个数:");f = sc.nextInt();System.out.println("翅桶辣堡套餐:");g = sc.nextInt();System.out.println("付款金额:");n = sc.nextInt();System.out.println("********************************************************************");System.out.println("                            欢迎光临肯德基                                                       ");System.out.println("订餐时间:"+df.format(new Date()));System.out.println("\t名称"+"        "+"\t单价"+"\t数量"+"\t合计");float num1Money = customer.orderNum1(e);float num2Money = customer.orderNum2(f);float num3Money = customer.orderNum3(g);System.out.println("总计:" + (num1Money+num2Money+num3Money));System.out.println("收款:"+n+"  "+"找零:"+(n - num1Money - num2Money - num3Money));System.out.println("当前收银员:徐於敏");System.out.println("欢迎下次光临!");System.out.println("********************************************************************");break;}System.out.println("继续点餐? 1——yes 0——no:");flag = sc.nextInt();	        }/*	将小票信息输入到文件中File fp = new File("./1.txt");PrintWriter pw =new PrintWriter(fp);pw.write("********************************************************************");pw.println();pw.write("                            欢迎光临肯德基                                                       ");pw.println();pw.write("订餐时间:"+df.format(new Date()));pw.println();pw.write("\t名称"+"\t单价"+"\t数量"+"\t合计");pw.println();pw.write("总计:" + (ham + chicken + Fries + beverage));pw.println();pw.write("当前收银员:徐於敏");pw.println();pw.write("欢迎下次光临!");pw.println();pw.write("********************************************************************");pw.close();*/}
}

4.运行截图
在这里插入图片描述
在这里插入图片描述
5.个人总结
由于个人能力有限,仅完成单品点餐收银,套餐点餐收银结账,小票的打出。通过本次作业我对各个设计模式有了更深的了解,也进一步提升了自己的编程设计能力。
6.参考资料
参考网站https://m.jb51.net/article/140406.htm
抽象工厂模式资料:http://www.runoob.com/design-pattern/abstract-factory-pattern.html
工厂模式:http://www.runoob.com/design-pattern/factory-pattern.html

这篇关于同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354268

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,