λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
IT/Python

[Python] 3. λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ λ°μ½”λ ˆμ΄ν„° μ‹€μŠ΅ (νšŒμ›κ°€μž… κΈ°λŠ₯ μΆ”κ°€)

by ITyranno 2023. 11. 20.
728x90
λ°˜μ‘ν˜•

 

 

 

 

 

 

 

ν”„λ‘œκ·Έλž˜λ° 세계λ₯Ό νƒκ΅¬ν•©μ‹œλ‹€.

 

 

 

 

 

 

 

* class μ‚¬μš©ν•œ μ‹€μŠ΅μ€ μ•„λž˜ κ²Œμ‹œκΈ€ μ°Έκ³  λ°”λžλ‹ˆλ‹€.

 

2023.11.14 - [IT/Python] - [Python] λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ μ‹€μŠ΅ (class 이용)

 

[Python] λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ μ‹€μŠ΅ (class 이용)

ν”„λ‘œκ·Έλž˜λ° 세계λ₯Ό νƒκ΅¬ν•©μ‹œλ‹€. λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ μ‹€μŠ΅ [λ―Έμ…˜] λ„μ„œλͺ©λ‘ : μƒˆλ‘œμš΄ 책이 λ„μ„œκ΄€μ— [μž…κ³ ]λ˜μ—ˆμ„ λ•Œ ν”„λ‘œκ·Έλž¨ μž‘μ„± λ„μ„œλŒ€μΆœ : λ„μ„œ λͺ©λ‘

ityranno.tistory.com

 

 

 

* decorator μ‚¬μš©ν•œ μ‹€μŠ΅μ€ μ•„λž˜ κ²Œμ‹œκΈ€ μ°Έκ³  λ°”λžλ‹ˆλ‹€.

 

2023.11.16 - [IT/Python] - [Python] 2. λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ λ°μ½”λ ˆμ΄ν„° μ‹€μŠ΅ (decorator 이용)

 

[Python] 2. λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ λ°μ½”λ ˆμ΄ν„° μ‹€μŠ΅ (decorator

ν”„λ‘œκ·Έλž˜λ° 세계λ₯Ό νƒκ΅¬ν•©μ‹œλ‹€. * class μ‚¬μš©ν•œ μ‹€μŠ΅μ€ μ•„λž˜ κ²Œμ‹œκΈ€ μ°Έκ³  λ°”λžλ‹ˆλ‹€. 2023.11.14 - [IT/Python] - [Python] λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ μ‹€μŠ΅ (class 이용) [Python]

ityranno.tistory.com

 

 

 

 

λ„μ„œ μž…κ³ /λŒ€μΆœ/λ°˜λ‚© 관리λ₯Ό μœ„ν•œ ν‚€μ˜€μŠ€ν¬ 파이썬 ν”„λ‘œκ·Έλž¨ λ°μ½”λ ˆμ΄ν„° μ‹€μŠ΅ (νšŒμ›κ°€μž… κΈ°λŠ₯ μΆ”κ°€)

 

 

 

<쑰건>

""" <졜초 메뉴> : νšŒμ› λ²ˆν˜ΈλŠ” λ¬Έμžμ—΄ 무엇이든 상관없이 등둝 : μ„œλΉ„μŠ€ μ’…λ£Œ μ‹œ ν”„λ‘œκ·Έλž¨ 자체 μ’…λ£Œ [μ„œλΉ„μŠ€ μ΄μš©μ„ μœ„ν•œ νšŒμ› 인증]

νšŒμ›λ²ˆν˜Έ 등둝
νšŒμ› 인증
μ„œλΉ„μŠ€ μ’…λ£Œ
<νšŒμ› 인증이 된 경우 메뉴> : λ„μ„œ 정보 : λ„μ„œλ²ˆν˜Έ, λ„μ„œμ œλͺ©, 재고ꢌ수 : λ„μ„œ μƒνƒœ 확인 : νŠΉμ • λ„μ„œμ— λŒ€ν•œ 정보 쑰회(λ„μ„œλ²ˆν˜Έ, λ„μ„œμ œλͺ©, ν˜„μž¬κΆŒμˆ˜/μ „μ²΄κΆŒμˆ˜) [λ„μ„œ μ„œλΉ„μŠ€ 메뉴]

λ„μ„œ μž…κ³ 
λ„μ„œ λŒ€μΆœ
λ„μ„œ λ°˜λ‚©
λ„μ„œ μƒνƒœ 확인
λ„μ„œ 전체 λͺ©λ‘ 확인
λ„μ„œ μ„œλΉ„μŠ€ μ’…λ£Œ(νšŒμ› 인증 λ©”λ‰΄λ‘œ κ°‘λ‹ˆλ‹€.)
"""

 

 

 

<μž‘μ„± μ½”λ“œ>

 

### κΈ°λŠ₯을 μˆ˜ν–‰ν•  클래슀(λͺ¨λ“ˆ λ˜λŠ” 라이브러리) μ •μ˜
class LibraryKiosk :
    ### 클래슀 μƒμ„±μž μ •μ˜
    def __init__(self) :
        ### νšŒμ› λͺ©λ‘κ³Ό λ„μ„œ λͺ©λ‘μ„ μ €μž₯ν•  λ”•μ…”λ„ˆλ¦¬ λ³€μˆ˜ 생성
        # - νšŒμ›λ²ˆν˜Έ 정보 λ‹΄κΈ°
        self.members = {}
        # - λ„μ„œλ²ˆν˜Έ, λ„μ„œμ œλͺ©, λ„μ„œμž¬κ³ μˆ˜λŸ‰ 정보 λ‹΄κΈ°
        self.books = {}

    # -----------------------------------------------------------------------

    ### νšŒμ› 등둝 κΈ°λŠ₯ μ •μ˜ν•˜κΈ°
    def add_member(self, member_id) :
        if member_id not in self.members :
            self.members[member_id] = True
            print(f"νšŒμ›λ²ˆν˜Έ:{member_id} 등둝 성곡!!")
        else :
            print("이미 λ“±λ‘λœ νšŒμ›λ²ˆν˜Έμž…λ‹ˆλ‹€.")

    ### νšŒμ› 인증 κΈ°λŠ₯ μ •μ˜ν•˜κΈ°
    def auth_member(self, member_id) :
        if member_id in self.members :
            print(f"νšŒμ›λ²ˆν˜Έ:{member_id} 인증 성곡!!")
            return True
        else :
            print("λ“±λ‘λ˜μ§€ μ•Šμ€ νšŒμ›λ²ˆν˜Έμž…λ‹ˆλ‹€.")
            return False

    ### λ„μ„œ μƒνƒœ 확인 κΈ°λŠ₯ μ •μ˜ν•˜κΈ°
    def check_book(self, book_id) :
        if book_id in self.books :
            book = self.books[book_id]
            print(f"λ„μ„œλ²ˆν˜Έ:{book_id} / 제λͺ©:{book['title']} / ν˜„μž¬ 재고:{book['quantity']}ꢌ")
        else :
            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):
            ## λŒ€μΆœν•  λ„μ„œλ²ˆν˜Έκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인
            # - μ‘΄μž¬ν•œλ‹€λ©΄ μˆ˜λŸ‰λ§Œ κ°μ†Œμ‹œν‚€κΈ°
            func(self, book_id)
        return wrapper

    def return_book_decorator(func) :
        def wrapper(self, book_id):
            ## λ°˜λ‚©ν•  λ„μ„œλ²ˆν˜Έκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인
            # - μ‘΄μž¬ν•œλ‹€λ©΄ μˆ˜λŸ‰λ§Œ μ¦κ°€μ‹œν‚€κΈ°
            func(self, book_id)
        return wrapper

    # -----------------------------------------------------------------------

    ### λ„μ„œμž…κ³  κΈ°λŠ₯ μ •μ˜ν•˜κΈ°
    @add_book_decorator
    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} μž…κ³  성곡!!" )

    ### λŒ€μΆœ κΈ°λŠ₯ μ •μ˜ν•˜κΈ°
    @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(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("ν•΄λ‹Ή λ„μ„œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.")

 

 

### 2. μ΅œμ΄ˆμ— μ‹€ν–‰ν•  κΈ°λŠ₯(ν•¨μˆ˜) μ •μ˜
def main():
    ### 클래슀 μƒμ„±ν•˜κΈ°
    # - 졜초 ν•œλ²ˆ : ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ ν΄λž˜μŠ€λŠ” μ†Œλ©Έ(λ©”λͺ¨λ¦¬ 곡간 μ‚­μ œ)λ©λ‹ˆλ‹€.
    kiosk = LibraryKiosk()
    print(kiosk)

    ###3. 메뉴 선택 보여주기
    while True:
        print('<μ„œλΉ„μŠ€ μ΄μš©μ„ μœ„ν•œ νšŒμ› 인증>')
        print('1. νšŒμ›λ²ˆν˜Έ 등둝')
        print('2. νšŒμ› 인증')
        print('3. μ„œλΉ„μŠ€ μ’…λ£Œ')

        choice = input('μ›ν•˜λŠ” 번호(1~3)λ₯Ό μ„ νƒν•˜μ„Έμš” : ')

        if choice == '1':
            member_id = input('νšŒμ› 번호λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš” : ')
            kiosk.add_member(member_id)
        elif choice == '2':
            member_id = input('νšŒμ› 번호λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš” : ')
            if kiosk.auth_member(member_id):
                while True:
                    print('<λ„μ„œ μ„œλΉ„μŠ€ 메뉴>')
                    print('1. λ„μ„œ μž…κ³ ')
                    print('2. λ„μ„œ λŒ€μΆœ')
                    print('3. λ„μ„œ λ°˜λ‚©')
                    print('4. λ„μ„œ μƒνƒœ 확인')
                    print('5. λ„μ„œ 전체 λͺ©λ‘ 확인')
                    print('6. λ„μ„œ μ„œλΉ„μŠ€ μ’…λ£Œ')

                    choice = input('μ›ν•˜λŠ” 번호(1~6)λ₯Ό μ„ νƒν•˜μ„Έμš” : ')

                    if choice == '1':
                        book_id = input('λ„μ„œ 번호λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš” : ')
                        title = input('λ„μ„œ 제λͺ©μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš” : ')
                        quantity = int(input('μž…κ³ ν•  ꢌ수λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš” : '))
                        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':
                        book_id = input("확인할 λ„μ„œλ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” :")
                        kiosk.check_book(book_id)
                    elif choice == '5':
                        for book_id, book_info in kiosk.books.items():
                             print(f"λ„μ„œλ²ˆν˜Έ:{book_id} / λ„μ„œμ œλͺ©:{book_info['title']} / 재고ꢌ수:{book_info['quantity']}")
                    elif choice == '6':
                        print('λ„μ„œ μ„œλΉ„μŠ€ μ’…λ£Œ')
                        break
                    else:
                        print('잘λͺ» μ„ νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 선택해 μ£Όμ„Έμš”!')
        elif choice == '3':
            print('μ„œλΉ„μŠ€ μ’…λ£Œ')
            break
        else:
            print('잘λͺ» μ„ νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 선택해 μ£Όμ„Έμš”!')

### 1. 졜초 μ½”λ“œ μ‹œμž‘
if __name__ == "__main__":
    ### μ΅œμ΄ˆμ— μ‹€ν–‰ν•  κΈ°λŠ₯(ν•¨μˆ˜) 호좜
    main()

 

 

 

<μ‹€ν–‰ ν™”λ©΄>

 

 

728x90
λ°˜μ‘ν˜•

loading