No older revisions available
No older revisions available
나름대로 고쳐본 소스 ¶
~cpp
#include <iostream>
using namespace std;
struct drink
{
char * name;
int price, amount;
};
class VendingMachine
{
private:
int _money;
int _selectMoney;
int _insertAmount;
int _maxNum;
drink s_drink[5];
public:
VendingMachine();
void insertMoney();
void buyDrink();
void takeBackMoney();
void insertDrink();
void showMainMenu();
void showDrinkMenu();
bool isMoney(int arg);
bool isBuyableDrink(int arg);
bool isSelectableDrink(int arg);
};
VendingMachine::VendingMachine()
{
_money = 0;
_maxNum = 5;
char * name[] = {"coke","juice","tea","cofee","milk"};
int price[] = {400,600,500,450,350};
for(int i=0;i<_maxNum;i++)
{
s_drink[i].name = name[i];
s_drink[i].price = price[i];
s_drink[i].amount = 10;
}
}
void VendingMachine::insertMoney()
{
int tempInsertMoney = 0;
cout << "돈을 넣으세요. 10, 50, 100, 500, 1000만 가능 : ";
cin >> tempInsertMoney;
if(isMoney(tempInsertMoney))
_money += tempInsertMoney;
else
cout << "10, 50, 100, 500, 1000만 가능합니다. 다시 시작해주세요\n";
cout << _money << "원을 넣었습니다\n";
}
void VendingMachine::buyDrink()
{
int selectBuyDrink;
showDrinkMenu();
cout << "사실 음료수를 골라 주세요 ";
cin >> selectBuyDrink;
if(isSelectableDrink(selectBuyDrink))
{
if(isBuyableDrink(selectBuyDrink))
{
s_drink[selectBuyDrink - 1].amount--;
_money -= s_drink[selectBuyDrink - 1].price;
}
else
cout << "잔액이 부족하거나 수량이 부족해요\n";
}
cout << _money << "원이 남았어요\n";
}
void VendingMachine::takeBackMoney()
{
cout << "거스름돈" << _money << "원을 돌려드립니다\n";
_money = 0;
}
void VendingMachine::insertDrink()
{
int selectInsertDrink;
for(int i = 0 ; i < _maxNum ; i++)
cout << i + 1 << "." << s_drink[i].name << "\t" << s_drink[i].amount << "\n";
cout << "채우길 원하는 음료수를 선택하세요 : ";
cin >> selectInsertDrink;
cout << "채우길 원하는 음료수 수량을 입력해주세요 : ";
cin >> _insertAmount;
if(isSelectableDrink(selectInsertDrink))
s_drink[selectInsertDrink - 1].amount += _insertAmount;
cout << "음료수를 채웠습니다\n";
showDrinkMenu();
}
void VendingMachine::showMainMenu()
{
cout << "\n자판기 입니다\n";
cout << "1.돈을 넣는디\n";
cout << "2.물건을 산다\n";
cout << "3.돈을 거술러 받는다\n";
cout << "4.음료수를 채운다\n";
cout << "0.종료한다\n";
cout << "메뉴를 선택하세요 : ";
}
void VendingMachine::showDrinkMenu()
{
cout << "음료수\t\t가격\t수량\n";
cout << "------------------------------------\n";
for(int i = 0 ; i < _maxNum ; i++)
{
cout << i + 1 << "." << s_drink[i].name << "\t\t";
cout << s_drink[i].price << "\t" << s_drink[i].amount << "\n";
}
cout << "\n현재 " << _money << "원이 있어요\n";
}
bool VendingMachine::isMoney(int arg)
{
if(arg == 10 || arg == 50 || arg == 100 || arg == 500 || arg == 1000)
return true;
else
return false;
}
bool VendingMachine::isBuyableDrink(int arg)
{
if((_money - s_drink[arg - 1].price) >= 0 && s_drink[arg - 1].amount >= 1)
return true;
else
return false;
}
bool VendingMachine::isSelectableDrink(int arg)
{
if(arg > 0 && arg < 6)
return true;
else
return false;
}
int main()
{
VendingMachine vendingMachine;
int choice = -1;
while(choice != 0)
{
vendingMachine.showMainMenu();
cin >> choice;
if(choice >= 0 && choice <= 4)
{
switch(choice)
{
case 1:
vendingMachine.insertMoney();
break;
case 2:
vendingMachine.buyDrink();
break;
case 3:
vendingMachine.takeBackMoney();
break;
case 4:
vendingMachine.insertDrink();
break;
}
}
else
cout << "잘못된 메뉴 선택입니다. 메뉴를 다시 입력해주세요\n";
}
cout << "자판기를 종료합니다!!\n\n";
return 0;
}
수정된 부분 ¶
~cpp
1. 우선 211 라인에서 144 라인으로 소스를 32% 줄임
2. 중복된 곳이 많던 buy()함수와 insertDrink()함수를 집중적으로 수정
3. 클래스명과 함수명 그리고 변수명을 좀 더 평범하게 변형
4. showDrinkMenu() 함수를 private로 만듬
5. 이외 잡다 에러...
6. 더 고쳐져야 할 부분이 보이지만 미묘해서 그만 둠...-,-;;;