python图书管理系统
本文实例为大家分享了python图书管理系统的具体代码,供大家参考,具体内容如下
实现语言:python
图形框架:DTK+2.0
数据库框架:SQLite3.0
本程序需要以下部件运行:
Python2.5.0、GTK+2.16、Pygtk2.16、PyGobject2.14、Pycairo1.4
LibiaryManager.py
#!/usr/bin/python #-*-coding:utf-8-*- importpygtk pygtk.require('2.0') importgtk importsys importgobject importsqlite3 importtime importdatetime classLibManager: bookColumName=(u"书本号",u"书名",u"作者",u"出版社", u"价格",u"购入日期",u"分类",u"简介",u"馆藏数") readerColumName=(u"读者号",u"读者姓名",u"读者身份",u"备注") def__init__(self): self.dbconn=sqlite3.connect('sqlitefile.db') self.cursor=self.dbconn.cursor() self.nowDate=time.strftime("%Y-%m-%d").decode("utf-8") inputBookInitData=(u"书名",u"作者",u"出版社", 0.0,self.nowDate,u"分类",u"简介",0) try: builder=gtk.Builder() builder.add_from_file("ui.glade") exceptBaseException,e: self.errorMessage("FailtoloadUIfile.") printe sys.exit(1) builder.connect_signals(self) self.window=builder.get_object("mainWindow") self.borrowView=builder.get_object("borrowView") self.borrowViewModel=builder.get_object("borrowViewModel") self.borrowViewInit() self.returnView=builder.get_object("returnView") self.returnViewModel=builder.get_object("returnViewModel") self.returnEntryReaderID=builder.get_object("returnReaderID") self.returnEntryBookID=builder.get_object("returnBookID") self.returnViewInit() self.queryView=builder.get_object("queryView") self.queryViewReaderModel=builder.get_object("queryViewReaderModel") self.queryViewBookModel=builder.get_object("queryViewBookModel") self.inputView=builder.get_object("inputView") self.inputViewBookModel=builder.get_object("inputViewBookModel") self.inputViewReaderModel=builder.get_object("inputViewReaderModel") self.inputViewModel=None defborrowViewInit(self): columName=(u"读者号",u"书号",u"借出日期") columEditAttr=(True,True,False) forcolumnNuminrange(len(columName)): renderer=gtk.CellRendererText() renderer.set_data("column",columnNum) renderer.set_property("editable",columEditAttr[columnNum]) ifcolumEditAttr[columnNum]: renderer.connect("edited",self.on_borrow_cell_edited) column=gtk.TreeViewColumn(columName[columnNum],renderer, text=columnNum) column.set_resizable(True) self.borrowView.append_column(column) defreturnViewInit(self): columName=(u"借书记录",u"书本",u"读者姓名",u"读者资料",u"借出日期") forcolumnNuminrange(len(columName)): renderer=gtk.CellRendererText() column=gtk.TreeViewColumn(columName[columnNum],renderer, text=columnNum) column.set_resizable(True) self.returnView.append_column(column) #QueryView defqueryViewSetColumn(self,columName): self.queryRecord=0 columns=self.queryView.get_columns() forcincolumns: self.queryView.remove_column(c) self.queryViewModel.clear() self.queryView.set_model(self.queryViewModel) forcolumnNuminrange(len(columName)): renderer=gtk.CellRendererText() renderer.set_property("editable",True) column=gtk.TreeViewColumn(columName[columnNum],renderer, text=columnNum) column.set_resizable(True) self.queryView.append_column(column) defqueryReader(self): self.queryViewModel=self.queryViewReaderModel self.queryViewSetColumn(self.readerColumName) self.cursor.execute("SELECTCOUNT(*)FROMreader") self.maxRecords=self.cursor.fetchone()[0] printself.maxRecords defqueryBook(self): self.queryViewModel=self.queryViewBookModel self.queryViewSetColumn(self.bookColumName) self.cursor.execute("SELECTCOUNT(*)FROMbooks") self.maxRecords=self.cursor.fetchone()[0] printself.maxRecords #inputView definputViewSetColumn(self,columName): columns=self.inputView.get_columns() forcincolumns: self.inputView.remove_column(c) self.inputViewModel.clear() self.inputView.set_model(self.inputViewModel) forcolumnNuminrange(len(columName)): renderer=gtk.CellRendererText() renderer.set_property("editable",True) renderer.set_data("column",columnNum) renderer.connect("edited",self.on_input_cell_edited) column=gtk.TreeViewColumn(columName[columnNum],renderer, text=columnNum) column.set_resizable(True) self.inputView.append_column(column) definputReader(self): self.inputViewModel=self.inputViewReaderModel self.inputViewSetColumn(self.readerColumName[1:]) definputBook(self): self.inputViewModel=self.inputViewBookModel self.inputViewSetColumn(self.bookColumName[1:]) #CallbackFunctions defon_mainWindow_delete_event(self,widget,data=None): print"destroysignaloccurred" gtk.main_quit() #BorrowView defon_borrowAdd_clicked(self,button,data=None): self.borrowViewModel.append((1001,1,self.nowDate)) defon_borrowDel_clicked(self,button,data=None): selection=self.borrowView.get_selection() model,iter=selection.get_selected() ifiter: model.remove(iter) defon_borrowClear_clicked(self,button,data=None): self.borrowViewModel.clear() defon_borrowSubmit_clicked(self,button,data=None): forrowinself.borrowViewModel: self.cursor.execute("INSERTINTOborrowVALUES(NULL,?,?,?)",row) self.dbconn.commit() self.infoMessage(u"借书记录已经成功提交。") self.borrowViewModel.clear() defon_borrow_cell_edited(self,cell,path_string,new_text): model=self.borrowViewModel iter=model.get_iter_from_string(path_string) column=cell.get_data("column") try: id=int(new_text) exceptValueError,e: printe self.errorMessage(u"请输入纯数字记录。") return ifcolumn==0: self.cursor.execute("SELECT*FROMreaderwhereReaderID=?",[new_text]) ifself.cursor.fetchone(): model.set(iter,column,id) else: self.errorMessage(u"不存在该读者号:%d。"%id) ifcolumn==1: self.cursor.execute("SELECT*FROMbookswhereBookID=?",[new_text]) ifself.cursor.fetchone(): model.set(iter,column,id) else: self.errorMessage(u"不存在该书本号:%d。"%id) #QueryView defon_queryBooks_clicked(self,button,data=None): self.queryBook() self.cursor.execute("SELECT*FROMbooksLIMIT?OFFSET?",[15,0]) forrowinself.cursor: self.queryViewModel.append(row) defon_queryReaders_clicked(self,button,data=None): self.queryReader() self.cursor.execute("SELECT*FROMreaderLIMIT?OFFSET?",[15,0]) forrowinself.cursor: self.queryViewModel.append(row) defon_queryPrev_clicked(self,button,data=None): ifself.queryRecord==0: self.errorMessage(u"已到最前页。") return self.queryRecord-=15 self.queryViewModel.clear() ifself.queryViewModel.get_n_columns()==9: self.cursor.execute("SELECT*FROMbooksLIMIT?OFFSET?",[15,self.queryRecord]) elifself.queryViewModel.get_n_columns()==4: self.cursor.execute("SELECT*FROMreaderLIMIT?OFFSET?",[15,self.queryRecord]) forrowinself.cursor: self.queryViewModel.append(row) defon_queryNext_clicked(self,button,data=None): ifself.queryRecord+15>self.maxRecords: self.errorMessage(u"已到最后页。") return self.queryRecord+=15 self.queryViewModel.clear() ifself.queryViewModel.get_n_columns()==9: self.cursor.execute("SELECT*FROMbooksLIMIT?OFFSET?",[15,self.queryRecord]) elifself.queryViewModel.get_n_columns()==4: self.cursor.execute("SELECT*FROMreaderLIMIT?OFFSET?",[15,self.queryRecord]) forrowinself.cursor: self.queryViewModel.append(row) defon_returnQuery_clicked(self,button,data=None): readerid=self.returnEntryReaderID.get_text() bookid=self.returnEntryBookID.get_text() iflen(readerid)andlen(bookid): self.cursor.execute("SELECTborrow.BorrowID,books.BookName,reader.ReaderName,\ reader.ReaderSchool,borrow.BorrowDateFROMborrow,books,reader\ WHEREbooks.BookID=borrow.BookIDAND\ reader.ReaderID=borrow.ReaderIDAND\ borrow.ReaderID=?ANDborrow.BookID=?",[readerid,bookid]) eliflen(readerid): self.cursor.execute("SELECTborrow.BorrowID,books.BookName,reader.ReaderName,\ reader.ReaderSchool,borrow.BorrowDateFROMborrow,books,reader\ WHEREbooks.BookID=borrow.BookIDAND\ reader.ReaderID=borrow.ReaderIDAND\ borrow.ReaderID=?",[readerid]) eliflen(bookid): self.cursor.execute("SELECTborrow.BorrowID,books.BookName,reader.ReaderName,\ reader.ReaderSchool,borrow.BorrowDateFROMborrow,books,reader\ WHEREbooks.BookID=borrow.BookIDAND\ reader.ReaderID=borrow.ReaderIDAND\ borrow.BookID=?",[bookid]) else: self.errorMessage(u"请输入查询条件。") return self.returnViewModel.clear() forrowinself.cursor: self.returnViewModel.append(row) defon_returnCommit_clicked(self,button,data=None): selection=self.returnView.get_selection() model,iter=selection.get_selected() ifiter: borrowDate=time.strptime(model.get_value(iter,4),"%Y-%m-%d") timeDelta=datetime.date.today()-datetime.date(*borrowDate[0:3]) borrowDays=timeDelta.days borrowID=model.get_value(iter,0) self.cursor.execute("DELETEFROMborrowWHEREBorrowID=?",[borrowID]) self.dbconn.commit() readerName=model.get_value(iter,2) bookName=model.get_value(iter,1) self.infoMessage(u"读者%s所借书《%s》归还成功。借出%d天"%(readerName,bookName,borrowDays)) model.remove(iter) #inputView defon_inputReader_clicked(self,button,data=None): self.inputReader() defon_inputBooks_clicked(self,button,data=None): self.inputBook() defon_inputAdd_clicked(self,button,data=None): ifnotself.inputViewModel: self.errorMessage(u"请先选择录入类型。") return count=self.inputViewModel.get_n_columns() ifcount==3: inputReaderInitData=(u"姓名",u"身份",u"备注") self.inputViewModel.append(inputReaderInitData) elifcount==8: inputBookInitData=(u"书名",u"作者",u"出版社", 0.0,self.nowDate,u"分类",u"简介",0) self.inputViewModel.append(inputBookInitData) defon_inputDel_clicked(self,button,data=None): selection=self.inputView.get_selection() model,iter=selection.get_selected() ifiter: model.remove(iter) defon_inputSubmit_clicked(self,button,data=None): count=self.inputViewModel.get_n_columns() forrowinself.inputViewModel: #录入读者 ifcount==3: self.cursor.execute(u"INSERTINTOreaderVALUES(NULL,?,?,?)", [s.decode("utf-8")forsinrow]) #录入书目 elifcount==8: dataRow=[] forobjinrow: ifisinstance(obj,str): dataRow.append(obj.decode("utf-8")) else: dataRow.append(obj) printdataRow self.cursor.execute(u"INSERTINTObooksVALUES(NULL,?,?,?,?,?,?,?,?)",\ dataRow) self.dbconn.commit() self.infoMessage(u"记录已经成功提交。") self.inputViewModel.clear() defon_input_cell_edited(self,cell,path_string,new_text): iter=self.inputViewModel.get_iter_from_string(path_string) column=cell.get_data("column") columnCount=self.inputViewModel.get_n_columns() ifcolumnCount==3: self.inputViewModel.set(iter,column,new_text) elifcolumnCount==8: ifself.inputViewModel.get_column_type(column)==gobject.TYPE_FLOAT: try: self.inputViewModel.set(iter,column,float(new_text)) exceptValueError,e: self.errorMessage(u"请输入价格实数。") return elifself.inputViewModel.get_column_type(column)==gobject.TYPE_UINT: try: self.inputViewModel.set(iter,column,int(new_text)) exceptValueError,e: self.errorMessage(u"请输入整数。") return else: self.inputViewModel.set(iter,column,new_text) deferrorMessage(self,message): printmessage dialog=gtk.MessageDialog(None, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,gtk.BUTTONS_OK,message) dialog.run() dialog.destroy() definfoMessage(self,message): printmessage dialog=gtk.MessageDialog(None, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO,gtk.BUTTONS_OK,message) dialog.run() dialog.destroy() defmain(self): self.window.show() gtk.main() if__name__=="__main__": app=LibManager() app.main()
LibDBInit.py
#!/usr/bin/python #encoding:utf-8 importsqlite3 defLibDbInit(con): c=con.cursor() c.execute(""" CREATETABLE`books`( `BookID`INTEGERPRIMARYKEY, `BookName`TEXT, `BookAuthor`TEXT, `BookPublish`TEXT, `BookPrice`FLOAT, `BookDate`TEXT, `BookType`TEXT, `BookContent`TEXT, `BookState`INTEGER ) """) c.execute(""" CREATETABLE`reader`( `ReaderID`INTEGERPRIMARYKEY, `ReaderName`TEXT, `ReaderSchool`TEXT, `ReaderInfo`TEXT ) """) c.execute(""" CREATETABLE`borrow`( `BorrowID`INTEGERPRIMARYKEY, `ReaderID`INTEGER, `BookID`INTEGER, `BorrowDate`TEXT ) """) books=((1,u"C语言程序设计",u"谭浩强",u"教育出版社",29.90,u"2009-04-30",u"计算机",u"",5), (2,u"数据结构",u"谭浩强",u"教育出版社",29.90,u"2009-04-30",u"计算机",u"",5), (3,u"数据库原理",u"谭浩强",u"教育出版社",29.90,u"2009-04-30",u"计算机",u"",5), (4,u"汇编语言",u"谭浩强",u"教育出版社",29.90,u"2009-04-30",u"计算机",u"",5), (5,u"大学国文",u"国立",u"教育出版社",19.90,u"2009-04-30",u"文学",u"",5), (6,u"古代诗词",u"国立",u"教育出版社",19.90,u"2009-04-30",u"文学",u"",5), (7,u"广州地图",u"工作",u"广州出版社",9.90,u"2009-04-30",u"工具书",u"",5), (8,u"牛津词典",u"词典",u"广州出版社",9.90,u"2009-04-30",u"工具书",u"",5)) forrinbooks: c.execute("INSERTINTObooksVALUES(?,?,?,?,?,?,?,?,?)",r) readers=((1001,u"陈一",u"广州大学计算机学院",u"B15"), (1002,u"王二",u"广州大学计算机学院",u"B15"), (1003,u"刘三",u"广州大学美术学院",u"B12"), (1004,u"陈一明",u"广州大学人文学院",u"B10"), (1005,u"张三",u"广州大学人文学院",u"B5"), (1006,u"何明",u"广州大学土木工程学院",u"B22"), (1007,u"陈中",u"广州大学数学学院",u"B24"), (1008,u"黄六",u"广州大学体育学院",u"B25")) forrinreaders: c.execute("INSERTINTOreaderVALUES(?,?,?,?)",r) borrows=((1,1001,1,u"2009-04-20"), (2,1001,2,u"2009-04-20"), (3,1002,3,u"2009-04-20"), (4,1003,5,u"2009-04-20"), (5,1004,4,u"2009-04-20"), (6,1004,2,u"2009-04-20"), (7,1003,7,u"2009-04-20"), (8,1006,8,u"2009-04-20"), (9,1007,2,u"2009-04-20"), (10,1008,8,u"2009-04-20")) forrinborrows: c.execute("INSERTINTOborrowVALUES(?,?,?,?)",r) #Save(commit)thechanges con.commit() if__name__=="__main__": LibDbInit(sqlite3.connect('sqlitefile.db'))
源码下载:图书管理系统
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。