前言
使用mysql数据库存储数据,使用python中tkinter库建立一个简单的图书管理系统
提示:以下是本篇文章正文内容,下面案例可供参考
一、MySQL是什么?
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,增加了速度并提高了灵活性。
二、Tkinter库
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于小白而言,搭建一个简单的图形界面 Tkinter 还是一个不错的选择。
三、Code步骤
1.引入库
import tkinter as tk
import tkinter.ttk as ttk
from pymysql import connect
from tkinter.messagebox import showinfo
from tkinter.constants import END, N, SINGLE
2.使用tkinter搭建系统
代码如下(示例):
root=tk.Tk()
root.title("YU_book_manage_system")
root.geometry("750x500+100+100")
menubar=tk.Menu(root)
filemenu=tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label="菜单",menu=filemenu)
filemenu.add_command(label="打开")
filemenu.add_command(label="保存")
filemenu.add_command(label="退出",command=root.destroy)
root.config(menu=menubar)
pw=tk.PanedWindow(root,orient="vertical",sashrelief="sunken")
pw.pack(fill="both",expand=1)
pw1=tk.PanedWindow(pw,orient="horizontal",sashrelief="sunken")
pw2=tk.PanedWindow(pw,orient="horizontal",sashrelief="sunken")
top_frame,left_frame,mid_frame,right_frame=ttk.Frame(pw1,height=125,relief="flat"),\
ttk.Frame(pw2,relief="sunken"),\
ttk.Frame(pw2,relief="raised"),\
ttk.Frame(pw2,relief="ridge")
pw.add(pw1),pw.add(pw2),pw1.add(top_frame),pw2.add(left_frame),pw2.add(mid_frame),pw2.add(right_frame)
labelframe=tk.LabelFrame(left_frame,text="图书信息",font=("迷你简魏碑",16),labelanchor=N)
ttk.Label(labelframe,text=("编号","图书名称","图书作者","出版日期","图书数量"),font=("华文行楷",11),anchor="n").pack()
scrollbar=ttk.Scrollbar(labelframe)
listbox=tk.Listbox(labelframe,width=60,font=("黑体",11),height=20,yscrollcommand=scrollbar,selectmode=SINGLE)
listbox.select_set(0)
scrollbar.config(command=listbox.yview)
labelframe.pack(expand=0),scrollbar.pack(side="right",fill="y",pady=2),listbox.pack(side="left",pady=2)
show_book()
ttk.Label(top_frame,text="图书管理系统",font=("方正字迹-吕建德行楷繁体",25)).pack(pady=30)
ttk.Label(mid_frame,text="图书编号",font=("黑体",10)).place(x=0,y=55)
ttk.Label(mid_frame,text="图书名称",font=("黑体",10)).place(x=0,y=120)
ttk.Label(mid_frame,text="图书作者",font=("黑体",10)).place(x=0,y=185)
ttk.Label(mid_frame,text="出版日期",font=("黑体",10)).place(x=0,y=250)
ttk.Label(mid_frame,text="图书数量",font=("黑体",10)).place(x=0,y=315)
v1=tk.StringVar()
v2=tk.StringVar()
v3=tk.StringVar()
v4=tk.StringVar()
v5=tk.StringVar()
e1=ttk.Entry(mid_frame,width=16,textvariable=v1)
e2=ttk.Entry(mid_frame,width=16,textvariable=v2)
e3=ttk.Entry(mid_frame,width=16,textvariable=v3)
e4=ttk.Entry(mid_frame,width=16,textvariable=v4)
e5=ttk.Entry(mid_frame,width=16,textvariable=v5)
e1.pack(padx=5,pady=80)
e2.place(x=5,y=145)
e3.place(x=5,y=205)
e4.place(x=5,y=270)
e5.place(x=5,y=335)
button1=ttk.Button(right_frame,text="查询图书",command=find_book).pack(pady=64)
button2=ttk.Button(right_frame,text="增加图书",command=add_book).pack()
button3=ttk.Button(right_frame,text="修改图书",command=mod_book).pack(pady=64)
button4=ttk.Button(right_frame,text="删除图书",command=del_book).pack()
button5=ttk.Button(mid_frame,text="写入",command=get_data).place(x=20,y=15)
root.mainloop()
图书管理界面截图
3.定义函数(发送消息,操作mysql数据库)
函数建议放在前面,代码如下(示例):
def add_book():
try:
conn=connect(host="localhost",port=3306,database="book_manage",user="root",password="yusql",charset="utf8")
cur=conn.cursor()
cur.execute("select *from books")
data=cur.fetchall()
param2=e2.get()
param3=e3.get()
param4=e4.get()
param5=int(e5.get())
for item in data:
if item[1]==param2 and item[2]==param3:
param5+=1
cur.execute("update books set bnumber=%s where btitle=%s and bauthor=%s",(param5,param2,param3))
conn.commit()
show_book()
showinfo("窗口","图书存在,数量加一")
return()
cur.execute("insert into books(btitle,bauthor,byu_date,bnumber)values(%s,%s,%s,%s)",(param2,param3,param4,param5))
conn.commit()
show_book()
showinfo("窗口","添加成功")
except:
showinfo("窗口","输入格式错误")
def del_book():
conn=connect(host="localhost",port=3306,database="book_manage",user="root",password="yusql",charset="utf8")
cur=conn.cursor()
param1=int(e1.get())
param2=e2.get()
param3=e3.get()
param4=e4.get()
param5=int(e5.get())
if param5>1:
param5-=1
cur.execute("update books set id=%s,btitle=%s,bauthor=%s,byu_date=%s,bnumber=%s where btitle=%s and bauthor=%s",(param1,param2,param3,param4,param5,param2,param3))
conn.commit()
show_book()
showinfo("窗口","图书存在,数量减一")
return()
else:
cur.execute("delete from books where id=%s and btitle=%s",(param1,param2))
conn.commit()
cur.execute("alter table books drop id")
cur.execute("alter table books add id int(12) primary key not null auto_increment first")
show_book()
showinfo("窗口","删除成功")
def show_book():
conn=connect(host="localhost",port=3306,database="book_manage",user="root",password="yusql",charset="utf8")
cur=conn.cursor()
cur.execute("select *from books")
data=cur.fetchall()
listbox.delete(0,END)
for item in data:
listbox.insert("end",item)
cur.close()
conn.close()
def mod_book():
try:
conn=connect(host="localhost",port=3306,database="book_manage",user="root",password="yusql",charset="utf8")
cur=conn.cursor()
param1=int(e1.get())
param2=e2.get()
param3=e3.get()
param4=e4.get()
param5=int(e5.get())
cur.execute("update books set id=%s,btitle=%s,bauthor=%s,byu_date=%s,bnumber=%s where id=%s",(param1,param2,param3,param4,param5,param1))
conn.commit()
show_book()
showinfo("窗口","修改成功")
except:
showinfo("窗口","输入格式错误")
def find_book():
try:
conn=connect(host="localhost",port=3306,database="book_manage",user="root",password="yusql",charset="utf8")
cur=conn.cursor()
param=e2.get()
cur.execute("select *from books")
data=cur.fetchall()
for item in data:
if item[1]==param:
showinfo("窗口",item)
cur.close()
conn.close()
except:
showinfo("窗口","无该图书")
def get_data():
value=listbox.get(listbox.curselection())
v1.set(value[0])
v2.set(value[1])
v3.set(value[2])
v4.set(value[3])
v5.set(value[4])
总结
本文仅仅简单使用了tkinter搭建了一个简单的图书管理系统,你也可以搭建其他的信息管理系统或者对代码进行改进,添加更多的功能。
|