编写程序完成以下要求:定义图书馆类Library、图书类Book、学生类Student。其中,图书馆类Library包含私有属性:图书总量和馆藏图书,并包含以下方法的定义: ①初始化方法:__init__(self),用于设置私有属性图书总量为0、馆藏图书为空字典{}。 ②获取图书总量:getTotalAmount (self),返回值为整数。 ③获取可借图书列表:getAvailable (self),返回值为以book对象为元素的列表。 ④添加图书:add (self, *books),没有返回值。 ⑤借阅图书:lendBook(self, student, bookname),返回值为逻辑型,表示借阅是否成功。 ⑥归还图书:returnBook(self, bookname),返回值为逻辑型,表示归还是否成功。 图书类Book包含私有属性:图书名称和作者,并包含以下方法的定义: ①初始化方法:__init__(self, name, author),用于将参数name赋值给私有属性图书名称以及将参数author赋值给私有属性图书作者。 ②文本化图书对象:__str__(self),用于在输出图书对象时,将图书对象转换成字符串对象。 ③获取图书名称:getName(self),用于获取图书对象的私有属性图书名称的值。 学生类Student包含私有属性:学生的学号和姓名,并包含以下方法的定义: ①初始化方法:__init__(self, id, name),用于将参数id赋值给私有属性学生学号以及将参数name赋值给私有属性学生姓名。 编写主程序代码,接收用户输入的图书信息(图书名称和作者),并对上述定义的类和方法进行测试。
时间: 2024-03-26 12:35:08 浏览: 92
下面是完整的程序代码:
```python
class Book:
def __init__(self, name, author):
self.__name = name
self.__author = author
def __str__(self):
return self.__name + ' by ' + self.__author
def getName(self):
return self.__name
class Library:
def __init__(self):
self.__totalAmount = 0
self.__books = {}
def getTotalAmount(self):
return self.__totalAmount
def getAvailable(self):
available_books = []
for book in self.__books.values():
if not book['borrowed']:
available_books.append(book['book'])
return available_books
def add(self, *books):
for book in books:
self.__totalAmount += 1
self.__books[self.__totalAmount] = {'book': book, 'borrowed': False}
def lendBook(self, student, bookname):
for book in self.__books.values():
if not book['borrowed'] and book['book'].getName() == bookname:
book['borrowed'] = True
return True
return False
def returnBook(self, bookname):
for book in self.__books.values():
if book['borrowed'] and book['book'].getName() == bookname:
book['borrowed'] = False
return True
return False
class Student:
def __init__(self, id, name):
self.__id = id
self.__name = name
def main():
library = Library()
while True:
print('1. Add book')
print('2. List available books')
print('3. Lend book')
print('4. Return book')
print('5. Exit')
choice = input('Enter your choice (1-5): ')
if choice == '1':
name = input('Enter book name: ')
author = input('Enter book author: ')
book = Book(name, author)
library.add(book)
print('Book added successfully.')
elif choice == '2':
available_books = library.getAvailable()
if len(available_books) == 0:
print('No available books.')
else:
print('Available books:')
for book in available_books:
print(book)
elif choice == '3':
id = input('Enter student ID: ')
name = input('Enter student name: ')
student = Student(id, name)
bookname = input('Enter book name: ')
if library.lendBook(student, bookname):
print('Book lent successfully.')
else:
print('Book not available for lending.')
elif choice == '4':
bookname = input('Enter book name: ')
if library.returnBook(bookname):
print('Book returned successfully.')
else:
print('Book not borrowed or not found.')
elif choice == '5':
break
else:
print('Invalid choice. Try again.')
if __name__ == '__main__':
main()
```
在主程序中,首先创建了一个空的图书馆对象`library`。然后进入一个无限循环,直到用户选择退出。
在每个循环中,程序打印菜单并提示用户输入选择。根据用户的选择,程序执行相应的操作:
1. 添加图书:用户输入图书名称和作者,然后创建一个新的`Book`对象并将其添加到图书馆中。
2. 列出可借图书:遍历图书馆中的所有图书,如果图书没有被借出,则将其添加到一个列表中并输出。
3. 借阅图书:用户输入学生的学号、姓名和要借阅的图书名称,然后创建一个新的`Student`对象,并调用`lendBook()`方法尝试借阅图书。如果借阅成功,则输出成功信息,否则输出失败信息。
4. 归还图书:用户输入要归还的图书名称,然后调用`returnBook()`方法尝试归还图书。如果归还成功,则输出成功信息,否则输出失败信息。
5. 退出程序:退出循环并结束程序。
注意,在`Library`类中,每个图书都用一个字典来表示,其中包含`'book'`和`'borrowed'`两个键。`'book'`键对应一个`Book`对象,而`'borrowed'`键对应一个布尔值,表示该图书是否已经被借出。这样做可以方便地跟踪每本图书的状态。
阅读全文