一.题目描述:
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
二.程序源代码:
//餐品接口
public interface Food {
void printInf();//显示所选餐品结算结果
}
//食物信息父类
public class FoodInf {
protected String nam;//食物名称
protected double price;//食物价格
protected int num; //食物数量
public double totalPrice()//餐品总计
{
return num*price;
}
}
import java.io.FileWriter;
import java.io.IOException;
//汉堡包父类
public class Hamburgers extends FoodInf implements Food{
@Override
public void printInf() {
System.out.println("----------------------------------------------------------------------");
System.out.println(" "+nam+" "+num+" "+price+" "+totalPrice());
}
public void Write()/*模拟小票写入文件*/
{
try {
FileWriter bw = new FileWriter("Bill.txt",true);
bw.write("----------------------------------------------------------------------"+"\r\n");
bw.write(" "+nam+" "+num+" "+price+" "+totalPrice()+"\r\n");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
public class Hamburger_1 extends Hamburgers{
public Hamburger_1(int num) {
nam="香辣鸡腿堡";
price=10;
this.num=num;
}
}
public class Hamburger_2 extends Hamburgers{
public Hamburger_2(int num) {
nam="田园鸡腿堡";
price=8;
this.num=num;
}
}
public class Hamburger_3 extends Hamburgers{
public Hamburger_3(int num) {
nam="奶油鸡腿堡";
price=11;
this.num=num;
}
}
import java.io.FileWriter;
import java.io.IOException;
//饮品父类
public class Drinkings extends FoodInf implements Food{
@Override
public void printInf() {
System.out.println("----------------------------------------------------------------------");
System.out.println(" "+nam+" "+num+" "+price+" "+totalPrice());
}
public void Write()/*模拟小票写入文件*/
{
try {
FileWriter bw = new FileWriter("Bill.txt",true);
bw.write("----------------------------------------------------------------------"+"\r\n");
bw.write(" "+nam+" "+num+" "+price+" "+totalPrice()+"\r\n");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
public class Drinking_1 extends Drinkings{
public Drinking_1(int num) {
nam="可乐";
price=5;
this.num=num;
}
}
public class Drinking_2 extends Drinkings{
public Drinking_2(int num) {
nam="奶茶";
price=10;
this.num=num;
}
}
public class Drinking_3 extends Drinkings{
public Drinking_3(int num) {
nam="橙汁";
price=6;
this.num=num;
}
}
import java.io.FileWriter;
import java.io.IOException;
//炸鸡父类
public class Chickens extends FoodInf implements Food{
@Override
public void printInf() {
System.out.println("----------------------------------------------------------------------");
System.out.println(" "+nam+" "+num+" "+price+" "+totalPrice());
}
public void Write()/*模拟小票写入文件*/
{
try {
FileWriter bw = new FileWriter("Bill.txt",true);
bw.write("----------------------------------------------------------------------"+"\r\n");
bw.write(" "+nam+" "+num+" "+price+" "+totalPrice()+"\r\n");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
public class Chicken_1 extends Chickens{
public Chicken_1(int num) {
nam="香辣炸鸡";
price=11;
this.num=num;
}
}
public class Chicken_2 extends Chickens{
public Chicken_2(int num) {
nam="原味炸鸡";
price=12;
this.num=num;
}
}
public class Chicken_3 extends Chickens{
public Chicken_3(int num) {
nam="奶油炸鸡";
price=15;
this.num=num;
}
}
import java.io.FileWriter;
import java.io.IOException;
//套餐父类
public class Combos extends FoodInf implements Food{
protected Hamburgers H;
protected Drinkings D;
protected Chickens C;
@Override
public void printInf() {
System.out.println("----------------------------------------------------------------------");
System.out.println(" "+nam+" "+num+" "+price+" "+totalPrice());
}
public void Write()/*模拟小票写入文件*/
{
try {
FileWriter bw = new FileWriter("Bill.txt",true);
bw.write("----------------------------------------------------------------------"+"\r\n");
bw.write(" "+nam+" "+num+" "+price+" "+totalPrice()+"\r\n");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
public class Combo_1 extends Combos{
public Combo_1(int num) {
H=new Hamburger_1(1);
D=new Drinking_2(1);
C=new Chicken_1(1);
price=24;
nam=H.nam+"+"+D.nam+"+"+C.nam;
this.num=num;
}
}
public class Combo_2 extends Combos{
public Combo_2(int num) {
H=new Hamburger_2(1);
D=new Drinking_1(1);
C=new Chicken_1(1);
price=19;
nam=H.nam+"+"+D.nam+"+"+C.nam;
this.num=num;
}
}
public class Combo_3 extends Combos{
public Combo_3(int num) {
H=new Hamburger_2(1);
D=new Drinking_2(1);
C=new Chicken_1(1);
price=22;
nam=H.nam+"+"+D.nam+"+"+C.nam;
this.num=num;
}
}
//餐品工厂接口
public interface FoodFactory {
Hamburgers creatHamburger(int kind,int num);
Drinkings creatDrinking(int kind,int num);
Chickens creatChicken(int kind,int num);
Combos creatCombo(int kind,int num);
}
//肯德基工厂类
public class KFCFoodFactory implements FoodFactory{
public Hamburgers creatHamburger(int kind,int num) {//创建具体的汉堡包对象
switch(kind) {
case 1:
return new Hamburger_1(num);
case 2:
return new Hamburger_2(num);
default:
return new Hamburger_3(num);
}
}
public Drinkings creatDrinking(int kind,int num) {//创建具体的饮品对象
switch(kind) {
case 1:
return new Drinking_1(num);
case 2:
return new Drinking_2(num);
default:
return new Drinking_3(num);
}
}
public Chickens creatChicken(int kind,int num) {//创建具体的炸鸡对象
switch(kind) {
case 1:
return new Chicken_1(num);
case 2:
return new Chicken_2(num);
default:
return new Chicken_3(num);
}
}
@Override
public Combos creatCombo(int kind, int num) {//创建具体的套餐对象
switch(kind) {
case 1:
return new Combo_1(num);
case 2:
return new Combo_2(num);
default:
return new Combo_3(num);
}
}
}
//点餐类
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Scanner;
public class OrderFoods {
private int[] num=new int[4];//保存几种餐品的数量信息
private int[] kind=new int[4];//保存几种餐品的种类信息
private double total;//应付价格
private double reduce;//减免去的钱
private double money;//支付的钱的面值总和
private double money_1;//找零
private FoodFactory F=new KFCFoodFactory();
class Token{//内部类优惠券类
private final double token=5;
public void useToken() {
reduce=token;
}
}
class TimeDiscount {//内部类时段打折类
private final double dis=0.8;
public boolean isDiscount() {
Calendar calendar=Calendar.getInstance();
int date=calendar.get(Calendar.DATE);
if(date%5==0) {//每逢5的倍数的日子打折
return true;
}else
return false;
}
public void discount() {
boolean Y=isDiscount();
if(Y)
reduce=reduce+total-total*dis;
}
}
public void orderHamburgers() {//创造汉堡包对象并实现相应汉堡包结算信息显示和写入文件
Hamburgers H=F.creatHamburger(kind[0], num[0]);
total=total+H.totalPrice();
H.Write();
H.printInf();
}
public void orderDrinkings() {//创造饮品对象并实现相应饮品结算信息显示和写入文件
Drinkings D=F.creatDrinking(kind[1], num[1]);
total=total+D.totalPrice();
D.Write();
D.printInf();
}
public void orderChickens() {//创造炸鸡对象并实现相应炸鸡结算信息显示和写入文件
Chickens C=F.creatChicken(kind[2], num[2]);
total=total+C.totalPrice();
C.Write();
C.printInf();
}
public void orderCombos() {//创造套餐对象并实现相应套餐结算信息显示和写入文件
Combos Co=F.creatCombo(kind[3], num[3]);
total=total+Co.totalPrice();
Co.Write();
Co.printInf();
}
public void set1(int num,int kind) {//为保存所选汉堡包的数量和种类的元素赋值
this.num[0]=num;
this.kind[0]=kind;
}
public void set2(int num,int kind) {//为保存所选饮品的数量和种类的元素赋值
this.num[1]=num;
this.kind[1]=kind;
}
public void set3(int num,int kind) {//为保存所选炸鸡的数量和种类的元素赋值
this.num[2]=num;
this.kind[2]=kind;
}
public void set4(int num,int kind) {//为保存所选套餐的数量和种类的元素赋值
this.num[3]=num;
this.kind[3]=kind;
}
public void Write()/*写入顶栏*/
{
try {
FileWriter bw = new FileWriter("Bill.txt",true);
bw.write(" 餐品名称 餐品数量 单价 总计"+"\r\n");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public void Write_1() {//写入应付和实付信息
try {
FileWriter bw = new FileWriter("Bill.txt",true);
bw.write("应付:"+total+"\r\n");
bw.write("实付:"+(total-reduce)+"\r\n");
bw.write("支付的钱的面值总和:"+money+"\r\n");
bw.write("找零:"+money_1+"\r\n");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public void showList() {//菜单
System.out.println("菜单:");
System.out.println("A.汉堡包");
System.out.println("1--------------香辣鸡腿堡------10.0");
System.out.println("2--------------田园鸡腿堡-------8.0");
System.out.println("3--------------奶油鸡腿堡------11.0");
System.out.println("B.饮料");
System.out.println("1--------------可乐-------------5.0");
System.out.println("2--------------奶茶------------10.0");
System.out.println("3--------------橙汁-------------6.0");
System.out.println("C.炸鸡");
System.out.println("1--------------香辣炸鸡--------11.0");
System.out.println("2--------------原味炸鸡--------12.0");
System.out.println("3--------------奶油炸鸡--------15.0");
System.out.println("D.超值套餐");
System.out.println("1--------------超值套餐A-------31.0");
System.out.println("2--------------超值套餐B-------24.0");
System.out.println("3--------------超值套餐C-------29.0");
}
public void order() {//点餐
int num;
int kind;
Scanner sc=new Scanner(System.in);
showList();
System.out.println("请依次按照菜单选择您的餐品(非菜单上的数字即为不选此类餐品):");
System.out.println("请选择汉堡包的种类:");
kind=sc.nextInt();
if(kind==1||kind==2||kind==3) {
System.out.println("请选择该汉堡包的数量:");
num=sc.nextInt();
set1(num, kind);
}
System.out.println("请选择饮品的种类:");
kind=sc.nextInt();
if(kind==1||kind==2||kind==3) {
System.out.println("请选择该饮品的数量:");
num=sc.nextInt();
set2(num, kind);
}
System.out.println("请选择炸鸡的种类:");
kind=sc.nextInt();
if(kind==1||kind==2||kind==3) {
System.out.println("请选择该炸鸡的数量:");
num=sc.nextInt();
set3(num, kind);
}
System.out.println("请选择套餐的种类:");
kind=sc.nextInt();
if(kind==1||kind==2||kind==3) {
System.out.println("请选择该套餐的数量:");
num=sc.nextInt();
set4(num, kind);
}
showResult();
System.out.println("您是否要使用优惠券?是的话按1,不是则按2");
int k;
k=sc.nextInt();
if(k==1) {
Token T=new Token();
T.useToken();
}
TimeDiscount Ti=new TimeDiscount();
Ti.discount();
System.out.println("应付:"+total);
System.out.println("实付:"+(total-reduce));
while(true) {
System.out.println("请输入您选择支付的钱的面值总和");
money=sc.nextInt();
if(money<total-reduce) {
System.out.println("您所选择的钱的面值过小,请重新选择");
}
else
{
money_1=money-(total-reduce);
break;
}
}
System.out.println("支付的钱的面值总和:"+money);
System.out.println("找零:"+money_1);
Write_1();
sc.close();
}
public void showResult() {//显示点餐信息并写入文件
Write();
System.out.println(" 餐品名称 餐品数量 单价 总计");
if(kind[0]!=0) {
orderHamburgers();
}
if(kind[1]!=0) {
orderDrinkings();
}
if(kind[2]!=0) {
orderChickens();
}
if(kind[3]!=0) {
orderCombos();
}
}
}
//客户端类
public class Client {
public static void main(String[] args) {
OrderFoods od=new OrderFoods();
od.order();
}
}