项目方案:图书管理系统

简介

图书管理系统是一个用于管理图书馆或书店书籍的系统,它可以帮助用户方便地查询、管理和借阅图书。本项目将使用Python语言开发一个基于命令行界面的图书管理系统。

功能需求

  1. 图书录入:管理员可以录入新的图书到系统中,包括图书名称、作者、出版日期等信息。
  2. 图书查询:用户可以通过图书名称或作者进行图书查询,系统会返回匹配的图书列表。
  3. 图书借阅:用户可以借阅图书,系统会记录借阅人和借阅日期,并将图书的库存数量减一。
  4. 图书归还:用户可以归还已借阅的图书,系统会记录归还日期,并将图书的库存数量加一。
  5. 图书删除:管理员可以删除系统中已有的图书。
  6. 图书统计:系统可以统计图书的总数量、已借阅数量和库存数量,并以图表的形式展示。

数据模型

根据上述功能需求,我们可以定义以下数据模型来表示图书和借阅信息:

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("该图书未借出或已归