728x90
반응형

주제 :  도서 입고/대출/반납 관리를 위한 키오스크 파이썬 프로그램 실습

 

1. 주요내용

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

2. 요구사항
- class 생성하여 처리

 

3. 내가 적어본 코드

class Library():
        def __init__(self):
            self.__library = list()
            
        def start_service(self):
            while True:
                start = input('어떤 서비스를 이용하시겠습니까? ')
                if start == "입고":
                    self.stock()
                elif start == "대출":
                    self.loan()
                elif start == "반납":
                     self.re()
                elif start == "종료":
                    self.end()
      
        def stock(self):
            print('입고정보를 입력해주세요')
            customer = { 'name':'', 'count': 0, 'bookName': ''}
            customer['name'] = input('이름을 입력하세요 : ')
            customer['count'] = int(input('입고 갯수를 입력하세요 : '))
            customer['bookName'] = input('책 제목 : ')
            print(f'입고정보 : {customer}')
            
            self.__library.append(customer)
            
            book_count = customer['count']
            book_name = [customer['bookName'] for customer in self.__library]
            
            if book_count >= 0:        
                print(f'책이 {book_count}권 입고 되었습니다')
                print(f'잔여 책 갯수: {len(self.__library)}')
                print(f'책 목록: {book_name}')
            return self.__library
            
        def loan(self):
            print('대출정보를 입력해주세요')
            customer = { 'name':'', 'count': 0, 'bookName': ''}
            customer['name'] = input('이름을 입력하세요 : ')
            customer['count'] = int(input('대출 갯수를 입력하세요 : '))
            customer['bookName'] = input('책 제목 : ')
            print(f'대출정보 : {customer}')
            
            removed_customers = []
            
            for i in self.__library:
                if i['bookName'] == customer['bookName']:
                    removed_customers.append(i)
        
            for i in removed_customers:
                self.__library.remove(i)
                
            new_book_name = [customer["bookName"] for customer in self.__library]
            book_count = customer['count']
            if book_count > 0:
                print(f'책이 {book_count}권 대출 되었습니다')
                print(f'잔여 책 갯수: {len(self.__library)}')
                print(f'책 목록: {new_book_name}')
            return self.__library
            
        def re(self):
            print('반납정보를 입력해주세요')
            customer = { 'name':'', 'count': '', 'bookName': ''}
            customer['name'] = input('이름을 입력하세요 : ')
            customer['count'] = int(input('반납 갯수를 입력하세요 : '))
            customer['bookName'] = input('책 제목 : ')

            self.__library.append(customer)
            
            book_count = customer['count']
            book_name = [customer['bookName'] for customer in self.__library]
            
            if book_count >= 0:
                print(f'책이 {book_count}권 반납 되었습니다')
                print(f'잔여 책 갯수: {len(self.__library)}')
                print(f'책 목록: {book_name}')
            return self.__library

        def end(self):
            print('종료되었습니다')
            
if __name__ == '__main__':
    a = library()
    a.start_service()

 

3 -1. 코드 실행결과

 

4. 강사님 코드

- class와 main함수 따로 작성

### 기능을 수행할 클래스(모듈 or 라이브러리) 정의
class LibraryKiosk :
    ### 클래스 생성자 정의
    # self = 클래스의 모든 변수에 접근할 수 있도록 하는 것. 
    def __init__(self) :
        ### 도서 목록을 저장할 딕셔너리 변수 생성
        # - 도서번호, 도서제목, 도서재고수량 정보 담기
        self.books = {}
        print("클래스 생성")

    ### 도서입고 기능 정의하기|
    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} 입고성공:)")

        # 여기서 books는 key값만 list로 가져옴
        # 딕셔너리가 이미 만들어져있고 추가하기만 하면 됨
        # self.books[book_id] 이 형태는 key를 줄테니 값(딕셔너리)을 달라!
                     # self.books[book_id]["quantity"] 불러온 딕셔너리에서 또 값을 불러옴
        # self.books[book_id] = {"tilte" : tilte, "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'] -= 1
            print("대출이 완료되었습니다.")
            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("해당 도서가 존재하지 않습니다.")
### 2. 최초에 실행할 기능(함수)
def main() :
    ### 클래스 생성하기
    # - 최초 한번 : 프로그램이 종료되면 클래스는 소멸(메모리 공간 삭제)됩니다.
    kiosk = LibraryKiosk()
    print(kiosk)
    
    #print("main 함수 호출")
    ### 3. 메뉴 선택 보여주기
    while True :
        print("<도서 키오스크 메뉴>")
        print("1. 도서 입고")
        print("2. 도서 대출")
        print("3. 도서 반납")
        print("4. 종료")

        choice = input("원하는 번호(1~4)를 선택하세요 : ")

        if choice == "1" :
            # print("입고 선택")
            book_id = input("도서 번호를 입력해 주세요 : ")
            title = input("도서 제목를 입력해 주세요 : ")
            quantity = int(input("입고할 권수를 입력해 주세요 : "))
            # print(f"{book_id} / {title} / {quantity}")

            # - 클래스 내부의 입고 기능 호출하기
            kiosk.add_book(book_id, title, quantity)
            
        elif choice == "2" :
            # print("대출 선택")
            book_id = input("대출할 도서번호를 입력해주세요 : ")

            ### 클래스 내부의 대출 기능 호출하기
            kiosk.borrow_book(book_id)
            
        elif choice == "3" :
            # print("반납 선택")
            book_id = input("반납할 도서번호를 입력해주세요 : ")

            ### 클래스 내부의 반납 기능 호출하기
            kiosk.return_book(book_id)
            
        elif choice == "4" :
            print("종료 선택")
            break
        else :
            print("다시 선택해주세요")
### 1. 최초 코드 시작
if __name__ == "__main__":
    ### 최초에 실행할 기능(함수) 호출
    main()

 

4 -1. 코드 실행 결과

728x90
반응형

+ Recent posts