📌 class 사용 , 각 분리작업
- 현금분류 작업
- 관리자 페이지 작업
- 클래스를 사용하여 다른 메뉴를 쓸수 있도록 작업
class Vending_machine():
def __init__(self, cash=0, menus=None, admin_key='admin123'):
self.cash = cash
if menus is None:
self.menus = {
"coke": {"price": 3000, "quantity": 10},
"cider": {"price": 1500, "quantity": 10},
"milk": {"price": 1500, "quantity": 10},
"coffee": {"price": 2000, "quantity": 10}
}
else:
self.menus = menus
self.admin_key = admin_key
def display_menu(self):
print('--------------메뉴-----------------')
for index, (item, data) in enumerate(self.menus.items()):
print(f'{index + 1}. 상품: {item}, 가격: {data["price"]}, 수량: {data["quantity"]}')
def insert_cash(self):
try:
money = int(input('현금을 넣어주세요 : '))
self.cash += money
except ValueError:
print('입력값이 잘못되었습니다.')
def exchange_cash(self, change):
cev = [50000, 10000, 5000, 1000, 500, 100, 50, 10, 1]
change_dict = {}
result = ""
for unit in cev:
how_much = change // unit
change_dict[unit] = how_much
change = change - (how_much * unit)
for k, v in change_dict.items():
if v != 0:
result += f'{k}원짜리 {v}개 입니다.\n'
print()
print('-----거스름돈 현금 금액 분류-----')
return result.strip()
def select_menu(self):
select_menu = input('메뉴를 선택하세요 , "p" 를 입력하시면 추가로 현금을 투입합니다. "q" 를 입력하시면 잔돈 환불해드려요 : ')
if select_menu in self.menus.keys():
if self.cash > self.menus[select_menu]['price']:
temp = select_menu
print()
print(f'"{temp}"를 선택하셨습니다.')
return select_menu
elif select_menu.lower() == 'p':
return 'p'
elif select_menu.lower() == 'q':
return 'q'
elif select_menu.lower() == self.admin_key:
return 'admin'
else:
print('선택된 메뉴가 존재하지 않습니다.')
return None
def calculation(self, choice):
if choice in self.menus.keys():
price = self.menus[choice]['price']
if self.menus[choice]['quantity'] <= 0:
print(f'{choice}는 재고가 없습니다. 다른 메뉴를 선택해주세요.')
return True
elif self.cash >= price:
self.cash = self.cash - price
self.menus[choice]['quantity'] -= 1
print(
f'{self.exchange_cash(self.cash)}')
print()
print(f'총 거스름돈은 {self.cash}원 이고 선택된 메뉴는 {choice} 입니다. 남은 수량은 : {self.menus[choice]["quantity"]}개 입니다.')
return False
else:
return True
else:
return False
def run(self):
print('자판기를 시작합니다.')
while True:
self.display_menu()
selected = self.select_menu()
if selected == "p":
self.insert_cash()
continue
if selected == "q":
print(f'{self.exchange_cash(self.cash)}')
print(f'총 거스름돈 : {self.cash}원 입니다. 이용해주셔서 감사합니다.')
self.cash = 0
continue
if selected == "admin":
self.admin_mode()
if self.calculation(selected):
if self.cash <= 0:
cash = input('현금이 부족합니다. 현금을 더 넣으시겠습니까? (넣으려면 "Y", 아니면 아무키나 눌러주십시오): ')
if cash.lower() == 'y':
self.insert_cash()
continue
else:
print(f'총 거스름돈 : {self.cash}입니다. 수량을 최대로 맞춥니다.')
continue
def admin_mode(self):
print('------------관리자 모드----------')
print('---------반갑습니다 관리자님--------')
while True:
print()
print('1. 메뉴 추가, 2.메뉴 수정, 3.메뉴 삭제,4.아이템 조회, 0.종료')
admin_choice = input('사용하실 부분을 선택해주십시오 : ')
try:
if admin_choice == "1":
new_item = input('새로 추가하실 아이템 이름 : ')
new_price = int(input('새로 추가하실 아이템의 가격 : '))
new_quantity = int(input('새로 추가하실 아이템의 수량 : '))
self.menus[new_item] = {"price": new_price, "quantity": new_quantity}
continue
except ValueError:
print('아이템의 가격이나 수량은 정수로 입력하셔야 합니다, 다시 입력해주세요?')
continue
try:
if admin_choice == "2":
modify_item = input('수정하실 아이템의 이름 : ')
modify_price = int(input('수정하실 아이템의 가격 : '))
modify_quantity = int(input('수정하실 아이템의 수량 : '))
if modify_item in self.menus.keys():
self.menus[modify_item] = {"price": modify_price, "quantity": modify_quantity}
continue
else:
print('선택하신 아이템이 없습니다.')
continue
except ValueError:
print('아이템의 가격이나 수량은 정수로 입력하셔야 합니다, 다시 입력해주세요?')
continue
if admin_choice == "3":
delete = input('삭제하실 아이템의 이름 : ')
if delete in self.menus.keys():
temp = self.menus.pop(delete)
print(f'메뉴 : {delete} : {temp}가 삭제되었습니다.')
continue
else:
print('삭제를 하실 아이템이 없습니다. 확인하시고 다시 입력해 주십시오')
continue
if admin_choice == "4":
print('현재의 상품을 조회합니다.')
for index, (item, data) in enumerate(self.menus.items()):
print(f'{index + 1}. 상품: {item}, 가격: {data["price"]}, 수량: {data["quantity"]}')
continue
if admin_choice == "0":
print('관리자 모드를 종료합니다.')
break
break
vending_machine = Vending_machine()
vending_machine.run()