< 데코레이션 형태 >
class 클래스 명:
def decorator_function1():
def wrapper():
@decorator_function1
def 매입함수
def decorator_function2():
def wrapper():
@decorator_function2
def 대출함수
def decorator_function3():
def wrapper():
@decorator_function3
def 반납함수
<기존 키오스크로 바꾸어 보기>
class LibraryKiosk:
#초기생성자
def __init__(self):
#books는 맴버변수
self.books = {}
print('클래스 생성 되었습니다.')
#-------------------------------------------------------
#도서 입고 데코레이터 함수 정의하기
def decorator_function(func):
def wrapper(self, book_id, title, quantity):
func(self, book_id, title, quantity)
# return func
return wrapper
@decorator_function
def add_book(self, book_id, title, quantity):
if book_id in self.books:
self.books[book_id]['quantity'] += quantity
else:
self.books[book_id] = {'title':title, 'quantity':quantity}
print(f"도서번호 : {book_id} /제목 : {title} / 입고수량 : {quantity} 입고 성공!!")
#도서 대출
def decorator_function(func):
def wrapper(self, book_id):
func(self, book_id)
return wrapper
@decorator_function
def borrow_book(self, book_id):
if (book_id in self.books) and (self.books[book_id]['quantity']) > 0 :
self.books[book_id]['quantity'] -= 1
print("대출이 완료되었습니다.")
print(f"도서번호:{book_id} / 제목:{self.books[book_id]['title']} / 남은재고수량:{self.books[book_id]['quantity']}")
else:
print("도서가 존재하지 않거나, 대출할 재고가 없습니다.")
#도서 반납
# def decorator_function(func):
# def wrapper(self, book_id):
# func(self, book_id)
# return wrapper
@decorator_function
def return_book(self, book_id):
if book_id in self.books:
self.books[book_id]['quantity'] += 1
print(f"도서번호:{book_id} / 제목:{self.books[book_id]['title']} / 남은재고수량:{self.books[book_id]['quantity']}")
else:
print("해당 도서가 존재하지 않습니다.")
#------------------------------------------------------------
#메인함수
def main():
kiosk = LibraryKiosk()
print(kiosk)
while True:
print('<도서 키오스크 메뉴>')
print('1. 도서 입고')
print('2. 도서 대출')
print('3. 도서 반납')
print('4. 종료')
choice = input('원하는 번호(1~4)를 선택하세요 : ')
if choice == '1':
book_id = input('도서 번호를 입력해 주세요 : ')
title = input('도서 제목을 입력해 주세요 : ')
quantity = int(input('입고할 권수를 입력해 주세요 : '))
#add_book 호출되는 순간에 wrapper가 같이 실행(데코레이터 되었으므로)
kiosk.add_book(book_id, title, quantity)
elif choice == '2':
book_id = input("대출할 도서번호를 입력해주세요 : ")
kiosk.borrow_book(book_id)
elif choice == '3':
book_id = input("반납할 도서번호를 입력해주세요 : ")
kiosk.return_book(book_id)
elif choice == '4':
print('종료 선택')
break
else:
print('잘못 선택하였습니다. 다시 선택해 주세요!')
### 1. 최초 코드 시작
if __name__ == "__main__":
main()
결과
클래스 생성 되었습니다.
<__main__.LibraryKiosk object at 0x00000292562FCE50>
<도서 키오스크 메뉴>
1. 도서 입고
2. 도서 대출
3. 도서 반납
4. 종료
원하는 번호(1~4)를 선택하세요 : 1
도서 번호를 입력해 주세요 : 001
도서 제목을 입력해 주세요 : 기초
입고할 권수를 입력해 주세요 : 5
도서번호 : 001 /제목 : 기초 / 입고수량 : 5 입고 성공!!
<도서 키오스크 메뉴>
1. 도서 입고
2. 도서 대출
3. 도서 반납
4. 종료
원하는 번호(1~4)를 선택하세요 : 2
대출할 도서번호를 입력해주세요 : 001
대출이 완료되었습니다.
도서번호:001 / 제목:기초 / 남은재고수량:4
<도서 키오스크 메뉴>
1. 도서 입고
2. 도서 대출
3. 도서 반납
4. 종료
원하는 번호(1~4)를 선택하세요 : 3
반납할 도서번호를 입력해주세요 : 001
도서번호:001 / 제목:기초 / 남은재고수량:5
<도서 키오스크 메뉴>
1. 도서 입고
2. 도서 대출
3. 도서 반납
4. 종료
원하는 번호(1~4)를 선택하세요 : 4
종료 선택
728x90
'Back-End > Python' 카테고리의 다른 글
[Python] 파이썬 알고리즘 - 제너레이터(Generator) (1) | 2023.11.16 |
---|---|
[Python] 파이썬의 기초 - 매개변수, 기본값(default) (2) | 2023.11.14 |
[Python] 파이썬 알고리즘 - 유니코드, 클로저(closure), 데코레이터 (3) | 2023.11.14 |
[Python] 파이썬 실습 - 도서 입고/대출/반납 관리를 위한 키오스크 만들기 (2) | 2023.11.13 |
[Python] 파이썬 환경 설정 - anaconda3, jupyter notebook (2) | 2023.11.13 |