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

2023. 3. 20. 22:21·프로그래밍/Python
문제

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

 

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

 

 

실행 화면

주문 실행

커피 매출 확인

커피 입고하기

종료하기

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > Python' 카테고리의 다른 글

[파이썬] 정수를 입력받아 곱셈 과정을 출력하는 프로그램  (0) 2023.03.20
[파이썬] 소수점 아래 n자리 수까지 출력(반올림 없이 출력)  (0) 2022.05.08
파이썬 Data Type Exercise(홀수 리스트, 짝수 리스트, 리스트 내림차순 정렬)  (0) 2021.09.29
파이썬 Data Type Exercise (소문자→대문자 변환, 문자열 바꾸기)  (0) 2021.09.29
'프로그래밍/Python' 카테고리의 다른 글
  • [파이썬] 정수를 입력받아 곱셈 과정을 출력하는 프로그램
  • [파이썬] 소수점 아래 n자리 수까지 출력(반올림 없이 출력)
  • 파이썬 Data Type Exercise(홀수 리스트, 짝수 리스트, 리스트 내림차순 정렬)
  • 파이썬 Data Type Exercise (소문자→대문자 변환, 문자열 바꾸기)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    컴퓨터네트워크
    Jiraynor Programming
    클론 프로젝트
    포트폴리오
    블로그 제작
    SWEA
    뉴렉처
    Next.js
    bfs
    공식문서
    mysql
    백준
    자바스크립트
    파이썬
    타입스크립트
    Til
    웹사이트
    프로그래머스
    알고리즘
    AWS
    ZeroCho
    프로젝트
    React
    d3
    spring boot
    리액트
    플러터
    강의내용정리
    구현
    자바
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[파이썬] 카페 주문 프로그램(클래스, 파일 이용)
상단으로

티스토리툴바