用python写一个图书管理系统。管理系统功能解释(包括但不局限于): 1) 录入:即增加一本书的记录到系统中。 2) 存储:即将图书信息保存在数据库中。 3) 查询:可根据书名、编号查找相关图书信息,若找到显示该书全部信息。用户可以查询已借的所有图书。管理员可以查询任一本书的信息和状态。管理员还可以总览所有书的信息和状态。 4) 修改:可修改一本书的除书名外其它信息。 5) 图书状态:提供该书在库、不在库的状态,该图书还有几个副本可借,归还期限、已超期时间等。 6) 借书:用户借书,有超期图书未还不能借新书。 7) 还书:用户还书。
时间: 2024-03-17 12:47:56 浏览: 17
以下是一个简单的基于Python的图书管理系统示例代码,使用SQLite作为数据库:
```python
import sqlite3
from datetime import datetime, timedelta
# 连接数据库
conn = sqlite3.connect('library.db')
# 创建图书表
conn.execute('CREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY, title TEXT, author TEXT, publisher TEXT, status TEXT, copies INTEGER)')
# 创建用户表
conn.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, borrowed INTEGER, borrowed_date TEXT)')
# 初始化用户表
conn.execute("INSERT INTO users (id, name, borrowed, borrowed_date) VALUES (1, 'user1', 0, '')")
conn.execute("INSERT INTO users (id, name, borrowed, borrowed_date) VALUES (2, 'user2', 0, '')")
# 初始化图书表
conn.execute("INSERT INTO books (id, title, author, publisher, status, copies) VALUES (1, 'book1', 'author1', 'pub1', 'in', 2)")
conn.execute("INSERT INTO books (id, title, author, publisher, status, copies) VALUES (2, 'book2', 'author2', 'pub2', 'in', 1)")
conn.execute("INSERT INTO books (id, title, author, publisher, status, copies) VALUES (3, 'book3', 'author3', 'pub3', 'out', 0)")
# 保存更改
conn.commit()
# 查询图书
def search_books(search_type, keyword):
cursor = conn.cursor()
if search_type == 'id':
cursor.execute(f"SELECT * FROM books WHERE id={keyword}")
elif search_type == 'title':
cursor.execute(f"SELECT * FROM books WHERE title='{keyword}'")
else:
cursor.execute(f"SELECT * FROM books WHERE author='{keyword}'")
books = cursor.fetchall()
for book in books:
print(f"ID: {book[0]} | Title: {book[1]} | Author: {book[2]} | Publisher: {book[3]} | Status: {book[4]} | Copies: {book[5]}")
# 查询用户已借图书
def search_borrowed_books(user_id):
cursor = conn.cursor()
cursor.execute(f"SELECT borrowed FROM users WHERE id={user_id}")
borrowed = cursor.fetchone()[0]
if borrowed == 0:
print('You have not borrowed any books yet.')
else:
cursor.execute(f"SELECT * FROM books WHERE id={borrowed}")
book = cursor.fetchone()
borrowed_date = datetime.strptime(cursor.execute(f"SELECT borrowed_date FROM users WHERE id={user_id}").fetchone()[0], '%Y-%m-%d %H:%M:%S.%f')
due_date = borrowed_date + timedelta(days=7)
days_overdue = (datetime.now() - due_date).days
if days_overdue > 0:
print(f"You have {days_overdue} days overdue for this book.")
print(f"ID: {book[0]} | Title: {book[1]} | Author: {book[2]} | Publisher: {book[3]} | Status: {book[4]} | Copies: {book[5]} | Due Date: {due_date.date()}")
# 查询所有图书
def view_all_books():
cursor = conn.cursor()
cursor.execute(f"SELECT * FROM books")
books = cursor.fetchall()
for book in books:
print(f"ID: {book[0]} | Title: {book[1]} | Author: {book[2]} | Publisher: {book[3]} | Status: {book[4]} | Copies: {book[5]}")
# 借书
def borrow_book(user_id, book_id):
cursor = conn.cursor()
cursor.execute(f"SELECT status, copies FROM books WHERE id={book_id}")
status, copies = cursor.fetchone()
if status == 'out':
print('This book is not available.')
elif copies == 0:
print('All copies of this book have been borrowed.')
else:
cursor.execute(f"UPDATE books SET copies={copies-1} WHERE id={book_id}")
cursor.execute(f"UPDATE books SET status='out' WHERE id={book_id}")
cursor.execute(f"UPDATE users SET borrowed={book_id}, borrowed_date='{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')}' WHERE id={user_id}")
conn.commit()
print('Book borrowed successfully.')
# 还书
def return_book(user_id):
cursor = conn.cursor()
cursor.execute(f"SELECT borrowed FROM users WHERE id={user_id}")
borrowed = cursor.fetchone()[0]
if borrowed == 0:
print('You have not borrowed any books yet.')
else:
cursor.execute(f"UPDATE books SET copies=copies+1 WHERE id={borrowed}")
cursor.execute(f"UPDATE books SET status='in' WHERE id={borrowed}")
cursor.execute(f"UPDATE users SET borrowed=0, borrowed_date='' WHERE id={user_id}")
conn.commit()
print('Book returned successfully.')
# 修改图书信息
def update_book(book_id, field, value):
cursor = conn.cursor()
cursor.execute(f"UPDATE books SET {field}='{value}' WHERE id={book_id}")
conn.commit()
print('Book updated successfully.')
# 关闭数据库连接
conn.close()
```
你可以根据自己的需要进行更改和扩展。 请注意,此示例代码仅用于演示目的,可能需要添加更多的错误检查和异常处理。