본문 바로가기
수업자료

실습 : 도서관 관리 시스템

by ^..^v 2024. 7. 27.
728x90
반응형

도서관 관리 시스템

도서 대출, 반납, 조회 등의 기능을 제공하는 도서관 관리 시스템을 작성합니다. 

# 도서 목록
books = [
    {"title": "모비딕", "author": "허먼 멜빌", "isbn": "9781503280786", "available": True},
    {"title": "1984", "author": "조지 오웰", "isbn": "9780451524935", "available": True},
    {"title": "앵무새 죽이기", "author": "하퍼 리", "isbn": "9780061120084", "available": True}
]

# 사용자 목록
users = {
    "홍길동": {"borrowed_books": set()},
    "고길동": {"borrowed_books": set()},
    "신길동": {"borrowed_books": set()}
}

# 도서 대출
def borrow_book(user, isbn):
    for book in books:
        if book["isbn"] == isbn and book["available"]:
            book["available"] = False
            users[user]["borrowed_books"].add(isbn)
            return f"{book['title']} 책이 {user}님에게 대출되었습니다."
    return "책을 대출할 수 없습니다."

# 도서 반납
def return_book(user, isbn):
    if isbn in users[user]["borrowed_books"]:
        for book in books:
            if book["isbn"] == isbn:
                book["available"] = True
                users[user]["borrowed_books"].remove(isbn)
                return f"{book['title']} 책이 {user}님에게서 반납되었습니다."
    return f"책이 {user}님에게 대출되지 않았습니다."

# 도서 목록 조회
def list_books():
    available_books = [book for book in books if book["available"]]
    return available_books

# 사용자의 대출 도서 조회
def user_borrowed_books(user):
    return users[user]["borrowed_books"]

# 메뉴 출력
def print_menu():
    print("\n도서관 관리 시스템")
    print("1. 대출 가능한 도서 목록 보기")
    print("2. 도서 대출")
    print("3. 도서 반납")
    print("4. 대출한 도서 목록 보기")
    print("5. 종료")

# 메인 함수
def main():
    while True:
        print_menu()
        menu = input("원하는 작업의 번호를 입력하세요: ")

        if menu == "1":
            available_books = list_books()
            if available_books:
                print("\n대출 가능한 도서 목록:")
                for book in available_books:
                    print(f"{book['title']} - {book['author']} (ISBN: {book['isbn']})")
            else:
                print("\n대출 가능한 도서가 없습니다.")
        
        elif menu == "2":
            user = input("사용자 이름을 입력하세요: ").strip()
            if user not in users:
                print("사용자를 찾을 수 없습니다.")
                continue
            isbn = input("대출할 도서의 ISBN을 입력하세요: ").strip()
            message = borrow_book(user, isbn)
            print(message)
        
        elif menu == "3":
            user = input("사용자 이름을 입력하세요: ").strip()
            if user not in users:
                print("사용자를 찾을 수 없습니다.")
                continue
            isbn = input("반납할 도서의 ISBN을 입력하세요: ").strip()
            message = return_book(user, isbn)
            print(message)
        
        elif menu == "4":
            user = input("사용자 이름을 입력하세요: ").strip()
            if user not in users:
                print("사용자를 찾을 수 없습니다.")
                continue
            borrowed_books = user_borrowed_books(user)
            if borrowed_books:
                print("\n대출한 도서 목록:")
                for isbn in borrowed_books:
                    for book in books:
                        if book["isbn"] == isbn:
                            print(f"{book['title']} - {book['author']} (ISBN: {book['isbn']})")
            else:
                print("\n대출한 도서가 없습니다.")
        
        elif menu == "5":
            print("시스템을 종료합니다.")
            break
        
        else:
            print("잘못된 입력입니다. 다시 시도하세요.")

if __name__ == "__main__":
    main()

 


소스 코드 각 부분에 대한 설명입니다. 

books = [
    {"title": "모비딕", "author": "허먼 멜빌", "isbn": "9781503280786", "available": True},
    {"title": "1984", "author": "조지 오웰", "isbn": "9780451524935", "available": True},
    {"title": "앵무새 죽이기", "author": "하퍼 리", "isbn": "9780061120084", "available": True}
]

users = {
    "홍길동": {"borrowed_books": set()},
    "고길동": {"borrowed_books": set()},
    "신길동": {"borrowed_books": set()}
}

도서 목록과 사용자 목록을 정의합니다. 이는 프로그램에서 사용할 데이터 구조로 도서 목록은 책 제목, 저장, ISBN, 대출 가능 여부를 포함하는 사전(dict)의 리스트(list)로 구성되어 있으며, 사용자 목록은 사용자 이름을 키로 하는 사전(dict)으로 각 사용자는 대출한 도서의 ISBN을 저장하는 집합(set)을 가집니다. 

 

def borrow_book(user, isbn):
    for book in books:
        if book["isbn"] == isbn and book["available"]:
            book["available"] = False
            users[user]["borrowed_books"].add(isbn)
            return f"{book['title']} 책이 {user}님에게 대출되었습니다."
    return "책을 대출할 수 없습니다."

borrow_book 함수는 도서 대출 기능을 처리하는 함수로, 도서 ISBN을 기준으로 해당 도서를 찾고, 대출 가능한 상태이면 대출 처리 후 메시지를 반환합니다. 

 

def return_book(user, isbn):
    if isbn in users[user]["borrowed_books"]:
        for book in books:
            if book["isbn"] == isbn:
                book["available"] = True
                users[user]["borrowed_books"].remove(isbn)
                return f"{book['title']} 책이 {user}님에게서 반납되었습니다."
    return f"책이 {user}님에게 대출되지 않았습니다."

return_book 함수는 도서 반납 기능을 처리하는 함수로, 사용자가 대출한 도서 목록에서 ISBN을 찾고, 반납 처리 후 메시지를 반환합니다. 

 

def list_books():
    available_books = [book for book in books if book["available"]]
    return available_books

list_books 함수는 도서 목록 조회 기능을 처리하는 함수로, 대출 가능한 도서 목록을 반환합니다. 

 

def user_borrowed_books(user):
    return users[user]["borrowed_books"]

user_borrowed_books 함수는 사용자의 대출 도서 조회 기능을 처리하는 함수로, 특정 사용자가 대출한 도서 목록을 반환합니다.  

 

def print_menu():
    print("\n도서관 관리 시스템")
    print("1. 대출 가능한 도서 목록 보기")
    print("2. 도서 대출")
    print("3. 도서 반납")
    print("4. 대출한 도서 목록 보기")
    print("5. 종료")

print_menu 함수는 시스템의 메뉴를 출력해 주는 함수입니다. 

 

def main():
    while True:
        print_menu()
        menu = input("원하는 작업의 번호를 입력하세요: ")

        if menu == "1":
            available_books = list_books()
            if available_books:
                print("\n대출 가능한 도서 목록:")
                for book in available_books:
                    print(f"{book['title']} - {book['author']} (ISBN: {book['isbn']})")
            else:
                print("\n대출 가능한 도서가 없습니다.")
        
        elif menu == "2":
            user = input("사용자 이름을 입력하세요: ").strip()
            if user not in users:
                print("사용자를 찾을 수 없습니다.")
                continue
            isbn = input("대출할 도서의 ISBN을 입력하세요: ").strip()
            message = borrow_book(user, isbn)
            print(message)
        
        elif menu == "3":
            user = input("사용자 이름을 입력하세요: ").strip()
            if user not in users:
                print("사용자를 찾을 수 없습니다.")
                continue
            isbn = input("반납할 도서의 ISBN을 입력하세요: ").strip()
            message = return_book(user, isbn)
            print(message)
        
        elif menu == "4":
            user = input("사용자 이름을 입력하세요: ").strip()
            if user not in users:
                print("사용자를 찾을 수 없습니다.")
                continue
            borrowed_books = user_borrowed_books(user)
            if borrowed_books:
                print("\n대출한 도서 목록:")
                for isbn in borrowed_books:
                    for book in books:
                        if book["isbn"] == isbn:
                            print(f"{book['title']} - {book['author']} (ISBN: {book['isbn']})")
            else:
                print("\n대출한 도서가 없습니다.")
        
        elif menu == "5":
            print("시스템을 종료합니다.")
            break
        
        else:
            print("잘못된 입력입니다. 다시 시도하세요.")

main 함수는 사용자가 원하는 작업을 메뉴에서 선택, 입력하면, 각 메뉴 옵션에 따라 도서 목록 조회, 대출, 반납, 사용자의 대출 도서 조회 등의 기능을 수행합니다. 

사용자가 "1"을 입력하면 대출 가능한 도서 목록이 출력되고, 사용자가 "2"를 입력하고, 사용자 이름과 ISBN을 입력하면 도서가 대출되고, 사용자가 "3"을 입력하고, 사용자 이름과 ISBN을 입력하면 도서가 반납됩니다.
사용자가 "4"를 입력하고, 사용자 이름을 입력하면 사용자가 대출한 도서 목록이 출력되며, 사용자가 "5"를 입력하면 시스템이 종료됩니다.

 

728x90
반응형

댓글