当前位置:   article > 正文

Python实现带GUI和连接数据库的图书管理系统_excel+python管理系统gui编程

excel+python管理系统gui编程


前言

作者注:这是一个稚嫩青涩的项目,由于赶时间且自身技术不成熟,所以仅实现了基础功能且只能本地化运行,因此比较低端。

大三上学期的程序设计实训大作业,挑了其中一个我认为最简单的的《图书管理系统》来写。用python写是因为py有自带的GUI,即tkinter模块,对初次接触GUI的新手会比较友好。编译器我用的是Pycharm,你需要检查你的编译器是否带了tkinter模块和pymysql模块,没有的话需要下载安装,具体方法可以百度,很简单。界面很丑,凑合看哦!如果你没有了解过tkinter,建议先去知乎,csdn上面搜索自学一下入门教程,这样就比较容易理解我的东西啦!
** 特别注意:数据库表是我后来根据记忆建的,可能跟代码中的SQL语句的顺序有出入,实际数据库的字段值属性值顺序按照代码里的为准,修改一下数据库就好啦!代码是没问题的o( ̄︶ ̄)o **
在这里插入图片描述

二、建立数据库library

** 特别注意:这个表是我后来根据记忆建的,可能跟代码中的SQL语句的顺序有出入,实际数据库的字段值属性值顺序按照代码里的为准,修改一下数据库就好啦!代码是没问题的o( ̄︶ ̄)o **
在这里插入图片描述
如图所示,软件是Navicat,给library建表。

2.1 book表

存储图书的相关信息,包括书名,作者,类型,数量。主码是name和author。
在这里插入图片描述

2.2 borrow表

借书单,存储借书人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.geometry('900x700')
    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
    #图片文件必须放到你的项目目录里边才有效
    image=canvas.create_image(250,100,image=image_file)
    canvas.place(x=170,y=170)

    lable1=tk.Label(root,text='请选择用户类型:',font=('微软雅黑',20)).place(x=80,y=500)#下
    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():#跳转至读者界面
    root.destroy()
    reader.frame()

def exit_manager():#跳转至管理员界面
    root.destroy()
    manager.frame()

if __name__ == '__main__':
    frame()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

在这里插入图片描述
效果就是上面这样的。
这个初始界面就比较简单,点击读者跳转到读者界面,点击管理员跳转到管理员界面。

3.2 manager登录注册模块

当我们从初始界面选择“管理员”,那么这时候调用exit_manager()函数,来到了管理员界面

import tkinter as tk
import tkinter.messagebox as msg #这个是会弹出一个警告/提示小框
import initial
import pymysql
import ID

def frame():#管理员界面
    global root
    root= tk.Tk()
    root.geometry('900x700')
    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 = canvas.create_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('管理员登录')
    root1.geometry('500x300')

    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)
    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():#注册小窗口
    global root2
    root2 = tk.Tk()
    root2.wm_attributes('-topmost', 1)
    root2.title('管理员注册')
    root2.geometry('500x300')

    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()
    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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/464718
推荐阅读
相关标签
  

闽ICP备14008679号