class Book():
def __init__(self,title,author,isbn,copies):
self.title = title
self.author = author
self.isbn = isbn
self.copies = copies
def display_info(self):#显示图书的基本信息,包括标题、作者、ISBN 和副本数量。
print(f"Title: {self.title}")
print(f"Author: {self.author}")
print(f"ISBN: {self.isbn}")
print(f"Copies: {self.copies}")
def borrow(self):
if self.copies>0:
self.copies=self.copies-1
print(f'当前{self.title}还剩下{self.copies}本书')
else:
print(f'当前{self.title}没有了')
def return_book(self):
self.copies=self.copies+1
print(f'当前{self.title}还剩下{self.copies}本书')
class EBook(Book):
def __init__(self,title,author,isbn,copies,file_size_mb):
super().__init__(title,author,isbn,copies)
self.file_size_mb=file_size_mb
def display_info(self):
super().display_info()
print(f"File Size: {self.file_size_mb} MB")
class PrintedBook(Book):
def __init__(self,title,author,isbn,copies,pages):
super().__init__(title,author,isbn,copies)
self.pages=pages
def display_info(self):
super().display_info()
print(f"这本书有{self.pages}页")
class User():
def __init__(self,user_id,name):
self.user_id=user_id
self.name=name
self.borrowed_books=[]
def borrow_book(self,book: Book):
if book not in self.borrowed_books:
self.borrowed_books.append(book)
def return_book(self,book: Book):
if book in self.borrowed_books:
self.borrowed_books.remove(book)
def display_borrowed_books(self):
for book in self.borrowed_books:
print(f"Title: {book.title},Author: {book.author},ISBN: {book.isbn},Copies: {book.copies}")
class Librarian(User):
def __init__(self, user_id, name, library):
super().__init__(user_id, name)
self.library = library #Librarian管理的library
def add_book(self, book: Book):
self.library.add_book(book) #self.library是一个library类的实例,再调用library类的方法add_book
def remove_book(self, book: Book):
self.library.remove_book(book)
class Library():
def __init__(self):
self.books = []
def add_book(self, book: Book):
self.books.append(book)
def remove_book(self, book: Book):
self.books.remove(book)
def display_available_books(self):
for book in self.books:
book.display_info()
def find_book_by_title(self, title: str):
for book in self.books:
if book.title == title:
return book
return None
def find_book_by_author(self, author: str):
for book in self.books:
if book.author == author:
return book
return None
def total_books(self):
return len(self.books)
def total_ebooks(self):
return len([book for book in self.books if isinstance(book, EBook)])
def total_printed_books(self):
return len([book for book in self.books if isinstance(book, PrintedBook)])
######实际运用#######
book1 = Book("Effective Python", "Brett Slatkin", "978-1491946008", 10)
book1.display_info()
book1.borrow()
book1.return_book()
book2=EBook("a11","adsa","49845156",10,1999)
book2.display_info()
book3=PrintedBook("b22","wqduyg","159840",10,199999)
book3.display_info()
book4=Book("高等数学",'同济大学数学系','vsaivbn',165)
book4.display_info()
xpp=User("50320225001","xpp")
xpp.borrow_book(book1)
xpp.display_borrowed_books()
xxzyzx=Library()
xxzyzx.add_book(book1)
xxzyzx.add_book(book2)
xxzyzx.add_book(book3)
xxzyzx.remove_book(book2)
xxzyzx.display_available_books()
gjg=Librarian("50320225019","gjg",xxzyzx)
gjg.remove_book(book3)
xxzyzx.display_available_books()
12-07
2060
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-05
7427
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-16
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)