⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 machinestate.cpp

📁 饮料自动售货机
💻 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 + -