반응형
문제
주문서를 보고 번호를 입력하면, 해당 작업을 수행하는 카페 주문 프로그램을 작성
A. Menu Class "cafe.txt" 파일의 값을 초기값으로 받아 재고를 관리하는 클래스
- 변수
- orderList: 메뉴 번호, 이름, 가격, 재고를 저장하는 변수 (Dictionary)
- total: 총 매출액 (int)
- 함수
- addMenu(f): cafe.txt를 입력받아 orderList에 주어진 값을 추가하는 함수
- printMenu(): 메뉴 이름과 가격, 현재 재고 수량을 출력
B. Order Class 커피 메뉴를 주문하는 클래스
- 변수
- orderResult: 주문 수량을 저장하는 변수 (List)
- 함수
- orderMenu(menuNum): 커피를 주문하는 함수 (*menuNum: 메뉴번호)
- 메뉴 번호 입력 시 printMenu() 함수 출력
- 메뉴 번호가 메뉴에 존재하지 않으면 "존재하지 않는 메뉴입니다"를 출력
- 해당 메뉴의 수량이 부족하면 "수량이 부족합니다”를 출력하고 다시 수량을 입력 받음
- 해당 메뉴의 재고가 0이라면 "품절되었습니다. 다른 메뉴를 선택해주세요" 출력
- 주문에 따라 Menu Class의 재고는 감소되어야 함
- "end"를 입력할 때까지 주문을 받음
- "end"를 입력하면 주문한 총 수량과 총 주문금액을 출력하고 주문서로 돌아감
C. Manage Class 커피의 재고를 입고 및 관리하는 클래스
- 변수
- ManageResult: 입고 수량을 저장하는 변수 (List)
- 함수
- Management(menuNum): 커피 재고를 입고하는 함수 (*menuNum: 메뉴번호)
- 메뉴번호 입력 시 printMenu() 함수 출력
- 메뉴번호가 메뉴에 존재하지 않으면 "존재하지 않는 메뉴입니다."를 출력
- "end"를 입력할 때 까지 반복해서 입고
- "end"를 입력하면 총 사용금액을 출력하고 주문서로 돌아감
- totSale(): 총 매출을 출력하는 함수
🐍파이썬 코드
class Menu: #“cafe.txt”파일의 값을 초기값으로 받아 재고를 관리하는 Class
orderList = {} # 메뉴 번호, 이름, 가격, 재고를 저장하는 변수 (Dictionary)
total = 0 # 총 매출액(int)
def addMenu(self, f): #cafe.txt를 입력받아 orderList에 주어진 값을 추가하는 함수
with open(f, 'r', encoding='utf-8') as f:
for line in f:
value = [0]*3
key, value[0], value[1], value[2] = line.strip('\n').split(', ')
self.orderList[int(key)] = value
f.close()
#print(self.orderList.items())
#dict_items([(1, ['아메리카노', '4000', '20']), (2, ['카페라떼', '4600', '10']), (3, ['카페모카', '5100', '3']), (4, ['바닐라라떼', '5300', '7']), (5, ['녹차라떼', '4800', '13'])])
def printMenu(self): #메뉴 이름과 가격, 현재 재고 수량을 출력
print('=' * 40)
for i in Menu.orderList.keys():
print(str(i) + '.' + str(list(Menu.orderList[i])[0])+' 금액: '
+ str(list(Menu.orderList[i])[1]) + '원 재고:' + str(list(Menu.orderList[i])[2]))
print('end를 입력하시면 주문서로 돌아갑니다.')
print('=' * 40)
class Order(Menu): #커피 메뉴를 주문하는 클래스
orderResult = [0] #주문 수량을 저장하는 변수(List)
total = 0
def orderMenu(self, menuNum): #커피를 주문하는 함수
while True:
if menuNum == 'end': break
if int(menuNum) > len(Menu.orderList.keys()):
print('존재하지 않는 메뉴입니다')
print('메뉴 번호를 다시 입력해주세요')
menuNum = input('input: ')
prodName = list(Menu.orderList[int(menuNum)])[0]
prodPrice = list(Menu.orderList[int(menuNum)])[1]
prodStock = list(Menu.orderList[int(menuNum)])[2]
print('선택한 메뉴의 수량을 입력해주세요')
num = int(input('input: '))
if (int(prodStock)) == 0:
print('품절되었습니다. 다른 메뉴를 선택해주세요')
print()
print('메뉴 번호를 다시 입력해주세요')
menuNum = input('input: ')
continue
elif (int(prodStock)) < num:
print('수량이 부족합니다.')
continue
else:
#총 주문금액
self.total += int(prodPrice) * num
#주문수량 저장
self.orderResult[0] = int(self.orderResult[0]) + num
#주문수량만큼 재고수량 마이너스해서 리스트 업데이트
value = [0]*3
value[0] = prodName
value[1] = prodPrice
value[2] = int(prodStock) - num
Menu.orderList[int(menuNum)] = value
Menu.printMenu(self)
print('추가로 주문할 메뉴 번호를 입력해주세요')
menuNum = input('input: ')
print()
#총 매출액 올리기
Menu.total += self.total
print('주문내역')
print('총 주문 수량: '+str(self.orderResult[0])+'개, 총 주문 금액: '+ str(self.total)+'원')
self.total = 0
class Manage(Menu): #커피의 재고를 입고 및 관리하는 클래스
ManageResult = [0] #입고 수량을 저장하는 변수(List)
total = 0
def Magagement(self, menuNum): #커피 재고를 입고하는 함수
while True:
if menuNum == 'end': break
if int(menuNum) > len(Menu.orderList.keys()):
print('존재하지 않는 메뉴입니다')
print('메뉴 번호를 다시 입력해주세요')
menuNum = input('input: ')
prodName = list(Menu.orderList[int(menuNum)])[0]
prodPrice = list(Menu.orderList[int(menuNum)])[1]
prodStock = list(Menu.orderList[int(menuNum)])[2]
Menu.printMenu(self)
print('선택한 메뉴의 수량을 입력해주세요')
num = int(input('input: '))
#총 주문금액
self.total += int(prodPrice) * num
#주문수량 저장
self.ManageResult[0] = int(self.ManageResult[0]) + num
#주문수량만큼 재고수량 플러스해서 리스트 업데이트
value = [0]*3
value[0] = prodName
value[1] = prodPrice
value[2] = int(prodStock) + num
Menu.orderList[int(menuNum)] = value
Menu.printMenu(self)
print('추가로 입고할 메뉴 번호를 입력해주세요')
menuNum = input('input: ')
print()
print('주문내역')
print('총 주문 수량: '+str(self.ManageResult[0])+'개, 총 주문 금액: '+ str(self.total)+'원')
self.total = 0
def totSale(self): #총 매출을 출력하는 함수
print('총 매출은 ' + str(Menu.total) + '원 입니다')
menu = Menu()
order = Order()
mng = Manage()
menu.addMenu('C://Users//yoon//Desktop//cafe.txt')
while True:
print('=' * 20)
print('{:^10}'.format('주문서'))
print('=' * 20)
print('1. 커피 주문하기')
print('2. 커피 매출 확인')
print('3. 커피 입고하기')
print('4. 종료하기')
print('=' * 20)
print('원하시는 주문 번호를 입력해주세요')
menuSelect = int(input('input:'))
print()
if menuSelect == 1:
menu.printMenu()
print('주문할 메뉴 번호를 입력해주세요')
menuNum = input('input: ')
order.orderMenu(menuNum)
continue
elif menuSelect == 2:
mng.totSale()
continue
elif menuSelect == 3:
print('입고할 메뉴 번호를 입력해주세요')
menuNum = input('input: ')
mng.Magagement(menuNum)
continue
elif menuSelect == 4:
break
else:
print('존재하지 않는 메뉴입니다')
continue
실행 화면
주문 실행
커피 매출 확인
커피 입고하기
종료하기
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬] 정수를 입력받아 곱셈 과정을 출력하는 프로그램 (0) | 2023.03.20 |
---|---|
[파이썬] 소수점 아래 n자리 수까지 출력(반올림 없이 출력) (0) | 2022.05.08 |
파이썬 Data Type Exercise(홀수 리스트, 짝수 리스트, 리스트 내림차순 정렬) (0) | 2021.09.29 |
파이썬 Data Type Exercise (소문자→대문자 변환, 문자열 바꾸기) (0) | 2021.09.29 |