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 专题四 文件基础知识
Mar 20 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
python实现高斯投影正反算方式
Jan 17 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
增大python字体的方法步骤
Jul 05 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
Python实现智慧校园自动评教全新版
Jun 18 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
第六节--访问属性和方法
2006/11/16 PHP
PHP仿盗链代码
2012/06/03 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php文件下载处理方法分析
2015/04/22 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
使用JavaScript破解web
2018/09/28 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
Python复制文件操作实例详解
2015/11/10 Python
pandas值替换方法
2018/07/10 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
Python Http请求json解析库用法解析
2020/11/28 Python
python制作微博图片爬取工具
2021/01/16 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers