과제
[카페키오스크] 과제 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()
'[2] 객체지향 프로그래밍 설계(파이썬) > [과제] 콘솔키오스크-OOP' 카테고리의 다른 글
| [카페키오스크] 과제 3 단계. 주문 구현하기 (5/22) (0) | 2026.05.19 |
|---|---|
| [카페키오스크] 과제 2 단계. MenuItem 상속 구현하기(5/15) - 결과예시 (0) | 2026.05.19 |
| [카페키오스크] 과제 2 단계. MenuItem 상속 구현하기(5/15) (0) | 2026.05.13 |
| [카페키오스크] 과제 1 단계. 메뉴 수정기능 설계/구현 (0) | 2026.05.08 |
| [카페키오스크] 과제 1 단계. 신규메뉴 등록 설계/구현 과정 이해 (0) | 2026.05.03 |

