wxpython实现图书管理系统
发布时间:2020-12-17 07:24:02 所属栏目:Python 来源:网络整理
导读:用wxpython实现的简单图书管理系统,可以实现增加图书,删除图书,修改图书,查看图书。后台数据库为mysql数据库,采用的pymysql连接数据库。系统界面如下: 代码如下: 1.书本类代码 #author = liuwei date = 2017-06-02from datetime import * #导入日期模
用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 = name def getBookName(self): return self.bookName def setAuthor(self,author): self.author = author def getAuthor(self): return self.author def setContent(self,content): self.content = content def getContent(self): return self.content def getAddDate(self): return self.add_date if __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 conn def insertBook(self,book): '''向数据库中book表插入书本信息,book为Book类对象,包含书本基本信息''' sql = "insert into book(name,author,content,add_date) values(%s,%s,%s)" conn = self.getCon(); if conn ==None: return cursor = conn.cursor() cursor.execute(sql,(book.getBookName(),book.getAuthor(),book.getContent(),book.getAddDate())) conn.commit() cursor.close() conn.close() new_id = cursor.lastrowid print("新插入键值id为:",new_id) return new_id def getAllBook(self): '''返回数据库中,book表中所有的书本信息''' sql = "select *from book" conn = self.getCon() if conn == None: return cursor = 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 list def getBookById(self,bookid): '''根据书本id值来寻找书本信息''' sql = "select book.name,book.author,book.content from book where id=%s" conn = self.getCon() if conn == None: return cursor = 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: return cursor = conn.cursor() cursor.execute(sql,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: return cursor = conn.cursor() cursor.execute(sql,)) 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__ = type class AddFrame(wx.Frame): '''添加书籍弹出的小窗口''' def __init__(self,parent,title): '''初始化该小窗口的布局''' self.mainframe = parent #生成一个300*300的框 wx.Frame.__init__(self,title = title,size = (400,250)) self.panel = wx.Panel(self,pos = (0,0),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_text author_tip = wx.StaticText(self.panel,label = "作者:",38),25)) author_tip.SetBackgroundColour("#FFFFFF") author_text = wx.TextCtrl(self.panel,35),25)) self.author = author_text content_tip = wx.StaticText(self.panel,label = "内容:",68),25)) content_tip.SetBackgroundColour("#FFFFFF") content_text = wx.TextCtrl(self.panel,65),100),style = wx.TE_MULTILINE) self.content = content_text save_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() return else: print("开始插入到数据库中") book = Book(bookName,content) book_id = self.dbhelper.insertBook(book) self.mainframe.addToList(book_id,book) self.Destroy() class UpdateFrame(wx.Frame): def __init__(self,title,select_id): '''初始化更新图书信息界面总布局''' wx.Frame(parent,250)) #用来调用父frame,便于更新 self.mainframe = parent #生成一个300*300的框 wx.Frame.__init__(self,label = "保存修改",self.saveUpdate,save_button) #选中的id和bookid self.select_id = select_id self.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,style = wx.YES_DEFAULT | wx.ICON_ERROR) warn.ShowModal() #提示错误 warn.Destroy() return else: print("开始将修改后的数据保存到数据库中") book = Book(bookName,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,select_id): '''初始化该小窗口的布局''' #便于调用父窗口 self.mainframe = parent #生成一个300*300的框 wx.Frame.__init__(self,25)) bookName_text.SetEditable(False) self.name = bookName_text author_tip = wx.StaticText(self.panel,25)) author_text.SetEditable(False) self.author = author_text content_tip = wx.StaticText(self.panel,style = wx.TE_MULTILINE) content_text.SetEditable(False) self.content = content_text #选中的id和bookid self.select_id = select_id self.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,title): '''初始化系统总体布局,包括各种控件''' #生成一个宽为400,高为400的frame框 wx.Frame.__init__(self,title=title,size=(400,400)) #定一个网格布局,两行一列 self.main_layout = wx.BoxSizer(wx.VERTICAL) #生成一个列表 self.list = wx.ListCtrl(self,-1,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,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,30) update_button = wx.Button(self.panel,label = "修改",pos = (210,30) query_button = wx.Button(self.panel,label = "查看",pos = (310,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,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 = "未选中任何条目!!!",style = wx.YES_DEFAULT | wx.ICON_ERROR) warn.ShowModal() #提示错误 warn.Destroy() return else: bookid = self.list.GetItem(selectId,0).Text #得到书本id self.list.DeleteItem(selectId) #先在listctrl中删除选中行 self.dbhelper.deleteBook(bookid) def updateBook(self,evt): '''修改按钮响应事件,点击修改按钮,弹出修改框''' selectId = self.list.GetFirstSelected() if selectId == -1: warn = wx.MessageDialog(self,style = wx.YES_DEFAULT | wx.ICON_ERROR) warn.ShowModal() #提示错误 warn.Destroy() return else: update_f = UpdateFrame(self,"修改书籍窗口",selectId) update_f.Show(True) def queryBook(self,evt): '''查看按钮响应事件''' selectId = self.list.GetFirstSelected() if selectId == -1: warn = wx.MessageDialog(self,style = wx.YES_DEFAULT | wx.ICON_ERROR) warn.ShowModal() #提示错误 warn.Destroy() return else: 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,book.getBookName()) self.list.SetItem(index,str(book.getAddDate())) AppBaseClass = wx.App class 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() 代码中有详细的注释,有不懂可以留言,需要源码的也可以点击下方原文链接获取。 更多学习资料请关注专题《管理系统开发》。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |