用wxpython实现的简单图书管理系统,可以实现增加图书,删除图书,修改图书,查看图书。后台数据库为mysql数据库,采用的pymysql连接数据库。系统界面如下:

代码如下:

1.书本类代码

#author = liuwei  date = 2017-06-02
from datetime import *                                               #导入日期模块
__metaclass__ = type
class Book:'''一个书本信息类,包括书本名字,作者名字和书本简单信息'''def __init__(self, bookName = "", author = "", content = ""):self.bookName = bookName                                      #书本名字self.author = author                                          #作者名字self.content = content                                        #书本信息self.add_date = date.today()                                  #书本添加日期def setBookName(self, name):self.bookName = namedef getBookName(self):return self.bookNamedef setAuthor(self, author):self.author = authordef getAuthor(self):return self.authordef setContent(self, content):self.content = contentdef getContent(self):return self.contentdef getAddDate(self):return self.add_dateif __name__ == "__main__":mybook = Book()print(mybook.date)

2.数据库操作类代码

#author = liuwei date = 2017-06-02
#数据库帮助类
import pymysql
from book import *__metaclass__ = type
class DBHelper:def getCon(self):'''获取操作数据库的curcor即游标,首先的建立连接,需要服务器地址,端口号,用户名,密码和数据库名'''#为了能用中文,得加上编码方式conn = pymysql.connect(host = "localhost", port = 3306, user = "root", password = "201392260", db = "library", charset = "utf8")return conndef insertBook(self, book):'''向数据库中book表插入书本信息,book为Book类对象,包含书本基本信息'''sql = "insert into book(name, author, content, add_date) values(%s, %s, %s, %s)"conn = self.getCon();if conn ==None:returncursor = conn.cursor()cursor.execute(sql, (book.getBookName(), book.getAuthor(), book.getContent(), book.getAddDate()))conn.commit()cursor.close()conn.close()new_id = cursor.lastrowidprint("新插入键值id为:", new_id)return new_iddef getAllBook(self):'''返回数据库中,book表中所有的书本信息'''sql = "select *from book"conn = self.getCon()if conn == None:returncursor = conn.cursor()rownum = cursor.execute(sql)              #执行并返回找到的行数#获取查询结果rows = cursor.fetchall()list = []for item in rows:bitem = (item[0], item[1], str(item[4]))list.append(bitem)conn.commit()cursor.close()conn.close()return listdef getBookById(self, bookid):'''根据书本id值来寻找书本信息'''sql = "select book.name, book.author, book.content from book  where id=%s"conn = self.getCon()if conn == None:returncursor = conn.cursor()cursor.execute(sql, (bookid, ))                     #参数以元组形式给出row = cursor.fetchone()                             #取到第一个结果conn.commit()cursor.close()conn.close()return row                                          #返回该书本信息def saveUpdate(self, bookid, book):'''用book对象来修改id为bookid的书本信息'''sql = "update book set book.name=%s, book.author=%s, book.content=%s where book.id=%s"conn = self.getCon()if conn == None:returncursor = conn.cursor()cursor.execute(sql, (book.getBookName(), book.getAuthor(), book.getContent(), bookid))conn.commit()cursor.close()conn.close()def deleteBook(self, bookid):'''根据书本id来删除书籍'''sql = "delete from book where book.id = %s"conn = self.getCon()if conn == None:returncursor = conn.cursor()cursor.execute(sql, (bookid, ))conn.commit()cursor.close()conn.close()if __name__ == '__main__':db = DBHelper()#book = Book("秦腔", "贾凹平", "讲的是大西北夏家和白家的事情,由引生口述。")#db.insertBook(book)list = db.getAllBook()for item in list:print(item)

3.主界面代码:

'''一个图书管理系统,能够实现增加书籍,删除书籍,
修改书籍和查看图书详情,基于mysql数据库和
wxPython'''import wx
from book import *
from dbhelper import *__metaclass__ = typeclass AddFrame(wx.Frame):'''添加书籍弹出的小窗口'''def __init__(self, parent, title):'''初始化该小窗口的布局'''self.mainframe = parent#生成一个300*300的框wx.Frame.__init__(self, parent, title = title, size = (400, 250))self.panel = wx.Panel(self, pos = (0, 0), size = (400, 250))self.panel.SetBackgroundColour("#FFFFFF")                              #背景为白色#三个编辑框,分别用来编辑书名,作者,书籍相关信息bookName_tip = wx.StaticText(self.panel, label = "书名:", pos = (5, 8), size = (35, 25))bookName_tip.SetBackgroundColour("#FFFFFF")bookName_text = wx.TextCtrl(self.panel, pos = (40, 5), size = (340, 25))self.name = bookName_textauthor_tip = wx.StaticText(self.panel, label = "作者:", pos = (5, 38), size = (35, 25))author_tip.SetBackgroundColour("#FFFFFF")author_text = wx.TextCtrl(self.panel, pos = (40, 35), size = (340, 25))self.author = author_textcontent_tip = wx.StaticText(self.panel, label = "内容:", pos = (5, 68), size = (340, 25))content_tip.SetBackgroundColour("#FFFFFF")content_text = wx.TextCtrl(self.panel, pos = (40, 65), size = (340, 100), style = wx.TE_MULTILINE)self.content = content_textsave_button = wx.Button(self.panel, label = "保存书籍", pos = (160, 170))self.Bind(wx.EVT_BUTTON, self.saveBook, save_button)#需要用到的数据库接口self.dbhelper = DBHelper()def saveBook(self, evt):'''第一步:获取text中文本;第二步,连接数据库;第三步插入并获得主键;第四步添加到ListCtrl中'''bookName = self.name.GetValue()author = self.author.GetValue()content = self.content.GetValue()print("书名:"+bookName)if bookName == "" or author == "" or content == "":print("进来了")warn = wx.MessageDialog(self, message = "所有信息不能为空!!!", caption = "错误警告", style = wx.YES_DEFAULT | wx.ICON_ERROR)warn.ShowModal()                                                             #提示错误warn.Destroy()returnelse:print("开始插入到数据库中")book = Book(bookName, author, content)book_id = self.dbhelper.insertBook(book)self.mainframe.addToList(book_id, book)self.Destroy()class UpdateFrame(wx.Frame):def __init__(self, parent, title, select_id):'''初始化更新图书信息界面总布局'''wx.Frame(parent, title = title, size = (400, 250))#用来调用父frame,便于更新self.mainframe = parent#生成一个300*300的框wx.Frame.__init__(self, parent, title = title, size = (400, 250))self.panel = wx.Panel(self, pos = (0, 0), size = (400, 250))self.panel.SetBackgroundColour("#FFFFFF")                              #背景为白色#三个编辑框,分别用来编辑书名,作者,书籍相关信息bookName_tip = wx.StaticText(self.panel, label = "书名:", pos = (5, 8), size = (35, 25))bookName_tip.SetBackgroundColour("#FFFFFF")bookName_text = wx.TextCtrl(self.panel, pos = (40, 5), size = (340, 25))self.name = bookName_textauthor_tip = wx.StaticText(self.panel, label = "作者:", pos = (5, 38), size = (35, 25))author_tip.SetBackgroundColour("#FFFFFF")author_text = wx.TextCtrl(self.panel, pos = (40, 35), size = (340, 25))self.author = author_textcontent_tip = wx.StaticText(self.panel, label = "内容:", pos = (5, 68), size = (340, 25))content_tip.SetBackgroundColour("#FFFFFF")content_text = wx.TextCtrl(self.panel, pos = (40, 65), size = (340, 100), style = wx.TE_MULTILINE)self.content = content_textsave_button = wx.Button(self.panel, label = "保存修改", pos = (160, 170))self.Bind(wx.EVT_BUTTON, self.saveUpdate, save_button)#选中的id和bookidself.select_id = select_idself.bookid = self.mainframe.list.GetItem(select_id, 0).Text             #获取第select_id行的第0列的值print(select_id, self.bookid)#需要用到的数据库接口self.dbhelper = DBHelper()self.showAllText()                     #展现所有的text原来取值def showAllText(self):'''显示概述本原始信息'''data = self.dbhelper.getBookById(self.bookid)                      #通过id获取书本信息self.name.SetValue(data[0])                                        #设置值self.author.SetValue(data[1])self.content.SetValue(data[2])def saveUpdate(self, evt):'''保存修改后的值'''bookName = self.name.GetValue()                                    #获得修改后的值author = self.author.GetValue()content = self.content.GetValue()print("书名:"+bookName)if bookName == "" or author == "" or content == "":print("进来了")warn = wx.MessageDialog(self, message = "所有信息不能为空!!!", caption = "错误警告", style = wx.YES_DEFAULT | wx.ICON_ERROR)warn.ShowModal()                                                             #提示错误warn.Destroy()returnelse:print("开始将修改后的数据保存到数据库中")book = Book(bookName, author, content)                         #将数据封装到book对象中self.dbhelper.saveUpdate(self.bookid, book)self.mainframe.list.SetItem(self.select_id, 1, bookName)self.Destroy()                                                     #修改完后自动销毁class ShowFrame(wx.Frame):'''用来显示书籍的信息'''def __init__(self, parent, title, select_id):'''初始化该小窗口的布局'''#便于调用父窗口self.mainframe = parent#生成一个300*300的框wx.Frame.__init__(self, parent, title = title, size = (400, 250))self.panel = wx.Panel(self, pos = (0, 0), size = (400, 250))self.panel.SetBackgroundColour("#FFFFFF")                              #背景为白色#三个编辑框,分别用来编辑书名,作者,书籍相关信息bookName_tip = wx.StaticText(self.panel, label = "书名:", pos = (5, 8), size = (35, 25))bookName_tip.SetBackgroundColour("#FFFFFF")bookName_text = wx.TextCtrl(self.panel, pos = (40, 5), size = (340, 25))bookName_text.SetEditable(False)self.name = bookName_textauthor_tip = wx.StaticText(self.panel, label = "作者:", pos = (5, 38), size = (35, 25))author_tip.SetBackgroundColour("#FFFFFF")author_text = wx.TextCtrl(self.panel, pos = (40, 35), size = (340, 25))author_text.SetEditable(False)self.author = author_textcontent_tip = wx.StaticText(self.panel, label = "内容:", pos = (5, 68), size = (340, 25))content_tip.SetBackgroundColour("#FFFFFF")content_text = wx.TextCtrl(self.panel, pos = (40, 65), size = (340, 100), style = wx.TE_MULTILINE)content_text.SetEditable(False)self.content = content_text#选中的id和bookidself.select_id = select_idself.bookid = self.mainframe.list.GetItem(select_id, 0).Text             #获取第select_id行的第0列的值#需要用到的数据库接口self.dbhelper = DBHelper()self.showAllText()                     #展现所有的text原来取值def showAllText(self):'''显示概述本原始信息'''data = self.dbhelper.getBookById(self.bookid)                      #通过id获取书本信息self.name.SetValue(data[0])                                        #设置值self.author.SetValue(data[1])self.content.SetValue(data[2])class LibraryFrame(wx.Frame):def __init__(self, parent, title):'''初始化系统总体布局,包括各种控件'''#生成一个宽为400,高为400的frame框wx.Frame.__init__(self, parent, title=title, size=(400, 400))  #定一个网格布局,两行一列self.main_layout = wx.BoxSizer(wx.VERTICAL)#生成一个列表self.list = wx.ListCtrl(self, -1, size = (400,300), style = wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES) #| wx.LC_SINGLE_SEL#列表有散列,分别是书本ID,书名,添加日期self.list.InsertColumn(0, "ID")self.list.InsertColumn(1, "书名")self.list.InsertColumn(2, "添加日期")#设置各列的宽度self.list.SetColumnWidth(0, 60)                                         #设置每一列的宽度self.list.SetColumnWidth(1, 230)self.list.SetColumnWidth(2, 92)#添加一组按钮,实现增删改查,用一个panel来管理该组按钮的布局self.panel = wx.Panel(self, pos = (0, 300), size = (400, 100))#定义一组按钮add_button = wx.Button(self.panel, label = "添加", pos = (10, 15), size = (60, 30))    #, size = (75, 30)del_button = wx.Button(self.panel, label = "删除", pos = (110, 15), size = (60, 30))    #, size = (75, 30)update_button = wx.Button(self.panel, label = "修改", pos = (210, 15), size = (60, 30)) #, size = (75, 30)query_button = wx.Button(self.panel, label = "查看", pos = (310, 15), size = (60, 30))  #, size = (75, 30)#w为按钮绑定相应事件函数,第一个参数为默认参数,指明为按钮类事件,第二个为事件函数名,第三个为按钮名self.Bind(wx.EVT_BUTTON, self.addBook, add_button)self.Bind(wx.EVT_BUTTON, self.delBook, del_button)self.Bind(wx.EVT_BUTTON, self.updateBook, update_button)self.Bind(wx.EVT_BUTTON, self.queryBook, query_button)#将列表和panel添加到主面板self.main_layout.Add(self.list, 3)self.main_layout.Add(self.panel, 1)self.SetSizer(self.main_layout)#添加数据库操作对象self.dbhelper = DBHelper()datas = self.dbhelper.getAllBook()for data in datas:index = self.list.InsertItem(self.list.GetItemCount(), str(data[0]))self.list.SetItem(index, 1, data[1])self.list.SetItem(index, 2, data[2])def addBook(self, evt):'''添加书籍按钮,弹出添加书籍框'''add_f = AddFrame(self, "添加书籍窗口")add_f.Show(True)def delBook(self, evt):'''删除书籍按钮,先选中,然后删除'''selectId = self.list.GetFirstSelected()if selectId == -1:warn = wx.MessageDialog(self, message = "未选中任何条目!!!", caption = "错误警告", style = wx.YES_DEFAULT | wx.ICON_ERROR)warn.ShowModal()                                                             #提示错误warn.Destroy()returnelse:bookid = self.list.GetItem(selectId, 0).Text                                 #得到书本idself.list.DeleteItem(selectId)                                               #先在listctrl中删除选中行self.dbhelper.deleteBook(bookid)def updateBook(self, evt):'''修改按钮响应事件,点击修改按钮,弹出修改框'''selectId = self.list.GetFirstSelected()if selectId == -1:warn = wx.MessageDialog(self, message = "未选中任何条目!!!", caption = "错误警告", style = wx.YES_DEFAULT | wx.ICON_ERROR)warn.ShowModal()                                                             #提示错误warn.Destroy()returnelse:update_f = UpdateFrame(self, "修改书籍窗口", selectId)update_f.Show(True)def queryBook(self, evt):'''查看按钮响应事件'''selectId = self.list.GetFirstSelected()if selectId == -1:warn = wx.MessageDialog(self, message = "未选中任何条目!!!", caption = "错误警告", style = wx.YES_DEFAULT | wx.ICON_ERROR)warn.ShowModal()                                                             #提示错误warn.Destroy()returnelse:show_f = ShowFrame(self, "修改书籍窗口", selectId)show_f.Show(True)def addToList(self, id, book):index = self.list.InsertItem(self.list.GetItemCount(), str(id))self.list.SetItem(index, 1, book.getBookName())self.list.SetItem(index, 2, str(book.getAddDate()))AppBaseClass = wx.Appclass LibraryApp(AppBaseClass):def OnInit(self):frame = LibraryFrame(None, "library-system")frame.Show()return True#类似于c中的main函数,但被其他模块导入时,__name__值不是"__main__"
if __name__ == "__main__":app = LibraryApp()app.MainLoop()

代码中有详细的注释,有不懂可以留言,需要源码的也可以在下面评论中留下邮箱,我会发资源到相应邮箱。
代码百度云地址:
链接: https://pan.baidu.com/s/1WeCpFqhm3d8D0W7ZrnET-g
密码: 2aad

wxpython实现简单图书管理系统相关推荐

  1. 一个简单图书管理系统TSGL的应用数据库

    简单图书管理系统的应用数据库 一.摘要 这个项目是学校结课要求的项目,所以采用的是SQL sever2008来完成的,并不是mysql来完成的,SQL sever2008与mysql就基础知识没有什么 ...

  2. 利用顺序表建立简单图书管理系统

    采用线性表中的顺序储存方式,实现对书籍的增加,删除,查找,展示等基础功能. 基本知识点:顺序表的初始化,顺序表的查找,顺序表的插入以及顺序表的删除. #include <iostream> ...

  3. ASP网页制作,简单图书管理系统

    ASP网页制作,简单图书管理系统 作品文件 流程图 网站首页 管理页面 百度网盘提取 链接:https://pan.baidu.com/s/18y4y85IwLG1RXvW_8uNbFA 提取码:66 ...

  4. 二叉排序树遍历二叉树打印简单图书管理系统

    二叉排序树的实现 实验内容: 解决方案与关键代码: 解决方案: 编程生成二叉排序树 非递归二叉树遍历 先序 中序 后序 二叉树的打印 简单图书系统 二叉排序树图书管理系统 图书类 构造函数BTree ...

  5. python实现简单图书管理系统

    用python实现一个简单的图书管理系统 1.工具:PyCharm3.6 社区版 我创建了一个工程叫fairy,把解释器换成Pytnon3.6 创建一个pytnon file:图书管理系统.py 2. ...

  6. Python+tkinter库实现简单图书管理系统

    文章目录 前言 一.MySQL是什么? 二.Tkinter库 三.Code步骤 1.引入库 2.使用tkinter搭建系统 3.定义函数(发送消息,操作mysql数据库) 总结 前言 使用mysql数 ...

  7. 200827-C语言链表实现简单图书管理系统

    1. Description 通过链来实现简单的图书管理系统,实现如下功能: 1. 添加图书 2. 查询图书信息 3. 修改图书价格 4. 删除图书 5. 查看所有图书 6. 退出 需要熟悉结构体和指 ...

  8. 基于vb的mysql管理系统代码_基于VB+MySQL的简单图书管理系统

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 文件        ...

  9. Java实操演练1——简单图书管理系统的设计与实现

    笔者将记录每一步的具体操作,展示自己在实际开发过程中遇到的各种问题并提供解决思路. 目录 一.开发环境 二.开发过程 1.使用idea创建一个new project 2.项目具体设计 3.按照项目设计 ...

最新文章

  1. linux基础(day22)
  2. 1.PostgreSQL的学习
  3. mysql数据表交叉引用_数据定义语句
  4. 中国金属复合开关设备市场趋势报告、技术动态创新及市场预测
  5. 多线程等待/通知机制
  6. redis等缓存和mysql的数据同步问题解决思路
  7. Spring Aop 报错 ...but was actually of type 'com.sun.proxy.$Proxy**'的解决方案
  8. 【SpringBoot项目中使用Mybatis批量插入百万条数据】
  9. Android加载网络图片学习过程
  10. 06 甲流疫情死亡率
  11. 中国SaaS企业排名,龙头企业Top10梳理
  12. 花12个月做成功网站
  13. 亚马逊美国站12岁以下儿童产品 CPSIA测试标准
  14. kali安装LibreOffice
  15. xlearn安装中的问题解决
  16. HPB普及:BOE完整流程、高性能选举
  17. 行为日志分析思路与想法
  18. 【办公类-】周计划-洗牌提取《集体运动》名称
  19. 管理寓言:“兔鹿赛跑”
  20. Docker笔记-02 镜像

热门文章

  1. 使用js对select动态添加和删除OPTION示例代码
  2. 数据结构之线性表-链式存储之单链表(一)
  3. 面试官系统精讲Java源码及大厂真题 - 01 开篇词:为什么学习本专栏
  4. 华为上机考试注意事项及编程技巧
  5. DreamFactory入门指南 - 第2章安装和配置DreamFactory
  6. 容器编排技术 -- Kubernetes kubectl create quota 命令详解
  7. Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建
  8. Git教程--如何安装Git 如何高效地使用Git 合理使用Git分支
  9. 根据用户查进程_Linux中的系统进程管理
  10. 你真正了解public、internal、protected、private吗?不妨幽默一些