用python3做一个图书管理系统(图形用户界面:tkinter)
kongzhi.py#主控模块from socket import *
from tkinter import *
from ts_denglu import *s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)def main():root = Tk() sw = root.winfo_screenwidth()#屏幕宽度sh = root.winfo_screenheight()#屏幕高度ww = 450wh = 250x = (sw-ww)/2y = (sh-wh)/2root.geometry("%dx%d+%d+%d"%(ww,wh,x,y)) root.title('图书管理系统') root.resizable(width=False, height=False)denglu = DengLu(root,s)root.mainloop()
if __name__ == '__main__':main()
ts_denglu.py #登录模块'''
name : fushibo
date : 2018-5-30
图书管理系统登录页面
'''
from tkinter import *
from tkinter import messagebox
from main_ye import *
import sys
class DengLu(object):def __init__(self,m=None,s=None):self.root = m self.s = swhile True:try:self.s.connect(('127.0.0.1',9028)) break except:messagebox.showwarning('error','无网络链接!')self.deng()def deng(self): self.frame = Frame(width=450,height=250)self.frame.pack()Label(self.frame).grid(row=0,sticky=W)Label(self.frame, text='管理员账号:', fg='blue', font=15)\.grid(row = 3, sticky=W,pady=10)Label(self.frame, text='管理员密码:', fg='blue', font=15)\.grid(row = 4, sticky=W,pady=10)Label(self.frame, text='管理员类别:', fg='blue', font=15)\.grid(row = 5, sticky=W,pady=10)self.a1 = StringVar()self.a2 = StringVar()self.b1 = Entry(self.frame, textvar=self.a1,width=25)self.b2 = Entry(self.frame, textvar=self.a2,width=25,show='*')self.b1.grid(row = 3,column=1,sticky=E)self.b2.grid(row = 4,column=1,sticky=E)self.w = ttk.Combobox(self.frame,width=23,values=['普通管理员','高级管理员','超级管理员'])self.w.grid(row = 5,column=1,sticky=E)self.w.current(0)self.c1 = Button(self.frame, text='登录',font=15,background='#C6D6A7',activebackground='#1AD8E8',width=10, command=self.deng_lu).\grid(row = 6, sticky=W,pady=10)self.c2 = Button(self.frame, text='退出', font=15,background='#C6D6A7',activebackground='#1AD8E8', width=10, command=self.root.quit).\grid(row = 6,column=1,sticky=E)def deng_lu(self):try:usr_name = self.a1.get()usr_pwd = self.a2.get()usr_class = self.w.get()if len(usr_name) < 1 or len(usr_pwd) < 1 or len(usr_class) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnself.b1.delete(0,END)self.b2.delete(0,END)if usr_class == '普通管理员':usr_class = 1elif usr_class == '高级管理员':usr_class = 2elif usr_class == '超级管理员':usr_class = 3msg = 'X {} {} {}'.format(usr_name,usr_pwd,usr_class)self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!') data = self.s.recv(128).decode()if data == 'OK':self.root.destroy()Ye_mian() else:messagebox.showerror('图书管理系统','用户名或密码错误!')return
main_ye.py#主页面模块#!/usr/bin/env python3
# coding=utf-8
'''
name : fushibo
date : 2018-5-30
图书管理系统主页面
'''from tkinter import *
from zi_yemian01 import *
import sys
from PIL import Image,ImageTk class Ye_mian():def __init__(self): self.root = Tk()canvas = Canvas(self.root,width = 890,height = 670, bg = 'white') self.image = Image.open("./image/ssss.jpg") self.im = ImageTk.PhotoImage(self.image) canvas.create_image(450,280,image = self.im) canvas.pack() self.sw = self.root.winfo_screenwidth()#屏幕宽度self.sh = self.root.winfo_screenheight()#屏幕高度self.x = (self.sw-890)/2self.y = (self.sh-670)/2self.root.geometry("%dx%d+%d+%d"%(890,670,self.x,self.y)) self.root.resizable(False,False)self.root.title('欢迎进入图书管理系统--菜单')Label(self.root,background='#FFFFFF',text='三更灯火五更鸡',font=('楷体',16,"normal"),fg='#2CEAE0',justify=LEFT).place(x=250,y=55)Label(self.root,background='#FFFFFF',text='正是男儿读书时',font=('楷体',16,"normal"),fg='#24ED76',justify=LEFT).place(x=400,y=190)Label(self.root,background='#FFFFFF',text='黑发不知勤学早',font=('楷体',16,"normal"),fg='#08D6E8',justify=LEFT).place(x=550,y=320)Label(self.root,background='#FFFFFF',text='白首方悔读书迟',font=('楷体',16,"normal"),fg='#D8BC2E',justify=LEFT).place(x=700,y=445)Button(self.root,text='日常工作',command=self.gongzuo,font=("黑体",16,"normal"),background='#D2FCFB',activebackground='#1AD8E8')\.place(x=40,y=10,width=160,height=130)Button(self.root,text='资料维护',command=self.ziliao,font=("黑体",16,"normal"),background='#DAF4E6',activebackground='#1AD8E8')\.place(x=200,y=140,width=160,height=130)Button(self.root,text='历史查询',command=self.lishi,font=("黑体",16,"normal"),background='#E2EFD3',activebackground='#1AD8E8')\.place(x=360,y=270,width=160,height=130)Button(self.root,text='系统管理',command=self.xitong,font=("黑体",16,"normal"),background='#F0E4B2',activebackground='#1AD8E8')\.place(x=520,y=400,width=160,height=130)Button(self.root,text='安全退出',command=self.tuichu,font=("黑体",16,"normal"),background='#7EE8A7',activebackground='#1AD8E8')\.place(x=680,y=530,width=160,height=130)self.root.mainloop()def gongzuo(self):self.root.destroy()Main01_ye()def ziliao(self):self.root.destroy()Main02_ye()def lishi(self):self.root.destroy()Main03_ye()def xitong(self):self.root.destroy()Main04_ye()def tuichu(self):sys.exit('欢迎再次使用!')class Main01_ye(object):#日常工作def __init__(self):self.root = Tk() sw = self.root.winfo_screenwidth()#屏幕宽度sh = self.root.winfo_screenheight()#屏幕高度image = Image.open(r'./image/ffff.jpg')background_image = ImageTk.PhotoImage(image)ww = background_image.width()wh = background_image.height()x = (sw-ww)/2y = (sh-wh)/2self.root.geometry("%dx%d+%d+%d"%(ww,wh,x,y))self.root.title('欢迎进入图书管理系统--日常工作')background_label = Label(self.root, image=background_image)background_label.place(x=0, y=0, relwidth=1, relheight=1)self.root.resizable(False,False)self.guanli() self.root.mainloop() def guanli(self):self.ts_jieyue = Ts_JYFrame(self.root)self.ts_guihuan = Ts_GHFrame(self.root)self.ts_fanjin = Ts_FJFrame(self.root)self.ts_xiaoshou = Ts_XSFrame(self.root)self.ts_chongzhi = Ts_CZFrame(self.root)self.ts_guanyu = Ts_GYFrame(self.root)self.ts_fanhui = Ts_FHFrame(self.root)self.ts_jieyue.pack()#默认显示menubar = Menu(self.root,background='#C6D6A7')menubar.add_command(label='图书借阅',font=18,activebackground='#9BD6CB',command=self.jieyue_data)menubar.add_command(label='图书归还',font=18,activebackground='#9BD6CB',command=self.guihuan_data)menubar.add_command(label='缴纳罚金',font=18,activebackground='#9BD6CB',command=self.fajin_data)menubar.add_command(label='图书销售',font=18,activebackground='#9BD6CB',command=self.xiaoshou_data)menubar.add_command(label='信用充值',font=18,activebackground='#9BD6CB',command=self.chongzhi_data)menubar.add_command(label='关于我们',font=18,activebackground='#9BD6CB',command=self.guanyu_data)menubar.add_command(label='返回主页',font=18,activebackground='#C90000',command=self.fanhui_data)self.root['menu'] = menubar#设置菜单def jieyue_data(self): self.ts_jieyue.pack()self.ts_guihuan.pack_forget()self.ts_fanjin.pack_forget()self.ts_xiaoshou.pack_forget()self.ts_chongzhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def guihuan_data(self):self.ts_jieyue.pack_forget()self.ts_guihuan.pack()self.ts_fanjin.pack_forget()self.ts_xiaoshou.pack_forget()self.ts_chongzhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def fajin_data(self):self.ts_jieyue.pack_forget()self.ts_guihuan.pack_forget()self.ts_fanjin.pack()self.ts_xiaoshou.pack_forget()self.ts_chongzhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def xiaoshou_data(self):self.ts_jieyue.pack_forget()self.ts_guihuan.pack_forget()self.ts_fanjin.pack_forget()self.ts_xiaoshou.pack()self.ts_chongzhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def chongzhi_data(self):self.ts_jieyue.pack_forget()self.ts_guihuan.pack_forget()self.ts_fanjin.pack_forget()self.ts_xiaoshou.pack_forget()self.ts_chongzhi.pack()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def guanyu_data(self):self.ts_jieyue.pack_forget()self.ts_guihuan.pack_forget()self.ts_fanjin.pack_forget()self.ts_xiaoshou.pack_forget()self.ts_chongzhi.pack_forget()self.ts_guanyu.pack()self.ts_fanhui.pack_forget()def fanhui_data(self):self.ts_jieyue.pack_forget()self.ts_guihuan.pack_forget()self.ts_fanjin.pack_forget()self.ts_xiaoshou.pack_forget()self.ts_chongzhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack() self.root.destroy() Ye_mian()class Main02_ye(object):#资料维护def __init__(self):self.root = Tk()sw = self.root.winfo_screenwidth()#屏幕宽度sh = self.root.winfo_screenheight()#屏幕高度image = Image.open(r'./image/ffff.jpg')background_image = ImageTk.PhotoImage(image)ww = background_image.width()wh = background_image.height()x = (sw-ww)/2y = (sh-wh)/2self.root.geometry("%dx%d+%d+%d"%(ww,wh,x,y))self.root.title('欢迎进入图书管理系统--资料维护')background_label = Label(self.root, image=background_image)background_label.place(x=0, y=0, relwidth=1, relheight=1)self.root.resizable(False,False)self.guanli() self.root.mainloop() def guanli(self):self.ts_caigou = Ts_CGFrame(self.root)self.ts_baosun = Ts_BSFrame(self.root)self.ts_duzhe = Ts_DZFrame(self.root) self.ts_guanyu = Ts_GYFrame(self.root)self.ts_fanhui = Ts_FHFrame(self.root)self.ts_caigou.pack()#默认显示menubar = Menu(self.root,background='#C6D6A7')menubar.add_command(label='图书采购',font=18,activebackground='#9BD6CB',command=self.CG_data)menubar.add_command(label='图书报损',font=18,activebackground='#9BD6CB',command=self.baosun_data)menubar.add_command(label='读者管理',font=18,activebackground='#9BD6CB',command=self.duzhe_data)menubar.add_command(label='关于我们',font=18,activebackground='#9BD6CB',command=self.guanyu_data)menubar.add_command(label='返回主页',font=18,activebackground='#C90000',command=self.fanhui_data)self.root['menu'] = menubar#设置菜单def CG_data(self): self.ts_caigou.pack()self.ts_baosun.pack_forget()self.ts_duzhe.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def baosun_data(self):self.ts_caigou.pack_forget()self.ts_baosun.pack() self.ts_duzhe.pack_forget() self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def duzhe_data(self):self.ts_caigou.pack_forget()self.ts_baosun.pack_forget()self.ts_duzhe.pack()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def guanyu_data(self):self.ts_caigou.pack_forget()self.ts_baosun.pack_forget()self.ts_duzhe.pack_forget()self.ts_guanyu.pack()self.ts_fanhui.pack_forget()def fanhui_data(self):self.ts_caigou.pack_forget()self.ts_baosun.pack_forget()self.ts_duzhe.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack()self.root.destroy() Ye_mian()class Main03_ye(object):#历史查询def __init__(self):self.root = Tk()sw = self.root.winfo_screenwidth()#屏幕宽度sh = self.root.winfo_screenheight()#屏幕高度image = Image.open(r'./image/ffff.jpg')background_image = ImageTk.PhotoImage(image)ww = background_image.width()wh = background_image.height()x = (sw-ww)/2y = (sh-wh)/2self.root.geometry("%dx%d+%d+%d"%(ww,wh,x,y))self.root.title('欢迎进入图书管理系统--历史查询')background_label = Label(self.root, image=background_image)background_label.place(x=0, y=0, relwidth=1, relheight=1)self.root.resizable(False,False)self.guanli() self.root.mainloop() def guanli(self):self.ts_chaxun = Ts_TCFrame(self.root)self.ts_ducha = Ts_DCFrame(self.root)self.ts_jiecha = Ts_JCFrame(self.root)self.ts_facha = Ts_FCFrame(self.root)self.ts_xiaocha = Ts_XCFrame(self.root)self.ts_guanyu = Ts_GYFrame(self.root)self.ts_fanhui = Ts_FHFrame(self.root)self.ts_chaxun.pack()#默认显示menubar = Menu(self.root,background='#C6D6A7')menubar.add_command(label='图书查询',font=18,activebackground='#9BD6CB',command=self.chaxun_data)menubar.add_command(label='读者查询',font=18,activebackground='#9BD6CB',command=self.ducha_data)menubar.add_command(label='借阅查询',font=18,activebackground='#9BD6CB',command=self.jiecha_data)menubar.add_command(label='罚金查询',font=18,activebackground='#9BD6CB',command=self.facha_data)menubar.add_command(label='销售查询',font=18,activebackground='#9BD6CB',command=self.xiaocha_data)menubar.add_command(label='关于我们',font=18,activebackground='#9BD6CB',command=self.guanyu_data)menubar.add_command(label='返回主页',font=18,activebackground='#C90000',command=self.fanhui_data)self.root['menu'] = menubar#设置菜单def chaxun_data(self): self.ts_chaxun.pack()self.ts_ducha.pack_forget()self.ts_jiecha.pack_forget()self.ts_facha.pack_forget()self.ts_xiaocha.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def ducha_data(self):self.ts_chaxun.pack_forget()self.ts_ducha.pack()self.ts_jiecha.pack_forget()self.ts_facha.pack_forget()self.ts_xiaocha.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def jiecha_data(self):self.ts_chaxun.pack_forget()self.ts_ducha.pack_forget()self.ts_jiecha.pack()self.ts_facha.pack_forget()self.ts_xiaocha.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def facha_data(self):self.ts_chaxun.pack_forget()self.ts_ducha.pack_forget()self.ts_jiecha.pack_forget()self.ts_facha.pack()self.ts_xiaocha.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def xiaocha_data(self):self.ts_chaxun.pack_forget()self.ts_ducha.pack_forget()self.ts_jiecha.pack_forget()self.ts_facha.pack_forget()self.ts_xiaocha.pack()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def guanyu_data(self):self.ts_chaxun.pack_forget()self.ts_ducha.pack_forget()self.ts_jiecha.pack_forget()self.ts_facha.pack_forget()self.ts_xiaocha.pack_forget()self.ts_guanyu.pack()self.ts_fanhui.pack_forget()def fanhui_data(self):self.ts_chaxun.pack_forget()self.ts_ducha.pack_forget()self.ts_jiecha.pack_forget()self.ts_facha.pack_forget()self.ts_xiaocha.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack()self.root.destroy() Ye_mian()class Main04_ye(object):#系统管理def __init__(self):self.root = Tk()sw = self.root.winfo_screenwidth()#屏幕宽度sh = self.root.winfo_screenheight()#屏幕高度image = Image.open(r'./image/ffff.jpg')background_image = ImageTk.PhotoImage(image)ww = background_image.width()wh = background_image.height()x = (sw-ww)/2y = (sh-wh)/2self.root.geometry("%dx%d+%d+%d"%(ww,wh,x,y))self.root.title('欢迎进入图书管理系统--系统管理')background_label = Label(self.root, image=background_image)background_label.place(x=0, y=0, relwidth=1, relheight=1)self.root.resizable(False,False)self.guanli() self.root.mainloop() def guanli(self):self.ts_yuangong = Ts_YGFrame(self.root)self.ts_zhuxiao = Ts_ZXFrame(self.root)self.ts_shezhi = Ts_SZFrame(self.root)self.ts_guanyu = Ts_GYFrame(self.root)self.ts_fanhui = Ts_FHFrame(self.root)self.ts_yuangong.pack()#默认显示menubar = Menu(self.root,background='#C6D6A7')menubar.add_command(label='员工管理',font=18,activebackground='#9BD6CB',command=self.yuangong_data)menubar.add_command(label='账户管理',font=18,activebackground='#9BD6CB',command=self.zhuxiao_data)menubar.add_command(label='系统设置',font=18,activebackground='#9BD6CB',command=self.shezhi_data)menubar.add_command(label='关于我们',font=18,activebackground='#9BD6CB',command=self.guanyu_data)menubar.add_command(label='返回主页',font=18,activebackground='#C90000',command=self.fanhui_data)self.root['menu'] = menubar#设置菜单def yuangong_data(self): self.ts_yuangong.pack() self.ts_zhuxiao.pack_forget()self.ts_shezhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def zhuxiao_data(self):self.ts_yuangong.pack_forget()self.ts_zhuxiao.pack()self.ts_shezhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def shezhi_data(self):self.ts_yuangong.pack_forget()self.ts_zhuxiao.pack_forget()self.ts_shezhi.pack()self.ts_guanyu.pack_forget()self.ts_fanhui.pack_forget()def guanyu_data(self):self.ts_yuangong.pack_forget()self.ts_zhuxiao.pack_forget()self.ts_shezhi.pack_forget()self.ts_guanyu.pack()self.ts_fanhui.pack_forget()def fanhui_data(self):self.ts_yuangong.pack_forget()self.ts_zhuxiao.pack_forget()self.ts_shezhi.pack_forget()self.ts_guanyu.pack_forget()self.ts_fanhui.pack()self.root.destroy() Ye_mian()
zi_yemian.py#子页面模块#!/usr/bin/env python3
# coding=utf-8
'''
name : fushibo
date : 2018-5-30
图书管理系统子页面
'''
from tkinter import *
from tkinter import messagebox
from kongzhi import s
from tkinter import ttk
import re
import sys
from PIL import Image,ImageTk try:s.connect(('127.0.0.1',9028))
except:root = Tk()sw = root.winfo_screenwidth()#屏幕宽度sh = root.winfo_screenheight()#屏幕高度ww = 450wh = 250x = (sw-ww)/2y = (sh-wh)/2root.geometry("%dx%d+%d+%d"%(ww,wh,x,y)) root.title('图书管理系统') root.resizable(width=False, height=False)messagebox.showwarning('error','无网络链接!')sys.exit()#第一部分
class Ts_JYFrame(Frame):#图书借阅def __init__(self,m=None):Frame.__init__(self,m,background='#FFFFFF')self.s = s self.root = m self.jieyueren_id = StringVar()self.book_id = StringVar()self.jieyue_date = StringVar()self.guihuan_date = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',text='身份证号码',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.jieyueren_id)self.a1.grid(row=4,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书ID',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.book_id)self.a2.grid(row=6,column=1,sticky=E)Label(self,background='#FFFFFF',text='归还时间',font=18,fg='#353E40').grid(row=8,sticky=W,pady=10)self.a3=Entry(self,textvariable=self.guihuan_date)self.a3.grid(row=8,column=1,sticky=E) Button(self,text='确定',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=10,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=10,column=1,sticky=W,pady=10)def luru(self):try:jieyueren_id = self.jieyueren_id.get().strip()book_id = self.book_id.get().strip() guihuan_date = self.guihuan_date.get().strip() self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)msg = 'A {} {} {}'.format(jieyueren_id,book_id,guihuan_date)if re.search('[~`,*!%);@\:\\\(#$^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(jieyueren_id) and len(jieyueren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(jieyueren_id) < 1 or len(book_id) < 1 or len(guihuan_date) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','借书成功!')elif data =='OUT':messagebox.showerror('图书管理系统','没有库存,请及时采购!') elif data =='SAS':messagebox.showerror('图书管理系统','您已借过该书!')else:messagebox.showerror('图书管理系统','借书失败!')def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)class Ts_GHFrame(Frame):#归还图书def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.s = sself.root = mself.jieyueren_id = StringVar()self.book_name = StringVar()self.guihuan_date = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',text='借阅人身份证号码',font=18,fg='#353E40').grid(row=2,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.jieyueren_id)self.a1.grid(row=2,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书ID',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.book_name)self.a2.grid(row=4,column=1,sticky=E)Label(self,background='#FFFFFF',text='借书时间',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.a3=Entry(self,textvariable=self.guihuan_date)self.a3.grid(row=6,column=1,sticky=E) Button(self,text='确认',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=5)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def luru(self):try:jieyueren_id = self.jieyueren_id.get().strip()book_name = self.book_name.get().strip()guihuan_date = self.guihuan_date.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END) msg = 'B {} {} {}'.format(jieyueren_id,book_name,guihuan_date)if re.search('[~`,*!%);@\:\\\(#$^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(jieyueren_id) and len(jieyueren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(jieyueren_id) < 1 or len(book_name) < 1 or len(guihuan_date) < 1 :messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except Exception as e:print(e)messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()data = data.split(' ')print(data)if data[0] == 'OK':messagebox.showerror('图书管理系统','还书成功!')elif data[0] == 'OC':print(data[0])messagebox.showerror('图书管理系统','还书成功,但超时还书,\n请缴纳罚款%s元'%data[1])elif data[0] =='OUT':messagebox.showerror('图书管理系统','借书记录不存在!') else:messagebox.showerror('图书管理系统','还书失败!')def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)class Ts_FJFrame(Frame):#缴纳罚金def __init__(self,m=None):Frame.__init__(self,m,background='#FFFFFF')self.s = sself.root = mself.jieyueren_id = StringVar()self.fajin_class = StringVar()self.fajin_money = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',text='借阅人身份证号码',font=18,fg='#353E40').grid(row=2,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.jieyueren_id)self.a1.grid(row=2,column=1,sticky=E)Label(self,background='#FFFFFF',text='罚金类型',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.w = ttk.Combobox(self,width=18,values=['超时','人为'])self.w.grid(row = 4,column=1,sticky=E)Label(self,background='#FFFFFF',text='罚金金额',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.a3=Entry(self,textvariable=self.fajin_money)self.a3.grid(row=6,column=1,sticky=E)Button(self,text='确认',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def luru(self):try:jieyueren_id = self.jieyueren_id.get().strip()fajin_class = self.w.get().strip()fajin_money = self.fajin_money.get().strip()self.a1.delete(0,END)self.w.delete(0,END)self.a3.delete(0,END) msg = 'C {} {} {}'.format(jieyueren_id,fajin_class,fajin_money)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(jieyueren_id) and len(jieyueren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(jieyueren_id) < 1 or len(fajin_class) < 1 or len(fajin_money) < 1 :messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()print(data)if data == 'OK':messagebox.showerror('图书管理系统','缴纳成功!')elif data =='OUT':messagebox.showerror('图书管理系统','余额不足!请充值!') else:messagebox.showerror('图书管理系统','缴纳失败!')def quxiao(self):self.a1.delete(0,END)self.w.delete(0,END)self.a3.delete(0,END) class Ts_XSFrame(Frame):#图书销售def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.goushuren_id = StringVar()self.book_id = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',text='购书人身份证号码',font=18,fg='#353E40').grid(row=2,sticky=W,pady=10)self.a1 = Entry(self,textvariable=self.goushuren_id)self.a1.grid(row=2,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书ID',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a2 = Entry(self,textvariable=self.book_id)self.a2.grid(row=4,column=1,sticky=E) Button(self,text='确认',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def luru(self):try:goushuren_id = self.goushuren_id.get().strip()book_id = self.book_id.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)msg = 'D {} {}'.format(goushuren_id,book_id)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(goushuren_id) and len(goushuren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(goushuren_id) < 1 or len(book_id) < 1 :messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','购书成功!') elif data =='Did':messagebox.showerror('图书管理系统','库存不足!\n请及时进货!') elif data =='OUT':messagebox.showerror('图书管理系统','余额不足!请充值!') else:messagebox.showerror('图书管理系统','购书失败!')def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)class Ts_CZFrame(Frame):#充值def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.chongzhiren_id = StringVar()self.chongzhi_money = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',).grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='充值人身份证号码',font=18,fg='#353E40').grid(row=2,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.chongzhiren_id)self.a1.grid(row=2,column=1,sticky=E) Label(self,background='#FFFFFF',text='充值金额',font=18,fg='#353E40').grid(row=4,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.chongzhi_money)self.a2.grid(row=4,column=1,sticky=E) Button(self,text='确认',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=6,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=6,column=1,sticky=W,pady=10)def luru(self):try:chongzhiren_id = self.chongzhiren_id.get().strip()chongzhi_money = self.chongzhi_money.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)msg = 'E {} {}'.format(chongzhiren_id,chongzhi_money)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(chongzhiren_id) and len(chongzhiren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(chongzhiren_id) < 1 or len(chongzhi_money) < 1 :messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','充值成功!')else:messagebox.showerror('图书管理系统','充值失败!')def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)#第二部分class Ts_CGFrame(Frame):#图书采购def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.s = s self.root = m self.book_name = StringVar()self.book_class = StringVar()self.book_author = StringVar()self.book_price = StringVar()self.book_number = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=1,sticky=W,pady=40)Label(self,background='#FFFFFF',text='图书名称',font=18,fg='#353E40').grid(row=3,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.book_name)self.a1.grid(row=3,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书类别',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.book_class)self.a2.grid(row=4,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书作者',font=18,fg='#353E40').grid(row=5,sticky=W,pady=10)self.a3=Entry(self,textvariable=self.book_author)self.a3.grid(row=5,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书单价',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.a4=Entry(self,textvariable=self.book_price)self.a4.grid(row=6,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书数量',font=18,fg='#353E40').grid(row=7,sticky=W,pady=10)self.a5=Entry(self,textvariable=self.book_number)self.a5.grid(row=7,column=1,sticky=E) Button(self,text='确定',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def luru(self):try:book_name = self.book_name.get().strip()book_class = self.book_class.get().strip()book_author = self.book_author.get().strip()book_price = self.book_price.get().strip()book_number = self.book_number.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)self.a4.delete(0,END)self.a5.delete(0,END)msg = 'F {} {} {} {} {}'.format(book_name,book_class,book_author,book_price,book_number)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif len(book_name) < 1 or len(book_class) < 1 or len(book_author) < 1\or len(book_price) < 1 or len(book_number) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','采购成功!')else:messagebox.showerror('图书管理系统','采购失败!')def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)self.a4.delete(0,END)self.a5.delete(0,END)class Ts_BSFrame(Frame):#图书报损def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.s = sself.root = m self.book_name = StringVar()self.book_class = StringVar()self.book_author = StringVar()self.book_number = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',text='图书名称',font=18,fg='#353E40').grid(row=1,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.book_name)self.a1.grid(row=1,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书类别',font=18,fg='#353E40').grid(row=2,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.book_class)self.a2.grid(row=2,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书作者',font=18,fg='#353E40').grid(row=3,sticky=W,pady=10)self.a3=Entry(self,textvariable=self.book_author)self.a3.grid(row=3,column=1,sticky=E)Label(self,background='#FFFFFF',text='报损数量',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a4=Entry(self,textvariable=self.book_number)self.a4.grid(row=4,column=1,sticky=E) Button(self,text='确定',command=self.luru,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=7,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=7,column=1,sticky=W,pady=10)def luru(self):try:book_name = self.book_name.get().strip()book_class = self.book_class.get().strip()book_author = self.book_author.get().strip()book_number = self.book_number.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)self.a4.delete(0,END)msg = 'G {} {} {} {}'.format(book_name,book_class,book_author,book_number)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif len(book_name) < 1 or len(book_class) < 1 or len(book_author) < 1\or len(book_number) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','图书已报损!')elif data =='OUT':messagebox.showerror('图书管理系统','该图书不存在!') else:messagebox.showerror('图书管理系统','报损失败!')def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)self.a4.delete(0,END)class Ts_DZFrame(Frame):#读者管理def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.duzhe_name = StringVar()self.duzhe_id = StringVar()self.duzhe_money = StringVar()self.zhuxiao_name = StringVar()self.zhuxiao_id = StringVar()self.zhuxiao_money = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF').grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='注册人姓名',font=18,fg='#353E40').grid(row=1,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.duzhe_name)self.a1.grid(row=1,column=1,sticky=E) Label(self,background='#FFFFFF',text='身份证号码',font=18,fg='#353E40').grid(row=2,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.duzhe_id)self.a2.grid(row=2,column=1,sticky=E) Label(self,background='#FFFFFF',text='充值金额',font=18,fg='#353E40').grid(row=3,sticky=W,pady=5)self.a3 = Entry(self,textvariable=self.duzhe_money)self.a3.grid(row=3,column=1,sticky=E)Button(self,text='注册账户',command=self.zhu_ce,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=4,columnspan=2,pady=5)Label(self,background='#FFFFFF',text='注销人名称',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.b1 = Entry(self,textvariable=self.zhuxiao_name)self.b1.grid(row=6,column=1,sticky=E) Label(self,background='#FFFFFF',text='注销人身份证号码',font=18,fg='#353E40').grid(row=7,sticky=W,pady=5)self.b2 = Entry(self,textvariable=self.zhuxiao_id)self.b2.grid(row=7,column=1,sticky=E) Button(self,text='注销账户',command=self.zhu_xiao,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,columnspan=2,pady=5)def zhu_ce(self):try:duzhe_name = self.duzhe_name.get().strip()duzhe_id = self.duzhe_id.get().strip()duzhe_money = self.duzhe_money.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END) msg = 'H {} {} {}'.format(duzhe_name,duzhe_id,duzhe_money)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(duzhe_id) and len(duzhe_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(duzhe_name) < 1 or len(duzhe_id) < 1 or len(duzhe_money) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','读者添加成功!')elif data =='SSS':messagebox.showerror('图书管理系统','您输入的内容不规范!')elif data =='SFZ':messagebox.showerror('图书管理系统','您输入的身份证有误!')elif data =='OUT':messagebox.showerror('图书管理系统','该读者已存在!') else:messagebox.showerror('图书管理系统','读者添加失败!')def zhu_xiao(self):b = messagebox.askyesno('图书管理系统','是否注销?')if bool(b) is True:try:zhuxiao_name = self.zhuxiao_name.get().strip()zhuxiao_id = self.zhuxiao_id.get().strip()self.b1.delete(0,END)self.b2.delete(0,END)msg = 'I {} {}'.format(zhuxiao_name,zhuxiao_id)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(zhuxiao_id) and len(zhuxiao_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelif len(zhuxiao_name) < 1 or len(zhuxiao_id) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','该读者注销成功!')elif data =='OUT':messagebox.showerror('图书管理系统','该读者不存在!') else:messagebox.showerror('图书管理系统','该读者注销失败!')else:self.b1.delete(0,END)self.b2.delete(0,END)#第三部分
class Ts_TCFrame(Frame):#图书查询def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.book_class = StringVar()self.book_name = StringVar()self.book_author = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=60)Label(self,background='#FFFFFF',text='图书类别',font=18,fg='#353E40').grid(row=2,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.book_class)self.a1.grid(row=2,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书名称',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.book_name)self.a2.grid(row=4,column=1,sticky=E)Label(self,background='#FFFFFF',text='图书作者',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.a3=Entry(self,textvariable=self.book_author)self.a3.grid(row=6,column=1,sticky=E) Button(self,text='查询',command=self.cha_xun,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=7,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=7,column=1,sticky=W,pady=10)def cha_xun(self):book_class = self.book_class.get().strip()book_name = self.book_name.get().strip()book_author = self.book_author.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)msg = 'J {} {} {}'.format(book_class,book_name,book_author)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')return else:self.s.send(msg.encode())ck = Toplevel()canvas = Canvas(ck,width = 910,height = 570, bg = 'white') image = Image.open("./image/chaxun.jpg") im = ImageTk.PhotoImage(image) canvas.create_image(450,280,image = im) canvas.place(x=0, y=0, relwidth=1, relheight=1) sw = ck.winfo_screenwidth()#屏幕宽度sh = ck.winfo_screenheight()#屏幕高度# self.ww = 800x = (sw-910)/2y = (sh-570)/2ck.geometry("%dx%d+%d+%d"%(910,570,x,y)) ck.resizable(False,False)ck.title('欢迎进入智达图书管理系统--图书查询')frame_top = Frame(ck,width=200,height=180,background='#FFFFFF')frame_top.grid(row=0,column=0,padx=140,pady=20)frame_center = Frame(ck,width=600,height=380,background='#FFFFFF')frame_center.grid(row=1,column=0,padx=140,ipady=1)frame_bottom = Frame(ck,width=200,height=180,background='#FFFFFF')frame_bottom.grid(row=2,column=0,padx=140)lb_tip = Label(frame_top,text='图书名称',font=18,fg='#353E40',background='#FFFFFF')string = StringVar()string.set('')a_name = Entry(frame_top,textvariable=string)b_qury = Button(frame_top,text='快速查询',font=18,fg='#353E40',background='#FFFFFF')lb_tip.grid(row=0,column=0,padx=15,pady=30)a_name.grid(row=0,column=1,padx=45,pady=30)b_qury.grid(row=0,column=2,padx=45,pady=30)b_delete = Button(frame_bottom,text='删除',font=18,fg='#353E40',background='#FFFFFF')b_update = Button(frame_bottom,text='修改',font=18,fg='#353E40',background='#FFFFFF')b_add = Button(frame_bottom,text='添加',font=18,fg='#353E40',background='#FFFFFF')b_delete.grid(row=0,column=0,padx=20,pady=30)b_update.grid(row=0,column=1,padx=13,pady=30)b_add.grid(row=0,column=2,padx=30,pady=30)scrollBar=Scrollbar(frame_center)scrollBar.pack(side=RIGHT,fill=Y)tree = ttk.Treeview(frame_center,columns=('a1','a2','a3','a4','a5','a6')\,show='headings',yscrollcommand=scrollBar.set)tree.column('a1',width=60,anchor='center')tree.column('a2',width=150,anchor='center')tree.column('a3',width=120,anchor='center')tree.column('a4',width=120,anchor='center')tree.column('a5',width=60,anchor='center')tree.column('a6',width=60,anchor='center')tree.heading('a1',text='图书ID')tree.heading('a2',text='图书名称')tree.heading('a3',text='图书类别')tree.heading('a4',text='图书作者')tree.heading('a5',text='图书单价')tree.heading('a6',text='图书数量')tree.pack(side=LEFT,fill=Y)scrollBar.config(command=tree.yview)def treeviewClick(event):passtree.bind("<Button-1>",treeviewClick)while True:data = (self.s.recv(1024)).decode()if data == '##':breakelif data =='OUT':messagebox.showerror('图书管理系统','您查找的内容为空!')ck.destroy()breaka = data.split(' ') n = len(a) for i in range(0,n,6): tree.insert("",0,i,values=(a[i:(i+6)]))mainloop()def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)class Ts_DCFrame(Frame):#读者查询def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.duzhe_name = StringVar()self.duzhe_id = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=60)Label(self,background='#FFFFFF').grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='账户姓名',font=18,fg='#353E40').grid(row=2,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.duzhe_name)self.a1.grid(row=2,column=1,sticky=E) Label(self,background='#FFFFFF',text='身份证号码',font=18,fg='#353E40').grid(row=4,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.duzhe_id)self.a2.grid(row=4,column=1,sticky=E) Button(self,text='查询',command=self.cha_xun,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def cha_xun(self):duzhe_name = self.duzhe_name.get().strip()duzhe_id = self.duzhe_id.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)msg = 'K {} {}'.format(duzhe_name,duzhe_id)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(duzhe_id) and len(duzhe_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelse:self.s.send(msg.encode())ck = Toplevel()canvas = Canvas(ck,width = 910,height = 570, bg = 'white') image = Image.open("./image/chaxun.jpg") im = ImageTk.PhotoImage(image) canvas.create_image(450,280,image = im) canvas.place(x=0, y=0, relwidth=1, relheight=1) sw = ck.winfo_screenwidth()#屏幕宽度sh = ck.winfo_screenheight()#屏幕高度# self.ww = 800x = (sw-910)/2y = (sh-570)/2ck.geometry("%dx%d+%d+%d"%(910,570,x,y)) ck.resizable(False,False)ck.title('欢迎进入智达图书管理系统--读者查询')frame_top = Frame(ck,width=200,height=180,background='#FFFFFF')frame_top.grid(row=0,column=0,padx=140,pady=20)frame_center = Frame(ck,width=600,height=380,background='#FFFFFF')frame_center.grid(row=1,column=0,padx=140,ipady=1)frame_bottom = Frame(ck,width=200,height=180,background='#FFFFFF')frame_bottom.grid(row=2,column=0,padx=140)lb_tip = Label(frame_top,text='图书名称',font=18,fg='#353E40',background='#FFFFFF')string = StringVar()string.set('')a_name = Entry(frame_top,textvariable=string)b_qury = Button(frame_top,text='快速查询',font=18,fg='#353E40',background='#FFFFFF')lb_tip.grid(row=0,column=0,padx=15,pady=30)a_name.grid(row=0,column=1,padx=45,pady=30)b_qury.grid(row=0,column=2,padx=45,pady=30)b_delete = Button(frame_bottom,text='删除',font=18,fg='#353E40',background='#FFFFFF')b_update = Button(frame_bottom,text='修改',font=18,fg='#353E40',background='#FFFFFF')b_add = Button(frame_bottom,text='添加',font=18,fg='#353E40',background='#FFFFFF')b_delete.grid(row=0,column=0,padx=20,pady=30)b_update.grid(row=0,column=1,padx=13,pady=30)b_add.grid(row=0,column=2,padx=30,pady=30)scrollBar=Scrollbar(frame_center)scrollBar.pack(side=RIGHT,fill=Y)tree = ttk.Treeview(frame_center,columns=('a1','a2','a3')\,show='headings',yscrollcommand=scrollBar.set)tree.column('a1',width=180,anchor='center')tree.column('a2',width=200,anchor='center')tree.column('a3',width=180,anchor='center')tree.heading('a1',text='姓名')tree.heading('a2',text='身份证号码')tree.heading('a3',text='账户余额')tree.pack(side=LEFT,fill=Y)scrollBar.config(command=tree.yview)def treeviewClick(event):passtree.bind("<Button-1>",treeviewClick)while True:data = self.s.recv(1024).decode()if data == '##':breakelif data =='OUT':messagebox.showerror('图书管理系统','您查找的内容为空!')ck.destroy()break a = data.split(' ') n = len(a) for i in range(0,n,3): tree.insert("",0,i,values=(a[i:(i+3)]))mainloop()def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)class Ts_JCFrame(Frame):#借阅查询def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.book_id = StringVar()self.jieyueren_id = StringVar() self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=60)Label(self,background='#FFFFFF').grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='图书ID',font=18,fg='#353E40').grid(row=4,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.book_id)self.a1.grid(row=4,column=1,sticky=E) Label(self,background='#FFFFFF',text='身份证号码',font=18,fg='#353E40').grid(row=6,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.jieyueren_id)self.a2.grid(row=6,column=1,sticky=E) Button(self,text='查询',command=self.cha_xun,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def cha_xun(self):book_id = self.book_id.get().strip()jieyueren_id = self.jieyueren_id.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)msg = 'L {} {}'.format(book_id,jieyueren_id)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(jieyueren_id) and len(jieyueren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelse:self.s.send(msg.encode())ck = Toplevel()canvas = Canvas(ck,width = 910,height = 570, bg = 'white') image = Image.open("./image/chaxun.jpg") im = ImageTk.PhotoImage(image) canvas.create_image(450,280,image = im) canvas.place(x=0, y=0, relwidth=1, relheight=1) sw = ck.winfo_screenwidth()#屏幕宽度sh = ck.winfo_screenheight()#屏幕高度# self.ww = 800x = (sw-910)/2y = (sh-570)/2ck.geometry("%dx%d+%d+%d"%(910,570,x,y)) ck.resizable(False,False)ck.title('欢迎进入智达图书管理系统--借阅查询')frame_top = Frame(ck,width=200,height=180,background='#FFFFFF')frame_top.grid(row=0,column=0,padx=140,pady=20)frame_center = Frame(ck,width=600,height=380,background='#FFFFFF')frame_center.grid(row=1,column=0,padx=140,ipady=1)frame_bottom = Frame(ck,width=200,height=180,background='#FFFFFF')frame_bottom.grid(row=2,column=0,padx=140)lb_tip = Label(frame_top,text='图书名称',font=18,fg='#353E40',background='#FFFFFF')string = StringVar()string.set('')a_name = Entry(frame_top,textvariable=string)b_qury = Button(frame_top,text='快速查询',font=18,fg='#353E40',background='#FFFFFF')lb_tip.grid(row=0,column=0,padx=15,pady=30)a_name.grid(row=0,column=1,padx=45,pady=30)b_qury.grid(row=0,column=2,padx=45,pady=30)b_delete = Button(frame_bottom,text='删除',font=18,fg='#353E40',background='#FFFFFF')b_update = Button(frame_bottom,text='修改',font=18,fg='#353E40',background='#FFFFFF')b_add = Button(frame_bottom,text='添加',font=18,fg='#353E40',background='#FFFFFF')b_delete.grid(row=0,column=0,padx=20,pady=30)b_update.grid(row=0,column=1,padx=13,pady=30)b_add.grid(row=0,column=2,padx=30,pady=30)scrollBar=Scrollbar(frame_center)scrollBar.pack(side=RIGHT,fill=Y)tree = ttk.Treeview(frame_center,columns=('a1','a2','a3','a4','a5')\,show='headings',yscrollcommand=scrollBar.set)tree.column('a1',width=180,anchor='center')tree.column('a2',width=80,anchor='center')tree.column('a3',width=110,anchor='center')tree.column('a4',width=110,anchor='center')tree.column('a5',width=110,anchor='center')tree.heading('a1',text='身份证号')tree.heading('a2',text='图书ID')tree.heading('a3',text='借阅时间')tree.heading('a4',text='约定时间')tree.heading('a5',text='归还时间') tree.pack(side=LEFT,fill=Y)scrollBar.config(command=tree.yview)def treeviewClick(event):passtree.bind("<Button-1>",treeviewClick)while True:data = self.s.recv(1024).decode()if data == '##':breakelif data =='OUT':messagebox.showerror('图书管理系统','您查找的内容为空!')ck.destroy()break a = data.split(' ') n = len(a) for i in range(0,n,5): tree.insert("",0,i,values=(a[i:(i+5)]))mainloop()def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)class Ts_FCFrame(Frame):#罚金查询def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.jieyueren_id = StringVar()self.fajin_class = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=60)Label(self,background='#FFFFFF',text='借阅人身份证号码',font=18,fg='#353E40').grid(row=1,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.jieyueren_id)self.a1.grid(row=1,column=1,sticky=E)Label(self,background='#FFFFFF',text='罚金类型',font=18,fg='#353E40').grid(row=2,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.fajin_class)self.a2.grid(row=2,column=1,sticky=E) Button(self,text='查询',command=self.cha_xun,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=6,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=6,column=1,sticky=W,pady=10)def cha_xun(self):jieyueren_id = self.jieyueren_id.get().strip()fajin_class = self.fajin_class.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)msg = 'M {} {}'.format(jieyueren_id,fajin_class)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(jieyueren_id) and len(jieyueren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelse:self.s.send(msg.encode())ck = Toplevel()canvas = Canvas(ck,width = 910,height = 570, bg = 'white') image = Image.open("./image/chaxun.jpg") im = ImageTk.PhotoImage(image) canvas.create_image(450,280,image = im) canvas.place(x=0, y=0, relwidth=1, relheight=1) sw = ck.winfo_screenwidth()#屏幕宽度sh = ck.winfo_screenheight()#屏幕高度# self.ww = 800x = (sw-910)/2y = (sh-570)/2ck.geometry("%dx%d+%d+%d"%(910,570,x,y)) ck.resizable(False,False)ck.title('欢迎进入智达图书管理系统--罚金查询')frame_top = Frame(ck,width=200,height=180,background='#FFFFFF')frame_top.grid(row=0,column=0,padx=140,pady=20)frame_center = Frame(ck,width=600,height=380,background='#FFFFFF')frame_center.grid(row=1,column=0,padx=140,ipady=1)frame_bottom = Frame(ck,width=200,height=180,background='#FFFFFF')frame_bottom.grid(row=2,column=0,padx=140)lb_tip = Label(frame_top,text='图书名称',font=18,fg='#353E40',background='#FFFFFF')string = StringVar()string.set('')a_name = Entry(frame_top,textvariable=string)b_qury = Button(frame_top,text='快速查询',font=18,fg='#353E40',background='#FFFFFF')lb_tip.grid(row=0,column=0,padx=15,pady=30)a_name.grid(row=0,column=1,padx=45,pady=30)b_qury.grid(row=0,column=2,padx=45,pady=30)b_delete = Button(frame_bottom,text='删除',font=18,fg='#353E40',background='#FFFFFF')b_update = Button(frame_bottom,text='修改',font=18,fg='#353E40',background='#FFFFFF')b_add = Button(frame_bottom,text='添加',font=18,fg='#353E40',background='#FFFFFF')b_delete.grid(row=0,column=0,padx=20,pady=30)b_update.grid(row=0,column=1,padx=13,pady=30)b_add.grid(row=0,column=2,padx=30,pady=30)scrollBar=Scrollbar(frame_center)scrollBar.pack(side=RIGHT,fill=Y)tree = ttk.Treeview(frame_center,columns=('a1','a2','a3')\,show='headings',yscrollcommand=scrollBar.set)tree.column('a1',width=180,anchor='center')tree.column('a2',width=180,anchor='center')tree.column('a3',width=180,anchor='center') tree.heading('a1',text='姓名')tree.heading('a2',text='罚金类型')tree.heading('a3',text='罚金金额') tree.pack(side=LEFT,fill=Y)scrollBar.config(command=tree.yview) def treeviewClick(event):passtree.bind("<Button-1>",treeviewClick)while True:data = self.s.recv(1024).decode()if data == '##':breakelif data =='OUT':messagebox.showerror('图书管理系统','您查找的内容为空!')ck.destroy()breaka = data.split(' ') n = len(a) for i in range(0,n,3): tree.insert("",0,i,values=(a[i:(i+3)]))mainloop()def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)class Ts_XCFrame(Frame):#销售查询def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.goushuren_id = StringVar()self.book_name = StringVar()self.book_price = StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=60)Label(self,background='#FFFFFF',text='购书人身份证号码',font=18,fg='#353E40').grid(row=4,sticky=W,pady=10)self.a1=Entry(self,textvariable=self.goushuren_id)self.a1.grid(row=4,column=1,sticky=E)Label(self,background='#FFFFFF',text='销售图书名称',font=18,fg='#353E40').grid(row=6,sticky=W,pady=10)self.a2=Entry(self,textvariable=self.book_name)self.a2.grid(row=6,column=1,sticky=E) Button(self,text='查询',command=self.cha_xun,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=0,sticky=W,pady=10)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8')\.grid(row=8,column=1,sticky=W,pady=10)def cha_xun(self):goushuren_id = self.goushuren_id.get().strip()book_name = self.book_name.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)msg = 'N {} {}'.format(goushuren_id,book_name)if re.search('[~`,*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif 1 <= len(goushuren_id) and len(goushuren_id) != 18:messagebox.showerror('图书管理系统','您输入的身份证有误!')returnelse:self.s.send(msg.encode())ck = Toplevel()canvas = Canvas(ck,width = 910,height = 570, bg = 'white') image = Image.open("./image/chaxun.jpg") im = ImageTk.PhotoImage(image) canvas.create_image(450,280,image = im) canvas.place(x=0, y=0, relwidth=1, relheight=1) sw = ck.winfo_screenwidth()#屏幕宽度sh = ck.winfo_screenheight()#屏幕高度# self.ww = 800x = (sw-910)/2y = (sh-570)/2ck.geometry("%dx%d+%d+%d"%(910,570,x,y)) ck.resizable(False,False)ck.title('欢迎进入智达图书管理系统--销售查询')frame_top = Frame(ck,width=200,height=180,background='#FFFFFF')frame_top.grid(row=0,column=0,padx=140,pady=20)frame_center = Frame(ck,width=600,height=380,background='#FFFFFF')frame_center.grid(row=1,column=0,padx=140,ipady=1)frame_bottom = Frame(ck,width=200,height=180,background='#FFFFFF')frame_bottom.grid(row=2,column=0,padx=140)lb_tip = Label(frame_top,text='图书名称',font=18,fg='#353E40',background='#FFFFFF')string = StringVar()string.set('')a_name = Entry(frame_top,textvariable=string)b_qury = Button(frame_top,text='快速查询',font=18,fg='#353E40',background='#FFFFFF')lb_tip.grid(row=0,column=0,padx=15,pady=30)a_name.grid(row=0,column=1,padx=45,pady=30)b_qury.grid(row=0,column=2,padx=45,pady=30)b_delete = Button(frame_bottom,text='删除',font=18,fg='#353E40',background='#FFFFFF')b_update = Button(frame_bottom,text='修改',font=18,fg='#353E40',background='#FFFFFF')b_add = Button(frame_bottom,text='添加',font=18,fg='#353E40',background='#FFFFFF')b_delete.grid(row=0,column=0,padx=20,pady=30)b_update.grid(row=0,column=1,padx=13,pady=30)b_add.grid(row=0,column=2,padx=30,pady=30)scrollBar=Scrollbar(frame_center)scrollBar.pack(side=RIGHT,fill=Y)tree = ttk.Treeview(frame_center,columns=('a1','a2','a3')\,show='headings',yscrollcommand=scrollBar.set)tree.column('a1',width=200,anchor='center')tree.column('a2',width=180,anchor='center')tree.column('a3',width=180,anchor='center') tree.heading('a1',text='购书人身份证号码')tree.heading('a2',text='销售图书名称')tree.heading('a3',text='销售图书单价') tree.pack(side=LEFT,fill=Y)scrollBar.config(command=tree.yview)def treeviewClick(event):passtree.bind("<Button-1>",treeviewClick)while True:data = self.s.recv(1024).decode()if data == '##':breakelif data =='OUT':messagebox.showerror('图书管理系统','您查找的内容为空!')ck.destroy()break a = data.split(' ') n = len(a) for i in range(0,n,3): tree.insert("",0,i,values=(a[i:(i+3)]))mainloop()def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)#第四部分
class Ts_YGFrame(Frame):#员工管理def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.yuangong_name = StringVar()self.yuangong_passwd = StringVar()self.yuangong_passwd1= StringVar()self.zhanghu_name = StringVar()self.zhanghu_passwd = StringVar()self.zhanghu_passwd1= StringVar() self.zhanghu_passwd2= StringVar() self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=10)Label(self,background='#FFFFFF').grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='注册人姓名',font=18,fg='#353E40').grid(row=1,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.yuangong_name)self.a1.grid(row=1,column=1,sticky=E) Label(self,background='#FFFFFF',text='注册密码',font=18,fg='#353E40').grid(row=2,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.yuangong_passwd,show='*')self.a2.grid(row=2,column=1,sticky=E) Label(self,background='#FFFFFF',text='确认密码',font=18,fg='#353E40').grid(row=3,sticky=W,pady=5)self.a3 = Entry(self,textvariable=self.yuangong_passwd1,show='*')self.a3.grid(row=3,column=1,sticky=E)Button(self,text='注册',command=self.zhu_ce,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=4,column=0,pady=5)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=4,column=1,pady=5)Label(self,background='#FFFFFF',text='账户名称',font=18,fg='#353E40').grid(row=6,sticky=W,pady=5)self.b1 = Entry(self,textvariable=self.zhanghu_name)self.b1.grid(row=6,column=1,sticky=E) Label(self,background='#FFFFFF',text='请输入原密码',font=18,fg='#353E40').grid(row=7,sticky=W,pady=5)self.b2 = Entry(self,textvariable=self.zhanghu_passwd,show='*')self.b2.grid(row=7,column=1,sticky=E) Label(self,background='#FFFFFF',text='请输入新密码',font=18,fg='#353E40').grid(row=8,sticky=W,pady=5)self.b3 = Entry(self,textvariable=self.zhanghu_passwd1,show='*')self.b3.grid(row=8,column=1,sticky=E)Label(self,background='#FFFFFF',text='请确认新密码',font=18,fg='#353E40').grid(row=9,sticky=W,pady=5)self.b4 = Entry(self,textvariable=self.zhanghu_passwd2,show='*')self.b4.grid(row=9,column=1,sticky=E)Button(self,text='修改',command=self.xiu_gai,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,column=0,pady=5)Button(self,text='清空',command=self.quxiao1,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,column=1,pady=5)def zhu_ce(self):try:yuangong_name = self.yuangong_name.get().strip()yuangong_passwd = self.yuangong_passwd.get().strip()yuangong_passwd1 = self.yuangong_passwd1.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END) msg = 'O {} {} {}'.format(yuangong_name,yuangong_passwd,yuangong_passwd1)if re.search('[~`*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif len(yuangong_name) < 1 or len(yuangong_passwd) < 1 or len(yuangong_passwd1) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelif yuangong_passwd != yuangong_passwd1:messagebox.showerror('图书管理系统','您输入的密码不一致!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','注册成功!')elif data =='OUT':messagebox.showerror('图书管理系统','该管理员已存在!') else:messagebox.showerror('图书管理系统','注册失败!')def xiu_gai(self):b = messagebox.askyesno('图书管理系统','是否修改?')if bool(b) is True:try:zhanghu_name = self.zhanghu_name.get().strip()zhanghu_passwd = self.zhanghu_passwd.get().strip()zhanghu_passwd1 = self.zhanghu_passwd1.get().strip()zhanghu_passwd2 = self.zhanghu_passwd2.get().strip() self.b1.delete(0,END)self.b2.delete(0,END)self.b3.delete(0,END) self.b4.delete(0,END)msg = 'S {} {} {} {}'.format(zhanghu_name,zhanghu_passwd,zhanghu_passwd1,zhanghu_passwd2)if re.search('[~`*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif len(zhanghu_name) < 1 or len(zhanghu_passwd) < 1 or len(zhanghu_passwd1) < 1 or len(zhanghu_passwd2) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelif zhanghu_passwd1 != zhanghu_passwd2:messagebox.showerror('图书管理系统','您输入的密码不一致!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','修改成功!')elif data =='OUT':messagebox.showerror('图书管理系统','该管理员不存在!')else:messagebox.showerror('图书管理系统','修改失败!')else:self.b1.delete(0,END)self.b2.delete(0,END)self.b3.delete(0,END)self.b4.delete(0,END)def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)def quxiao1(self):self.b1.delete(0,END)self.b2.delete(0,END)self.b3.delete(0,END)self.b4.delete(0,END)class Ts_ZXFrame(Frame):#账户管理def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.guanliyuan_name = StringVar()self.guanliyuan_passwd = StringVar()self.yuangong_name= StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=60)Label(self,background='#FFFFFF').grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='超级管理员',font=18,fg='#353E40').grid(row=4,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.guanliyuan_name)self.a1.grid(row=4,column=1,sticky=E) Label(self,background='#FFFFFF',text='管理员密码',font=18,fg='#353E40').grid(row=6,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.guanliyuan_passwd,show='*')self.a2.grid(row=6,column=1,sticky=E) Label(self,background='#FFFFFF',text='员工姓名',font=18,fg='#353E40').grid(row=8,sticky=W,pady=5)self.a3 = Entry(self,textvariable=self.yuangong_name)self.a3.grid(row=8,column=1,sticky=E)Button(self,text='删除',command=self.shan_qu,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,column=0,pady=5)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,column=1,pady=5)def shan_qu(self):b = messagebox.askyesno('图书管理系统','是否删除?')if bool(b) is True:try:guanliyuan_name = self.guanliyuan_name.get().strip()guanliyuan_passwd = self.guanliyuan_passwd.get().strip()yuangong_name = self.yuangong_name.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END) msg = 'Q {} {} {}'.format(guanliyuan_name,guanliyuan_passwd,yuangong_name)if re.search('[~`*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif len(guanliyuan_name) < 1 or len(guanliyuan_passwd) < 1 or len(yuangong_name) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','删除成功!')elif data =='OUT':messagebox.showerror('图书管理系统','您的权限不够!') else:messagebox.showerror('图书管理系统','删除失败!')else:self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END) def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)class Ts_SZFrame(Frame):#系统设置def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.guanliyuan_name = StringVar()self.guanliyuan_passwd = StringVar()self.yuangong_name= StringVar()self.yuangong_power= StringVar()self.start()def start(self):Label(self,background='#FFFFFF').grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF').grid(column=0,sticky=W,pady=5)Label(self,background='#FFFFFF',text='超级管理员',font=18,fg='#353E40').grid(row=2,sticky=W,pady=5)self.a1 = Entry(self,textvariable=self.guanliyuan_name)self.a1.grid(row=2,column=1,sticky=E) Label(self,background='#FFFFFF',text='管理员密码',font=18,fg='#353E40').grid(row=4,sticky=W,pady=5)self.a2 = Entry(self,textvariable=self.guanliyuan_passwd,show='*')self.a2.grid(row=4,column=1,sticky=E) Label(self,background='#FFFFFF',text='员工姓名',font=18,fg='#353E40').grid(row=6,sticky=W,pady=5)self.a3 = Entry(self,textvariable=self.yuangong_name)self.a3.grid(row=6,column=1,sticky=E)Label(self,background='#FFFFFF',text='管理员类别',fg='#353E40',font=15)\.grid(row = 8, sticky=W,pady=10)self.w = ttk.Combobox(self,width=18,values=['普通管理员','高级管理员','超级管理员'])self.w.current(0)self.w.grid(row = 8,column=1,sticky=E)Button(self,text='提交',command=self.ti_jiao,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,column=0,pady=5)Button(self,text='清空',command=self.quxiao,font=18,background='#C6D6A7',activebackground='#1AD8E8').\grid(row=10,column=1,pady=5)def ti_jiao(self):b = messagebox.askyesno('图书管理系统','是否提交?')if bool(b) is True:try:guanliyuan_name = self.guanliyuan_name.get().strip()guanliyuan_passwd = self.guanliyuan_passwd.get().strip()yuangong_name = self.yuangong_name.get().strip()yuangong_power = self.w.get().strip()self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)msg = 'R {} {} {} {}'.format(guanliyuan_name,guanliyuan_passwd,yuangong_name,yuangong_power)if re.search('[~`*!%);@\:\\\(#$\-^&_\'=+.>\|}\[{\]"?/<]', msg):messagebox.showerror('图书管理系统','您输入的内容不规范!')returnelif len(guanliyuan_name) < 1 or len(guanliyuan_passwd) < 1 or len(yuangong_name) < 1 or len(yuangong_power) < 1:messagebox.showerror('图书管理系统','您输入的内容不能为空!')returnelse:self.s.send(msg.encode())except:messagebox.showerror('图书管理系统','无网络链接!')data = self.s.recv(128).decode()if data == 'OK':messagebox.showerror('图书管理系统','修改成功!')elif data =='OUT':messagebox.showerror('图书管理系统','您的权限不够!') else:messagebox.showerror('图书管理系统','修改失败!')else:self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)def quxiao(self):self.a1.delete(0,END)self.a2.delete(0,END)self.a3.delete(0,END)class Ts_GYFrame(Frame):def __init__(self,m=None):Frame.__init__(self,background='#FFFFFF')self.root = mself.s = sself.start()def start(self):Label(self,background='#FFFFFF',).grid(row=0,sticky=W,pady=40)Label(self,background='#FFFFFF',text = '公司地址:北京市西城区广安门外中百A3507',font=16,fg='#353E40',justify=LEFT)\.grid(row=8,sticky=W,pady=10)Label(self,background='#FFFFFF',text = '联系方式:010-888888',font=16,fg='#353E40',justify=LEFT)\.grid(row=10,sticky=W,pady=10)Label(self,background='#FFFFFF',text = '公司邮箱:fushibo@163.com',font=16,fg='#353E40',justify=LEFT)\.grid(row=12,sticky=W,pady=10)class Ts_FHFrame(Frame):pass
ts_fuwuqi.py#服务器模块
#!/usr/bin/env python3
# coding=utf-8'''
name : fushibo
date : 2018-5-30
MOLULES : python3.5 mysql pymysql
图书管理系统服务器
'''
from threading import Thread
from socket import *
import pymysql
import sys
import signal
import os
import datetime
import timeclass Fuwuqi(object):def __init__(self):self.s = socket()self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)def bind(self, addr):self.s.bind(addr)def start(self):self.s.listen(10)signal.signal(signal.SIGCHLD, signal.SIG_IGN)while True:try:c, addr = self.s.accept()except KeyboardInterrupt:os._exit(0)except Exception as e:print(e)# 创建子进程pid = os.fork()if pid < 0:print("Create child process failed")c.close()elif pid == 0:self.s.close()self.do_child(c)sys.exit(0)else:c.close()continuedef do_child(self, c):try:while True:data = c.recv(1024).decode() if data[0] == 'X':self.do_denglu(c, data)elif data[0] == 'Z':c.close()break# 日常elif data[0] == 'A': # 借阅self.jie_yue(c, data)elif data[0] == 'B': # 归还self.gui_huan(c, data)elif data[0] == 'C': # 罚款self.fa_jin(c,data)print('aa:',data[0]) elif data[0] == 'D': # 买书self.buy(c, data)elif data[0] == 'E': # 充值self.charge(c, data)# 图书维护和读者维护elif data[0] == 'F':self.book_Purchase(c, data)elif data[0] == 'G':self.book_loss(c, data)elif data[0] == 'H':self.reader_register(c, data)elif data[0] == 'I':self.reader_Cancellation(c, data)# 查询elif data[0] == 'J':self.book_data(c, data)elif data[0] == 'K':self.reader_data(c, data)elif data[0] == 'L': # 借书记录self.cha_yue(c, data)elif data[0] == 'M': # 罚款记录self.fine_data(c, data)elif data[0] == 'N': # 购买记录self.purchase_data(c, data)# 系统管理elif data[0] == 'O':self.lu_ru(c, data)elif data[0] == 'Q': # 删去self.shan_chu(c, data)elif data[0] == 'R': # 权限self.power(c, data)elif data[0] == 'S': # 修改密码self.change(c, data)except Exception as e:pass# 登录def do_denglu(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')name = l[1]passwd = l[2]power = l[3]cursor = db.cursor()try:sql = "select * from user where username='%s' and password='%s' and power = %s;"\% (name, passwd, power)cursor.execute(sql)r = cursor.fetchone()except Exception as e:print(e)returnif r == None:c.send(b'FALL')else:c.send(b'OK')db.close()
# 功能
# 日常工作# 借书 Adef jie_yue(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_id = l[1]book_id = l[2]promise_date = l[3]cursor = db.cursor()year = datetime.datetime.now().yearmonth = datetime.datetime.now().monthday = datetime.datetime.now().daytry:# 查看库存sql = 'select balance from books where book_id="%s";' % book_idcursor.execute(sql)r = cursor.fetchone()if r[0] == 0:# 库存为0,告知没有库存c.send(b'OUT')return#查看是否借过该书sql = 'select * from borrow where reader_id = "%s" and book_id = "%s";'\% (reader_id,book_id,)cursor.execute(sql)r = cursor.fetchall() for i in r:if i[4] == None:c.send(b'SAS')returnelse:# 如果有货继续sql = "insert into borrow values('%s','%s',\"%s-%s-%s\",'%s',null)"\% (reader_id, book_id, year,month,day,promise_date)cursor.execute(sql)sql = 'update books set balance=balance-1 where book_id="%s";' % book_idcursor.execute(sql)except Exception as e:print(e)c.send(b'No') # 错误即为失败returnc.send(b'OK')db.commit()db.close()# 还书 Bdef gui_huan(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_id = l[1]book_id = l[2]start_date = l[3]cursor = db.cursor()# 获取当前年月日year = datetime.datetime.now().yearmonth = datetime.datetime.now().monthday = datetime.datetime.now().daytry:# 查询是否有这条借书记录sql = 'select * from borrow where reader_id = "%s" and book_id = "%s" and start_date = "%s" \and comback_date is NULL;' % (reader_id, book_id, start_date)cursor.execute(sql)r = cursor.fetchone()if r:sql = "update borrow set comback_date=\"%s-%s-%s\"\where reader_id = '%s' and book_id = '%s' and start_date = '%s';"\% (year, month, day, reader_id, book_id, start_date)cursor.execute(sql)sql = 'update books set balance=balance+1 where book_id="%s";' % book_idcursor.execute(sql)else:# 如果不为空就是已经归还或者没有这条记录c.send(b'OUT')returnexcept Exception as e:print(e)c.send(b'No') # 查询错误即为失败return# c.send(b'OK')db.commit()d1 = r[3]d2 = datetime.date(year, month, day)fine = (d2-d1).days# 判断两个时间的时间差,正数就是超时,负数或0则时限内归还if fine > 0:c.send(('OC '+str(fine)).encode())else:c.send(b'OK')db.close()# 缴纳罚金 Cdef fa_jin(self,c,data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ') reader_id = l[1] class_fine = l[2] fine_money = l[3]cursor = db.cursor()try:sql = 'select money from reader where reader_id="%s";' % reader_idcursor.execute(sql)r = cursor.fetchone()# 查看用户余额if r[0] < int(fine_money):# 如果余额为负提醒需要充值c.send(b'OUT')return# 插入罚款记录并扣款sql = 'insert into fine values("%s","%s","%s");' % (reader_id, class_fine, fine_money)cursor.execute(sql)sql = 'update reader set money=money-%s where reader_id="%s";' % (int(fine_money), reader_id)cursor.execute(sql)db.commit()except Exception as e:print(e)c.send(b'No') # 错误即为失败returnc.send(b'OK')db.close()# 买书 Ddef buy(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_id = l[1]book_id = l[2]cursor = db.cursor()try:sql = 'select balance,price from books where book_id="%s";' % book_idcursor.execute(sql)r = cursor.fetchone()money = r[1]if r[0] == 0:# 如果库存为0提醒需要进货c.send(b'Did')return# 查看用户余额sql = 'select money from reader where reader_id="%s";' % reader_idcursor.execute(sql)r = cursor.fetchone()if r[0] < money:# 如果余额为负提醒需要充值c.send(b'OUT')# 插入购买记录sql = 'insert into purchase values("%s","%s","%s");' % (reader_id, book_id, money)cursor.execute(sql)# 减少库存sql = 'update books set balance=balance-1 where book_id="%s";' % book_idcursor.execute(sql)# 减少金钱sql = 'update reader set money=money-"%s" where reader_id="%s";' % (money, reader_id)cursor.execute(sql)except Exception as e:print(e)c.send(b'No') # 错误即为失败returndb.commit()c.send(b'OK')db.close()# 充值 Edef charge(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_id = l[1]money = l[2]cursor = db.cursor()try:# 增加金钱sql = 'update reader set money=money+"%s" where reader_id="%s";' % (money, reader_id)cursor.execute(sql)except Exception as e:print(e)c.send(b'NO') # 错误即为失败returndb.commit()c.send(b'OK')db.close()
# 资料维护# 图书进货def book_Purchase(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')book_name = l[1]class_name = l[2]author = l[3]price = l[4]balance = l[5]cursor = db.cursor()try:sql_book_id = 'select book_name from books where book_name="%s";' % book_namecursor.execute(sql_book_id)id_book = cursor.fetchone()# 如果没有则添加数据if id_book == None:sql_book_insert = 'insert into books values(null,"%s","%s","%s",%s,%s);' % (book_name, class_name, author, price, int(balance))cursor.execute(sql_book_insert)else:# 如果有则对balance进行修改# 对条件等于book_id 和 book_name的字段进行balance修改sql = 'update books set balance=%s+balance where book_name="%s";' % (balance, book_name)cursor.execute(sql)except Exception as e:print(e)c.send(b'OUT') # 添加失败db.commit()c.send(b'OK')# 图书定损def book_loss(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')book_name = l[1]class_name = l[2]author = l[3]balance = l[4]cursor = db.cursor()try:sql_book_name = 'select book_name from books where book_name="%s";' % book_namecursor.execute(sql_book_name) # 执行语句name_book = cursor.fetchone()sql_book_balance = 'select balance from books where book_name="%s";' % book_namecursor.execute(sql_book_balance)balance_book = cursor.fetchone()# 如果没有则添加数据if sql_book_name == None or balance_book == 0:c.send(b'OUT')returnelse:# 如果有则对balance进行修改# 对条件等于book_id 和 book_name的字段进行balance修改sql = 'update books set balance=balance-%s where book_name="%s";' % (int(balance), book_name)cursor.execute(sql)except Exception as e:print(e)c.send(b'No') # 删除失败returndb.commit()c.send(b'OK')db.close()# 用户注册def reader_register(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_name = l[1]reader_id = l[2]money = l[3]cursor = db.cursor()try:sql_reader_id = 'select reader_id from reader where reader_id="%s";' % reader_idcursor.execute(sql_reader_id)id_reader = cursor.fetchone()# 如果没有则添加用户if id_reader == None:sql_reader_insert = 'insert into reader values("%s","%s","%s");' % (reader_name, reader_id, money)cursor.execute(sql_reader_insert)else:c.send(b'OUT')returnexcept Exception as e:print(e)c.send(b'No') # 注册失败returndb.commit()c.send(b'OK')db.close()# 注销用户def reader_Cancellation(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_name = l[1]reader_id = l[2]cursor = db.cursor()try:id_reader = 'select reader_id from reader where reader_id="%s" and reader_name="%s";' % (reader_id, reader_name)cursor.execute(id_reader)id_reader = cursor.fetchone()# 如果没有则添加用户if id_reader == None:c.send(b'OUT')returnelse:sql_reader_Cancellation = 'delete from reader where reader_id="%s";' % reader_idcursor.execute(sql_reader_Cancellation)except Exception as e:print(e)c.send(b'No') # 注册失败returndb.commit()c.send(b'OK')db.close()
# 历史查询# 图书资料查询 Jdef book_data(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')class_name = l[1]book_name = l[2]author = l[3]cursor = db.cursor()try:if bool(l[1]) == False and bool(l[2]) == False and bool(l[3]) == False:sql = "select * from books;"cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == True and bool(l[2]) == False and bool(l[3]) == False:sql = "select * from books where class_name ='%s'" % l[1]cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == False and bool(l[2]) == True and bool(l[3]) == False:sql = "select * from books where book_name ='%s'" % l[2]cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == False and bool(l[2]) == False and bool(l[3]) == True:sql = "select * from books where author ='%s'" % l[3]cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == True and bool(l[2]) == True and bool(l[3]) == False:sql = "select * from books where class_name ='%s' and book_name = '%s'" % (l[1], l[2])cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == True and bool(l[2]) == False and bool(l[3]) == True:sql = "select * from books where class_name ='%s' and author = '%s'" % (l[1], l[3])cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == False and bool(l[2]) == True and bool(l[3]) == True:sql = "select * from books where book_name ='%s' and\author = '%s'" % (l[2], l[3])cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelif bool(l[1]) == True and bool(l[2]) == True and bool(l[3]) == True:sql = "select * from books where class_name ='%s' and\book_name = '%s' and author = '%s'" % (l[1], l[2], l[3])cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')while True:for x in r:a = '{} {} {} {} {} {}'.format(str(x[0]), x[1], x[2], x[3], str(x[4]), str(x[5]))c.send(a.encode())time.sleep(0.04)breakc.send(b'##')time.sleep(1)returnelse:c.send(b'OUT')except Exception as e:print(e)db.rollback()# 读者资料查询 Kdef reader_data(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_name = l[1]reader_id = l[2]cursor = db.cursor()try:if reader_id == '' and reader_name == '':sql = "select * from reader;"else:sql = "select * from reader where \reader_id='%s' or reader_name='%s';"\% (reader_id, reader_name)cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')returnelse:for x in r:a = '{} {} {}'.format(x[0], x[1], str(x[2]))c.send(a.encode())time.sleep(0.04)c.send(b'##')except Exception as e:print(e)db.close()# 借书历史记录 Ldef cha_yue(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')book_id = l[1]reader_id = l[2]cursor = db.cursor()try:if book_id == '' and reader_id == '':sql = "select * from borrow"else:sql = "select * from borrow where \reader_id='%s' or book_id='%s' "\% (reader_id, book_id)cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')returnelse:for x in r:a = '{} {} {} {} {}'.format(x[0], x[1], x[2], x[3], x[4])c.send(a.encode())time.sleep(0.04)c.send(b'##')except Exception as e:print(e)returndb.close()# 罚款历史记录 Mdef fine_data(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_id = l[1]class_fine = l[2]cursor = db.cursor()try:if reader_id == '' and class_fine == '':sql = "select * from fine"else:sql = "select * from fine where \reader_id='%s' or class_fine='%s' "\% (reader_id, class_fine)cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')returnelse:for x in r:a = '{} {} {}'.format(x[0], x[1], x[2])c.send(a.encode())time.sleep(0.04)c.send(b'##')except Exception as e:print(e)returndb.close()# 购买记录 Ndef purchase_data(self, c, data):db = pymysql.connect('localhost', 'root', '123456','Library', charset='utf8')l = data.split(' ')reader_id = l[1]book_id = l[2]cursor = db.cursor()try:if reader_id == '' and book_id == '':sql = "select * from purchase"else:sql = "select * from purchase where \reader_id='%s' or book_id='%s' "\% (reader_id, book_id)cursor.execute(sql)r = cursor.fetchall()if r == None:c.send(b'OUT')returnelse:for x in r:a = '{} {} {}'.format(x[0], x[1], x[2])c.send(a.encode())time.sleep(0.04)c.send(b'##')except Exception as e:print(e)returndb.close()
# 系统管理# 注销 Z# logout# 员工增加 Odef lu_ru(self, c, data):db = pymysql.connect('localhost', 'root', '123456', 'Library')l = data.split(' ')username = l[1]password = l[2]rpw = l[3]cursor = db.cursor()sql = "select * from user where username ='%s'" % usernamecursor.execute(sql)r = cursor.fetchone()if r != None:c.send(b'OUT')returnelse:sql = "insert into user values ('%s','%s',1)"\% (username, password)try:cursor.execute(sql)db.commit()c.send(b'OK')except:c.send(b'FALL')db.rollback()returnelse:print("注册成功")db.close()def change(self, c, data): # 修改密码db = pymysql.connect('localhost', 'root', '123456', 'Library')l = data.split(' ')username = l[1]password = l[2]npw = l[3]cursor = db.cursor()sql = "select * from user where username ='%s'" % usernamecursor.execute(sql)r = cursor.fetchone()if r == None:c.send(b'OUT')returnelse:sql = "update user set password='%s' where username='%s'"\% (npw, username)try:cursor.execute(sql)db.commit()c.send(b'OK')except:c.send(b'No')db.rollback()returnelse:print("修改成功")db.close()# 删除员工 Qdef shan_chu(self, c, data):db = pymysql.connect('localhost', 'root', '123456', 'Library')l = data.split(' ')supername = l[1]password = l[2]username = l[3]cursor = db.cursor()try:sql = "select power from user where username='%s' and password='%s';" % (supername, password)cursor.execute(sql)r = cursor.fetchone()if r[0] == '3':sql = "delete from user where username ='%s'" % usernamecursor.execute(sql)db.commit()else:c.send(b'OUT')returnexcept Exception as e:print(e)c.send(b'NO')db.rollback()returnc.send(b'OK')print("删除成功")db.close()# 改变权限 Rdef power(self,c,data):db = pymysql.connect('localhost', 'root', '123456', 'Library')l = data.split(' ')superuser = l[1]password = l[2]username = l[3]power = l[4]cursor = db.cursor()if power == '普通管理员':power = 1elif power == '高级管理员':power = 2elif power == '超级管理员':power = 3 try:sql = "select power from user where username = '%s' and password = '%s'" % (superuser, password)cursor.execute(sql)r = cursor.fetchone()print('r:',r)if r[0] == '3':sql = "update user set power='%s' where username ='%s'" % (power, username)cursor.execute(sql)db.commit()c.send(b'OK')print('hello')else:c.send(b'OUT')returnexcept Exception as e:print(e)c.send(b'FALL')db.rollback()returnprint("修改成功")db.close()def main():fuwuqi = Fuwuqi()fuwuqi.bind(('127.0.0.1', 9028))fuwuqi.start()if __name__ == '__main__':main()
-- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64)
--
-- Host: localhost Database: tushu
-- ------------------------------------------------------
-- Server version 5.7.22-0ubuntu0.16.04.1/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `books`
--DROP TABLE IF EXISTS `books`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `books` (`book_id` int(11) NOT NULL AUTO_INCREMENT,`book_name` char(20) NOT NULL,`class_name` char(10) NOT NULL,`author` char(20) DEFAULT '不详',`price` int(11) NOT NULL,`balance` int(11) DEFAULT '0',PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `books`
--LOCK TABLES `books` WRITE;
/*!40000 ALTER TABLE `books` DISABLE KEYS */;
INSERT INTO `books` VALUES (1,'三国演义','历史','罗贯中',99,12),(2,'水浒传','小说','爱谁谁',50,30),(3,'浮生六记','文学','沈夏',30,50),(4,'达芬奇密码','文学','丹·布朗',25,33),(5,'简·爱','文学','夏洛蒂·勃朗特',6,100),(6,'李鸿章传','传记','梁启超',25,33),(7,'名人传','传记','罗曼·罗兰',30,25),(8,'全球通史','历史','海斯',35,20),(9,'中国通史','历史','钱穆',12,50),(10,'资治通鉴','历史','司马光',135,15),(11,'吕氏春秋','历史','吕不韦',70,10),(12,'轻健身','体育','麦克尔·莫斯利',3,20),(13,'围棋入门','体育','李明',10,20),(14,'三国演义','小说','罗贯中',100,20),(15,'红楼梦','小说','曹雪芹',100,15),(16,'水浒传','小说','施耐庵',99,18),(17,'西游记','小说','吴承恩',80,99),(18,'聊斋志异','小说','蒲松龄',55,13),(19,'阿Q正传','小说','鲁迅',2,200),(20,'呐喊','小说','鲁迅',55,100),(21,'封神演义','小说','许仲琳',25,10),(22,'狐妖小红娘','动漫','小新',10,20),(23,'寄生少女','动漫','周志言',15,33),(24,'新版爆笑校园1','动漫','周斌',3,16),(25,'新版爆笑校园2','动漫','周斌',3,17),(26,'新版爆笑校园3','动漫','周斌',3,15),(27,'新版爆笑校园4','动漫','周斌',3,15),(28,'毛泽东选集1','文学','毛泽东',70,25),(29,'毛泽东选集2','文学','毛泽东',70,25),(30,'毛泽东选集3','文学','毛泽东',70,25),(31,'毛泽东选集4','文学','毛泽东',70,25),(32,'文学回忆录','文学','木心',70,35),(33,'北洋夜行记','文学','金醉',43,20),(34,'中国神话史','文学','袁珂',54,15),(35,'罗生门','文学','芥川龙之介',27,10),(36,'丝绸之路','历史','彼得·弗兰科潘',62,15),(37,'文明之光1','历史','吴军',50,18),(38,'文明之光2','历史','吴军',50,18),(39,'文明之光3','历史','吴军',50,18),(40,'文明之光4','历史','吴军',50,18),(41,'谁杀了他','小说','东野圭吾',40,3),(42,'局外人','文学','加缪',29,15),(43,'绿毛水怪','小说','史泰龙',32,5),(44,'三体1','小说','刘慈欣',22,11),(45,'三体2','小说','刘慈欣',22,11),(46,'三体3','小说','刘慈欣',25,11),(47,'我们都是孤独的行路人','哲学','学诚法师',29,15),(48,'简单的逻辑学','哲学','D.Q.麦克伦尼',26,5),(49,'天下·法学原论','法律','韩式元',104,3),(50,'中华人名共和国合同法','法律','法律出版社法规中心',19,18),(51,'中国兵器史','军事','周纬',35,11),(52,'隆美尔战时文件','军事','李德·哈特',34,8),(53,'阿登战役','军事','安东尼比夫',55,15),(54,'战争论','军事','卡尔',52,8),(55,'人工智能基础','教育','陈玉琨',35,1000),(56,'Python零基础入门学习','教育','小甲鱼',48,1000);
/*!40000 ALTER TABLE `books` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `borrow`
--DROP TABLE IF EXISTS `borrow`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `borrow` (`reader_id` char(18) NOT NULL,`book_id` int(11) NOT NULL,`start_date` date NOT NULL,`promise_date` date NOT NULL,`comback_date` date DEFAULT NULL,KEY `reader_id` (`reader_id`),CONSTRAINT `borrow_ibfk_1` FOREIGN KEY (`reader_id`) REFERENCES `reader` (`reader_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `borrow`
--LOCK TABLES `borrow` WRITE;
/*!40000 ALTER TABLE `borrow` DISABLE KEYS */;
INSERT INTO `borrow` VALUES ('110101199911113333',1,'2018-06-12','2018-07-01',NULL),('370211198106134550',18,'2018-06-19','2018-07-19',NULL),('370211198106130496',22,'2018-06-17','2018-08-01',NULL),('370211198106133419',8,'2018-06-22','2018-07-22',NULL),('370211198106133910',10,'2018-05-22','2018-07-29',NULL),('370211198106134438',21,'2018-06-10','2018-07-25',NULL),('370211198106134550',18,'2018-06-19','2018-07-19',NULL),('370211198106134817',3,'2018-06-12','2018-07-22',NULL),('370211198106135078',2,'2018-05-28','2018-09-01',NULL),('370211198106135297',3,'2018-06-09','2018-07-21',NULL),('370211198106135430',1,'2018-06-11','2018-07-10',NULL),('370211198106135756',18,'2018-05-22','2018-07-18',NULL),('370211198106136978',15,'2018-06-08','2018-06-30',NULL),('370211198106137532',6,'2018-05-11','2018-08-01',NULL),('370211198106137532',6,'2018-05-11','2018-08-01',NULL),('370211198106138017',20,'2018-05-17','2018-08-03','2018-07-01'),('370211198106138295',7,'2018-04-01','2018-06-10','2018-06-10'),('370211198106138711',2,'2018-06-13','2018-07-23',NULL),('37021119810613967X',18,'2018-04-07','2018-05-20','2018-05-20'),('370211198106139730',21,'2018-06-08','2018-08-15',NULL),('37021119870113967X',10,'2018-05-08','2018-07-28',NULL),('37021119970113967X',11,'2018-03-29','2018-06-10',NULL);
/*!40000 ALTER TABLE `borrow` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `fine`
--DROP TABLE IF EXISTS `fine`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fine` (`reader_id` char(18) DEFAULT NULL,`class_fine` enum('超时','人为') DEFAULT NULL,`fine_money` int(11) DEFAULT NULL,KEY `reader_id` (`reader_id`),CONSTRAINT `fine_ibfk_1` FOREIGN KEY (`reader_id`) REFERENCES `reader` (`reader_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `fine`
--LOCK TABLES `fine` WRITE;
/*!40000 ALTER TABLE `fine` DISABLE KEYS */;
INSERT INTO `fine` VALUES ('110101199911113333','超时',50),('37021119970113967X','人为',150),('370211198106134438','超时',30),('370211198106138295','超时',30);
/*!40000 ALTER TABLE `fine` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `purchase`
--DROP TABLE IF EXISTS `purchase`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `purchase` (`reader_id` char(18) DEFAULT NULL,`book_id` int(11) DEFAULT NULL,`money` int(11) DEFAULT NULL,KEY `reader_id` (`reader_id`),CONSTRAINT `purchase_ibfk_1` FOREIGN KEY (`reader_id`) REFERENCES `reader` (`reader_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `purchase`
--LOCK TABLES `purchase` WRITE;
/*!40000 ALTER TABLE `purchase` DISABLE KEYS */;
INSERT INTO `purchase` VALUES ('110101199911113333',1,50),('37021119970113967X',44,22),('37021119970113967X',45,22),('37021119970113967X',46,22),('370211198106138017',55,35),('370211198106138017',56,48),('370211198106130496',28,70),('370211198106130496',29,70),('370211198106130496',30,70),('370211198106130496',31,70),('370211198106135430',15,100),('37021119810613009X',14,100),('370211198106134817',54,52),('370211198106133910',33,43),('370211198106133910',21,25),('370211198106133910',16,99);
/*!40000 ALTER TABLE `purchase` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `reader`
--DROP TABLE IF EXISTS `reader`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `reader` (`reader_name` char(20) NOT NULL,`reader_id` char(18) NOT NULL,`money` int(11) DEFAULT '0',PRIMARY KEY (`reader_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `reader`
--LOCK TABLES `reader` WRITE;
/*!40000 ALTER TABLE `reader` DISABLE KEYS */;
INSERT INTO `reader` VALUES ('root','110101199911113333',9999),('吕凤仙','37021119810613009X',158),('张果老','370211198106130496',620),('青莲','37021119810613299X',20),('白沙','370211198106133419',88),('矮富帅','370211198106133910',666),('张飞','370211198106134438',28),('黑风','370211198106134550',230),('黑旋风','370211198106134817',35),('小凤仙','370211198106135078',20),('青鱼','370211198106135297',222),('李刚','370211198106135430',88),('白鹿原','370211198106135756',355),('李小白','370211198106136978',99),('陆云','370211198106137532',90),('高富帅','370211198106138017',888),('百战照','370211198106138295',55),('及时雨','370211198106138711',28),('颜如玉','37021119810613967X',185),('王者荣耀','370211198106139730',98),('高富丑','37021119870113967X',888),('矮富丑','37021119970113967X',1888);
/*!40000 ALTER TABLE `reader` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `user`
--DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (`username` char(20) NOT NULL,`password` char(20) NOT NULL,`power` enum('1','2','3') NOT NULL,PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `user`
--LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES ('fushibo','123456','2'),('libo','123456','1'),('lijiang','123456','1'),('root','123456','3'),('shangjiale','123456','1'),('zangfujun','123456','2'),('zhaoran','123456','2'),('zhoulei','123456','1');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2018-06-15 12:07:57
用python3做一个图书管理系统(图形用户界面:tkinter)相关推荐
- hive导数据到mysql 自增主键出错_python+mysql做一个图书管理系统?
开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括: 图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库 ...
- 简单用java做一个图书管理系统
简单用java做一个图书管理系统 首先,我们创建一个View类当做它的视图页 package view;import service.BookService; import service.UserS ...
- python做数据库管理系统_python+mysql做一个图书管理系统?
开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括:图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库表 ...
- 用链表做一个图书管理系统
这几天一直尝试去用链表写这个图书管理系统,本来想在图书管理系统中写个文件管理操作,写了挺久也没写对,最后只能在用户登录操作中写了个简单的文件管理操作.如果有哪里写的不好还请大家见谅!继续加油! 目录 ...
- 用vb列表框做一个图书管理系统
哈喽大家好,欢迎来到一起学VB课堂,今天我们将要学习列表框ListBox控件和组合框ComboBox控件,这两个控件在VB中是非常重要的控件,当然其难度也比前面学习的控件难度有所增加,这两个控件我会单 ...
- C语言做一个图书管理系统源码,使用txt文件保存数据
我使用的IDE为 VS2022,仅实现对文件内容的的添加以及修改,一本书是否被删除,我这里是以图书的状态来划分,如果这本书的状态为删除,则不显示出来,但是存在文本里:并且我这里是退出程序才会进行修改文 ...
- 用java编码图书查询系统_用java做的一个图书管理系统的源代码
<用java做的一个图书管理系统的源代码>由会员分享,可在线阅读,更多相关<用java做的一个图书管理系统的源代码(42页珍藏版)>请在人人文库网上搜索. 1.用java做的一 ...
- 用Mysql写一个图书管理系统并且可视化
要用MySQL写一个图书管理系统需要先创建数据库和表,然后编写Java代码进行连接,查询,插入等操作.同时,为了方便用户操作,可以通过可视化工具将数据以表格或者图形的形式展示出来.以下是一个简单的My ...
- javaee实验:使用mvc模式 设计一个图书管理系统
太多了把报告粘贴过来了,仅供参考 实习三 EL.JSTL及MVC 一.实习要求与目的 1.掌握标签库的使用 2.掌握EL及JSTL常用标签及方法 3.掌握MVC的编程模式,完成一个完整的信息管理系统 ...
最新文章
- Python基础学习之 函数
- 视频传输专线解决方案架构特点——Vecloud
- 如何使用数据库SCHEDULER来执行清归档脚本
- js对象与字符串相互转换
- stm32采集正弦波峰峰值_科研项目 | 基于STM32的永磁同步电机SVPWM控制设计
- CSS浮动(二)---Float
- python示例_Python中的缩进示例
- 企业管理器开启和关闭数据库时出现Error Messsage
- H.265编码和H.264编码的区别
- Linux低分辨率下时钟中断调用流程
- UE4如何使用下载的资源
- 进计算机本地安全策略的命令,Win10还原本地安全策略和使用命令行重置组策略方法...
- maya2018模型传递点序
- 授权服务器文件包,单包授权认证(SPA)fwknop之安装和演示
- JAVA SE (7)
- 创建证书与Xcode破解
- mybatis的left join多条件操作
- 释放让iBooks占用的冗余空间
- Google FCM推送集成及问题排查
- 基于逻辑回归算法的心脏病不平衡数据分类代码实现
热门文章
- 暗影格斗3服务器响应比预期长ios,《暗影格斗3》软登录加拿大iOS 2D剪影变3D写实人影...
- 大学生英文求职信 计算机,计算机专业毕业生英文求职信范文
- 短视频询盘系统源码,短视频系统源码,矩阵系统源码,源头源码技术
- 商汤被曝完成15亿美元新融资,去年营收7.2亿美元,最新估值85亿美元
- 先成为锦,然后才能添花
- 微型计算机i3,三款Core i3品牌台式电脑对比测试
- PC机串口调试助手与单片机通信字符问题
- lol国服维护可以玩别的服务器吗,LOL手游部分服务器可以裸连,国服确定6月1上线,美服直接哭出声!...
- 谈谈火星坐标与地图坐标的那点坑
- 一看就懂的vuex核心源码