首页 > 编程 > Python > 正文

python实现图书管理系统

2020-01-04 15:42:49
字体:
来源:转载
供稿:网友

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

import mysql.connectorimport sys, osimport timeimport datetimefrom 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 0LIB = 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 carddef 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 bookdef 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 windowlabel_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 resultorder_index=0Lb_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 0def 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 1def 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 1def 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 1label_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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表