728x90
반응형
주제 : 도서 입고/대출/반납 관리를 위한 키오스크 파이썬 프로그램 실습
1. 주요내용 : 실습1에서 작성한 도서 관리 프로그램에 데코레이터를 적용하기
데코레이터 추가한 코드
### 기능을 수행할 클래스(모듈 or 라이브러리) 정의
class LibraryKiosk :
### 클래스 생성자 정의
# self = 클래스의 모든 변수에 접근할 수 있도록 하는 것.
def __init__(self) :
### 도서 목록을 저장할 딕셔너리 변수 생성
# - 도서번호, 도서제목, 도서재고수량 정보 담기
self.books = {}
print("클래스 생성")
#--------------------------------------------------------------
### 도서입고 데코레이터 함수 정의하기|
def add_book_decorator(func) :
def wrapper(self, book_id, title, quantity):
### 입고할 도서번호가 존재하는지 확인
# - 존재한다면 수량만 증가시키기
func(self, book_id, title, quantity)
return wrapper
### 도서대출 데코레이터 함수 정의하기
def borrow_book_decorator(func):
def wrapper(self, book_id, title, quantity):
### 대출하고자 하는 도서번호에 해당하는 재고수량 확인
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("도서가 존재하지 않거나, 대출할 재고가 없습니다.")
return wrapper
### 반납기능 데코레이터 함수 정의하기
def return_book_decorator(func) :
def wrapper(self, book_id, title, quantity):
# - 반납할 도서번호가 도서목록에 있는지 확인
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("해당 도서가 존재하지 않습니다.")
return wrapper
#--------------------------------------------------------------
### 도서입고 기능 정의하기
@add_book_decorator
def add_book(self, book_id, title, quantity) :
### 입고할 도서번호가 존재하는지 확인
# - 존재한다면 수량만 증가시키기
if book_id in self.books : # 여기서 books는 key값만 list로 가져옴
# self.books[book_id]["quantity"] = self.books[book_id]["quantity"] + quantity
self.books[book_id]["quantity"] += quantity
# - 존재하지 않는다면
else :
# {book_id : {"tilte" : tilte, "quantity" : quantity} }
# {"001" : {"tilte" : "파이썬 기초", "quantity" : 4} }
self.books[book_id] = {"title" : title, "quantity" : quantity}
print(f"도서번호 : {book_id} / 제목 : {title} / 입고수량 : {quantity} 입고성공:)")
### 도서 대출 기능 정의하기
@borrow_book_decorator
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("도서가 존재하지 않거나, 대출할 재고가 없습니다.")
### 반납 기능 정의하기
@return_book_decorator
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("해당 도서가 존재하지 않습니다.")
728x90
반응형
'Digital Boot > Python' 카테고리의 다른 글
[Python] 파이썬 데코레이터(Decorator) (2) | 2023.11.14 |
---|---|
[Python] 파이썬 매개변수 (1) | 2023.11.14 |
[Python] 파이썬 클로저(Closure) (0) | 2023.11.14 |
[Python] 파이썬 유니코드 프로그램 (1) | 2023.11.14 |
[Python] 파이썬 도서 관리 프로그램 만들기 실습 (1) | 2023.11.13 |