본문 바로가기
프로그래밍/Python

[파이썬] 카페 주문 프로그램(클래스, 파일 이용)

by 청량리 물냉면 2023. 3. 20.
반응형
문제

주문서를 보고 번호를 입력하면, 해당 작업을 수행하는 카페 주문 프로그램을 작성

 

A. Menu Class   "cafe.txt" 파일의 값을 초기값으로 받아 재고를 관리하는 클래스

- 변수

  • orderList: 메뉴 번호, 이름, 가격, 재고를 저장하는 변수 (Dictionary)
  • total: 총 매출액 (int)

- 함수

  • addMenu(f): cafe.txt를 입력받아 orderList에 주어진 값을 추가하는 함수
  • printMenu(): 메뉴 이름과 가격, 현재 재고 수량을 출력

 

B. Order Class   커피 메뉴를 주문하는 클래스

- 변수

  • orderResult: 주문 수량을 저장하는 변수 (List)

- 함수

  • orderMenu(menuNum): 커피를 주문하는 함수 (*menuNum: 메뉴번호)
  1. 메뉴 번호 입력 시 printMenu() 함수 출력
  2. 메뉴 번호가 메뉴에 존재하지 않으면 "존재하지 않는 메뉴입니다"를 출력
  3. 해당 메뉴의 수량이 부족하면 "수량이 부족합니다”를 출력하고 다시 수량을 입력 받음
  4. 해당 메뉴의 재고가 0이라면 "품절되었습니다. 다른 메뉴를 선택해주세요" 출력
  5. 주문에 따라 Menu Class의 재고는 감소되어야 함
  6. "end"를 입력할 때까지 주문을 받음
  7. "end"를 입력하면 주문한 총 수량과 총 주문금액을 출력하고 주문서로 돌아감

 

C. Manage Class   커피의 재고를 입고 및 관리하는 클래스

- 변수

  • ManageResult: 입고 수량을 저장하는 변수 (List)

- 함수

  • Management(menuNum): 커피 재고를 입고하는 함수 (*menuNum: 메뉴번호)
  1. 메뉴번호 입력 시 printMenu() 함수 출력
  2. 메뉴번호가 메뉴에 존재하지 않으면 "존재하지 않는 메뉴입니다."를 출력
  3. "end"를 입력할 때 까지 반복해서 입고
  4. "end"를 입력하면 총 사용금액을 출력하고 주문서로 돌아감
  • totSale(): 총 매출을 출력하는 함수

cafe.txt
0.00MB

 

🐍파이썬 코드
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

 

 

실행 화면

주문 실행

커피 매출 확인

커피 입고하기

종료하기

반응형