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
반응형

+ Recent posts