本文实例为大家分享了python图书管理系统的具体代码,供大家参考,具体内容如下
实现语言:python
图形框架:DTK+2.0
数据库框架:SQLite 3.0
本程序需要以下部件运行:
Python2.5.0、GTK+2.16、Pygtk 2.16、PyGobject 2.14、Pycairo 1.4
LibiaryManager.py
#!/usr/bin/python # -*- coding: utf-8 -*- import pygtk pygtk.require('2.0') import gtk import sys import gobject import sqlite3 import time import datetime class LibManager: 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") except BaseException, e: self.errorMessage("Fail to load UI file.") print e 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 def borrowViewInit(self): columName = (u"读者号", u"书号", u"借出日期") columEditAttr = (True, True, False) for columnNum in range(len(columName)): renderer = gtk.CellRendererText() renderer.set_data("column", columnNum) renderer.set_property("editable", columEditAttr[columnNum]) if columEditAttr[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) def returnViewInit(self): columName = (u"借书记录", u"书本", u"读者姓名", u"读者资料", u"借出日期") for columnNum in range(len(columName)): renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(columName[columnNum], renderer, text=columnNum) column.set_resizable(True) self.returnView.append_column(column) # QueryView def queryViewSetColumn(self, columName): self.queryRecord = 0 columns = self.queryView.get_columns() for c in columns: self.queryView.remove_column(c) self.queryViewModel.clear() self.queryView.set_model(self.queryViewModel) for columnNum in range(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) def queryReader(self): self.queryViewModel = self.queryViewReaderModel self.queryViewSetColumn(self.readerColumName) self.cursor.execute("SELECT COUNT(*) FROM reader") self.maxRecords = self.cursor.fetchone()[0] print self.maxRecords def queryBook(self): self.queryViewModel = self.queryViewBookModel self.queryViewSetColumn(self.bookColumName) self.cursor.execute("SELECT COUNT(*) FROM books") self.maxRecords = self.cursor.fetchone()[0] print self.maxRecords #inputView def inputViewSetColumn(self, columName): columns = self.inputView.get_columns() for c in columns: self.inputView.remove_column(c) self.inputViewModel.clear() self.inputView.set_model(self.inputViewModel) for columnNum in range(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) def inputReader(self): self.inputViewModel = self.inputViewReaderModel self.inputViewSetColumn(self.readerColumName[1:]) def inputBook(self): self.inputViewModel = self.inputViewBookModel self.inputViewSetColumn(self.bookColumName[1:]) #Callback Functions def on_mainWindow_delete_event(self, widget, data=None): print "destroy signal occurred" gtk.main_quit() #BorrowView def on_borrowAdd_clicked(self, button, data = None): self.borrowViewModel.append((1001, 1, self.nowDate)) def on_borrowDel_clicked(self, button, data = None): selection = self.borrowView.get_selection() model, iter = selection.get_selected() if iter: model.remove(iter) def on_borrowClear_clicked(self, button, data = None): self.borrowViewModel.clear() def on_borrowSubmit_clicked(self, button, data = None): for row in self.borrowViewModel: self.cursor.execute("INSERT INTO borrow VALUES (NULL, ?, ?, ?)", row) self.dbconn.commit() self.infoMessage(u"借书记录已经成功提交。") self.borrowViewModel.clear() def on_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) except ValueError, e: print e self.errorMessage(u"请输入纯数字记录。") return if column == 0: self.cursor.execute("SELECT * FROM reader where ReaderID = ?", [new_text]) if self.cursor.fetchone(): model.set(iter, column, id) else: self.errorMessage(u"不存在该读者号: %d。" % id) if column == 1: self.cursor.execute("SELECT * FROM books where BookID = ?", [new_text]) if self.cursor.fetchone(): model.set(iter, column, id) else: self.errorMessage(u"不存在该书本号: %d。" % id) #QueryView def on_queryBooks_clicked(self, button, data = None): self.queryBook() self.cursor.execute("SELECT * FROM books LIMIT ? OFFSET ?", [15, 0]) for row in self.cursor: self.queryViewModel.append(row) def on_queryReaders_clicked(self, button, data = None): self.queryReader() self.cursor.execute("SELECT * FROM reader LIMIT ? OFFSET ?", [15, 0]) for row in self.cursor: self.queryViewModel.append(row) def on_queryPrev_clicked(self, button, data = None): if self.queryRecord == 0: self.errorMessage(u"已到最前页。") return self.queryRecord -= 15 self.queryViewModel.clear() if self.queryViewModel.get_n_columns() == 9: self.cursor.execute("SELECT * FROM books LIMIT ? OFFSET ?",[15, self.queryRecord]) elif self.queryViewModel.get_n_columns() == 4: self.cursor.execute("SELECT * FROM reader LIMIT ? OFFSET ?",[15, self.queryRecord]) for row in self.cursor: self.queryViewModel.append(row) def on_queryNext_clicked(self, button, data = None): if self.queryRecord + 15 > self.maxRecords: self.errorMessage(u"已到最后页。") return self.queryRecord += 15 self.queryViewModel.clear() if self.queryViewModel.get_n_columns() == 9: self.cursor.execute("SELECT * FROM books LIMIT ? OFFSET ?",[15, self.queryRecord]) elif self.queryViewModel.get_n_columns() == 4: self.cursor.execute("SELECT * FROM reader LIMIT ? OFFSET ?",[15, self.queryRecord]) for row in self.cursor: self.queryViewModel.append(row) def on_returnQuery_clicked(self, button, data = None): readerid = self.returnEntryReaderID.get_text() bookid = self.returnEntryBookID.get_text() if len(readerid) and len(bookid): self.cursor.execute("SELECT borrow.BorrowID, books.BookName, reader.ReaderName,\ reader.ReaderSchool, borrow.BorrowDate FROM borrow,books,reader\ WHERE books.BookID = borrow.BookID AND \ reader.ReaderID = borrow.ReaderID AND\ borrow.ReaderID = ? AND borrow.BookID = ?", [readerid, bookid]) elif len(readerid): self.cursor.execute("SELECT borrow.BorrowID, books.BookName, reader.ReaderName,\ reader.ReaderSchool, borrow.BorrowDate FROM borrow,books,reader\ WHERE books.BookID = borrow.BookID AND \ reader.ReaderID = borrow.ReaderID AND\ borrow.ReaderID = ?", [readerid]) elif len(bookid): self.cursor.execute("SELECT borrow.BorrowID, books.BookName, reader.ReaderName,\ reader.ReaderSchool, borrow.BorrowDate FROM borrow,books,reader\ WHERE books.BookID = borrow.BookID AND \ reader.ReaderID = borrow.ReaderID AND\ borrow.BookID = ?", [bookid]) else: self.errorMessage(u"请输入查询条件。") return self.returnViewModel.clear() for row in self.cursor: self.returnViewModel.append(row) def on_returnCommit_clicked(self, button, data = None): selection = self.returnView.get_selection() model, iter = selection.get_selected() if iter: 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("DELETE FROM borrow WHERE BorrowID = ?", [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 def on_inputReader_clicked(self, button, data = None): self.inputReader() def on_inputBooks_clicked(self, button, data = None): self.inputBook() def on_inputAdd_clicked(self, button, data = None): if not self.inputViewModel: self.errorMessage(u"请先选择录入类型。") return count = self.inputViewModel.get_n_columns() if count == 3: inputReaderInitData = (u"姓名", u"身份", u"备注") self.inputViewModel.append(inputReaderInitData) elif count == 8: inputBookInitData = (u"书名", u"作者", u"出版社", 0.0, self.nowDate, u"分类", u"简介", 0) self.inputViewModel.append(inputBookInitData) def on_inputDel_clicked(self, button, data = None): selection = self.inputView.get_selection() model, iter = selection.get_selected() if iter: model.remove(iter) def on_inputSubmit_clicked(self, button, data = None): count = self.inputViewModel.get_n_columns() for row in self.inputViewModel: #录入读者 if count == 3: self.cursor.execute(u"INSERT INTO reader VALUES (NULL, ?, ?, ?)", [s.decode("utf-8") for s in row]) #录入书目 elif count == 8: dataRow = [] for obj in row: if isinstance(obj, str): dataRow.append(obj.decode("utf-8")) else: dataRow.append(obj) print dataRow self.cursor.execute(u"INSERT INTO books VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?)",\ dataRow) self.dbconn.commit() self.infoMessage(u"记录已经成功提交。") self.inputViewModel.clear() def on_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() if columnCount == 3: self.inputViewModel.set(iter, column, new_text) elif columnCount == 8: if self.inputViewModel.get_column_type(column) == gobject.TYPE_FLOAT: try: self.inputViewModel.set(iter, column, float(new_text)) except ValueError, e: self.errorMessage(u"请输入价格实数。") return elif self.inputViewModel.get_column_type(column) == gobject.TYPE_UINT: try: self.inputViewModel.set(iter, column, int(new_text)) except ValueError, e: self.errorMessage(u"请输入整数。") return else: self.inputViewModel.set(iter, column, new_text) def errorMessage(self, message): print message dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, message) dialog.run() dialog.destroy() def infoMessage(self, message): print message dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, message) dialog.run() dialog.destroy() def main(self): self.window.show() gtk.main() if __name__ == "__main__": app = LibManager() app.main()
LibDBInit.py
#!/usr/bin/python #encoding:utf-8 import sqlite3 def LibDbInit(con): c = con.cursor() c.execute(""" CREATE TABLE `books` ( `BookID` INTEGER PRIMARY KEY, `BookName` TEXT , `BookAuthor` TEXT , `BookPublish` TEXT , `BookPrice` FLOAT , `BookDate` TEXT , `BookType` TEXT , `BookContent` TEXT , `BookState` INTEGER ) """) c.execute(""" CREATE TABLE `reader` ( `ReaderID` INTEGER PRIMARY KEY, `ReaderName` TEXT , `ReaderSchool` TEXT , `ReaderInfo` TEXT ) """) c.execute(""" CREATE TABLE `borrow` ( `BorrowID` INTEGER PRIMARY KEY, `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)) for r in books: c.execute("INSERT INTO books VALUES (?,?,?,?,?,?,?,?,?)", 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")) for r in readers: c.execute("INSERT INTO reader VALUES (?,?,?,?)", 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")) for r in borrows: c.execute("INSERT INTO borrow VALUES (?,?,?,?)", r) # Save (commit) the changes con.commit() if __name__ == "__main__": LibDbInit(sqlite3.connect('sqlitefile.db'))
源码下载:图书管理系统
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
图书管理 案例描述 随着科技的发展,计算机的普及,计算机软件在诸多领域都得到了广泛的应用。如今,管理系统不再是大公司的专利,许多小型的管理系统,如餐厅的餐饮管理系统、超市的收银系统、学校的学生选课系统等都已逐步普及到了我们的生活中。 本案例要求实现一个基于单链表的图书管理系统,该系统可实现图书信息的增加、浏览、查询、更新、删除这五项功能,并能将链表中存储的数据保存到文件中。 案例分析 本案例要求实
本文向大家介绍python实现简单图书管理系统,包括了python实现简单图书管理系统的使用技巧和注意事项,需要的朋友参考一下 用python实现一个简单的图书管理系统 ,供大家参考,具体内容如下 1、工具:PyCharm3.6 社区版 我创建了一个工程叫fairy,把解释器换成Pytnon3.6 创建一个pytnon file:图书管理系统.py 2、实现简单界面如下: 3、代码实现 一个简单的
本文向大家介绍mybatis实现图书管理系统,包括了mybatis实现图书管理系统的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了mybatis实现图书管理系统的具体代码,供大家参考,具体内容如下 在项目开始前先将数据库中的关系表建立,先分析需要几个模块表,用户,图书,类别,租借,购买,简单的分成这五个。 用户表 图书表 类别 租借 购买 在表中简单插入数据 建立工程 1、配置环境导
本文向大家介绍LibrarySystem图书管理系统开发(一),包括了LibrarySystem图书管理系统开发(一)的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了LibrarySystem图书管理系统开发的第一篇,供大家参考,具体内容如下 SSM搭建过程: 一般idea创建工程的过程 打开idea ---> File ---> new ---> project ---> maven
本文向大家介绍一个简陋的java图书管理系统,包括了一个简陋的java图书管理系统的使用技巧和注意事项,需要的朋友参考一下 本文代码为原创一个简陋的管理系统,只做功能的测试。并没有去完善所有应有的功能,只做了输入输出查找,仅供参考! 菜单部分: 重点的管理部分: 主函数部分: 关于管理系统的更多内容请点击《管理系统专题》进行学习 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多
本文向大家介绍C语言图书管理系统简洁版,包括了C语言图书管理系统简洁版的使用技巧和注意事项,需要的朋友参考一下 DOS界面的图书管理系统,具体内容如下 程序分为两块:管理员操作(收录图书、删除图书等)和会员操作(注册、借书、还书等); 1、管理员操作界面 2、会员操作界面 global.h头文件:(程序中只使用了一个编写的头文件,在这里存放了所有的接口函数以及需要使用到的头文件,还有结构体的定义)
本文向大家介绍C语言链表实现图书管理系统,包括了C语言链表实现图书管理系统的使用技巧和注意事项,需要的朋友参考一下 之前参照网上的资料用链表实现了图书管理系统,包括简单的增删改查功能以及借书还书功能,我是VC6.0下写的一个控制台程序,格式参照的网上的。在动手编码之前,你需要理清自己的思路。首先,需要确定图书馆里系统中主要有那几个对象,这里我写了学生对象和图书对象。不妨在纸上写出或画出它们主要包括
本文向大家介绍C语言图书管理系统课程设计,包括了C语言图书管理系统课程设计的使用技巧和注意事项,需要的朋友参考一下 这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中竟然在QQ网络硬盘中找到了当初的teta版,发布于此,以作纪念。 C 源代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。