本文实例为大家分享了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()
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“python实现图书管理系统”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]