①利用字典和列表来管理书籍、借阅者及借阅记录;
②每本书的属性包括:书名、作者、出版年份、是否被借出等;
③每个借阅者的属性包括:姓名、已借书籍列表;
④具备书籍添加、借阅和归还功能;
⑤保存每次借阅和归还的记录,包括借阅者、书籍和日期。
代码:
#图书管理系统
import datetime
books = [] #记录书的属性
readers = {} #记录借阅者的信息
records = [] #记录借阅记录
#函数功能:添加书籍
def add_book(book_name, author, year_publication):
book = {
'book_name': book_name,
'author': author,
'year_publication': year_publication,
'is_borrowed': False,
'borrower': []
}
books.append(book)
print(f"书籍《{book_name}》已添加。")
#函数功能:借阅书籍
def borrow_book(reader_name, book_name):
#查找书籍
for book in books:
if book['book_name'] == book_name:
if book['is_borrowed']:
print(f"书籍《{book_name}》已全部借出,无法借阅。")
return
#添加借阅者名字到图书信息
if reader_name not in readers:
readers[reader_name] = {"name": reader_name, 'borrowed_books': []}
book['borrower'].append(reader_name)
readers[reader_name]['borrowed_books'].append(book_name)
records.append({'reader': reader_name, 'book': book_name,
'date':datetime.datetime.now(), 'action': 'borrow'})
#检查是否已全部借出
if len(book['borrower']) >= 4: #假设同一本书有4本
book['is_borrowed'] = True
print(f"借阅者 '{reader_name}' 已成功借阅书籍《{book_name}》。")
return
print(f"未找到书籍《{book_name}》。")
#函数功能:归还书籍
def return_book(reader_name, book_name):
#查找书籍
for book in books:
if book['book_name'] == book_name:
if reader_name not in book['borrower']:
print(f"借阅者 '{reader_name}' 没有借阅书籍《{book_name}》。")
return
#从图书信息中移除借阅者名字
book['borrower'].remove(reader_name)
readers[reader_name]['borrowed_books'].remove(book_name)
records.append({'reader': reader_name, 'book': book_name,
'date': datetime.datetime.now(), 'action': 'return'})
book['is_borrowed'] = False
print(f"借阅者 '{reader_name}' 已成功归还书籍《{book_name}》。")
return
print(f"未找到书籍《{book_name}》。")
#函数功能:显示指定书籍的状态
def show_book_status(book_name):
found = False
for book in books:
if book['book_name'] == book_name:
found = True
status = '已全部借出' if book['is_borrowed'] else '可借'
print(f"《{book['book_name']}》,作者:{book['author']},"
f"出版年份:{book['year_publication']},状态:{status}")
break
if not found:
print(f"未找到书名为‘{book_name}'的书籍。")
# 函数功能:显示指定读者的借阅记录
def show_reader_records(reader_name):
if reader_name not in readers:
print(f"未找到名为‘{reader_name}'的读者。")
return
print(f"读者 '{reader_name}' 的借阅记录:")
for record in records:
if record['reader'] == reader_name:
action = "借阅" if record['action'] == 'borrow' else "归还"
print(f"于 {record['date'].strftime('%Y-%m-%d %H:%M:%S')}"
f"{action}《{record['book']}》.")
# 示例用法
add_book("活着", "余华", "1992")
add_book("围城", "钱钟书", "1947")
add_book("亲密关系","Rowland S. Miller", "2005")
borrow_book("小白粽", "围城")
borrow_book("小白", "亲密关系")
borrow_book("粽粽", "活着")
borrow_book("小粽", "围城")
borrow_book("大粽", "围城")
borrow_book("大白", "围城")
borrow_book("米宗", "围城") # 超过已有书籍数量
show_book_status("围城")
return_book("小粽", "围城")
show_book_status("围城")
show_reader_records("小粽")
示例输出:
书籍《活着》已添加。
书籍《围城》已添加。
书籍《亲密关系》已添加。
借阅者 '小白粽' 已成功借阅书籍《围城》。
借阅者 '小白' 已成功借阅书籍《亲密关系》。
借阅者 '粽粽' 已成功借阅书籍《活着》。
借阅者 '小粽' 已成功借阅书籍《围城》。
借阅者 '大粽' 已成功借阅书籍《围城》。
借阅者 '大白' 已成功借阅书籍《围城》。
书籍《围城》已全部借出,无法借阅。
《围城》,作者:钱钟书,出版年份:1947,状态:已全部借出
借阅者 '小粽' 已成功归还书籍《围城》。
《围城》,作者:钱钟书,出版年份:1947,状态:可借
读者 '小粽' 的借阅记录:
于 2024-09-25 14:20:11借阅《围城》.
于 2024-09-25 14:20:11归还《围城》.
进程已结束,退出代码为 0