新闻动态

教你用python实现一个无界面的小型图书管理系统

发布日期:2022-05-17 14:25 | 文章来源:CSDN

一、需求了解

功能模块

图书信息

二、环境准备

安装mysql数据库

参考文章:

MySQL数据库压缩版本安装与配置

MySQL msi版本下载安装图文教程

创建数据库表

  • 创建数据库

CREATE DATABASE bookmanage;

  • 使用数据库

use bookmanage;

  • 创建表

create table books(
id int unsigned primary key auto_increment not null,
name varchar(20) default “”,
position varchar(40) default “”,
status enum(‘在库', ‘出借') default ‘在库',
borrower varchar(20) default “”
);

  • 插入数据

insert into books(name, position) value (‘python从入门到放弃', ‘A-1-1');

  • 查询数据

select * from books where id=2;

  • 修改数据

update books set name=‘python';

  • 删除数据

delete from book where id=3;

三、代码实现

引入pymysql模块

  • 安装pymysql

命令:pip install pymysql

  • 封装操作数据库模块
# -*- coding: utf-8 -*-
"""
=============================== 
@Time : 2021/5/18 15:56
@Author  : flora.chen
@FileName: handle_mysql.py
@Software: PyCharm
===============================
"""
import pymysql
class MysqlDB:
 """
 操作mysql数据库
 """
 def __init__(self, host, user, pwd, database=None, port=3306):
  """
  初始化数据库链接
  :param host: 主机地址
  :param user: 用户名
  :param pwd: 密码
  :param database: 数据库名称,默认为空
  :param port: 端口号,默认3306
  """
  self.conn = pymysql.connect(
host=host,
user=user,
password=pwd,
database=database,
port=port,
cursorclass=pymysql.cursors.DictCursor
  )
  # 创建一个游标对象
  self.cur = self.conn.cursor()
 def update(self, sql):
  """
  进行增删改操作
  :param sql: 需要执行的SQL
  :return:
  """
  # 执行SQL
  result = self.cur.execute(sql)
  # 提交事务
  self.conn.commit()
  return result
 def query(self, sql, one=False):
  """
  进行查询操作
  :param one: 判断是要返回所有查询数据还是第一条,默认是所有
  :param sql: 要执行的SQL
  :return:
  """
  # 执行SQL
  self.cur.execute(sql)
  if one:
return self.cur.fetchone()
  else:
return self.cur.fetchall()
 def close(self):
  """
  断开游标,关闭数据库连接
  :return:
  """
  self.cur.close()
  self.conn.close()

if __name__ == "__main__":
 db = MysqlDB(host="localhost", user="root", pwd="root")
 print(db.query("select * from bookmanage.books"))
 # db.update("insert into bookmanage.books(name, position) value ('python从入门到放弃', 'A-1-1');")

图案管理系统后台实现

# -*- coding: utf-8 -*-
"""
=============================== 
@Time : 2021/5/18 16:39
@Author  : flora.chen
@FileName: bookmanager.py
@Software: PyCharm
===============================
"""
from handle_mysql import MysqlDB
db = MysqlDB(host="localhost", database="bookmanage", user="root", pwd="root")

class BookManage:
 """
 图书管理系统
 """
 @staticmethod
 def print_menu():
  """
  菜单打印
  :return:
  """
  print("---------------------菜单-------------------------")
  print("[1]: 添加图书")
  print("[2]: 修改图书")
  print("[3]: 删除图书")
  print("[4]: 查询图书")
  print("[5]: 图书列表")
  print("[6]: 出借图书")
  print("[7]: 归还图书")
  print("[8]: 退出")
 def add_book(self):
  """
  [1]: 添加图书
  :return:
  """
  print("****************添加图书****************")
  name = input("请输入书名:")
  position = input("请输入图书位置:")
  if name and position:
db.update("insert into books(name, position) value ('{}', '{}');".format(name, position))
print("图书添加成功")
  else:
print("书名或者图书位置不能为空,请重新输入!")
  num = input("继续添加请输入1, 回车退回主菜单")
  if num == "1":
self.add_book()
 def update_book(self):
  """
  [2]: 修改图书
  :return:
  """
  print("****************修改图书****************")
  book_id = input("请输入需要修改的图书ID:")
  result = db.query("select * from books where id={};".format(book_id), one=True)
  if result:
print("当前数据为:{}".format(result))
name = input("重新输入书名,不修改输入回车:") or result["name"]
position = input("重新输入位置,不修改输入回车:") or result["position"]
db.update("update books set name='{}', position='{}' where id={};".format(name, position, book_id))
print("修改成功")
  else:
print("您输入的图书ID不存在,请重新输入~")
  num = input("继续修改请输入1, 回车退回主菜单")
  if num == "1":
self.update_book()
 def delete_book(self):
  """
  [3]: 删除图书
  :return:
  """
  print("****************删除图书****************")
  book_id = input("请输入需要修改的图书ID:")
  result = db.query("select * from books where id={};".format(book_id), one=True)
  if result:
print("当前数据为:{}".format(result))
confirm_num = input("确定需要删除这本书吗?确认请按1,取消请按2:")
if confirm_num == "1":
 db.update("delete from books where id={};".format(book_id))
 print("删除成功")
else:
 print("已确认不删除该书籍~")
  else:
print("系统中未找到该书籍!")
  num = input("继续删除请输入1, 回车退回主菜单")
  if num == "1":
self.delete_book()
 def query_book(self):
  """
  [4]: 查询图书
  :return:
  """
  print("****************查询图书****************")
  name = input("请输入您要查询的图书名称(模糊匹配):")
  if name:
result = db.query("select * from books where name like '%{}%';".format(name))
if result:
 print("当前查询到如下书籍信息:{}".format(result))
else:
 print("未查询到相关书籍信息~")
  else:
print("书名不能为空!")
  num = input("继续查询请输入1, 回车退回主菜单")
  if num == "1":
self.query_book()
 def book_list(self):
  """
  [5]: 图书列表
  :return:
  """
  print("****************图书列表****************")
  result = db.query("select * from books;")
  for i in result:
print("编号:{}, 书籍名:{}, 位置:{}, 状态:{}, 借阅人:{}".format(i["id"], i["name"], i["position"], i["status"],
 i["borrower"]))
 def borrow_book(self):
  """
  [6]: 出借图书
  :return:
  """
  print("****************出借图书****************")
  book_id = input("请输入需要借阅的图书ID:")
  result = db.query("select * from books where id={};".format(book_id), one=True)
  if result:
if result["status"] == "出借":
 print("抱歉,该书已经借出!")
else:
 while True:
  borrower = input("请输入借阅者的名字:")
  if borrower:db.update("update books set borrower='{}' where id={};".format(borrower, book_id))db.update("update books set status='出借' where id={};".format(book_id))print("图书借阅成功~")break
  else:print("借阅者的名字不能为空, 请重新输入")
  else:
print("未查询到相关书籍信息~")
  num = input("继续借阅请输入1, 回车退回主菜单")
  if num == "1":
self.borrow_book()
 def back_book(self):
  """
  [7]: 归还图书
  :return:
  """
  print("****************归还图书****************")
  book_id = input("请输入需要归还的图书ID:")
  result = db.query("select * from books where id={};".format(book_id), one=True)
  if result:
if result["status"] == "在库":
 print("该书是在库状态,请确认图书编号是否正确!")
else:
 db.update("update books set status='在库' where id={};".format(book_id))
 db.update("update books set borrower='' where id={};".format(book_id))
 print("书籍归还成功~")
  else:
print("未查询到相关书籍信息~")
  num = input("继续归还书籍请输入1, 回车退回主菜单")
  if num == "1":
self.borrow_book()
 def quit(self):
  """
  [8]: 退出
  :return:
  """
  print("****************退出****************")
  db.close()
 def main(self):
  """
  程序运行的流程控制
  :return:
  """
  print("---------------欢迎进入图书管理系统----------------")
  while True:
self.print_menu()
num = input("请输入选项:")
if num == "1":
 self.add_book()
elif num == "2":
 self.update_book()
elif num == "3":
 self.delete_book()
elif num == "4":
 self.query_book()
elif num == "5":
 self.book_list()
elif num == "6":
 self.borrow_book()
elif num == "7":
 self.back_book()
elif num == "8":
 self.quit()
 break
else:
 print("您的输入有误~ 请按照菜单提示输入,谢谢!")

if __name__ == "__main__":
 book = BookManage()
 book.main()

到此这篇关于教你用python实现一个无界面的小型图书管理系统的文章就介绍到这了,更多相关Python实现图书管理系统内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

美国快速服务器

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部