毕设——Python实现带GUI和连接数据库的图书管理系统!前⾔
⼤三上学期的程序设计实训⼤作业,挑了其中⼀个我认为最简单的的《图书管理系统》来写。⽤python写是因为py有⾃带的GUI,即tkinter模块,对初次接触GUI的新⼿会⽐较友好。编译器我⽤的是Pycharm,你需要检查你的编译器是否带了tkinter模块和pymysql模块,没有的话需要下载安装,具体⽅法可以百度,很简单。界⾯很丑,凑合看哦!如果你没有了解过tkinter,建议先去知乎,csdn上⾯搜索⾃学⼀下⼊门教程,这样就⽐较容易理解我的东西啦!
此⽂转载⽂,著作权归作者所有,如有侵权联系⼩编删除! PS:如有需要Python学习资料的⼩伙伴可以加点击下⽅链接⾃⾏获取
⼆、建⽴数据库library
如图所⽰,软件是Navicat,给library建表。mysql使用教程视频
2.1 book表
存储图书的相关信息,包括书名,作者,类型,数量。主码是name和author。
2.2 borrow表
sql数据库修复数据语句借书单,存储借书⼈ID,书名,作者,借书时间。主码是name和author。
2.3 user表
使⽤者,包括ID,password,job是个只有1位的数字,0表⽰读者,1表⽰管理员,登录的时候通过检测其job然后选择是跳转到读者界⾯还是管理员界⾯。
三、各个模块介绍
3.1 初始界⾯initial
import tkinter as tk
import reader
import manager
def frame():#初始界⾯
global root
root=tk.Tk()
root.title('西电图书管理系统')
lable0=tk.Label(root,text='欢迎来到XDU图书馆',bg='pink',font=('微软雅⿊',50)).pack()#上
#canvas是个画布,想要插⼊图⽚的话⾸先要定义个canvas
canvas=tk.Canvas(root,height=500,width=500)#中
image_file=tk.PhotoImage(file='2.gif')
#图⽚⽂件的后缀必须是.gif,且亲测不能⾃⾏⿏标右键重命名更改成.gif,要⽤win10⾥内置的画图功能,打开图⽚然后另存为的时候选择.gif #图⽚⽂件必须放到你的项⽬⽬录⾥边才有效
ate_image(250,100,image=image_file)
canvas.place(x=170,y=170)
lable1=tk.Label(root,text='请选择⽤户类型:',font=('微软雅⿊',20)).place(x=80,y=500)#下
oraclevmvirtualbox安装xp系统tk.Button(root, text='读者',font=('微软雅⿊',15),width=10, height=2,command=exit_reader).place(x=350, y=420)
tk.Button(root, text='管理员',font=('微软雅⿊',15),width=10, height=2,command=exit_manager).place(x=350, y=550)
root.mainloop()#必须要有这句话,你的页⾯才会动态刷新循环,否则页⾯不会显⽰
def exit_reader():#跳转⾄读者界⾯
flex布局子元素宽度自适应root.destroy()
reader.frame()
def exit_manager():#跳转⾄管理员界⾯
root.destroy()
manager.frame()
if __name__ == '__main__':
frame()
效果就是上⾯这样的。 这个初始界⾯就⽐较简单,点击读者跳转到读者界⾯,点击管理员跳转到管理员界⾯。
3.2 manager登录注册模块
当我们从初始界⾯选择“管理员”,那么这时候调⽤exit_manager()函数,来到了管理员界⾯
import tkinter as tk
ssagebox as msg #这个是会弹出⼀个警告/提⽰⼩框
import initial
import pymysql
import ID
def frame():#管理员界⾯
global root
root= tk.Tk()
root.title('西电图书管理系统')
lable0 = tk.Label(root, text='管理员登录', bg='pink', font=('微软雅⿊', 50)).pack() # 上
canvas = tk.Canvas(root, height=500, width=500) # 中
image_file = tk.PhotoImage(file='2.gif')
image = ate_image(250, 100, image=image_file)
canvas.place(x=190, y=170)
lable1 = tk.Label(root, text='请选择:', font=('微软雅⿊', 20)).place(x=80, y=400) # 下
tk.Button(root, text='登录', font=('微软雅⿊', 15), width=10, height=2, command=login).place(x=150, y=500)
tk.Button(root, text='注册', font=('微软雅⿊', 15), width=10, height=2, command=register).place(x=350, y=500)
tk.Button(root, text='退出', font=('微软雅⿊', 15), width=10, height=2, command=exit_manager).place(
x=550, y=500)
root.mainloop()
def login():#登录⼩窗⼝
global root1
root1=tk.Tk()
root1.wm_attributes('-topmost', 1)#将登录窗⼝置顶不⾄于被遮到下⾯
root1.title('管理员登录')
lable1 = tk.Label(root1, text='账号:', font=25).place(x=100,y=50)
lable2 = tk.Label(root1, text='密码:', font=25).place(x=100, y=100)
global entry_name, entry_key
name=tk.StringVar()
key = tk.StringVar()
entry_name = tk.Entry(root1, textvariable=name, font=25)spring无法访问
entry_name.place(x=180, y=50)
entry_key = tk.Entry(root1, textvariable=key, font=25,show='*')
entry_key.place(x=180,y=100)
# 百度:tkinter要求由按钮(或者其它的插件)触发的控制器函数不能含有参数,若要给函数传递参数,需要在函数前添加lambda: button1 = tk.Button(root1, text='确定', height=2, width=10, command=lambda: ID.id_check('1'))
button1.place(x=210, y=180)
#当我们输⼊账号和密码,点击确定时候,会调⽤ID模块⾥的id_check()函数,1是参数,表⽰其⾝份是管理员
def register():#注册⼩窗⼝
python入门教程 下载global root2
root2 = tk.Tk()
root2.wm_attributes('-topmost', 1)
root2.title('管理员注册')
lable1 = tk.Label(root2, text='账号:', font=25).place(x=100, y=50)
lable2 = tk.Label(root2, text='密码:', font=25).place(x=100, y=100)
lable2 = tk.Label(root2, text='确认密码:', font=25).place(x=80, y=150)
global entry_name, entry_key, entry_confirm
name = tk.StringVar()
key = tk.StringVar()
confirm = tk.StringVar()
confirm = tk.StringVar()
entry_name = tk.Entry(root2, textvariable=name, font=25)
entry_name.place(x=180, y=50)
entry_key = tk.Entry(root2, textvariable=key, font=25, show='*')
entry_key.place(x=180, y=100)
entry_confirm = tk.Entry(root2, textvariable=confirm,font=25, show='*')
entry_confirm.place(x=180, y=150)
# 百度:tkinter要求由按钮(或者其它的插件)触发的控制器函数不能含有参数,若要给函数传递参数,需要在函数前添加lambda: button1 = tk.Button(root2, text='确定', height=2, width=10, command=lambda: ID.id_write('1'))
button1.place(x=210, y=200)
#当我们点击确定的时候,会调⽤ID模块⾥的id_write()函数,1是参数,表⽰其⾝份是管理员
def exit_manager():#退出管理员界⾯,跳转⾄初始界⾯
root.destroy()
initial.frame()
3.3 ID模块
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论