과제

[카페키오스크] 과제 1 단계. 신규메뉴 등록 설계/구현 과정 이해 를 참조하여 아래 과제를 수행하시오. 

1. 카페 키오스크 시스템에서 "메뉴 수정" 기능의 시퀀스 다이어그램과 이를 통해 정제된 클래스 다이어그램을 작성하시오. 

2. 1번에서 작성된 설계를 기반으로 "메뉴 수정" 기능을 구현하시오. 

 

1. 요구사항 - 생략

2. 카페키오스크 유스케이스 다이어그램 - "어떤 기능들을 구현할까"를 정의

 

3. 메뉴 등록 유스케이스 명세서 - "하나의 기능을 어떤 순서로 실행할까? 를 정의

Use case Diagarm Use case Description

 

[제출 1]  메뉴수정 시퀀스 다이어그램

[제출 2]  수정기능으로 보완된 메뉴관리 클래스 다이어그램 

[제출3] 메뉴 수정 기능이 구현된 코드

kiosk_ui.__select_modify_menu() 코드 예시

 def __select_modify_menu(self):

        print("\n[메뉴 수정]")
        menu_list = self.__menu_controller.retrieve_menu_list()

        if not menu_list:
            print("메뉴 없음")
            return
        
        self.__display_menu_list(menu_list)

        menu_id = input("수정할 메뉴 id를 선택하세요: ")
        menu_item = self.__menu_controller.retrieve_menu_by_id(menu_id)

        if menu_item is None:
            print("존재하지 않는 ID입니다.")
            return

        print("\n[현재 메뉴 정보]")
        print(f"메뉴명 : {menu_item['name']}")
        print(f"가격   : {menu_item['price']}")
        print(f"설명   : {menu_item['description']}")
        print(f"상태   : {menu_item['status']}")

        print("\n수정할 항목을 선택하세요.")
        print("1. 메뉴명")
        print("2. 가격")
        print("3. 설명")
        print("4. 상태")

        field_no = input("선택: ")
        if field_no not in ["1", "2", "3", "4"]:
            print("잘못된 입력")
            return

        field_value = input("새로운 값 입력: ")
        result = self.__menu_controller.modify_menu_item(menu_id,field_no,field_value)

        if result:
            print("수정 완료")
        else:
            print("수정 실패")

 

전체 코드 예시

class MenuItem:
    def __init__(self, menu_id, menu_type, name, price, description, status):
        self.__menu_id = menu_id
        self.__menu_type = menu_type
        self.__name = name
        self.__price = price
        self.__description = description
        self.__status = status

    @property
    def menu_id(self):
        return self.__menu_id

    @property
    def menu_type(self):
        return self.__menu_type

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, value):
        self.__name = value

    @property
    def price(self):
        return self.__price

    @price.setter
    def price(self, value):
        self.__price = int(value)

    @property
    def description(self):
        return self.__description

    @description.setter
    def description(self, value):
        self.__description = value

    @property
    def status(self):
        return self.__status

    @status.setter
    def status(self, value):
        self.__status = value

    def to_dict(self):
        return {
            "menu_id": self.__menu_id,
            "menu_type": self.__menu_type,
            "name": self.__name,
            "price": self.__price,
            "description": self.__description,
            "status": self.__status
        }
    
class MenuRepository:
    def __init__(self):
        self.__menu_list = []
        self.__next_menu_id = 1

    def generate_menu_item_id(self):
        menu_id = self.__next_menu_id
        self.__next_menu_id += 1
        return menu_id

    def add_menu_item(self, menu_item):
        self.__menu_list.append(menu_item)

    def find_all(self):
        return self.__menu_list

    def find_by_id(self, menu_id):
        for menu_item in self.__menu_list:
            if menu_item.menu_id == menu_id:
                return menu_item
        return None


class MenuController:
    def __init__(self):
        self.__menu_repository = MenuRepository()

    def check_mandatory_field(self, name, price, status):
        return all([name, price, status])

    def register_menu_item(self, menu_type, name, price, description, status):
        menu_id = self.__menu_repository.generate_menu_item_id()
        menu_item = MenuItem(menu_id, menu_type, name, int(price), description, status)
        self.__menu_repository.add_menu_item(menu_item)

    def retrieve_menu_list(self):
        menu_items = self.__menu_repository.find_all()

        result = []

        for item in menu_items:
            result.append(item.to_dict())

        return result

    def retrieve_menu_by_id(self, menu_id):
        menu_item = self.__menu_repository.find_by_id(int(menu_id))

        if menu_item is None:
            return None
        
        return menu_item.to_dict()
    
    def modify_menu_item(self, menu_id, field, new_value):
        menu_item = self.__menu_repository.find_by_id(int(menu_id))

        if menu_item is None:
            return False
        
        if field == "1":
            menu_item.name = new_value

        elif field == "2":
            menu_item.price = new_value

        elif field == "3":
            menu_item.description = new_value

        elif field == "4":
            menu_item.status = new_value

        else:
            return False

        return True


class MainUI:
    def __init__(self):
        self.__menu_controller = MenuController()

    def run(self):

        while True:
            self.__print_main_menu()

            selected_menu = input("메뉴를 선택하세요: ")

            if selected_menu == "11":
                self.__select_register_menu()

            elif selected_menu == "12":
                self.__select_modify_menu()

            elif selected_menu == "13":
                self.__select_delete_menu()

            elif selected_menu == "14":
                self.__select_retrieve_menu()

            elif selected_menu == "21":
                self.__select_order()

            elif selected_menu == "0":
                print("프로그램 종료")
                break

            else:
                print("잘못된 입력")

    def __print_main_menu(self):
        print("\n============= 카페 키오스크 =============")
        print("메뉴관리(관리자)       주문관리(고객)")
        print("11. 메뉴 등록          21. 주문[TODO]")
        print("12. 메뉴 수정")
        print("13. 메뉴 삭제[TODO]")
        print("14. 메뉴 조회")
        print("0. 종료")
        print("========================================")

    def __select_register_menu(self):
        print("\n[메뉴 등록]")

        print("1. Coffee, 2. Dessert")
        menu_type_input = input("유형을 선택하세요: ")

        if menu_type_input == "1":
            menu_type = "Coffee"
        elif menu_type_input == "2":
            menu_type = "Dessert"
        else:
            print("잘못된 유형")
            return

        name = input("메뉴명: ")
        price = input("가격: ")
        description = input("설명: ")
        status = input("상태(1. 판매중, 2. 품절): ")

        if not self.__menu_controller.check_mandatory_field(name, price, status):
            print("누락된 정보를 입력하세요.")
            return

        self.__menu_controller.register_menu_item(menu_type,name,price,description,status)
        print("등록 완료")

    def __display_menu_list(self, menu_list):
        print(
            f"{'ID':<5}"
            f"{'Type':<10}"
            f"{'이름':<15}"
            f"{'가격':<10}"
            f"{'상태':<10}"
            f"{'설명':<20}"
        )

        print("-" * 80)

        for m in menu_list:
            print(
                f"{m['menu_id']:<5}"
                f"{m['menu_type']:<10}"
                f"{m['name']:<15}"
                f"{m['price']:<10}"
                f"{m['status']:<10}"
                f"{m['description']:<20}"
            )

        print("=" * 80)

    def __select_modify_menu(self):

        print("\n[메뉴 수정]")
        menu_list = self.__menu_controller.retrieve_menu_list()

        if not menu_list:
            print("메뉴 없음")
            return
        
        self.__display_menu_list(menu_list)

        menu_id = input("수정할 메뉴 id를 선택하세요: ")
        menu_item = self.__menu_controller.retrieve_menu_by_id(menu_id)

        if menu_item is None:
            print("존재하지 않는 ID입니다.")
            return

        print("\n[현재 메뉴 정보]")
        print(f"메뉴명 : {menu_item['name']}")
        print(f"가격   : {menu_item['price']}")
        print(f"설명   : {menu_item['description']}")
        print(f"상태   : {menu_item['status']}")

        print("\n수정할 항목을 선택하세요.")
        print("1. 메뉴명")
        print("2. 가격")
        print("3. 설명")
        print("4. 상태")

        field_no = input("선택: ")
        if field_no not in ["1", "2", "3", "4"]:
            print("잘못된 입력")
            return

        field_value = input("새로운 값 입력: ")
        result = self.__menu_controller.modify_menu_item(menu_id,field_no,field_value)

        if result:
            print("수정 완료")
        else:
            print("수정 실패")

    def __select_retrieve_menu(self):

        print("\n[메뉴 조회]")
        menu_list = self.__menu_controller.retrieve_menu_list()
        
        if not menu_list:
            print("메뉴 없음")
            return

        self.__display_menu_list(menu_list)
        


    def __select_delete_menu(self):
        print("[TODO] 메뉴 삭제")

    def __select_order(self):
        print("[TODO] 주문 기능")


if __name__ == "__main__":

    ui = MainUI()
    ui.run()

 

콘솔키오스크_과제1 결과예시.drawio
0.21MB

+ Recent posts