一、功能
二、表
books表:
reader表:
三、代码编写
import pymysql
import datetime
# 建立数据库连接
connection = pymysql.connect(
host='localhost', # 数据库主机名
port=3306, # 数据库端口号,默认为3306
user='root', # 数据库用户名
passwd='123456', # 数据库密码
db='tushuguanlixitong', # 数据库名称
charset='utf8' # 字符编码
)
def query(sql, one=False):
cursor = connection.cursor()
cursor.execute(sql)
if one:
return cursor.fetchone()
else:
return cursor.fetchall()
def update(sql):
cursor = connection.cursor()
result = cursor.execute(sql)
# 提交事务
connection.commit()
return result
def select_book():
# 创建一个数据库游标对象
cursor = connection.cursor()
# 定义SQL查询语句,从图书信息表表中选择所有数据
sql = 'select*from books;'
# 执行SQL查询语句
cursor.execute(sql)
# 提交事务,确保数据被正确写入数据库
connection.commit()
# 从游标中获取查询结果,保存到data变量中
data = cursor.fetchall()
# 导入pandas库中的DataFrame类
from pandas import DataFrame
# 显示DataFrame的前5行数据
df = DataFrame(data, columns=['book_name', 'book_id', 'book_status', 'book_ISBN', 'author', 'press', 'borrower',
'loan_time'])
df.head()
print(df.head())
class Book:
def __init__(self, book_name, book_id, book_status, book_isbn, author, press):
self.book_name = book_name
self.author = author
self.book_id = book_id
self.book_status = book_status
self.book_ISBN = book_isbn
self.press = press
def add_book():
cursor = connection.cursor()
sql = ('INSERT INTO books (book_name,book_id,book_status,book_ISBN,author,press)'
'VALUES(%s,%s,%s,%s,%s,%s)')
print('请输入添加图书信息:')
book = Book(None, None, None, None, None, None)
book.book_name = input('请输入图书名:')
book.book_id = input('请输入图书编号:')
book.book_status = input('请输入图书状态:')
book.book_ISBN = input('请输入图书ISBN码:')
book.author = input('请输入图书作者:')
book.press = input('请输入图书出版社:')
values = (book.book_name, book.book_id, book.book_status, book.book_ISBN, book.author, book.press)
cursor.execute(sql, values)
connection.commit()
print('图书添加成功')
def delete_book():
cursor = connection.cursor()
book_id = input("输入需要删除的图书号:")
result = query("select * FROM books where book_id = {}".format(book_id), one=True)
if result:
print("图书信息:".format(result))
chooice = input("是否删除? 1.yes,2.no")
if chooice == '1':
update("DELETE FROM books where book_id = {}".format(book_id))
print("成功删除")
else:
print("放弃删除")
else:
print("未查询到相关书籍信息~")
num = input("继续删除请输入1, 回车退回主菜单")
if num == "1":
delete_book()
def update_book():
cursor = connection.cursor()
book_id = input("输入需要删除的图书号:")
result = query("select * FROM books where book_id = {}".format(book_id), one=True)
if result:
print("图书信息:".format(result))
book_name = input("请输入修改书名:")
book_status = input("请输入图书状态:")
author = input("请输入修改作者:")
press = input("请输入修改出版社:")
update("update books set book_name = '{}',book_status = '{}',author = '{}',press = '{}' where book_id = {};"
.format(book_name, book_status, author, press, book_id))
print("更新成功")
else:
print("未查询到相关书籍信息~")
num = input("继续更新请输入1, 回车退回主菜单")
if num == "1":
update_book()
def select_reader():
# 创建一个数据库游标对象
cursor = connection.cursor()
# 定义SQL查询语句,从图书信息表表中选择所有数据
sql = 'select*from reader;'
# 执行SQL查询语句
cursor.execute(sql)
# 提交事务,确保数据被正确写入数据库
connection.commit()
# 从游标中获取查询结果,保存到data变量中
data = cursor.fetchall()
# 导入pandas库中的DataFrame类
from pandas import DataFrame
# 显示DataFrame的前5行数据
df = DataFrame(data, columns=['姓名', '编号', '身份', '部门'])
df.head()
print(df.head())
# 查询读者名单
class Read:
def __init__(self, read_name, read_id, read_identity, read_department):
self.read_name = read_name
self.read_id = read_id
self.read_identity = read_identity
self.read_department = read_department
def add_reader():
cursor = connection.cursor()
sql = 'INSERT INTO reader (read_name,read_id,read_identity,read_department) VALUES(%s,%s,%s,%s)'
print('添加人员:')
read = Read(None, None, None, None)
read.read_name = input('请输入读者姓名')
read.read_id = input('请输入读者编号')
read.read_identity = input('请输入读者身份')
read.read_department = input('请输入读者所在部门')
values = (read.read_name, read.read_id, read.read_identity, read.read_department)
cursor.execute(sql, values)
connection.commit()
print('读者添加成功!')
def borrow_book():
cursor = connection.cursor()
book_id = input("请输入需要借阅的图书号:")
result = query("select * from books where book_id={};".format(book_id), one=True)
print(result)
if result:
if result[2] == "出借":
print("抱歉,该书已经借出!")
else:
while True:
borrower = input("请输入借阅者的名字:")
if result:
return_time = input("请输入还书的时间;")
update("update books set return_time='{}' where book_id={};".format(return_time, book_id))
if borrower:
update("update books set borrower='{}' where book_id={};".format(borrower, book_id))
update("update books set book_status='出借' where book_id={};".format(book_id))
print("图书借阅成功~")
break
else:
print("没有这个读者,请重新输入")
else:
print("未查询到相关书籍信息~")
num = input("继续借阅请输入1, 回车退回主菜单")
if num == "1":
borrow_book()
def back_book():
cursor = connection.cursor()
book_id = input('请输入要归还的图书书号:')
result = query("select * from books where book_id={};".format(book_id), one=True)
if result:
if result[2] == '在架':
print("抱歉,该书在架请确认编号是否正确!")
else:
update("update books set borrower='' where book_id={};".format(book_id))
update("update books set book_status='在架' where book_id={};".format(book_id))
print("归还成功~")
else:
print("未查询到相关书籍信息~")
num = input("继续还书请输入1, 回车退回主菜单")
if num == "1":
back_book()
def time():
cursor = connection.cursor()
now = datetime.datetime.now()
cursor .execute("SELECT * FROM books WHERE return_time < %s", (now,))
book_name = cursor.fetchall()
print("图书归还超期:")
print(book_name)
# 查询临期图书(距离当前时间一周内到期)
cursor.execute("SELECT * FROM books WHERE return_time BETWEEN %s AND %s",
(now, now + datetime.timedelta(days=10)))
due_soon_books = cursor.fetchall()
print("距离图书(到期还有10天):")
def menu(): # 图书管理系统菜单
while True:
print("""
图书管理系统
1.查询图书
2.增加图书
3.借阅图书
4.归还图书
5.修改图书
6.删除图书
7.导入读者名单
8.查看读者名单
9.超期和临期查询
10.退出系统
""")
choice = input('请选择:')
if choice == '1':
select_book()
elif choice == '2':
add_book()
elif choice == '3':
borrow_book()
elif choice == '4':
back_book()
elif choice == '5':
update_book()
elif choice == '6':
delete_book()
elif choice == '7':
add_reader()
elif choice == '8':
select_reader()
elif choice == '9':
time()
elif choice == '10':
print('欢迎下次使用~~~~~~~')
break
else:
print('请输入正确序号')
menu()
本文转载自: https://blog.csdn.net/c79378205/article/details/135403942
版权归原作者 敲敲敲~ 所有, 如有侵权,请联系我们删除。
版权归原作者 敲敲敲~ 所有, 如有侵权,请联系我们删除。