网络编程
位置:首页>> 网络编程>> Python编程>> python实现图书管理系统

python实现图书管理系统

作者:baidu_32921145  发布时间:2022-03-11 01:22:54 

标签:python,管理系统

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

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

0
投稿

猜你喜欢

  • “占位图形”顾名思义是在准备好将最终图形添加到 Web 页之前使用的临时图形。使用它可以在没有理想的图形的情况下先行制作Web页面——在需要
  • 本文实例讲述了python字典序问题,分享给大家供大家参考。具体如下:问题描述:将字母从左向右的次序与字母表中的次序相同,且每个字符最大出现
  • 这次我们来说一些很小的东西,相当小。不过先说一个故事:这天晚上,你打算出去下一次馆子,就行动了,找到了一家新开的小店进去坐了下来,服务员很殷
  • web框架是什么?web开发框架是一组工具,同时也提供了非常多的资源,供软件开发人员构建和管理网站、提供web服务、编写web应用程序。它是
  • 在本教程中,我们将学习如何创建一个使用Django作为后端的天气应用程序。Django提供了一个基于Python Web框架的Web框架,允
  • Variant变量一般会将其代表的数据子类型自动转换成合适的数据类型,但有时候,自动转换也会造成一些数据类型不匹配的错误.这时,可使用转换函
  • CSS网页布局应该避免滥用div元素一直是我们倡导的,以合适的HTML标签组织文档是CSS网页布局的基础。页面中div与span元素的使用是
  • 阅读上一章:Chapter 6 短语元素Chapter 7 锚点HTML中的链接,正确的说法应该称作"锚点",它不仅让我
  • 在Python中,最基本的数据结构为序列。Python中包含6种内建序列:字符串、列表、元组、Unicode字符串、buffer对象、xra
  • 前言本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能。示例图如上图,我们
  • blankzheng的blog:http://www.planabc.net/margin在中文中我们翻译成外边距或者外补白(本文中引用外边
  • 这篇文章主要介绍了Python文本处理简单易懂方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
  • 本文实例讲述了php中数字、字符与对象判断函数用法。分享给大家供大家参考。具体分析如下:在php判断数字,字符,对象,数组等包括有参见 is
  • global.asa<SCRIPT LANGUAGE="VBScript" RUNAT=&qu
  • 今早无聊。。。7点起来突然想写个刷访问量的。。那就动手吧仅供测试,不建议刷访问量哦~~很简单的思路,第一步提取代理ip,第二步模拟访问。提取
  • 一.gb2312,gbk,utf8等支持多字节编码的字符集都可以储存汉字,gb2312中的汉字数量远少于gbk,而gb2312,gbk等都可
  • 计算机键盘每天用得太多了,以致于我们无视它的存在(盲打),当然也很少有人去问这样一个问题——为什么键盘字母的排列方式是QWERTY而不是AB
  • php统计数组元素个数count():对数组中的元素个数进行统计;sizeof():和count()具有同样的用途,这两个函数都可以返回数组
  • 等啊等,约会都回来了,终于等到了Google放出今年的情人节Logo,原本下午四点就可以上线的这篇文章,为了等待Google谷歌美国总部的那
  • 这个示例使用的Python版本为3.7版本,一、bing壁纸接口访问bing的官网,通过浏览器开发者工具,查看网络可以找到一个请求壁纸的接口
手机版 网络编程 asp之家 www.aspxhome.com