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%(),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()