class Kiosk:
def __init__(self, mac_list=None, admin_key=9712):
if mac_list is None:
self.mac_list = [
{'menu': '불고기 버거', 'price': 3000, 'quantity': 100},
{'menu': '유로피언 버거', 'price': 4000, 'quantity': 100},
{'menu': '더블 더블 버거', 'price': 4500, 'quantity': 100},
{'menu': '유채 샐러드', 'price': 2500, 'quantity': 100},
{'menu': '감자 샐러드', 'price': 2000, 'quantity': 100},
{'menu': '양파 샐러드', 'price': 2000, 'quantity': 100},
{'menu': '콜라', 'price': 2000, 'quantity': 200},
{'menu': '쉐이크', 'price': 2500, 'quantity': 200},
{'menu': '사이다', 'price': 2000, 'quantity': 200}
]
else:
self.mac_list = mac_list
self.balance = 0
self.select_dict = {}
self.admin_key = admin_key
self.revenue = 0
def run(self):
while True:
print(' 버거집 키오스크')
print()
self.show_menu('햄버거 코너', '불고기 버거', '더블 더블 버거')
self.show_menu('샐러드 코너', '유채 샐러드', '양파 샐러드')
self.show_menu('음료 코너', '콜라', '사이다')
print()
continue_order = True
while continue_order:
self.select_item()
continue_order = self.payment_procedure()
def show_menu(self, title, start_item, end_item):
print(f' {title}')
flag = False
for i, item in enumerate(self.mac_list):
if item["menu"] == start_item:
flag = True
if flag:
print(f'{i + 1}. {item["menu"]} : {item["price"]}원 ', end=' ')
if item["menu"] == end_item:
flag = False
break
print()
def show_select_menu_items(self):
for menu, quantity in self.select_dict.items():
menu_idx = None
for i, item in enumerate(self.mac_list):
if item['menu'] == menu:
menu_idx = i
break
if menu_idx is not None:
print(f'메뉴 번호 : {menu_idx + 1}번 , {menu} : {quantity} 개')
def update_balance_and_inventory(self, menu_index, qty):
select_price = self.mac_list[menu_index - 1]['price']
self.balance += select_price * qty
self.revenue += select_price * qty
self.mac_list[menu_index - 1]['quantity'] -= qty
if self.mac_list[menu_index - 1]['menu'] in self.select_dict:
self.select_dict[self.mac_list[menu_index - 1]['menu']] += qty
else:
self.select_dict[self.mac_list[menu_index - 1]['menu']] = qty
selected_item = self.mac_list[menu_index - 1]['menu']
print(f'{selected_item} {qty}개를 선택하셨습니다.')
print()
def select_item(self):
while True:
try:
select_menu = int(
input('메뉴 번호를 입력 해주세요 , "0" 을 입력하시면 결제를 진행합니다. "10" 을 입력하시면 선택한 메뉴를 보여드립니다. : '))
print()
if select_menu == self.admin_key:
self.admin_page()
continue
if select_menu == 0:
if not self.select_dict:
print('선택하신 메뉴가 없습니다, 다시 입력해주세요')
continue
else:
break
if select_menu == 10:
if self.select_dict:
print(f'현재 선택한 물품')
self.show_select_menu_items()
change_menu = int(input('수량을 변경할 메뉴의 번호를 선택하세요 , 0 을 입력하시면 이전화면으로 되돌아갑니다. : '))
if change_menu == 0:
print()
self.show_menu('햄버거 코너', '불고기 버거', '더블 더블 버거')
self.show_menu('샐러드 코너', '유채 샐러드', '양파 샐러드')
self.show_menu('음료 코너', '콜라', '사이다')
print()
continue
if change_menu <= 0 or change_menu > len(self.mac_list):
print('올바른 번호를 입력하십시오')
continue
menu_name = self.mac_list[change_menu - 1]['menu']
if menu_name not in self.select_dict:
print('해당 메뉴가 구매선택에 있지 않습니다. 다시 선택해주세요')
continue
new_quantity = int(
input(f'변경할 수량을 입력하세요 (현재 수량: {self.select_dict[menu_name]}개): '))
if new_quantity < 0:
print('올바른 수량을 입력해주세요.')
continue
self.select_dict[menu_name] = new_quantity
print(f"{menu_name}의 수량이 {new_quantity}개로 변경되었습니다.")
continue
else:
print('현재 선택된 물품이 없습니다.')
continue
if select_menu <= 0 or select_menu > len(self.mac_list):
print('올바른 번호를 입력하십시오')
continue
select_quantity = int(input('몇 개를 구매하시겠습니까? 0을 입력하시면 구매를 취소합니다. : '))
if select_quantity == 0:
print('구매가 취소되었습니다.')
continue
if self.mac_list[select_menu - 1]['quantity'] < select_quantity:
print('해당 메뉴의 재고가 부족합니다. 다른 메뉴로 다시 선택해주세요.')
continue
self.update_balance_and_inventory(select_menu,select_quantity)
except ValueError:
print('입력이 잘못되셨습니다. 다시 입력해주세요')
continue
def reset_balance_and_cart(self):
self.balance = 0
self.select_dict = {}
def payment_procedure(self):
while True:
payment = input(
f'총 구매 내역은 : {", ".join([f"{menu} {count}개" for menu, count in self.select_dict.items()])} 입니다.\n'
f'총 가격은 {self.balance}원 입니다. 결제 진행 하시겠습니까? '
f'결제하려면 "x" 입력 , 추가로 결제하려면 "c"를 입력해주십시오. : ')
print()
if payment == 'c':
return True
elif payment == 'x':
while True:
try:
money = int(input('현금을 넣어주세요 : '))
break
except ValueError:
print('잘못된 금액을 입력하셨습니다. 정수 형태로 다시 입력해주세요.')
if money < self.balance:
print('현금이 부족합니다, 다시 넣어주세요')
continue
else:
change = money - self.balance
print(
f'구매 내역은 : {", ".join([f"{menu} {count}개" for menu, count in self.select_dict.items()])} 입니다. \n'
f'결제 완료되었습니다. 잔금 : {change} 입니다. \n'
f'이용해주셔서 감사합니다.')
print()
self.reset_balance_and_cart()
return False
else:
print('입력이 잘못되었습니다.')
continue
def admin_page(self):
print('관리자 페이지에 접속하였습니다.')
while True:
print('1. 재고 확인')
print('2. 재고 추가')
print('3. 매출 확인')
print('4. 나가기')
choice = int(input('원하는 메뉴 번호를 입력하세요: '))
if choice == 1:
self.check_inventory()
elif choice == 2:
self.add_inventory()
elif choice == 3:
self.check_revenue()
elif choice == 4:
print()
self.show_menu('햄버거 코너', '불고기 버거', '더블 더블 버거')
self.show_menu('샐러드 코너', '유채 샐러드', '양파 샐러드')
self.show_menu('음료 코너', '콜라', '사이다')
print()
break
else:
print('올바른 번호를 입력하세요.')
def check_inventory(self):
for i, item in enumerate(self.mac_list):
print(f"{i + 1}. {item['menu']} - 재고: {item['quantity']}개")
print()
def add_inventory(self):
for i, item in enumerate(self.mac_list):
print(f"{i + 1}. {item['menu']}")
item_number = int(input('재고를 추가할 메뉴의 번호를 선택하세요: '))
add_quantity = int(input('추가할 재고의 양을 입력하세요: '))
self.mac_list[item_number - 1]['quantity'] += add_quantity
print(f"{self.mac_list[item_number - 1]['menu']}의 재고가 {add_quantity}개 추가되었습니다.")
print()
def check_revenue(self):
print(f'현재 매출은 {self.revenue}원 입니다.')
print()
if __name__ == '__main__':
kiosk = Kiosk()
kiosk.run()