📄 machinestate.cpp
字号:
#include "stdafx.h"
#include "MachineState.h"
#include "DrinkMachine.h"
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
CNoCoinState::CNoCoinState(CDrinkMachine* drinkMachine)
{
m_DrinkMachine = drinkMachine;
}
void CNoCoinState::InsertCoin(double dCoinValue)
{
cout <<"CNoCoinState::InsertCoin"<<endl;
m_DrinkMachine->m_dNumberCoin += dCoinValue; //塞入钱
m_DrinkMachine->SetState(m_DrinkMachine->GetHaveEnoughCoinState());
m_DrinkMachine->SetSelectLights(); //每投一个硬币进去,就设置一下灯
}
double CNoCoinState::EjectCoin()
{
m_DrinkMachine->SetBlance(0);
m_DrinkMachine->SetInfoLED("你还没有塞过钱,没钱可退");
cout << "你还没有塞过钱,没钱可退!" <<endl; //到时候,个
return 0;
}
void CNoCoinState::SelectDrinkButton(int nkindNum)
{
m_DrinkMachine->SetInfoLED("没塞过钱,想喝请投币");
//cout << "没塞过钱,想喝请投币!" <<endl;
}
void CNoCoinState::DispenseDrink(int nkindNum)
{
cout << "没到钱,我不能发你饮料!" <<endl;
}
//////////////////////////////////////////////////////////////////////////
CHaveCoinState::CHaveCoinState(CDrinkMachine* drinkMachine)
{
m_DrinkMachine = drinkMachine;
}
void CHaveCoinState::InsertCoin(double dCoinValue)
{
m_DrinkMachine->m_dNumberCoin += dCoinValue;
m_DrinkMachine->SetSelectLights(); //每投一个硬币进去,就设置一下灯
}
double CHaveCoinState::EjectCoin()
{
m_DrinkMachine->SetState(m_DrinkMachine->GetNotEnoughCoinState());
double EjectCoinNumber = m_DrinkMachine->m_dNumberCoin;
m_DrinkMachine->SetBlance(m_DrinkMachine->m_dNumberCoin);
m_DrinkMachine->m_dNumberCoin = 0; //钱退完了,清零
m_DrinkMachine->SetInfoLED("别忘了取走钱!");
m_DrinkMachine->TurnOffAllSelectLights();
return EjectCoinNumber; //返回退了多少钱
}
void CHaveCoinState::SelectDrinkButton(int nkindNum)
{
switch(nkindNum)
{
case 0:
if (m_DrinkMachine->m_dNumberCoin - m_DrinkMachine->m_drinkStorage[0]->GetDrinkPrice() >= 0)
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldState());
m_DrinkMachine->DispenseDrink(nkindNum);
}
else
{
m_DrinkMachine->SetInfoLED("钱不够,继续投币");
}
break;
case 1:
if (m_DrinkMachine->m_dNumberCoin - m_DrinkMachine->m_drinkStorage[1]->GetDrinkPrice() >= 0)
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldState());
m_DrinkMachine->DispenseDrink(nkindNum);
}
else
{
m_DrinkMachine->SetInfoLED("钱不够,继续投币");
}
break;
case 2:
if (m_DrinkMachine->m_dNumberCoin - m_DrinkMachine->m_drinkStorage[2]->GetDrinkPrice() >= 0)
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldState());
m_DrinkMachine->DispenseDrink(nkindNum);
}
else
{
m_DrinkMachine->SetInfoLED("钱不够,继续投币");
}
break;
case 3:
if (m_DrinkMachine->m_dNumberCoin - m_DrinkMachine->m_drinkStorage[3]->GetDrinkPrice() >= 0)
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldState());
m_DrinkMachine->DispenseDrink(nkindNum);
}
else
{
m_DrinkMachine->SetInfoLED("钱不够,继续投币");
}
break;
case 4:
if (m_DrinkMachine->m_dNumberCoin - m_DrinkMachine->m_drinkStorage[4]->GetDrinkPrice() >= 0)
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldState());
m_DrinkMachine->DispenseDrink(nkindNum);
}
else
{
m_DrinkMachine->SetInfoLED("钱不够,继续投币");
}
break;
default:
break;
}
}
void CHaveCoinState::DispenseDrink(int nkindNum)
{
}
//////////////////////////////////////////////////////////////////////////
//出售的状态
CSoldState::CSoldState(CDrinkMachine* drinkMachine)
{
m_DrinkMachine = drinkMachine;
}
void CSoldState::InsertCoin(double dCoinValue)
{
cout << "我们已经为你准备了你要的饮料"<<endl;
}
double CSoldState::EjectCoin()
{
m_DrinkMachine->SetInfoLED("你已经按了选择键,现在不能退钱你,交易结束,金额自动找回");
cout << "你已经按了选择键,现在不能退钱你,交易结束,金额自动找回"<<endl;
return 0;
}
void CSoldState::SelectDrinkButton(int nkindNum)
{
cout << "按第二次可不会给你另外一个饮料给你!"<< endl;
}
void CSoldState::DispenseDrink(int nkindNum)
{
switch(nkindNum)
{
case 0:
if (m_DrinkMachine->m_drinkStorage[0]->GetDrinkCount() > 0)
{
int tempCout = m_DrinkMachine->m_drinkStorage[0]->GetDrinkCount();
m_DrinkMachine->m_dNumberCoin -= m_DrinkMachine->m_drinkStorage[0]->GetDrinkPrice();
m_DrinkMachine->m_drinkStorage[0]->SetDrinkCount(tempCout - 1);
m_DrinkMachine->SetSellOverLights();
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetBuyedDrinkName(m_DrinkMachine->m_drinkStorage[0]->GetDrinkName().c_str());
}
else
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetSellOverLights();
}
break;
case 1:
if (m_DrinkMachine->m_drinkStorage[1]->GetDrinkCount() > 0)
{
int tempCout = m_DrinkMachine->m_drinkStorage[1]->GetDrinkCount();
m_DrinkMachine->m_dNumberCoin -= m_DrinkMachine->m_drinkStorage[1]->GetDrinkPrice();
m_DrinkMachine->m_drinkStorage[1]->SetDrinkCount(tempCout - 1);
m_DrinkMachine->SetSellOverLights();
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetBuyedDrinkName(m_DrinkMachine->m_drinkStorage[1]->GetDrinkName().c_str());
}
else
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetSellOverLights();
}
break;
case 2:
if (m_DrinkMachine->m_drinkStorage[2]->GetDrinkCount() > 0)
{
int tempCout = m_DrinkMachine->m_drinkStorage[2]->GetDrinkCount();
m_DrinkMachine->m_dNumberCoin -= m_DrinkMachine->m_drinkStorage[2]->GetDrinkPrice();
m_DrinkMachine->m_drinkStorage[2]->SetDrinkCount(tempCout - 1);
m_DrinkMachine->SetSellOverLights();
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetBuyedDrinkName(m_DrinkMachine->m_drinkStorage[2]->GetDrinkName().c_str());
}
else
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetSellOverLights();
}
break;
case 3:
if (m_DrinkMachine->m_drinkStorage[3]->GetDrinkCount() > 0)
{
int tempCout = m_DrinkMachine->m_drinkStorage[3]->GetDrinkCount();
m_DrinkMachine->m_dNumberCoin -= m_DrinkMachine->m_drinkStorage[3]->GetDrinkPrice();
m_DrinkMachine->m_drinkStorage[3]->SetDrinkCount(tempCout - 1);
m_DrinkMachine->SetSellOverLights();
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetBuyedDrinkName(m_DrinkMachine->m_drinkStorage[3]->GetDrinkName().c_str());
}
else
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetSellOverLights();
}
break;
case 4:
if (m_DrinkMachine->m_drinkStorage[4]->GetDrinkCount() > 0)
{
int tempCout = m_DrinkMachine->m_drinkStorage[4]->GetDrinkCount();
m_DrinkMachine->m_dNumberCoin -= m_DrinkMachine->m_drinkStorage[4]->GetDrinkPrice();
m_DrinkMachine->m_drinkStorage[4]->SetDrinkCount(tempCout - 1);
m_DrinkMachine->SetSellOverLights();
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetBuyedDrinkName(m_DrinkMachine->m_drinkStorage[4]->GetDrinkName().c_str());
}
else
{
m_DrinkMachine->SetState(m_DrinkMachine->GetSoldOutState());
m_DrinkMachine->EjectCoin();
m_DrinkMachine->SetSellOverLights();
}
break;
default:
break;
}
}
//////////////////////////////////////////////////////////////////////////
//售完的状态
CSoldOutState::CSoldOutState(CDrinkMachine* drinkMachine)
{
m_DrinkMachine = drinkMachine;
}
void CSoldOutState::InsertCoin(double dCoinValue)
{
}
double CSoldOutState::EjectCoin()
{
cout << m_DrinkMachine->m_dNumberCoin;
double EjectCoinNumber = m_DrinkMachine->m_dNumberCoin;
m_DrinkMachine->SetBlance(m_DrinkMachine->m_dNumberCoin);
m_DrinkMachine->m_dNumberCoin = 0; //钱退完了,清零
m_DrinkMachine->SetState(m_DrinkMachine->GetNotEnoughCoinState());
m_DrinkMachine->SetInfoLED("别忘了取回剩下的钱!");
m_DrinkMachine->TurnOffAllSelectLights();
return EjectCoinNumber;
}
void CSoldOutState::SelectDrinkButton(int nkindNum)
{
}
void CSoldOutState::DispenseDrink(int nkindNum)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -