同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
基本要求:
1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
2.实现功能测试代码,确保程序的健壮性。
3.画出使用的设计模式图。
源代码如下:
抽象食物类:
public interface Food {
public int Price = 0;
public int print();
public int getPrice();
}
具体食物类:
汉堡:
public class Hanburger implements Food{
public int Prise=20;
public int Num;
public void setNum(int num){
this.Num=num;
}
public int getPrice(){
return Prise;
}
public int print(){
System.out.println("汉堡总计:"+this.Prise*this.Num);
return this.Prise*this.Num;
}
}
薯条:
public class FrenchFires implements Food{
public int Prise=15;
public int Num;
public void setNum(int num){
this.Num=num;
}
public int getPrice(){
return Prise;
}
public int print(){
System.out.println("薯条总计:"+this.Prise*this.Num);
return this.Num*this.Prise;
}
}
炸鸡:
public class Chicken implements Food{
public int Prise=40;
public int Num;
public void setNum(int num){
this.Num=num;
}
public int getPrice(){
return Prise;
}
public int print(){
System.out.println("炸鸡总计:"+this.Num*this.Prise);
return this.Num*this.Prise;
}
}
可乐:
public class Cola implements Food{
public int Prise=5;
public int Num;
public void setNum(int num){
this.Num=num;
}
public int getPrice(){
return Prise;
}
public int print(){
System.out.println("可乐总计:"+this.Num*this.Prise);
return this.Num*this.Prise;
}
}
咖啡:
public class Coffee implements Food{
public int Prise=10;
public int Num;
public void setNum(int num){
this.Num=num;
}
public int getPrice(){
return Prise;
}
public int print(){
System.out.println("可乐总计:"+this.Num*this.Prise);
return this.Num*this.Prise;
}
}
抽象工厂:
public interface Factory {
public Food Create();
}
具体工厂:
汉堡工厂:
public class HamburgerFactory implements Factory{
public Food Create(){
Hanburger hanburger=new Hanburger();
return hanburger;
}
}
薯条工厂:
public class FrenchFiresFactory implements Factory{
public Food Create(){
return new FrenchFires();
}
}
炸鸡工厂:
public class ChickenFactory implements Factory{
public Food Create(){
return new Chicken();
}
}
可乐工厂:
public class ColaFactory implements Factory{
public Food Create(){
return new Cola();
}
}
咖啡工厂:
public interface Factory {
public Food Create();
}
顾客测试类:
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import java.lang.Exception;
/**
*
* 简单KFC点餐系统实现
*
*/
public class Custom {
int beforemoney,discount,aftermoney; //beforemoney:实付价钱 discount:折扣 aftermoney:折扣后应付价钱
Scanner sc=new Scanner(System.in); //输入
Date d=new Date();
SimpleDateFormat day=new SimpleDateFormat(); //时间函数
ArrayList<String> menu=new ArrayList<>(); //单点菜单
ArrayList<String> taocan=new ArrayList<>(); //套餐菜单
ArrayList<Integer> arrayList=new ArrayList<>(); //计算顾客点餐数量
Food hanburger=new HamburgerFactory().Create();
Food frenchFires=new FrenchFiresFactory().Create();
Food chicken=new ChickenFactory().Create();
Food cola=new ColaFactory().Create();
Food coffee=new CoffeeFactory().Create();
public int Discount(int sum){ //优惠券折扣
System.out.println("请选择您的优惠券折扣!(1~10)");
discount=sc.nextInt();
System.out.println("您本次应付价钱为:"+discount*sum/10);
System.out.println("您实付价钱为:");
beforemoney=sc.nextInt();
System.out.println("给您找零:"+(beforemoney-discount*sum/10));
aftermoney=discount*sum/10;
return discount*sum;
}
public void Taocan(){ //套餐列表
System.out.println("请选择您的套餐: 1套餐一!2套餐二!3套餐三!");
arrayList.add(0);
arrayList.add(0);
arrayList.add(0);
arrayList.add(0);
arrayList.add(0);
int c2=sc.nextInt();
switch (c2){
case 1: {
Discount(hanburger.getPrice()*1+frenchFires.getPrice()*1+cola.getPrice()*1);
arrayList.set(0,1);
arrayList.set(1,1);
arrayList.set(2,0);
arrayList.set(3,1);
arrayList.set(4,0);
System.out.println("谢谢光临!");break;
}
case 2:{
Discount(chicken.getPrice()*1+cola.getPrice()*1);
arrayList.set(0,0);
arrayList.set(1,0);
arrayList.set(2,1);
arrayList.set(3,1);
arrayList.set(4,0);
System.out.println("谢谢光临!");break;
}
case 3:{
Discount(hanburger.getPrice()*1+frenchFires.getPrice()*1+coffee.getPrice()*1);
arrayList.set(0,1);
arrayList.set(1,0);
arrayList.set(2,0);
arrayList.set(3,0);
arrayList.set(4,1);
System.out.println("谢谢光临!");break;}
}
}
public void Single(){ //单点
for (String n:menu) {
System.out.println(n);
}
arrayList.add(0);
arrayList.add(0);
arrayList.add(0);
arrayList.add(0);
arrayList.add(0);
System.out.println("请选择您的食物!");
System.out.println("1汉堡!2薯条!3炸鸡!4可乐!5咖啡!(退出点餐请输入0)");
int c4=sc.nextInt();
for(int i=0;i<5;i++) {
if (c4 == 1) {
System.out.println("请选择您想要的汉堡数量(不需要请选0个)!");
arrayList.set(0,sc.nextInt());
System.out.println("请输入您想要的食物编号!(退出请按0)");
c4=sc.nextInt();
continue;
}
if (c4 == 2) {
System.out.println("请选择您想要的薯条数量不需要请选0个)!");
arrayList.set(1,sc.nextInt());
System.out.println("请输入您想要的食物编号!(退出请按0)");
c4=sc.nextInt();
continue;
}
if (c4 == 3) {
System.out.println("请选择您想要的炸鸡数量不需要请选0个)!");
arrayList.set(2,sc.nextInt());
System.out.println("请输入您想要的食物编号!(退出请按0)");
c4=sc.nextInt();
continue;
}
if (c4 == 4) {
System.out.println("请选择您想要的可乐数量不需要请选0个)!");
arrayList.set(3,sc.nextInt());
System.out.println("请输入您想要的食物编号!(退出请按0)");
c4=sc.nextInt();
continue;
}
if (c4 == 5) {
System.out.println("请选择您想要的咖啡数量不需要请选0个)!");
arrayList.set(4,sc.nextInt());
System.out.println("请输入您想要的食物编号!(退出请按0)");
c4=sc.nextInt();
continue;
}
if (c4 == 0) {
break;
}
}
int c5 = hanburger.getPrice() * arrayList.get(0);
int c6 = frenchFires.getPrice() * arrayList.get(1);
int c7 = chicken.getPrice() * arrayList.get(2);
int c8 = cola.getPrice() * arrayList.get(3);
int c9 = coffee.getPrice() * arrayList.get(4);
Discount(c5 + c6 + c7 + c8 + c9);
}
public void Menu(){ //菜单列表
menu.add("汉堡 单价:20");
menu.add("薯条 单价:15");
menu.add("炸鸡 单价:40");
menu.add("可乐 单价:5");
menu.add("咖啡 单价:10");
taocan.add("套餐一!(汉堡+薯条+可乐 总计:40");
taocan.add("套餐二!(炸鸡+可乐) 总计:45");
taocan.add("套餐三!(汉堡+薯条+咖啡) 总计:45");
}
public void Select(){ //顾客选择
Menu();
System.out.println("欢迎光临!");
System.out.println("我们菜单有:");
for (String n:menu) {
System.out.println(n);
}
System.out.println("我们的套餐有:");
for(String n:taocan){
System.out.println(n);
}
System.out.println("请开始您的点单!");
System.out.println("1套餐!2单点!");
int c1=sc.nextInt();
if(c1==1){Taocan();}
if(c1==2){ Single();}
try {
Printing();
} catch (Exception e) {
e.printStackTrace();
}
}
public void Printing()throws Exception{
int a1=arrayList.get(0)*20;
int a2=arrayList.get(1)*15;
int a3=arrayList.get(2)*40;
int a4=arrayList.get(3)*5;
int a5=arrayList.get(4)*10;
int a6=a1+a2+a3+a4+a5;
FileWriter fw=new FileWriter("小票.txt");
fw.write("欢迎光临肯德基:"+"\r\n");
fw.write("------------------------------"+"\r\n");
fw.write("当前订单产生时间为:"+day.format(d)+"\r\n");
fw.write("您共点汉堡:"+arrayList.get(0)+"个"+"\t"+"应付"+(a1)+"元"+"\r\n");
fw.write("您共点薯条:"+arrayList.get(1)+"个"+"\t"+"应付"+(a2)+"元"+"\r\n");
fw.write("您共点炸鸡:"+arrayList.get(2)+"个"+"\t"+"应付"+(a3)+"元"+"\r\n");
fw.write("您共点可乐:"+arrayList.get(3)+"瓶"+"\t"+"应付"+(a4)+"元"+"\r\n");
fw.write("您共点咖啡:"+arrayList.get(4)+"瓶"+"\t"+"应付"+(a5)+"元"+"\r\n");
fw.write("您拥有:"+discount+"折优惠券"+"\r\n");
fw.write("折扣后应付价钱:"+aftermoney+"\r\n");
fw.write("实付价钱:"+beforemoney+"\r\n");
fw.write("找零:"+(beforemoney-aftermoney)+"\r\n");
fw.write("------------------------------"+"\r\n");
fw.write("谢谢惠顾!期待您的再次光临!"+"\r\n");
fw.close();
}
public static void main(String[] args) {
Custom custom=new Custom();
custom.Select();
}
}
以上。