Python图书管理系统
程序猿o 人气:0基于python的tkinter,将图书管理系统的界面进行简单的开发,我在这里使用的方法比较简单理解,但是代码过于繁多。添加、删除及修改并未使用数据库,而是使用了csv文件的读取操作,从而替代数据库。
基本效果如下图所示:
该系统将所有代码全都放在一个文件中,源码如下:
import os import tkinter import tkinter.messagebox from tkinter import * from tkinter import ttk class LoginPage (object): def __init__(self, master=None): self.root = master #定义内部变量root # 获取当前屏幕的宽高 self.width = self.root.winfo_screenwidth() self.height = self.root.winfo_screenheight() # 设置窗口大小 self.h = 600 self.w = 800 # 将窗口居中 self.y = (self.height - 600) / 2 self.x = (self.width - 800) / 2 self.root.geometry("%dx%d+%d+%d" %(self.w,self.h,self.x,self.y)) # 不允许修改窗口大小 self.root.resizable(False,False) self.addnum = StringVar() self.addname = StringVar() self.addauthor = StringVar() self.addchu = StringVar() self.adddate = StringVar() self.addpri = StringVar() self.altnum = StringVar() self.altname = StringVar() self.altauthor = StringVar() self.altchu = StringVar() self.altdate = StringVar() self.altpri = StringVar() self.createPage() # 创建页面 def createPage(self): #表格 tree = ttk.Treeview(self.root) tree.place(x=10,y=10,width=780,height=260) # #定义列 tree["columns"] = ("编号","书名","作者", "出版社", "出版日期", "价格") tree['show'] = 'headings' # 设置列,列还不显示 tree.column("编号", width=80,anchor ='c') tree.column("书名", width=150,anchor ='c') tree.column("作者", width=150,anchor ='c') tree.column("出版社", width=150,anchor ='c') tree.column("出版日期", width=150,anchor ='c') tree.column("价格", width=100,anchor ='c') #设置表头 tree.heading("编号", text="编号") tree.heading("书名", text="书名") tree.heading("作者", text="作者") tree.heading("出版社", text="出版社") tree.heading("出版日期", text="出版日期") tree.heading("价格", text="价格") #添加数据 f = open('图书.csv','r',encoding='utf-8') for line in f.readlines(): info = line[:-1].split(",") tree.insert("", 0, values=(info[0],info[1],info[2],info[3],info[4],info[5])) f.close() # 添加编号 addnum = Label(self.root, text="编号",font=('微软雅黑',10,''),anchor='w') addnum.place(x=42.5,y=280,height=20,width=80) addnuminput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.addnum) addnuminput.place(x=122.5,y=279,height=24,width=105) # 添加书名 addname = Label(self.root, text="书名",font=('微软雅黑',10,''),anchor='w') addname.place(x=42.5,y=310,height=20,width=80) addnameinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.addname) addnameinput.place(x=122.5,y=309,height=24,width=105) # 添加作者 addauthor = Label(self.root, text="作者",font=('微软雅黑',10,''),anchor='w') addauthor.place(x=42.5,y=340,height=20,width=80) addauthorinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.addauthor) addauthorinput.place(x=122.5,y=339,height=24,width=105) # 添加出版社 addchu = Label(self.root, text="出版社",font=('微软雅黑',10,''),anchor='w') addchu.place(x=42.5,y=370,height=20,width=80) addchuinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.addchu) addchuinput.place(x=122.5,y=369,height=24,width=105) # 添加出版日期 adddate = Label(self.root, text="出版日期",font=('微软雅黑',10,''),anchor='w') adddate.place(x=42.5,y=400,height=20,width=80) adddateinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.adddate) adddateinput.place(x=122.5,y=399,height=24,width=105) # 添加价格 addpri = Label(self.root, text="价格",font=('微软雅黑',10,''),anchor='w') addpri.place(x=42.5,y=430,height=20,width=80) addpriinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.addpri) addpriinput.place(x=122.5,y=429,height=24,width=105) # 添加按钮 add = Button(self.root,command=self.click, text ="添加书本",font=('微软雅黑',10,''),activeforeground='#ffffff',fg='#ffffff',activebackground='#7cba59',bd=2,bg='#2aa515') add.place(x=105,y=500,height=35,width=100) # 修改编号 altnum = Label(self.root, text="编号",font=('微软雅黑',10,''),anchor='w') altnum.place(x=292.5,y=280,height=20,width=80) altnuminput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.altnum) altnuminput.place(x=372.5,y=279,height=24,width=105) # 修改书名 altname = Label(self.root, text="书名",font=('微软雅黑',10,''),anchor='w') altname.place(x=292.5,y=310,height=20,width=80) altnameinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.altname) altnameinput.place(x=372.5,y=309,height=24,width=105) # 修改作者 altauthor = Label(self.root, text="作者",font=('微软雅黑',10,''),anchor='w') altauthor.place(x=292.5,y=340,height=20,width=80) altauthorinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.altauthor) altauthorinput.place(x=372.5,y=339,height=24,width=105) # 修改出版社 altchu = Label(self.root, text="出版社",font=('微软雅黑',10,''),anchor='w') altchu.place(x=292.5,y=370,height=20,width=80) altchuinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.altchu) altchuinput.place(x=372.5,y=369,height=24,width=105) # 修改出版日期 altdate = Label(self.root, text="出版日期",font=('微软雅黑',10,''),anchor='w') altdate.place(x=292.5,y=400,height=20,width=80) altdateinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.altdate) altdateinput.place(x=372.5,y=399,height=24,width=105) # 修改价格 altpri = Label(self.root, text="价格",font=('微软雅黑',10,''),anchor='w') altpri.place(x=292.5,y=430,height=20,width=80) altpriinput = Entry(self.root,font=('微软雅黑',10,''),textvariable=self.altpri) altpriinput.place(x=372.5,y=429,height=24,width=105) # 修改按钮 alter = Button(self.root,command=self.altclick, text ="修改书本",font=('微软雅黑',10,''),activeforeground='#ffffff',fg='#ffffff',activebackground='#7cba59',bd=2,bg='#2aa515') alter.place(x=350,y=500,height=35,width=100) # 保存按钮 pre = Button(self.root,command=self.show, text ="保存书本信息",font=('微软雅黑',10,''),activeforeground='#ffffff',fg='#ffffff',activebackground='#7cba59',bd=2,bg='#2aa515') pre.place(x=595,y=500,height=35,width=100) # 写入判断输入框是否有空值 def Isspace(self,text): temp = 0 for i in text: if not i.isspace(): temp = 1 break if temp==1: return 0 else: return 1 # 检查写入是否有空值 def click(self): addnum = self.addnum.get() addname = self.addname.get() addauthor = self.addauthor.get() addchu = self.addchu.get() adddate = self.adddate.get() addpri = self.addpri.get() if self.Isspace(addnum) or self.Isspace(addname) or self.Isspace(addauthor) or self.Isspace(addchu) or self.Isspace(adddate) or self.Isspace(addpri) : tkinter.messagebox.showerror(title='提示', message ="请填写所有信息") else: self.write(addnum,addname,addauthor,addchu,adddate,addpri) # 写入信息 def write(self,addnum,addname,addauthor,addchu,adddate,addpri): f = open('图书.csv','r',encoding='utf-8') for line in f.readlines(): info = line[:-1].split(",") if len(info)<6: break if info[0] ==addnum and info[1] ==addname: tkinter.messagebox.showinfo(title='结果', message ="已存在该图书信息!") f.close() return f.close() f = open('图书.csv','a',encoding='utf-8') f.write('{},{},{},{},{},{}\n'.format(addnum,addname,addauthor,addchu,adddate,addpri)) f.close() tkinter.messagebox.showinfo(title='提示', message ="写入成功,点击保存后更新") # 检查修改信息是否空白 def altclick(self): altnum = self.altnum.get() altname = self.altname.get() altauthor = self.altauthor.get() altchu = self.altchu.get() altdate = self.altdate.get() altpri = self.altpri.get() if self.Isspace(altnum) or self.Isspace(altname) or self.Isspace(altauthor) or self.Isspace(altchu) or self.Isspace(altdate) or self.Isspace(altpri) : tkinter.messagebox.showerror(title='提示', message ="输入项为空") else: self.modify(altnum,altname,altauthor,altchu,altdate,altpri) # 修改信息 def modify(self,altnum,altname,altauthor,altchu,altdate,altpri): temp = 0 with open("图书.csv","r",encoding="utf-8") as f: lines = f.readlines() with open("图书.csv","w",encoding="utf-8") as f_w: for line in lines: info = line[:-1].split(",") if info[0] ==altnum: temp = 1 f_w.write('{},{},{},{},{},{}\n'.format(altnum,altname,altauthor,altchu,altdate,altpri)) continue f_w.write(line) if temp==0: tkinter.messagebox.showerror(title='提示', message ="没有该信息") else: tkinter.messagebox.showinfo(title='提示', message ="修改成功,点击保存后更新") # 保存信息并显示 def show(self): self.createPage() root = Tk() root.title('图书管理') LoginPage(root) root.mainloop()
在运行代码前需要在同级文件夹下创建一个名为“图书”的csv文件,如下图所示:
加载全部内容