一、作业说明
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
基本要求:
1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
2.实现功能测试代码,确保程序的健壮性。
3.画出类图(UML)。
二.代码实现
1.Client.java
package kfc;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Client {
private String s[] =new String[6];
private KFCfactory factory_1;
//构造方法将抽象工厂传入
public Client(KFCfactory factory_1){
this.factory_1 = factory_1;
}
public void showbill() throws IOException{
BufferedWriter r=new BufferedWriter(new FileWriter("show.txt",true));
r.write("---------------------账单如下---------------------");
r.newLine();
for(int i=0;i<5;i++){
r.write(s[i]);
r.newLine();
r.flush();
// r.close();
}
}
public double orderHamburgers(int num,int kind) throws IOException
{
//获得不同种类的汉堡
Hamburger hamburger = factory_1.createHamburger(num, kind);
//输出订购信息
System.out.println(hamburger.printMesage());
s[0]=hamburger.printMesage();
System.out.print("\n");
//返回总价
return hamburger.totalPrice();
}
public double orderFrenchFries(int num,int kind){
FrenchFries frenchfries = factory_1.createFrenchFries(num, kind);
//输出订购信息
System.out.println(frenchfries.printMesage());
s[1]=frenchfries.printMesage();
System.out.println("\n");
//返回总价
return frenchfries.totalPrice();
}
public double orderDrink(int num,int kind){
Drink drink = factory_1.createDrink(num, kind);
//输出订购信息
System.out.print(drink.printMesage());
s[2]=drink.printMesage();
System.out.println("\n");
//返回总价
return drink.totalPrice();
}
public double orderDessert(int num,int kind){
Dessert dessert = factory_1.createDessert(num, kind);
//输出订购信息
System.out.println(dessert.printMesage());
s[3]=dessert.printMesage();
System.out.println("\n");
//返回总价
return dessert.totalPrice();
}
public double orderCombo(int num,int kind){
Combo combo= factory_1.createCombo(num, kind);
//输出订购信息
System.out.println(combo.printMesage());
s[4]=combo.printMesage();
System.out.println("\n");
//返回总价
return combo.totalPrice();
}
}
2.Combo.java
package kfc;
public abstract class Combo extends BaseFood implements PrintMenu{
public String printMesage()
{
return ("--" + this.kind + "套餐,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
3.Dessert.java
package kfc;
public abstract class Dessert extends BaseFood implements PrintMenu{
public String printMesage()
{
return ("--" + this.kind + "甜点,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
4.Drink.java
package kfc;
public abstract class Drink extends BaseFood implements PrintMenu{
public String printMesage()
{
return ("--" + this.kind + "饮品,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
5.FrenchFries.java
package kfc;
public abstract class FrenchFries extends BaseFood implements PrintMenu{
public String printMesage()
{
return ("--" + this.kind + "薯条,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
6.Hamburger.java
package kfc;
public abstract class Hamburger extends BaseFood implements PrintMenu{
public String printMesage()
{
return ("--" + this.kind + "汉堡,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
7.KFCFactory.java
package kfc;
public interface KFCfactory {
public Hamburger createHamburger(int num,int kind);
public FrenchFries createFrenchFries(int num,int kind);
public Dessert createDessert(int num,int kind);
public Drink createDrink(int num,int kind);
public Combo createCombo(int num,int kind);
}
8.Menu.java
package kfc;
public class Menu {
public void showsingleFoods(){
System.out.println("Menu");
System.out.println("------------------汉堡类-----------------");
System.out.println("1.新奥尔良鸡腿堡-----------------------15元");
System.out.println("2.劲脆鸡腿堡--------------------------13元");
System.out.println("------------------薯条类-----------------");
System.out.println("1.薯条-------------------------------10元");
System.out.println("------------------饮品类-----------------");
System.out.println("1.可口可乐----------------------------4元");
System.out.println("2.柠檬红茶----------------------------6元");
System.out.println("------------------甜点类-----------------");
System.out.println("1.冰激凌-------------------------------5元");
System.out.println("------------------套餐类-----------------");
System.out.println("1.单人套餐-----------------------------18元");
System.out.println("2.双人套餐------------------------------35元");
}
}
9.OneCombo.java
package kfc;
public class OneCombo extends Combo{
public OneCombo(int num){
this.kind="单人套餐";
this.price=18f;
this.num=num;
}
}
10.OrderFood.java
package kfc;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class OrderFood {
public static void main(String[] args) throws IOException {
Date date1=new Date();
KFCfactory factory_1 = new RealizeKFCfactory();
/** * 创建职员 */
Client customer = new Client(factory_1);
Scanner in =new Scanner(System.in);
Menu menu=new Menu();
menu.showsingleFoods();
System.out.print("\n请点餐:\n");
System.out.print("请输入汉堡种类:");
int a1=in.nextInt();
System.out.print("汉堡个数");
int b1=in.nextInt();
System.out.print("请输入薯条种类:");
int a2=in.nextInt();
System.out.print("薯条个数");
int b2=in.nextInt();
System.out.print("请输入饮品种类:");
int a4=in.nextInt();
System.out.print("饮品数量:");
int b4=in.nextInt();
System.out.print("请输入甜点种类:");
int a5=in.nextInt();
System.out.print("甜点个数:");
int b5=in.nextInt();
System.out.print("请输入套餐种类:");
int a6=in.nextInt();
System.out.print("套餐个数:");
int b6=in.nextInt();
System.out.print("\n------账单如下-----\n");
System.out.println(date1);
double hamhurgMoney = customer.orderHamburgers(b1,a1);
double frenchfriesMoney = customer.orderFrenchFries(b2,a2);
double drinkMoney = customer.orderDrink(b4,a4);
double dessert= customer.orderDessert(b5,a5);
double combomoney=customer.orderCombo(b6,a6);
double sum=hamhurgMoney + drinkMoney+dessert+frenchfriesMoney+ combomoney;
customer.showbill();
System.out.println("总计:" + (sum));
System.out.print("请输入付款金额:");
int a=in.nextInt();
if(a<sum)
{System.out.println("钱数不够呦");
}
else
{
System.out.print("找零:"+(a-sum));}
customer.showbill();
BufferedWriter r=new BufferedWriter(new FileWriter("show.txt",true));
r.write("总计: "+sum);
r.newLine();
r.write("付款:"+a);
r.newLine();
double y=a-sum;
if(y>=0)
{r.write("找零:"+y);}
else{r.write("支付失败");}
r.newLine();
r.flush();
r.close();
in.close();
}
}
11.PrintMenu.java
package kfc;
public interface PrintMenu {
String printMesage();
}
12.RealizeDessert_1.java
package kfc;
public class RealizeDessert_1 extends Dessert{
public RealizeDessert_1(int num)
{
this.kind = "冰激凌";
this.price = 5.0f;
this.num = num;
}
}
13.RealizeDrink_1.java
package kfc;
public class RealizeDrink_1 extends Drink{
public RealizeDrink_1(int num)
{
this.kind = "可口可乐";
this.price = 4.0f;
this.num = num;
}
}
14.RealizeDrink_2.java
package kfc;
public class RealizeDrink_2 extends Drink{
public RealizeDrink_2(int num)
{
this.kind = "柠檬红茶";
this.price = 6.0f;
this.num = num;
}
}
15.RealizeFrenchFries.java
package kfc;
public class RealizeFrenchFries extends FrenchFries{
public RealizeFrenchFries(int num)
{
this.kind = "薯条";
this.price = 10.0f;
this.num = num;
}
}
16.RealizeHamburger_1.java
package kfc;
public class RealizeHamburger_1 extends Hamburger{
public RealizeHamburger_1(int num)
{
this.kind = "新奥尔良烤鸡腿堡";
this.price = 15.0f;
this.num = num;
}
}
17.RealizeHamburger_2.java
package kfc;
public class RealizeHamburger_2 extends Hamburger{
public RealizeHamburger_2(int num)
{
this.kind = "劲脆鸡腿堡";
this.price = 13.0f;
this.num = num;
}
}
18.RealizeKFCfactory.java
package kfc;
public class RealizeKFCfactory implements KFCfactory{
public Hamburger createHamburger(int num,int kind){
if(1==kind)
return new RealizeHamburger_1(num); //新奥尔良烤鸡腿堡
else if(2==kind)
return new RealizeHamburger_2(num); //劲脆鸡腿堡
else
return null;
}
public FrenchFries createFrenchFries(int num,int kind){
if(1==kind)
return new RealizeFrenchFries(num);
else
return null;
}
public Dessert createDessert(int num,int kind){
if(1==kind)
return new RealizeDessert_1(num);
else
return null;
}
public Drink createDrink(int num,int kind){
if(1==kind)
return new RealizeDrink_1(num);
else if(2==kind)
return new RealizeDrink_2(num);
else
return null;
}
public Combo createCombo(int num,int kind){
if(1==kind)
return new OneCombo(num);
else if(2==kind)
return new TwoCombo(num);
else
return null;
}
}
19.TwoCombo.java
package kfc;
public class TwoCombo extends Combo{
public TwoCombo(int num){
this.kind="双人套餐";
this.price=35f;
this.num=num;
}
}
20.BaseFood.java
package kfc;
public class BaseFood {
protected String kind;
protected int num;
protected float price;
public float totalPrice()
{
return this.num * this.price;
}
}
三.类图


四.总结
作业完成基本要求。
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
抽象工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。
这次学习关于Java Io流的知识,也得到了实际应用,有关io流相关知识链接:
https://www.cnblogs.com/x_wukong/p/4679116.html;
作业主要用了工厂方法和抽象工厂模式来实现KFC收费系统,主要思想参考https://www.jb51.net/article/155300.htm;需要改进的功能就是点单,设计的有点麻烦,还需要完善。
本文介绍了一个基于Java的KFC收银系统设计,利用工厂方法和抽象工厂模式实现了餐品结算、找零及打印小票等功能。系统涵盖汉堡、薯条、饮料、甜点和套餐的订购流程。

1399

被折叠的 条评论
为什么被折叠?



