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 正则式 概述及常用字符
May 07 Python
Python实现文件复制删除
Apr 19 Python
python列表生成式与列表生成器的使用
Feb 23 Python
python生成ppt的方法
Jun 07 Python
Python3实现定时任务的四种方式
Jun 03 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
Django和Flask框架优缺点对比
Oct 24 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 Python
Python 中 Shutil 模块详情
Nov 11 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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的介绍以及优势详细分析
2019/09/05 PHP
索趣科技的答案
2007/02/07 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
JS变量及其作用域
2017/03/29 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
python去除文件中重复的行实例
2018/06/29 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
python 6行代码制作月历生成器
2020/09/18 Python
详解Python yaml模块
2020/09/23 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
项目合作意向书范本
2014/04/01 职场文书
责任书格式范文
2014/07/28 职场文书
工会趣味活动方案
2014/08/18 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书