python实现图书管理系统


Posted in Python onMarch 12, 2018

本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下

import mysql.connector
import sys, os
import time
import datetime
from tkinter import *
from tkinter.messagebox import *
class Libop:
 user = 'root'
 pwd = ''
 host = 'localhost'
 db = 'library'
 data_file = 'mysql-test.dat'
 def __init__(self):
 print("init")
 try:
  self.library=mysql.connector.connect(user=Libop.user,password=Libop.pwd,host=Libop.host,database=Libop.db)
  self.cursor=self.library.cursor()
  print("Connect successfully")
 except mysql.connector.Error as err:
  print("WTF! initial wrong")
  print("Error: {}".format(err.msg))
  sys.exit()
 def select(self,str):
 try:
  self.cursor.execute(str)
  return self.cursor.fetchall()
 except mysql.connector.Error as err:
  print("WTF! select wrong")
  print("Error:{}".format(err.msg))
  print(str)
  showinfo("ERROR","Please input the parameter correctly")
 def update(self,str):
 try:
  self.cursor.execute(str)
  self.library.commit()
  return 1
 except mysql.connector.Error as err:
  print("WTF! update wrong")
  print("Error:{}".format(err.msg))
  return 0
 def delete(self,str):
 try:
  self.cursor.execute(str)
  self.library.commit()
 except mysql.connector.Error as err:
  print("WTF! delete wrong")
  print("Error:{}".format(err.msg))
 def insert(self,str):
 try:
  self.cursor.execute(str)
  self.library.commit()
  return 1
 except mysql.connector.Error as err:
  print("WTF! insert wrong")
  print("Error:{}".format(err.msg))
  return 0
LIB = Libop()  
root=Tk()
root.wm_title("Library System")
str1=str2=''
book_type=name=year=publisher=writer=price1=price2=order=''
cardid=''
def call_rent(en1,en2,brok):
 st1=en1.get()
 st2=en2.get()
 rent(st1,st2,brok)
def call_return(en1,en2):
 st1=en1.get()
 st2=en2.get()
 back(st1,st2)
def login():
 str1=ide.get()
 str2=pwde.get()
 curs=LIB.select("select manage_id,pswd from managers where manage_id='{}' and pswd='{}'".format(str1,str2))
 if ((str1,str2) in curs): 
 showinfo('message','login success')
 label_book_id=Label(root,text='BookID:').grid(row=0,column=4,sticky=W)
 label_card_id=Label(root,text='CardID:').grid(row=1,column=4,sticky=W)
 entry_book_id=Entry(root)
 entry_book_id.grid(row=0,column=5,sticky=W)
 entry_card_id=Entry(root)
 entry_card_id.grid(row=1,column=5,sticky=W)
 entry_cardid=Entry(root)
 entry_cardid.grid(row=5,column=0,sticky=W)
 #buttons
 button_insert=Button(root,text='insert book',command=inbook)
 button_insert.grid(row=0,column=2,sticky=W)
 button_return=Button(root,text='rent book')
 button_return.bind("<ButtonRelease-1>",lambda z:call_rent(entry_book_id,entry_card_id,str1))
 button_return.grid(row=0,column=3,sticky=W)
 button_rent=Button(root,text='return book')
 button_rent.bind("<ButtonRelease-1>",lambda l:call_return(entry_book_id,entry_card_id))
 button_rent.grid(row=1,column=2,sticky=W)
 button_delete=Button(root,text='delete card')
 button_delete.bind("<ButtonRelease-1>",lambda j:deletecard(entry_cardid))
 button_delete.grid(row=5,column=2,sticky=W)
 button_add=Button(root,text='add card',command=addwindow)
 button_add.grid(row=5,column=3,sticky=W)
 button_display=Button(root,text='display books')
 button_display.bind("<ButtonRelease-1>",lambda y:display_rent(entry_cardid))
 button_display.grid(row=5,column=1,sticky=W)
 else: 
 showinfo(title='login failure',message="WRONG ID OR PASSWORD!")
#add a card
def addwindow():
 top=Toplevel(root)
 label_card_id=Label(top,text='card id:').grid(row=0,column=0,sticky=W)
 label_name=Label(top,text='Name:').grid(row=1,column=0,sticky=W)
 label_unit=Label(top,text='Units:').grid(row=2,column=0,sticky=W)
 label_type=Label(top,text='type:').grid(row=3,column=0,sticky=W)
 entry_card_id=Entry(top)
 entry_card_id.grid(row=0,column=1,sticky=W)
 entry_name=Entry(top)
 entry_name.grid(row=1,column=1,sticky=W)
 entry_unit=Entry(top)
 entry_unit.grid(row=2,column=1,sticky=W)
 entry_type=Entry(top)
 entry_type.grid(row=3,column=1,sticky=W)
 button_constructe=Button(top,text='Add')
 button_constructe.bind("<ButtonRelease-1>",lambda q:addcard(entry_card_id,entry_name,entry_unit,entry_type))
 button_constructe.grid(row=4)
def addcard(en1,en2,en3,en4):
 cardid=en1.get()
 name=en2.get()
 unit=en3.get()
 c_type=en4.get()
 select="select card_id from lib_card where card_id='{}'".format(cardid)
 if (c_type not in ('T','S','O')): 
 showinfo('error',"NO SUCH TYPE")
 return 0
 line=LIB.select(select)
 if (len(line)!=0):
 showinfo('addition failure',"Already have this ID!")
 else:
 insert="insert into lib_card values('{}','{}','{}','{}')".format(cardid,name,unit,c_type)
 LIB.insert(insert)
 showinfo('ok','addition success')
 return 1
#insert book
def inbook():
 insert_book=Toplevel(root)
 insert_book.title('insert book')
 text_insert=Text(insert_book)
 text_insert.pack()
 button_confirm=Button(insert_book,text='confirm')
 button_confirm.bind("<ButtonRelease-1>",lambda x:booksin(text_insert))
 button_confirm.pack()
def booksin(text_insert):
 string=text_insert.get('0.0',END)
 string=string.split('\n')
 print(string)
 for line in string:
 if line=='':
  break
 lines=line.split(',')
 bookid=lines[0][1:]
 t=lines[1]
 name=lines[2]
 publisher=lines[3]
 year=lines[4]
 writer=lines[5]
 price=lines[6]
 total=lines[7]
 stock=lines[8][:-1]
 if (int(stock)>int(total) or int(price)<0): 
  showinfo('insert error!','stock wrong or price is below 0!')
  continue
 #print("insert into book values('{}','{}','{}','{}',{},'{}',{},{},{})".format(bookid,t,name,publisher,year,writer,price,total,stock))
 t=LIB.insert("insert into book values('{}','{}','{}','{}',{},'{}',{},{},{})".format(bookid,t,name,publisher,year,writer,price,total,stock))
 if (t==0):
  showinfo('error','book {} has been inserted'.format(bookid))
 showinfo('success','insert has been done')
#original window
label_type=Label(root,text='TYPE').grid(row=3,sticky=W,column=0)
label_name=Label(root,text='NAME').grid(row=3,sticky=W,column=1)
label_year=Label(root,text='YEAR(XXXX-XXXX)').grid(row=3,sticky=W,column=2)
label_publisher=Label(root,text='PUBLISHER').grid(row=3,sticky=W,column=3)
label_writer=Label(root,text='WRITER').grid(row=3,sticky=W,column=4)
label_lowprice=Label(root,text='lowestprice').grid(row=3,sticky=W,column=5)
label_highprice=Label(root,text='highestprice').grid(row=3,sticky=W,column=6)
label_order=Label(root,text='order by').grid(row=0,sticky=W,column=6)

entry_type=Entry(root)
entry_type.grid(row=4,column=0,sticky=W)
entry_name=Entry(root)
entry_name.grid(row=4,column=1,sticky=W)
entry_year=Entry(root)
entry_year.grid(row=4,column=2,sticky=W)
entry_publisher=Entry(root)
entry_publisher.grid(row=4,column=3,sticky=W)
entry_writer=Entry(root)
entry_writer.grid(row=4,column=4,sticky=W)
entry_price1=Entry(root)
entry_price1.grid(row=4,column=5,sticky=W)
entry_price2=Entry(root)
entry_price2.grid(row=4,column=6,sticky=W)

#order the result
order_index=0
Lb_order=Listbox(root,selectmode=SINGLE,height=6)
order='name','book_type','T','writer','price','publisher'
Lb_order.insert(0,order[0])
Lb_order.insert(1,"type")
Lb_order.insert(2,"year")
Lb_order.insert(3,order[3])
Lb_order.insert(4,order[4])
Lb_order.insert(5,order[5])
Lb_order.grid(row=0,column=7,sticky=W)
Lb_order.selection_set(0)
def booksearch():
 select="select BookID,book_type,name,publisher,T,writer,price,total,stock from book"

 order_index=Lb_order.curselection()
 if (len(order_index)!=0):
 order_index=order_index[0]
 else:
 order_index=0;
 orders=order[order_index]
 name=entry_name.get()
 book_type=entry_type.get()
 publisher=entry_publisher.get()
 year=entry_year.get()
 writer=entry_writer.get()
 price1=entry_price1.get()
 price2=entry_price2.get()
 year1=year[0:4]
 year2=year[5:9]
 count=0
 if name!='':
 if count!=0:
  select+=" and"
 else:select+=" where"
 count+=1
 select+=" name='{}'".format(name)
 if book_type!='':
 if count!=0:
  select+=" and"
 else:select+=" where"
 count+=1
 select+=" book_type='{}'".format(book_type)
 if publisher!='':
 if count!=0:
  select+=" and"
 else:select+=" where"
 count+=1
 select+=" publisher='{}'".format(publisher)
 if year1!='':
 if year2=='':
  if count!=0:
  select+=" and"
  else:select+=" where"
  count+=1
  select+=" t={}".format(year1)
 else:
  if count!=0:
  select+=" and"
  else:select+=" where"
  count+=1
  select+=" T between {} and {}".format(year1,year2)
 if writer!='':
 if count!=0:
  select+=" and"
 else:select+=" where"
 count+=1
 select+=" writer='{}'".format(writer)
 if price1!='':
 if price2!='':
  if count!=0:
  select+=" and"
  else:select+=" where"
  count+=1
  select+=" price between {} and {}".format(price1,price2)
 else:
  if count!=0:
  selece+="and"
  else:select+=" where"
  count+=1
  select+=" price={}".format(price1)
 if orders=='':
 select+=" order by name"
 else:
 select+=" order by {}".format(orders)
 print(select)
 curs=LIB.select(select)
 searchresult=Toplevel(root)
 searchresult.title('result')
 text=Text(searchresult)
 text.insert(INSERT,"BookID\ttype\tname\tpublish\tyear\twriter\tprice\ttotal\tstock\n")
 for (BookIDs,book_types,names,publishers,years,writers,prices,totals,stocks) in curs:
 text.insert(INSERT,"{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\n".format(BookIDs,book_types,names,publishers,years,writers,prices,totals,stocks))
 text.pack()
def display_rent(en_cardid):
 cardid=en_cardid.get()
 select="select card_id from lib_card where card_id='{}'".format(cardid)
 curs=LIB.select(select)
 order_index=Lb_order.curselection()
 if len(order_index)!=0 :
 order_index=order_index[0]
 else:
 order_index=0;
 orders=order[order_index]
 if ((cardid,) in curs):
 select="select card_id,name,unit,c_type from lib_card where card_id='{}'".format(cardid)
 curs=LIB.select(select)
 top=Toplevel(root)
 text=Text(top)
 for (card_id,name,unit,c_type) in curs:
  text.insert(INSERT,"card_id:{}\n".format(card_id))
  text.insert(INSERT,"name:{}\n".format(name))
  text.insert(INSERT,"unit:{}\n".format(unit))
  text.insert(INSERT,"c_type:{}\n".format(c_type))
 select="select BookID,book_type,name,publisher,t,writer,price,total,stock from book natural join record where card_id='{}' and still=1 order by {}".format(cardid,orders)
 curs=LIB.select(select)
 text.insert(INSERT,"BookID\ttype\tname\tpublish\tyear\twriter\tprice\ttotal\tstock\n")
 for (BookID,book_type,name,publisher,t,writer,price,total,stock) in curs:
  text.insert(INSERT,"{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\n".format(BookID,book_type,name,publisher,t,writer,price,total,stock))
 text.pack()
 else:
 showinfo('Error',"NO SUCH CARD")
def checkcard(cardid):
 select="select card_id from lib_card where card_id='{}'".format(cardid)
 curs=LIB.select(select)
 if (cardid,) in curs:
 return 1
 else:
 return 0

def rent(BookID,cardid,brokerage):
 if not (checkcard(cardid)): 
 showinfo('error','no such card')
 return 0
 select="select stock from book where BookID='{}'".format(BookID)
 stocks=LIB.select(select)
 #stocks=curs.fetchall()
 stock=stocks[0]
 if (stock>(0,)):
 update="update book set stock=stock-1 where BookID='{}'".format(BookID)
 flag=LIB.update(update)
 if flag:
  insert="insert into record values('','{}','{}',CURDATE(),DATE_ADD(CURDATE(),INTERVAL 1 MONTH),'{}',1)".format(cardid,BookID,brokerage)
  LIB.insert(insert)
  showinfo('rent success','OK')
 else:
  showinfo('rent failure',"stock wrong")
 else:
 select="select return_time from record where BookID='{}' and return_time>=all(select return_time from record where BookID='{}')".format(BookID,BookID)
 date=LIB.select(select)
 #date=curs.fetchall()
 date=str (date)
 showinfo('Out of stock',"There are no more such book,The recent returning will be at:{}-{}-{}".format(date[16:20],date[22:23],date[26:27]))
 
 return 1
def back(BookID,cardid):
 if not(checkcard(cardid)): return 0
 select="select BookID from record where BookID='{}' and card_id='{}' and still=1".format(BookID,cardid)
 curs=LIB.select(select)
 if (BookID,) in curs:
 select="select record_id from record where BookID='{}' and card_id='{}' and still=1 order by rent_time".format(BookID,cardid)
 cur=LIB.select(select)
 #cur=curss.fetchall()
 for record in cur:
  recordid=str (record)
  recordid=recordid[1:]
  recordid=recordid[:-2]
  update="update record set still=0 where record_id='{}'".format(recordid)
  LIB.update(update)
  update="update book set stock=stock+1 where BookID='{}'".format(BookID)
  LIB.update(update)
  break
 showinfo('message',"Return Success!")
 return 1
 else:
 showinfo('error',"You can't return the book!")
 return 1

def deletecard(card):
 cardid=card.get()
 if not (checkcard(cardid)):
 showinfo('error',"NO SUCH CARD")
 return 0
 select="select record_id from record where card_id='{}' and still=1".format(cardid)
 curs=LIB.select(select)
 for record_id in curs:
 showinfo('error',"Some books this card rented haven't been returned")
 return 0
 delete="delete from lib_card where card_id='{}'".format(cardid)
 LIB.delete(delete)
 showinfo('ok','success')
 return 1
label_id=Label(root,text='ID: ')
label_id.grid(row=0,sticky=W)
ide=Entry(root)
ide.grid(row=0,column=1,sticky=E)
label_psw=Label(root,text='PassWord: ').grid(row=1,sticky=W)
pwde=Entry(root,show='*')
pwde.grid(row=1,column=1,sticky=E)
log_button=Button(root,text='Login',command=login)
log_button.grid(row=2,column=1)

button_search=Button(root,text='Search Book',command=booksearch)
button_search.grid(row=4,column=7,sticky=W)
print("all done")
root.mainloop()

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
查看django版本的方法分享
May 14 Python
windows下python安装pip图文教程
May 25 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
django中forms组件的使用与注意
Jul 08 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
Python绘制散乱的点构成的图的方法
Apr 21 Python
python实现快速排序的示例(二分法思想)
Mar 12 #Python
Python中的pack和unpack的使用
Mar 12 #Python
python文本数据相似度的度量
Mar 12 #Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 #Python
python实现拓扑排序的基本教程
Mar 11 #Python
Python实现图片尺寸缩放脚本
Mar 10 #Python
TensorFlow平台下Python实现神经网络
Mar 10 #Python
You might like
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
PHPCMS的使用小结
2010/09/20 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
浅析NumPy 切片和索引
2020/09/02 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
毕业生就业推荐信范文
2013/12/01 职场文书
学校大课间活动方案
2014/01/30 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
自我鉴定标准格式
2014/03/19 职场文书
个人先进材料范文
2014/12/30 职场文书
爱心捐款活动总结
2015/05/09 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js