文章目录
编程逻辑思维巩固案列演练
通过python的面向对象编程,实现一个文字版的图书管理系统
- 本章节的目的,强化大家编程的逻辑思维能力
- 知识点
- 基本的sql增删改查
- 面向对象的使用
1、项目介绍
- 功能模块
- 图书信息
2.环境准备
- 数据存储方式:mysql
- 创建表
create table books( id int unsigned primary key auto_increment not null, name varchar(20) default '', position varchar(40) default '', status enum('在库','出借') default '在库', borrorwer varchar(20) default '' );
- 插入数据
# 部分列插入语法:=> insert into 表名(列1,...) values(值1,...) insert into books(name,position) value('python入门到精通','A区2号架3层'); # 全列插入语法=> insert into 表名 values(...) insert into books value(0,'python入门到精通','A区2号架3层','在库','');
- 修改数据
# 修改数据 update 表名 set 列1=值1,列2=值2... where 条件
- 删除数据语法
delete from 表名 where 条件;
- 查询
select * from 表名;
- python连接mysql数据库
# 安装pymysql pip install pymysql
- 连接数据库
pymysql.connect( host='localhost', user='root', password="123456", database='test', port=3306, cursorclass=pymysql.cursors.DictCursor)
- 创建游标对象
- 执行sql语句
3.功能实现
1.项目主流程和菜单提示
- 1、运行程序,打印提示菜单
- 2、根据输入不同的选项进行对应的操作
2.数据库连接
- 通过pymysql连接数据库,封装执行查询语句和修改语句的方法。
3.添加图书
- 1、用户依次输入书名、存放位置
- 2、校验输入的书名和位置是否有值
- 3、添加图书到数据库
- 4、提示:
- 继续添加输入1,回车退回到主菜单
4.修改图书
需求:修改图书只能修改书名和位置信息。
- 1、用户输入修改的图书编号,判断id是否存在
- 2、编号存在则打印改书本的全部信息,并提示用户输入新的书名,和新的位置。
- 3、根据用户的输入,对图书进行修改
- 4、提示:
- 继续添加输入1,回车退回到主菜单
5.图书列表
- 查询数据库中所有的图书,打印出来显示
6.查询图书
- 1、输入书名,查询出与之匹配的图书信息,并打印
- 2、提示:
- 继续查询输入1,回车退回到主菜单
7.删除图书
- 1、输入书籍编号,找到对应的书籍,从数据库中删除
- 2、提示:
- 继续删除输入1,回车退回到主菜单
8.借阅图书
- 1、输入图书编号,查找到该书籍
- 2、提示用户输入借阅人名字
- 3、将书籍的状态改为出借,借阅人改为输入的名字
- 4、提示:
- 继续添加输入1,回车退回到主菜单
9.归还图书
- 1、输入图书编号,查找到该书籍
- 2、将书籍的状态改为在库,借阅人改为空
- 3、提示:
- 继续添加输入1,回车退回到主菜单
python操作数据库
pymysql_practice.py
import pymysql #pymysql连接数据库 con = pymysql.connect( host='localhost', user='root', password="123456", database='lenovo', port=3306, cursorclass=pymysql.cursors.DictCursor) #创建一个游标对象 cur = con.cursor(cursor=pymysql.cursors.DictCursor) #以字典形式展示数据 #执行sql sql = "select * from books" res = cur.execute(sql) print(res) #获取查询的结果 result1 = cur.fetchall() print(result1) #执行增删改的sql sql = 'insert into books(name,position) value("天龙八部","A区1号架1层");' res2 = cur.execute(sql) #提交事务 con.commit() print(res2) con.close()
图书管理小项目
BookManage.py
import pymysql class DB: ''' 项目涉及到数据库的增删查改,咱们封装数据库对应的操作方法来处理 查询的方法 增删改的方法 ''' def __init__(self): # pymysql连接数据库 self.con = pymysql.connect(host='localhost', user='root', password="123456", database='lenovo', port=3306, cursorclass=pymysql.cursors.DictCursor) # 创建一个游标对象 self.cur = self.con.cursor(cursor=pymysql.cursors.DictCursor) # 以字典形式展示数据 def query_sql(self,sql): ''' 查询sql方法 :param sql: sql语句 :return: 查询得到的结果 ''' self.cur.execute(sql) return self.cur.fetchall() def update_sql(self,sql): ''' :param sql: sql语句 :return: ''' self.cur.execute(sql) self.con.commit() def close(self): """关闭游标,断开连接""" self.cur.close() self.con.close() class Books(DB): def add_book(self): '''添加图书''' print("---------添加图书--------") name = input("请输入书名:") position = input("请输入图书存放的位置:") if name and position: sql = "insert into books(name,position) value('{}','{}')".format(name,position) self.update_sql(sql) print("添加成功!") else: print("添加失败,书名和位置均不能为空!!!") n = input("继续添加请输入1,回车返回主菜单") #判断用户输入的是否为1,为1则再次调用添加图书的方法 if n == "1": self.add_book() else: pass def update_book(self): '''修改图书''' print("----------修改图书------------") id = input("请输入要修改图书的ID") #打印图书的信息 res = self.query_sql(f'select * from books where id={id}') if res: print("当前图书的信息",res) # 进行修改 name = input("请输入新的书名,不修改请输入回车:") or res[0]['name'] position = input("请输入图书存放的位置,不修改请输入回车:") or res[0]['position'] sql = f'update books set name = "{name}",position="{position}" where id="{id}"' self.update_sql(sql) print("修改成功!") else: print("您输入的书籍id不存在") n = input("继续修改请输入1,回车返回主菜单") if n == "1": self.update_book() else: pass def del_book(self): '''删除图书''' print("----------删除图书------------") id = input("请输入删除图书的id:") # 打印图书的信息 res = self.query_sql(f'select * from books where id={id}') if res: print("您要删除的书籍信息如下:",res) is_delete = input("确认删除请输入1,否则请输入回车:") if is_delete == "1" and res[0]["status"]=="在库": sql = 'delete from books where id = {id}' self.update_sql(sql) print("删除成功") elif res[0]["status"]=="出借": print("本书已出借,无法删除!") else: print("您输入的书籍id不存在") #判断是否要继续删除 n = input("继续删除请输入1,回车返回主菜单") if n == "1": self.del_book() else: pass def qurey_book(self): '''查询图书''' print("----------查询图书------------") name = input("请输入要查询的图书名:") if name: sql = f"select * from books where name = '{name}' " res = self.query_sql(sql) if res: for i in res: print(i) else: print("图书馆暂无该书籍!") else: print("书名不能为空!") # 判断是否要继续查询 n = input("继续查询请输入1,回车返回主菜单") if n == "1": self.qurey_book() else: pass def book_list(self): '''图书列表''' sql = "select * from books" res = self.query_sql(sql) print("****************图书列表***************") for i in res: print(f'编号:{i["id"]},书名:{i["name"]},位置:{i["position"]},' f'转态:{i["status"]},借阅人:{i["borrorwer"]}') print("返回主菜单页面") def revert_book(self): '''归还图书''' print("----------删除图书------------") id = input("请输入要归还图书的ID:") sql = f'select * from books where id = {id}' res = self.query_sql(sql) if res: print("您要归还的图书信息如下:\n",res) #查看图书的状态,如果状态为出借,则不能借出 if res[0]["status"] == "出借": status = "在库" lend_sql = f'update books set status="{status}",borrorwer=" " where id="{id}"' self.update_sql(lend_sql) print("归还成功") else: print("本书并未出借!") else: print("请输入正确的图书编号!") # 判断是否要继续租借 n = input("继续归还请输入1,回车返回主菜单") if n == "1": self.revert_book() else: pass def lend_book(self): '''租借图书''' print("----------租借图书------------") id = input("请输入要租借图书的ID:") sql = f'select * from books where id = {id}' res = self.query_sql(sql) if res: print("您要借阅的图书信息如下:\n",res) #查看图书的状态,如果状态为出借,则不能借出 if res[0]["status"] == "出借": print("该图书已被借出!") else: print("本书可借出!") borrorwer = input("借书请输入您的名字:") status = "出借" lend_sql = f'update books set status="{status}",borrorwer="{borrorwer}" where id="{id}"' self.update_sql(lend_sql) print("登记成功,借阅成功!") else: print("图书馆暂无该书籍!") # 判断是否要继续租借 n = input("继续租借请输入1,回车返回主菜单") if n == "1": self.lend_book() else: pass def quit(self): '''退出''' self.close() print("程序退出!!!") def print_menu(self): '''打印菜单''' print("-----菜单---------") print("【1】︰添加图书\n" "【2】:修改图书\n" "【3】:删除图书\n" "【4】:查询图书\n" "【5】:图书列表\n" "【6】:出借图书\n" "【7】:归还图书\n" "【8】:退出") def main(self): print("---------------欢迎进入小仔图书管理系统---------------") while True: self.print_menu() number = input("请输入你的选项:") if number == '1': self.add_book() elif number == "2": self.update_book() elif number == "3": self.del_book() elif number == "4": self.qurey_book() elif number == "5": self.book_list() elif number == "6": self.lend_book() elif number == "7": self.revert_book() elif number == "8": self.quit() break else: print("您输入的选项有误!憨批!") if __name__ == '__main__': book = Books() book.main()