# 206 점심시간문제
class Coffee_Class() : # 함수(3) 키오스크 실행시 자동으로 뜨는 문구 def __init__(self) : #init 자동호출 되는애 self.picture('/Users/loono/Desktop/data/kiosk.png') # 사진을 받아오고 print('키오스크 시스템을 시작합니다.')
# (함수2) 커피 대문사진 나타내는 함수 def picture(self,name): # self 넣어줘야 각 객체마다 작용한다! 받아온 사진을 name 으로 받아 출력한다. import PIL.Image as pilimg import numpy as np import matplotlib.pyplot as plt
img = pilimg.open(name) pix =np .array(img) plt.imshow(pix) plt.axis('off')
#ax = plt.gca() # xy 축 안나오게 하는 방법 (위에 plt.axis는 off 상태이다. ) #ax.axes.xaxis.set_visible(False) # x축 #ax.axes.yaxis.set_visible(False) # y축
plt.show() #맨 밑으로 와야지 제거가 된 채로 보인다.
# 메인함수 def coffee_kiosk(self) :
import pandas as pd import matplotlib.pyplot as plt #시각화 원형그래프 (레전드 불러오는 모듈) from matplotlib import rc ##한글이 깨지지 않기 위해 이 줄과 rc('font', family='AppleGothic') ##이 두 줄을 plt.rcParams['axes.unicode_minus'] = False ##추가.
# 1. 딕셔너리 생성 cafe_dict ={} cafe_dict['주문번호'] =[] cafe_dict['주문시간'] =[] cafe_dict['커피종류'] =[] cafe_dict['주문수량'] =[] cafe_dict['결제금액'] =[]
#커피종류,재고,가격 리스트형과튜플형 coffee_t =('아메리카노','카페라떼','카페모카','녹차라떼') #튜플형태 커피종류 생성 인덱스로 구분 coffee_p =(1500,2500,3500,3500) #튜플형태 가격 생성 인덱스구분 coffee_s =[20,10,30,20] #리스트형태 재고 생성 인덱스구분 order_n = 0 #주문번호
# 3. 메뉴판 출력 print('='*50) print('\n안녕하세요. ☾ coffee ☽ shop 입니다.') self.picture('/Users/loono/Desktop/data/cafemenu.png') # 커피 이미지 함수가 실행 되려면 (정의되어있는 함수가 __init__ 에서실행해야한다) print('='*50)
# 4. 주문 시작 반목문 try : while True:
# 4-1 전체품절 if coffee_t[0] == 0 and coffee_t[1] == 0 and coffee_t[2] == 0 and coffee_t[3] == 0 : print('-'*50,'\n 커피가 모두 소진 되었습니다.\n해당번호로 문의주세요\n☎️02-123-4567\n\n','='*50) break
num = int(input('➡︎ 원하시는 메뉴 번호를 입력해 주세요 : '))
# 4-2 커피주문 if num < 5 :
if coffee_s[num-1] ==0 : # coffee재고의 인덱스번호를 입력하여 바로 커피재고 요소로 대입 가능 print('\n❎ 현재 %s는 품절입니다. 메뉴번호를 다시 입력해주세요 \n' % coffee_t[num-1]) continue # 해당 조건을 빠져나와 루프문 첫번째 메뉴번호입력을 돌아간다.
print('-'*50) print ('\n\t ✔️ %s 선택되었습니다.\n' %(coffee_t[num-1])) # 선택된 커피종류[인덱스]가 재고가 있다면 나오는 실행문 #self.picture('/Users/loono/Desktop/data/'+menu[num-1]+'cafemenu.png') cup =int(input('➡︎ 몇잔 주문하시겠습니까?')) # 몇잔 주문할 건지 물어보고 정수로 변환한뒤 cup변수에 담음
# 주문량에 비해 재고가 부족 할때 if cup > coffee_s[num-1] : print('주문량에 비해 %s %d잔 부족합니다.' %(coffee_t[num-1],cup-coffee_s[num-1])) print('이용에 불편을 드려 죄송합니다.\n처음화면으로 돌아갑니다.') continue
print('➡︎ 고객님 결제하실금액은 %d원 입니다.' %(coffee_p[num-1]*cup)) money = int(input('💵돈을 투입구에 넣어주세요'))
# 결제금액과,투입금액이 같을 경우 if money == coffee_p[num-1]*cup : order_n += 1 #주문번호 증가 print ('\n\n➡︎ 주문번호 %d번 고객님 %s %d잔 드리겠습니다.\n\n\t\t맛있게드세요\n\n' %(order_n,coffee_t[num-1],cup)) coffee_s[num-1] -= cup #주문된 갯수만큼 재고 차감
# 투입금액이 결제금액보다 많은 경우 (거스름돈 반환 필요) elif money > coffee_p[num-1]*cup : order_n += 1 print ('\n\n➡︎ 주문번호 %d번 고객님 %s %d잔 드리겠습니다.\n거스름돈은 %d원입니다.\n\n\t\t맛있게드세요\n\n' \ %(order_n,coffee_t[num-1],cup,money-coffee_p[num-1]*cup)) coffee_s[num-1] -= cup
# 그밖에 투입금액이 결제금액보다 적은 경우 else : print ('입금금액이 %d원 부족합니다.\n%d원 반환합니다. \n처음부터 다시 주문 해 주세요'\ %(coffee_p[num-1]*cup - money,money)) continue
# 4-3 주문데이터 쌓기(함수x) from datetime import datetime # 함수안에 데이터 타입에 넣어야한다. now = str(datetime.now()) # 현재시간을 볼 수 있는 데이터를 now 변수에 대입 cafe_dict['주문번호'].append(order_n) cafe_dict['주문시간'].append(now) cafe_dict['커피종류'].append(coffee_t[num-1]) cafe_dict['주문수량'].append(cup) cafe_dict['결제금액'].append(coffee_p[num-1]*cup)
# 4-3 쿠폰 발행 멘트 print ('➡︎ 쿠폰이',cup,'개 발행되었습니다.\n 20개를 모으면 아메리카노 한잔 무료입니다.') print ('\n이용해 주셔서 감사합니다.\n') print ('='*50)
# 5. 결산내역을 보고 싶을때 elif num == 100 : password = int(input('비밀먼호를 입력해주세요')) if password == 1234 : print('\n👩💼관리자 모드 실행합니다\n')
cafe = pd.DataFrame(cafe_dict) cafe.to_csv("/Users/loono/Desktop/data/coffee_kiosk data/coffee_report_"+now[0:10]+'일_'+now[11:12]+'시_'+now[14:16]+'분_'+now[17:19]+'초'+".csv") cafe['결제금액'].sum() print('오늘 총매출액 : ',cafe['결제금액'].sum())
#시각화를 위한 원형그래프 result = cafe.groupby('커피종류')['결제금액'].sum().reset_index() result.columns=['커피종류','종류별매출액'] result.plot.pie(y='종류별매출액',labels=result['커피종류'],autopct='%1.1f%%') plt.legend(loc='best',bbox_to_anchor=(1,1)) # 레전드의 위치 설정 plt.savefig('/Users/loono/Desktop/data/coffee_kiosk data/result_'\ +now[0:10]+'일_'+now[11:12]+'시_'+now[14:16]+'분_'+now[17:19]+'초'+ '.png',dpi=300) #원형그래프 이미지 저장 dip 는 해상도이다.
return result
else : print('비밀번호 오류입니다\n초기화면으로 돌아갑니다\n')
# 6 메뉴번호를 잘못 입력했을때 else : print('없는 메뉴입니다. 다시 입력해주세요') continue
except : return '잘못된 값이 입력되었습니다. 다시 입력해주세요'
|