项目方案:图书管理系统
简介
图书管理系统是一个用于管理图书馆或书店书籍的系统,它可以帮助用户方便地查询、管理和借阅图书。本项目将使用Python语言开发一个基于命令行界面的图书管理系统。
功能需求
- 图书录入:管理员可以录入新的图书到系统中,包括图书名称、作者、出版日期等信息。
- 图书查询:用户可以通过图书名称或作者进行图书查询,系统会返回匹配的图书列表。
- 图书借阅:用户可以借阅图书,系统会记录借阅人和借阅日期,并将图书的库存数量减一。
- 图书归还:用户可以归还已借阅的图书,系统会记录归还日期,并将图书的库存数量加一。
- 图书删除:管理员可以删除系统中已有的图书。
- 图书统计:系统可以统计图书的总数量、已借阅数量和库存数量,并以图表的形式展示。
数据模型
根据上述功能需求,我们可以定义以下数据模型来表示图书和借阅信息:
Book 类
- 属性:
- name: str,图书名称
- author: str,作者
- publish_date: str,出版日期
- stock: int,库存数量
BorrowRecord 类
- 属性:
- book: Book,借阅的图书
- borrower: str,借阅人
- borrow_date: str,借阅日期
- return_date: str,归还日期
类设计
基于上述的数据模型,我们可以设计以下类来实现图书管理系统:
BookManagementSystem 类
- 方法:
- add_book(self, name: str, author: str, publish_date: str) -> None: 添加一本新的图书到系统中。
- delete_book(self, book: Book) -> None: 删除系统中的一本图书。
- search_books(self, keyword: str) -> List[Book]: 根据关键字搜索图书并返回匹配的图书列表。
- borrow_book(self, book: Book, borrower: str, borrow_date: str) -> None: 借阅一本图书。
- return_book(self, book: Book, return_date: str) -> None: 归还一本图书。
- get_book_statistics(self) -> Dict[str, int]: 统计图书的总数量、已借阅数量和库存数量,并返回统计结果。
- display_pie_chart(self) -> None: 展示图书的借阅状态占比。
代码示例
下面是一个简化的示例代码,实现了上述的类设计和相关功能:
from typing import List, Dict
class Book:
def __init__(self, name: str, author: str, publish_date: str):
self.name = name
self.author = author
self.publish_date = publish_date
self.stock = 0
class BorrowRecord:
def __init__(self, book: Book, borrower: str, borrow_date: str, return_date: str = ''):
self.book = book
self.borrower = borrower
self.borrow_date = borrow_date
self.return_date = return_date
class BookManagementSystem:
def __init__(self):
self.books = []
self.borrow_records = []
def add_book(self, name: str, author: str, publish_date: str) -> None:
book = Book(name, author, publish_date)
self.books.append(book)
def delete_book(self, book: Book) -> None:
self.books.remove(book)
def search_books(self, keyword: str) -> List[Book]:
return [book for book in self.books if keyword.lower() in book.name.lower() or keyword.lower() in book.author.lower()]
def borrow_book(self, book: Book, borrower: str, borrow_date: str) -> None:
if book.stock > 0:
book.stock -= 1
record = BorrowRecord(book, borrower, borrow_date)
self.borrow_records.append(record)
else:
print("该图书库存不足,无法借阅。")
def return_book(self, book: Book, return_date: str) -> None:
for record in self.borrow_records:
if record.book == book and record.return_date == '':
record.return_date = return_date
book.stock += 1
return
print("该图书未借出或已归