코딩헤딩

python 연습문제2 (도서관리 키오스크 프로그램 만들기) 본문

python

python 연습문제2 (도서관리 키오스크 프로그램 만들기)

멈머이 2023. 11. 14. 01:15
728x90

도서 입고/대출/반납 관리를 위한 키오스크 프로그램 만들기.

 

*요구사항.

- 도서 목록 : 새로운 책이 도서관에 [입고]되었을 때 프로그램 작성.
- 도서 대출 : 도서 목록에서 임의 책을 빌리고자 할 때 [대출] 프로그램 작성.
- 도서 반납 : 대출한 도서를 [반납]하고자 할 때 프로그램 작성.
- 종료하기 : 종료하기에 대한 프로그램 작성.
- 도서 입고/대출/반납/종료 중 원하는 것을 선택했을 때 위 내용 수행.
- 프로그램을 종료하기 전까지는 위 내용은 누구든지 서비스를 받을 수 있도록 반복 실행.
- 도서에 대한 확인 값은 자유롭게 정의.

- class 생성해서 만들기

 

 

*기능을 수행할 클래스(모듈 or 라이브러리) 정의

class LibraryKiosk :

 

*클래스 생성자 정의

def __init__(self) :
    self.books = {}
    print("클래스 생성 되었습니다.")

도서 목록을 저장할 딕셔너리 변수 생성
도서번호, 도서제목, 도서재고수량 정보 담기

 

*도서 입고 기능 정의

def add_book(self, book_id, title, quantity) :
    if book_id in self.books :
        # self.books[book_id]["quantity"] = self.books[book_id]["quantity"] + quantity
        self.books[book_id]["quantity"] += quantity
    else :
        self.books[book_id] = {"title":title, "quantity":quantity}
        
    print(f"도서번호:{book_id} / 제목:{title} / 입고수량:{quantity} 입고 성공!!")

입고할 도서번호 존재여부 확인

self.books[book_id]["quantity"] += quantity를 풀어쓰면 self.books[book_id]["quantity"] = self.books[book_id]["quantity"] + quantity가 된다.
        

*대출기능 정의

def borrow_booK(self, book_id):
    if (book_id in self.books) and (self.books[book_id]["quantity"] > 0):
        # self.books[book_id}["quantity"] = self.books[book_id}["quantity"] - 1
        self.books[book_id]["quantity"] -= 1
        print(f"도서번호:{book_id} / 제목:{self.books[book_id]['title']} / 남은 재고수량:{self.books[book_id]['quantity']}")
    else:
        print("도서가 존재하지 않거나, 대출할 재고가 없습니다.")

대출하고자 하는 도서번호에 해당하는 재고수량 확인하기

self.books[book_id]["quantity"] -= 1을 풀어쓰면 self.books[book_id}["quantity"] = self.books[book_id}["quantity"] - 1이다.

*반납기능 정의

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("해당 도서가 존재하지 않습니다.")

반납할 도서가 도서목록에 있는지 여부 확인, 없다면 없다고 알려준다.

 

class모듈이 완성되었다. 위의 과정에서 앞으로 사용될 함수를 정의해 주었으며, 기능을 만들었다.

만들어진 기능은 작동하는 영역에서 호출하여 사용한다.

 

↓ class 부분 전체.

class LibraryKiosk :
    def __init__(self) :
        self.books = {}
        print("클래스 생성 되었습니다.")

    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 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("도서가 존재하지 않거나, 대출할 재고가 없습니다.")


    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("해당 도서가 존재하지 않습니다.")

 

 

*최초 코드 시작

if __name__ == "__main__" :
    main()

최초에 실행할 기능(함수) 호출

 

*최초에 실행할 기능(함수) 정의

def main() :
    kiosk = LibraryKiosk()
    print(kiosk)

클래스 생성하기
최초 한번 : 프로그램이 종료되면 클래스는 소멸(메모리 공간 삭제)됩니다.

 

*메뉴 선택 보여주기 -> 1번 도서입고 동작

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("입고할 권수를 입력해 주세요 : "))
        #print(f"{book_id} / {title} / {quantity}")

        kiosk.add_book(book_id, title, quantity)

클래스 내부의 입고 기능 호출하기

 

*대출 선택 보여주기 -> 2번 도서대출기능 동작

elif choice == "2" :
    # print("대출 선택")
    book_id = input("대출할 도서번호를 입력해 주세요. : ")

    kiosk.borrow_booK(book_id)

 

앞서 만든 클래스 내부의 대출 기능 호출.

 

*반납 선택 보여주기 -> 3번 도서반납기능 동작

elif choice == "3" :
    # print("반납 선택")
    book_id = input("반납할 도서번호를 입력해 주세요. : ")

    kiosk.return_book(book_id)

 

앞서 만든 클래스 내부의 반납 기능 호출.

 

*종료 선택 및 1,2,3,4번 목록 이외의 값 입력 시 알림 보여주기

elif choice == "4" :
    print("종료 선택")
    break
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("입고할 권수를 입력해 주세요 : "))
            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("잘못 선택...다시 선택해 주세요!!")
    
if __name__ == "__main__" :
    main()

 

1번 매뉴를 실행하면 도서를 등록할 수 있는 input창이 나온다.

양식에 따라 정보를 입력해 주면 된다.

2번 매뉴를 실행하면 도서 대출 기능이 작동한다.

도서 번호를 입력하면 앞서 입력한 도서의 재고 수량이 1씩 감소하게 된다.

3번 매뉴를 실행하면 도서 반납 기능이 작동한다.

대출기능에서 재고수량이 1이 감소했다면 3번 메뉴를 실행하면 재고수량이 1 늘어나게 된다.

4번 매뉴 종료.

잘못된 번호를 선택 시 다음과 같은 알림을 준다.

728x90