== 나름대로 고쳐본 소스 == {{{~cpp #include 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. 더 고쳐져야 할 부분이 보이지만 미묘해서 그만 둠...-,-;;; }}} See Also ["CppStudy_2002_2"][[BR]] See Also ["VendingMachine/세연"]