开发者

Python实现图书管理系统设计

基于python的tkinter,将图书管理系统的界面进行简单的开发,我在这里使用的方法比较简单理解,但是代码过于繁多。添加、删除及修改并未使用数据库,而是使用了csv文件的读取操作,从而替代数据库。

基本效果如下图所示:

Python实现图书管理系统设计

该系统将所有代码全都放在一个文件中,源码如下:

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],infwww.cppcns.como[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)
    # www.cppcns.com添加出版日期
    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,com编程客栈mand=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=swww.cppcns.comelf.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文件,如下图所示:

Python实现图书管理系统设计

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜