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'))
源码下载:图书管理系统
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。