一.题目及需求分析
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
基本要求:
1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
2.实现功能测试代码,确保程序的健壮性。
3.画出使用的设计模式图。
提高要求:
1.实现可视化界面(使用MFC)。
2.实现会员储值卡功能,完成储值卡消费。
3.实现当天营业额和餐品销量计算和统计,用数据库记录。
二.类图
三.结果
1.初始界面
2.选择食物
3.运行结果
4.在文件中查看
四.总结
这一章的作业主要是让我们学会用设计模式来解决实际问题。在KFC收银系统中,我主要实现了顾客的点餐,会员折扣,打印小票以及把小票信息存入文件中去,主要运用了简单工厂模式以及抽象工厂模式。
在这个样例中,肯德基店就是一个具体的工厂,我们就需要一个抽象工厂,在抽象工厂中指明生产各种抽象食物的方法,如生产汉堡、鸡翅等,肯德基店就需要实现这个抽象工厂,生产具体的食品,如生产麻辣鸡腿汉堡、生产奥尔良鸡翅等。当然,这也是一层一层的,比如不同种类的汉堡,他们都有一个共同的父类,就是汉堡。
因为能力有限,很多功能还没有实现,最重要的一个就是界面了,我下去也会再继续探索,慢慢来实现它。
五.源代码
//建立一个KFC的工厂模型
package factory_model;
//抽象食物基础类
public abstract class AbstractBaseFood {
// 食物类别
protected String kind;
// 食物数量
protected int num;
// 食物价格
protected float price;
// 合计
public float TotalPrice()
{
return this.num * this.price;
}
}
package factory_model;
//种类1:汉堡类
public abstract class Hamburg extends AbstractBaseFood implements IFood{
//打印购买食物的小票
public void Message()
{
System.out.println(this.kind+"汉堡\t单价:"+this.price + "\t数量:"+this.num + "\t合计:" + this.TotalPrice());
}
}
package factory_model;
public abstract class FrenchFries extends AbstractBaseFood implements IFood
{
public void Message()
{
System.out.println(this.kind+"薯条\t单价:"+this.price+" "+"\t数量:"+this.num+ "\t合计:" +this.TotalPrice());
}
}
package factory_model;
public abstract class Beverage extends AbstractBaseFood implements IFood
{
public void Message()
{
System.out.println(this.kind+"饮料\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.TotalPrice());
}
}
package factory_model;
public abstract class ChickenWings extends AbstractBaseFood implements IFood
{
public void Message()
{
System.out.println(this.kind + "鸡翅\t单价:" +this.price +" "+"\t数量:" +this.num + "\t合计:" + this.TotalPrice());
}
}
具体类
package factory_model;
public class Orleans_burger extends Hamburg{
public Orleans_burger(int num)
{
this.kind = "奥尔良";
this.price = 14.0f;
this.num = num;
}
}
package factory_model;
public class Super_Hamburg extends Hamburg {
public Super_Hamburg(int num)
{
this.kind = "超级大";
this.price = 14.0f;
this.num = num;
}
}
package factory_model;
import factory_model.ChickenWings;
public class SH_ChickenWings extends ChickenWings
{
public SH_ChickenWings(int num)
{
this.kind = "麻辣";
this.price = 2.5f;
this.num = num;
}
}
package factory_model;
import factory_model.FrenchFries;
public class Big_FrenchFries extends FrenchFries{
public Big_FrenchFries(int num)
{
this.kind = "大份";
this.price = 8.0f;
this.num = num;
}
}
package factory_model;
import factory_model.Beverage;
public class Cola extends Beverage{
public Cola(int num)
{
this.kind = "可乐";
this.price = 10.0f;
this.num = num;
}
}
package factory_model;
import factory_model.Beverage;
public class Orange_Juice extends Beverage{
public Orange_Juice(int num)
{
this.kind = "橙汁";
this.price = 7.0f;
this.num = num;
}
}
package factory_model;
import factory_model.Beverage;
public class Sprite extends Beverage{
public Sprite(int num)
{
this.kind = "雪碧";
this.price = 6.0f;
this.num = num;
}
}
IFood接口
package factory_model;
public interface IFood {
/**
* 打印输出食物信息
*/
void Message();
}
package factory_model;
import factory_model.Beverage;
import factory_model.ChickenWings;
import factory_model.FrenchFries;
import factory_model.Hamburg;
public interface IKfcFactory {
// 生产可乐
public Beverage Create_Cola(int num);
// 生产橙汁
public Beverage Create_Orange_Juice(int num);
// 生产大份薯条
public FrenchFries CreateBig_FrenchFries(int num);
// 生产雪碧
public Beverage Create_Sprite(int num);
// 生产麻辣鸡翅
public ChickenWings Create_SH_ChickenWings(int num);
// 生产麻辣风味鸡腿汉堡
public Hamburg Create_Super_Hamburg(int num);
// 生产奥尔良汉堡
public Hamburg Create_Orleans_burger(int num);
}
package factory_model;
public class Menu {
public void menu(){
System.out.println(" 欢迎来到王俊凯KFC点餐系统! ");
System.out.println("请选择您要的食物数量:(单位:元) ");
System.out.println("超级大汉堡:14.0 ");
System.out.println("奥尔良汉堡:15.0 ");
System.out.println("麻辣鸡翅:2.5 ");
System.out.println("大份薯条:8.0 ");
System.out.println("可乐:8.0 ");
System.out.println("橙汁:10.0 ");
System.out.println("雪碧:6.0 ");
}
}
package factory_model;
import java.util.Scanner;
import java.lang.management.ManagementFactory;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.ResourceBundle;
import factory_model.Customer;
import factory_model.ChinaKfcFactory;
import factory_model.IKfcFactory;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.io.PrintWriter;
public class KFCAPP
{
public static void main (String[] args)throws IOException
{
IKfcFactory kfcFactory = new ChinaKfcFactory();
Menu m=new Menu();
m.menu();
Customer customer = new Customer(kfcFactory);
//超级大汉堡
System.out.println("请输入您要的超级大汉堡的数量:");
Scanner input=new Scanner(System.in);
int i=input.nextInt();
//奥尔良汉堡
System.out.println("请输入您要的奥尔良汉堡的数量:");
Scanner input11=new Scanner(System.in);
int k=input11.nextInt();
// 麻辣鸡翅
System.out.println("请输入您要的的麻辣鸡翅数量:");
Scanner input1=new Scanner(System.in);
int j=input1.nextInt();
//大份薯条
System.out.println("请输入您要的的薯条的数量:");
Scanner input3=new Scanner(System.in);
int p=input3.nextInt();
//可乐
System.out.println("请输入您要的可乐的数量:");
Scanner input4=new Scanner(System.in);
int q=input4.nextInt();
//雪碧
System.out.println("请输入您要的雪碧的数量:");
Scanner input5=new Scanner(System.in);
int r=input4.nextInt();
//橙汁
System.out.println("请输入您要的橙汁的数量:");
Scanner input6=new Scanner(System.in);
int s=input6.nextInt();
System.out.println("您是否有会员卡?(回复 1:有 2:没有)");
Scanner input0=new Scanner(System.in);
int judge=input0.nextInt();
double total;
if(judge==1){
System.out.println("------------欢迎光临王俊凯的KFC--------------");
float hamburg1=customer.Order_Super_Hamburg(i);
float hamburg2=customer.Order_Orleans_burger(k);
float chickenwings=customer.Order_SH_ChickenWings(j);
float frenchfries = customer.OrderBig_FrenchFries(p);
float cola=customer.Order_Cola(q);
float sprite=customer.Order_Sprite(q);
float orange=customer.Order_Orange_Juice(s);
total=hamburg1+hamburg2+chickenwings+frenchfries+sprite+cola+orange;
System.out.println("订单时间:2018/09/21/08:06");
System.out.println("当前收银员:TFBOYS的四叶草");
System.out.println("原价:"+total);
double cheap=total*0.8;
System.out.println("尊贵的螃蟹会员,您将优惠八折!");
System.out.println("您需要支付的费用:"+cheap);
System.out.println("总计:"+cheap);
System.out.println("谢谢您的光临,欢迎下次再来!");
}
else{
System.out.println("------------欢迎光临王俊凯的KFC--------------");
float hamburg1=customer.Order_Super_Hamburg(i);
float hamburg2=customer.Order_Orleans_burger(k);
float chickenwings=customer.Order_SH_ChickenWings(j);
float frenchfries = customer.OrderBig_FrenchFries(p);
float cola=customer.Order_Cola(q);
float sprite=customer.Order_Sprite(q);
float orange=customer.Order_Orange_Juice(s);
total=hamburg1+hamburg2+chickenwings+frenchfries+sprite+cola+orange;
System.out.println("订单时间:2018/09/21/08:06");
System.out.println("当前收银员:TFBOYS的四叶草");
System.out.println("总计:"+total);
System.out.println("谢谢您的光临,欢迎下次再来!");
}
File fp = new File("C:\\Users\\asus\\Desktop\\7.txt");
PrintWriter pw =new PrintWriter(fp);
pw.println();
pw.write(" 欢迎光临王俊凯的KFC ");
pw.println();
pw.write("订餐时间:"+"2018/09/21/08:06");
pw.println();
pw.write("\t名称"+"\t单价"+"\t数量"+"\t合计");
pw.println();
pw.write("总计:"+total);
pw.println();
pw.write("当前收银员:TFBOYS的四叶草");
pw.println();
pw.write("欢迎下次光临!");
pw.println();
pw.close();
}
}