侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现图书管理系统

Python  /  管理员 发布于 7年前   262

本文实例为大家分享了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()

更多学习资料请关注专题《管理系统开发》。

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


  • 上一条:
    怎么使用pipenv管理你的python项目
    下一条:
    python实现快速排序的示例(二分法思想)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客