diff --git a/书籍管理系统.py b/书籍管理系统.py new file mode 100644 index 0000000..b4db1e0 --- /dev/null +++ b/书籍管理系统.py @@ -0,0 +1,877 @@ +import tkinter +import xlrd +import xlwt +import os +from tkinter import * +from xlutils import copy +from tkinter import messagebox +import datedays +#创建窗口 +def createwin(): + window=Tk() + window.title('书籍管理系统') + window.geometry('350x800') + button1 = tkinter.Button(window, text='退出', command=lambda: window.destroy(), width=7, height=2) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(window, width=22, height=1, command=lambda: createentry(), text='添加书籍'); + button2.place(x=100, y=200) + button3 = tkinter.Button(window, width=22, height=1, command=lambda: addUser(), text='添加用户'); + button3.place(x=100, y=250) + button4 = tkinter.Button(window, width=22, height=1, command=lambda: modifybook(), text='修改书籍'); + button4.place(x=100, y=300) + button5 = tkinter.Button(window, width=22, height=1, command=lambda: modifyuser(), text='修改用户'); + button5.place(x=100, y=350) + button6 = tkinter.Button(window, width=22, height=1, command=lambda: lookbook(), text='查看书籍信息'); + button6.place(x=100, y=100) + button7 = tkinter.Button(window, width=22, height=1, command=lambda: rookbook(), text='查看用户信息'); + button7.place(x=100, y=150) + button8 = tkinter.Button(window, width=22, height=1, command=lambda: allbook(), text='超时未还书借书者信息'); + button8.place(x=100, y=400) + button9 = tkinter.Button(window, width=22, height=1, command=lambda: searchbook(), text='查询书籍信息'); + button9.place(x=100, y=450) + button10 = tkinter.Button(window, width=22, height=1, command=lambda: checkhistory(), text='查询用户信息'); + button10.place(x=100, y=500) + button11 = tkinter.Button(window, width=22, height=1, command=lambda: borrowbook(), text='借书'); + button11.place(x=100, y=550) + button12 = tkinter.Button(window, width=22, height=1, command=lambda: returnbook(), text='还书'); + button12.place(x=100, y=600) + button13 = tkinter.Button(window, width=22, height=1, command=lambda: deletebook(), text='删除书籍'); + button13.place(x=100, y=650) + button14 = tkinter.Button(window, width=22, height=1, command=lambda: deleteuser(), text='删除用户'); + button14.place(x=100, y=700) + return window + + + +#查看书籍信息 +def lookbook(): + lookbook=Tk() + lookbook.title('书籍信息') + lookbook.geometry('1600x500') + roll=tkinter.Scrollbar(lookbook) + roll.pack(side=tkinter.RIGHT,fill=tkinter.Y) + text_input=tkinter.Text(lookbook,width=800,height=500) + text_input.insert('insert',getvar1()) + text_input.pack(expand=tkinter.YES,fill=tkinter.BOTH) + text_input.config(yscrollcommand=roll.set) + roll.config(command=text_input.yview) + +#获取书籍信息表格中的内容 +def getvar1(): + xls=xlrd.open_workbook('书籍信息.xls') + sheet=xls.sheet_by_index(0) + table = xls.sheets()[0] + n=table.nrows + listindes="" + for i in range(0,n): + for j in range(0,7): + listindes=listindes+str(sheet.cell_value(i,j))+"\t\t\t\t" + listindes=listindes+"\n" + return listindes + +#查看借书者信息 +def rookbook(): + rookbook=Tk() + rookbook.title('用户信息') + rookbook.geometry('700x500') + roll=tkinter.Scrollbar(rookbook) + roll.pack(side=tkinter.RIGHT,fill=tkinter.Y) + text_input=tkinter.Text(rookbook,width=800,height=500) + text_input.insert('insert',showUsers()) + text_input.pack(expand=tkinter.YES,fill=tkinter.BOTH) + text_input.config(yscrollcommand=roll.set) + roll.config(command=text_input.yview) + + + +# 显示所有借书者信息 +def showUsers(): + # 获取所有用户信息Excel文件的文件名 + path = '用户信息\\' + files = os.listdir(path) + users = [] + for file in files: + if file.endswith('.xls'): + users.append(file) + st = "姓名\t\t\t性别\t\t\t年龄\t\t\t借书账号\t\t\t" + for user in users: + s = path + user + book = xlrd.open_workbook(s) + sheet = book.sheet_by_index(0) + st=st+"\n" + for j in range(sheet.ncols-5): + st = st+str(sheet.cell_value(1, j)) + "\t\t\t" + return st + +# 统计超过期限未还书的借书者并输出借书者信息 +def overdueUsers(): + date = datedays.getnow() + # 获取所有用户信息Excel文件的文件名 + path = '用户信息\\' + files = os.listdir(path) + users = [] + for file in files: + if file.endswith('.xls'): + users.append(file) + st = "姓名\t\t\t性别\t\t\t年龄\t\t\t借书账号\t\t\t借书日期\t\t\t书籍编号\t\t\t借书书名\t\t\t应还书日期\t\t\t是否已还书" + st = st + "\n" + for user in users: + s = path + user + book = xlrd.open_workbook(s) + sheet = book.sheet_by_index(0) + t=0 + for i in range(1, sheet.nrows): + return_date = str(sheet.cell_value(i, 7)) + status = sheet.cell_value(i, 8) + if status == '否' and return_date < date: + if t==0: + t=1 + for k in range(0,4): + st=st+str(sheet.cell_value(1,k))+"\t\t\t" + for k in range(4,9): + st=st+str(sheet.cell_value(i,k))+"\t\t\t" + else: + for j in range(sheet.ncols): + st = st + str(sheet.cell_value(i, j)) + "\t\t\t" + st = st + "\n" + return st + +#输出超过期限未还书的借书者信息 +def allbook(): + allbook=Tk() + allbook.title('超时未还书借书者信息') + allbook.geometry('1600x500') + roll=tkinter.Scrollbar(allbook) + roll.pack(side=tkinter.RIGHT,fill=tkinter.Y) + text_input=tkinter.Text(allbook,width=1000,height=500) + text_input.insert('insert',overdueUsers()) + text_input.pack(expand=tkinter.YES,fill=tkinter.BOTH) + text_input.config(yscrollcommand=roll.set) + roll.config(command=text_input.yview) + + + +#创建新用户表格,表格以借书账号命名,添加用户信息 +def addUser(): + #创建用于输入添加的用户的信息的窗口 + addusers = Tk() + addusers.title('添加用户') + addusers.geometry('275x250') + button1 = tkinter.Button(addusers, text='退出', command=lambda: addusers.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(addusers, width=8, height=1,command=lambda: getentry2(addusers, entry1, entry2, entry3, entry4), text='确认'); + button2.place(x=100, y=175) + text1 = tkinter.Label(addusers, bd=4, fg='black', text='姓名:') + text1.place(x=20, y=45) + text2 = tkinter.Label(addusers, bd=4, fg='black', text='性别:') + text2.place(x=20, y=70) + text3 = tkinter.Label(addusers, bd=4, fg='black', text='年龄:') + text3.place(x=20, y=95) + text4 = tkinter.Label(addusers, bd=4, fg='black', text='借书账号:') + text4.place(x=20, y=120) + entry1 = tkinter.Entry(addusers, width=20, show='') + entry1.place(x=100, y=50) + entry2 = tkinter.Entry(addusers, width=20, show='') + entry2.place(x=100, y=75) + entry3 = tkinter.Entry(addusers, width=20, show='') + entry3.place(x=100, y=100) + entry4 = tkinter.Entry(addusers, width=20, show='') + entry4.place(x=100, y=125) +def getentry2(addusers, entry1, entry2, entry3, entry4): + #判断输入是否完整,避免保存错误信息 + if entry1.get()=="" or entry2.get()=="" or entry3.get()=="" or entry4.get()=="": + tkinter.messagebox.showerror('错误', '请输入完整信息!') + return + data = [] + data.append(str(entry1.get())) + data.append(str(entry2.get())) + data.append(str(entry3.get())) + data.append(str(entry4.get())) + for i in range(0,5): + data.append("无") + s = '用户信息' + '\\' + data[3] + '.xls' + #判断是否已有用户,避免重复添加用户造成报错 + if not os.path.exists(s): + book = xlwt.Workbook(encoding='utf-8', style_compression=0) + sheet = book.add_sheet('用户管理系统', cell_overwrite_ok=True) + col = ('姓名', '性别', '年龄', '借书账号', '借书日期', '书籍编号', '借书书名', '应还书日期', '是否已还书') + for i in range(0, 9): + sheet.write(0, i, col[i]) + book.save(s) + xls = xlrd.open_workbook(s) + wbook = copy.copy(xls) + wsheet = wbook.get_sheet(0) + table = xls.sheets()[0] + n = table.nrows + for i in range(len(data)): + wsheet.write(n, i, data[i]) + wbook.save(s) + tkinter.messagebox.showinfo('提示', '添加成功!') + else: + tkinter.messagebox.showerror('错误', '添加失败,用户已存在!') + addusers.destroy() + +#添加书籍 +def getentry(addwin,entry1,entry2,entry3,entry4,entry5,entry6,entry7): + #判断输入框是否输入完整,防止存到错误信息 + if entry1.get()=="" or entry2.get()=="" or entry3.get()=="" or entry4.get()=="" or entry5.get()=="" or entry6.get()=="" or entry7.get()=="": + tkinter.messagebox.showerror('错误', '请输入完整信息!') + return + xls = xlrd.open_workbook('书籍信息.xls') + wbook = copy.copy(xls) + wsheet = wbook.get_sheet(0) + sheet = xls.sheet_by_index(0) + table = xls.sheets()[0] + n = table.nrows + t=0 + #避免书籍信息重复添加 + for i in range(0, n): + if entry5.get()==sheet.cell_value(i,4): + t=1 + tkinter.messagebox.showerror('错误', '添加失败,已有书籍信息!') + break + #添加书籍信息,写入表格 + if t==0: + data=[] + data.append(str(entry1.get())) + data.append(str(entry2.get())) + data.append(str(entry3.get())) + data.append(str(entry4.get())) + data.append(str(entry5.get())) + data.append(str(entry6.get())) + data.append(str(entry7.get())) + n = table.nrows + for i in range(len(data)): + wsheet.write(n, i, data[i]) + wbook.save('书籍信息.xls') + tkinter.messagebox.showinfo('提示', '添加成功!') + #关闭窗口 + addwin.destroy() +def createentry(): + #创建输入需要添加的书籍的信息的窗口 + addwin=Tk() + addwin.title('添加书籍') + addwin.geometry('275x300') + button1 = tkinter.Button(addwin, text='退出', command=lambda: addwin.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(addwin, width=8, height=1, command=lambda:getentry(addwin,entry1,entry2,entry3,entry4,entry5,entry6,entry7) , text='确认'); + button2.place(x=100, y=250) + text1 = tkinter.Label(addwin, bd=4, fg='black', text='书名:') + text1.place(x=20,y=45) + text2 = tkinter.Label(addwin, bd=4, fg='black', text='作者:') + text2.place(x=20, y=70) + text3 = tkinter.Label(addwin, bd=4, fg='black', text='出版社:') + text3.place(x=20, y=95) + text4 = tkinter.Label(addwin, bd=4, fg='black', text='出版日期:') + text4.place(x=20, y=120) + text5 = tkinter.Label(addwin, bd=4, fg='black', text='书籍编号:') + text5.place(x=20, y=145) + text6 = tkinter.Label(addwin, bd=4, fg='black', text='书籍位置:') + text6.place(x=20, y=170) + text7 = tkinter.Label(addwin, bd=4, fg='black', text='库存量:') + text7.place(x=20, y=195) + entry1 = tkinter.Entry(addwin, width=20, show='') + entry1.place(x=100, y=50) + entry2 = tkinter.Entry(addwin, width=20, show='') + entry2.place(x=100, y=75) + entry3 = tkinter.Entry(addwin, width=20, show='') + entry3.place(x=100, y=100) + entry4 = tkinter.Entry(addwin, width=20, show='') + entry4.place(x=100, y=125) + entry5 = tkinter.Entry(addwin, width=20, show='') + entry5.place(x=100, y=150) + entry6 = tkinter.Entry(addwin, width=20, show='') + entry6.place(x=100, y=175) + entry7 = tkinter.Entry(addwin, width=20, show='') + entry7.place(x=100, y=200) + + + + +#修改书籍信息 +def modifybook(): + modifywin = Tk() + modifywin.title('修改书籍信息') + modifywin.geometry('275x200') + button1 = tkinter.Button(modifywin, text='退出', command=lambda: modifywin.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + text1 = tkinter.Label(modifywin, bd=4, fg='black', text='书籍编号:') + text1.place(x=20, y=45) + entry1 = tkinter.Entry(modifywin, width=20, show='') + entry1.place(x=100, y=50) + button2 = tkinter.Button(modifywin, width=8, height=1, command=lambda: getentry_mod(modifywin,entry1), text='确认'); + button2.place(x=100, y=150) +def getentry_mod(modify,entry1): + if entry1.get()=="": + tkinter.messagebox.showerror('错误', '请输入书籍编号!') + return + bookid=entry1.get() + modify.destroy() + # 打开Excel文件 + xls = xlrd.open_workbook('书籍信息.xls') + # 复制一份Excel文件以便修改 + wbook = copy.copy(xls) + # 获取工作表 + wsheet = wbook.get_sheet(0) + table = xls.sheets()[0] + n = table.nrows + # 查找对应书籍编号 + for i in range(1, n): + if table.cell(i, 4).value == bookid: + # 创建修改书籍信息窗口 + modifywin = Tk() + modifywin.title('修改书籍信息') + modifywin.geometry('275x250') + # 添加标签和输入框 + tkinter.Label(modifywin, bd=4, fg='black', text='书名:').place(x=20, y=25) + entry1 = tkinter.Entry(modifywin, width=20, justify='right') + entry1.insert(0, table.cell(i, 0).value) + entry1.place(x=100, y=25) + tkinter.Label(modifywin, bd=4, fg='black', text='作者:').place(x=20, y=50) + entry2 = tkinter.Entry(modifywin, width=20, justify='right') + entry2.insert(0, table.cell(i, 1).value) + entry2.place(x=100, y=50) + tkinter.Label(modifywin, bd=4, fg='black', text='出版社:').place(x=20, y=75) + entry3 = tkinter.Entry(modifywin, width=20, justify='right') + entry3.insert(0, table.cell(i, 2).value) + entry3.place(x=100, y=75) + tkinter.Label(modifywin, bd=4, fg='black', text='出版日期:').place(x=20, y=100) + entry4 = tkinter.Entry(modifywin, width=20, justify='right') + entry4.insert(0, table.cell(i, 3).value) + entry4.place(x=100, y=100) + tkinter.Label(modifywin, bd=4, fg='black', text='书籍位置:').place(x=20, y=125) + entry5 = tkinter.Entry(modifywin, width=20, justify='right') + entry5.insert(0, table.cell(i, 5).value) + entry5.place(x=100, y=125) + tkinter.Label(modifywin, bd=4, fg='black', text='库存量:').place(x=20, y=150) + entry6 = tkinter.Entry(modifywin, width=20, justify='right') + entry6.insert(0, table.cell(i, 6).value) + entry6.place(x=100, y=150) + # 添加确认修改按钮和退出按钮 + tkinter.Button(modifywin, width=8, height=1, text='确认',command=lambda: getentry_mod_finish(bookid, entry1.get(), entry2.get(), entry3.get(),entry4.get(), entry5.get(), entry6.get(),modifywin)).place(x=100, y=200) + tkinter.Button(modifywin, text='退出', command=modifywin.destroy, width=4, height=1).place(relx=1, rely=1,anchor='se') + return + # 如果书籍编号不存在,弹出提示框 + tkinter.messagebox.showerror('错误', '该书籍编号不存在!') +#获取修改书籍信息的窗口的内容并对相应的行进行修改 +def getentry_mod_finish(bookid,entry1,entry2,entry3,entry4,entry5,entry6,modifywin): + if entry1=="" or entry2=="" or entry3=="" or entry4=="" or entry5=="" or entry6=="": + tkinter.messagebox.showerror('错误', '请输入完整信息!') + return + xls = xlrd.open_workbook('书籍信息.xls') + wbook = copy.copy(xls) + wsheet = wbook.get_sheet(0) + table = xls.sheets()[0] + n = table.nrows + for i in range(1, n): + if table.cell(i, 4).value == bookid: + wsheet.write(i, 0, str(entry1)) + wsheet.write(i, 1, str(entry2)) + wsheet.write(i, 2, str(entry3)) + wsheet.write(i, 3, str(entry4)) + wsheet.write(i, 5, str(entry5)) + wsheet.write(i, 6, str(entry6)) + wbook.save('书籍信息.xls') + tkinter.messagebox.showinfo('提示', '修改成功!') + modifywin.destroy() + return + +#修改用户信息 +def modifyuser(): + modify = Tk() + modify.title('修改用户信息') + modify.geometry('275x200') + text1 = tkinter.Label(modify, bd=4, fg='black', text='借书账号:') + text1.place(x=20, y=45) + entry = tkinter.Entry(modify, width=20, show='') + entry.place(x=100, y=50) + button1 = tkinter.Button(modify, text='退出', command=lambda: modify.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(modify, width=8, height=1, command=lambda: getentry3(modify, entry), text='确认'); + button2.place(x=100, y=100) +#创建窗口,显示用户信息并进行修改 +def getentry3(modify,entry): + if entry.get()=="": + tkinter.messagebox.showerror('错误', '请输入用户账号!') + return + account=entry.get() + path = '用户信息' + '\\' + account + '.xls' + try: + xls = xlrd.open_workbook(path) + except: + text = tkinter.Label(modify, bd=4, fg='red', text='用户不存在!') + text.place(x=90, y=20) + return + sheet = xls.sheet_by_index(0) + data = [] + for j in range(0, 4): + data.append(str(sheet.cell_value(1, j))) + + modify2 = Tk() + modify2.title('修改用户信息') + modify2.geometry('275x200') + + button1 = tkinter.Button(modify2, text='退出', command=lambda: modify2.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(modify2, width=8, height=1, + command=lambda: updateuser(modify2, account, entry1, entry2, entry3), text='确认修改'); + button2.place(x=100, y=150) + text1 = tkinter.Label(modify2, bd=4, fg='black', text='姓名:') + text1.place(x=20, y=45) + text2 = tkinter.Label(modify2, bd=4, fg='black', text='性别:') + text2.place(x=20, y=70) + text3 = tkinter.Label(modify2, bd=4, fg='black', text='年龄:') + text3.place(x=20, y=95) + + entry1 = tkinter.Entry(modify2, width=20, show='') + entry1.insert(0, data[0]) + entry1.place(x=100, y=50) + entry2 = tkinter.Entry(modify2, width=20, show='') + entry2.insert(0, data[1]) + entry2.place(x=100, y=75) + entry3 = tkinter.Entry(modify2, width=20, show='') + entry3.insert(0, data[2]) + entry3.place(x=100, y=100) + modify.destroy() + +#更新用户信息表格中的指定用户的信息 +def updateuser(modify2, account, entry1,entry2,entry3): + if entry1.get()=="" or entry2.get()=="" or entry3.get()=="": + tkinter.messagebox.showerror('错误', '请输入完整信息!') + return + data = [] + data.append(entry1.get()) + data.append(entry2.get()) + data.append(entry3.get()) + s = '用户信息' + '\\' + account + '.xls' + xls = xlrd.open_workbook(s) + wbook = copy.copy(xls) + wsheet = wbook.get_sheet(0) + table = xls.sheets()[0] + for i in range(len(data)): + wsheet.write(1,i,data[i]) + wbook.save(s) + tkinter.messagebox.showinfo('提示', '修改成功!') + modify2.destroy() + + + +#查询书籍信息 +def searchbook(): + search = Tk() + search.title('查询书籍信息') + search.geometry('275x200') + button1 = tkinter.Button(search, text='退出', command=lambda: search.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + text1 = tkinter.Label(search, bd=4, fg='black', text='书籍编号:') + text1.place(x=20, y=45) + entry1 = tkinter.Entry(search, width=20, show='') + entry1.place(x=100, y=50) + button2 = tkinter.Button(search, width=8, height=1, command=lambda: getentry_search(entry1.get()), text='确认'); + button2.place(x=100, y=150) +def getentry_search(bookid): + if bookid=="": + tkinter.messagebox.showerror('错误', '请输入要查询的书籍编号!') + return + # 打开Excel文件 + xls = xlrd.open_workbook('书籍信息.xls') + table = xls.sheets()[0] + n = table.nrows + # 查找对应书籍编号 + for i in range(1, n): + if table.cell(i, 4).value == bookid: + # 创建查询书籍信息窗口 + seaech = Tk() + seaech.title('查询书籍信息') + seaech.geometry('275x300') + # 添加标签和输入框 + tkinter.Label(seaech, bd=4, fg='black', text='书名:').place(x=20, y=25) + entry1 = tkinter.Entry(seaech, width=20, justify='right') + entry1.insert(0, table.cell(i, 0).value) + entry1.place(x=100, y=25) + tkinter.Label(seaech, bd=4, fg='black', text='作者:').place(x=20, y=50) + entry2 = tkinter.Entry(seaech, width=20, justify='right') + entry2.insert(0, table.cell(i, 1).value) + entry2.place(x=100, y=50) + tkinter.Label(seaech, bd=4, fg='black', text='出版社:').place(x=20, y=75) + entry3 = tkinter.Entry(seaech, width=20, justify='right') + entry3.insert(0, table.cell(i, 2).value) + entry3.place(x=100, y=75) + tkinter.Label(seaech, bd=4, fg='black', text='出版日期:').place(x=20, y=100) + entry4 = tkinter.Entry(seaech, width=20, justify='right') + entry4.insert(0, table.cell(i, 3).value) + entry4.place(x=100, y=100) + tkinter.Label(seaech, bd=4, fg='black', text='书籍位置:').place(x=20, y=125) + entry5 = tkinter.Entry(seaech, width=20, justify='right') + entry5.insert(0, table.cell(i, 5).value) + entry5.place(x=100, y=125) + tkinter.Label(seaech, bd=4, fg='black', text='库存量:').place(x=20, y=150) + entry6 = tkinter.Entry(seaech, width=20, justify='right') + entry6.insert(0, table.cell(i, 6).value) + entry6.place(x=100, y=150) + # 添加退出按钮 + tkinter.Button(seaech, text='退出', command=seaech.destroy, width=4, height=1).place(relx=1, rely=1, + anchor='se') + return + # 如果书籍编号不存在,弹出提示框 + tkinter.messagebox.showerror('错误', '该书籍编号不存在!') + +#查阅借阅历史 +def checkhistory(): + check = Tk() + check.title('查询用户信息') + check.geometry('275x200') + text1 = tkinter.Label(check, bd=4, fg='black', text='借书账号:') + text1.place(x=20, y=45) + entry1 = tkinter.Entry(check, width=20, show='') + entry1.place(x=100, y=50) + button1 = tkinter.Button(check, text='退出', command=lambda: check.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(check, width=8, height=1, command=lambda: getentry_check(entry1.get()), text='确认'); + button2.place(x=100, y=100) +def getentry_check(account): + if account=="": + tkinter.messagebox.showerror('错误', '请输入要查询的用户账号!') + return + path = '用户信息' + '\\' + account + '.xls' + try: + xls = xlrd.open_workbook(path) + except: + tkinter.messagebox.showerror('错误', '该用户不存在!') + return + sheet = xls.sheet_by_index(0) + n = sheet.nrows + data=[] + ss="" + for j in range(0, 9): + ss = ss + str(sheet.cell_value(0, j)) + "\t\t\t" + ss=ss+"\n" + for i in range(1, n): + data1=[] + for j in range(sheet.ncols): + data1.append(str(sheet.cell_value(i,j))) + data.append(data1) + for i in range(0,4): + ss=ss+sheet.cell_value(1,i)+"\t\t\t" + data.sort(key=lambda x:x[8]) + t=0 + for value in data: + if t==1: + for i in range(0,4): + ss=ss+""+"\t\t\t" + for i in range(4,len(value)): + ss=ss+str(value[i])+"\t\t\t" + if t==0: + for i in range(4,len(value)): + ss=ss+str(value[i])+"\t\t\t" + t=1 + ss=ss+"\n" + check = Tk() + check.title('查询用户信息') + check.geometry('1600x500') + roll = tkinter.Scrollbar(check) + roll.pack(side=tkinter.RIGHT, fill=tkinter.Y) + text_input = tkinter.Text(check, width=800, height=500) + text_input.insert('insert', ss) + text_input.pack(expand=tkinter.YES, fill=tkinter.BOTH) + text_input.config(yscrollcommand=roll.set) + roll.config(command=text_input.yview) + button1 = tkinter.Button(check, text='退出', command=lambda: check.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + +#删除书籍信息 +def deletebook(): + delete = Tk() + delete .title('删除书籍信息') + delete .geometry('275x200') + button1 = tkinter.Button(delete , text='退出', command=lambda: delete.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + text1 = tkinter.Label(delete, bd=4, fg='black', text='书籍编号:') + text1.place(x=20, y=45) + entry1 = tkinter.Entry(delete, width=20, show='') + entry1.place(x=100, y=50) + button2 = tkinter.Button(delete, width=8, height=1, command=lambda: getentry_delete(entry1), text='确认'); + button2.place(x=100, y=150) +def getentry_delete(entry1): + bookid=entry1.get() + if bookid=="": + tkinter.messagebox.showerror('错误', '请输入要删除的书籍编号!') + return + # 打开Excel文件 + xls = xlrd.open_workbook('书籍信息.xls') + sheet = xls.sheet_by_index(0) + table = xls.sheets()[0] + n = table.nrows + data=[] + for i in range(1,n): + if sheet.cell_value(i,4) == bookid: + for j in range(i+1,n): + for u in range(0,7): + data.append(str(sheet.cell_value(j,u))) + os.remove('书籍信息.xls') + if not os.path.exists('书籍信息.xls'): + book = xlwt.Workbook(encoding='utf-8', style_compression=0) + sheet = book.add_sheet('书籍管理系统', cell_overwrite_ok=True) + col = ('书名', '作者', '出版社', '出版日期', '书籍编号', '书籍位置', '库存量') + for i in range(0, 7): + sheet.write(0, i, col[i]) + savepath = '书籍信息.xls' + book.save(savepath) + xls = xlrd.open_workbook('书籍信息.xls') + wbook = copy.copy(xls) + wsheet = wbook.get_sheet(0) + k=0 + for i in range(1,n-1): + for j in range(0,7): + wsheet.write(i,j,data[k]) + k=k+1 + wbook.save('书籍信息.xls') + tkinter.messagebox.showinfo('提示', '删除成功!') + entry1.delete("0","end") + return + for k in range(0,7): + data.append(str(sheet.cell_value(i,k))) + tkinter.messagebox.showerror('错误', '未找到该图书编号的书籍信息!') + entry1.delete("0", "end") + + + +#删除用户 +def deleteuser(): + delete = Tk() + delete .title('删除用户信息') + delete .geometry('275x200') + text1 = tkinter.Label(delete, bd=4, fg='black', text='删除账号:') + text1.place(x=20, y=45) + entry = tkinter.Entry(delete, width=20, show='') + entry.place(x=100, y=50) + button1 = tkinter.Button(delete, text='退出', command=lambda: delete.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(delete, width=8, height=1, command=lambda: getentry5(delete, entry), text='确认'); + button2.place(x=100, y=100) +def getentry5(modify,entry): + if entry.get()=="": + tkinter.messagebox.showerror('错误', '请输入用户账号!') + return + account=entry.get() + path = '用户信息' + '\\' + account + '.xls' + if os.path.exists(path): + os.remove(path) + tkinter.messagebox.showinfo('提示', '删除成功!') + else: + tkinter.messagebox.showerror('错误', '未找到该图书编号的书籍信息!') + + +#借书 +def borrowbook(): + #创建用于输入借书相关信息的窗口 + modify = Tk() + modify.title('借书') + modify.geometry('275x200') + text1 = tkinter.Label(modify, bd=4, fg='black', text='借书账号:') + text1.place(x=20, y=45) + entry1 = tkinter.Entry(modify, width=20, show='') + entry1.place(x=100, y=50) + text2 = tkinter.Label(modify, bd=4, fg='black', text='书籍编号:') + text2.place(x=20, y=95) + entry2 = tkinter.Entry(modify, width=20, show='') + entry2.place(x=100, y=100) + button1 = tkinter.Button(modify, text='退出', command=lambda: modify.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(modify, width=8, height=1, command=lambda: getbook(entry1,entry2), text='确认'); + button2.place(x=100, y=150) +def getbook(entry1,entry2): + #判断是否输入借书账号 + if entry1.get()=="": + tkinter.messagebox.showerror('错误', '请输入借书账号!') + entry2.delete("0", "end") + return + #判断是否输入书籍编号 + if entry2.get()=="": + tkinter.messagebox.showerror('错误', '请输入书籍编号!') + entry2.delete("0", "end") + return + account = entry1.get() + path = '用户信息' + '\\' + account + '.xls' + #判断用户是否存在 + try: + xls1 = xlrd.open_workbook(path) + wbook1 = copy.copy(xls1) + wsheet1 = wbook1.get_sheet(0) + sheet1 = xls1.sheet_by_index(0) + table1 = xls1.sheets()[0] + #判断用户未还书籍数量,上限为5本,达到上限则不允许借书 + y=0 + for p in range (1,table1.nrows): + if sheet1.cell_value(p,8)=="否": + y=y+1 + if y>=5: + tkinter.messagebox.showerror('错误', '该用户现已借满5本书,请先还书!') + entry1.delete("0", "end") + entry2.delete("0", "end") + return + except: + tkinter.messagebox.showerror('错误', '用户不存在!') + #清空错误的输入信息 + entry1.delete("0", "end") + entry2.delete("0", "end") + return + bookid=entry2.get() + xls = xlrd.open_workbook('书籍信息.xls') + wbook=copy.copy(xls) + sheet = xls.sheet_by_index(0) + wsheet=wbook.get_sheet(0) + table = xls.sheets()[0] + n = table.nrows + # 查找对应书籍编号 + t=0 + for i in range(1, n): + #判断图书馆是否收录此书 + if table.cell(i, 4).value == bookid: + t=1 + #判断书籍是否有库存 + if(int(sheet.cell_value(i,6))>0): + for j in range(1, table1.nrows): + #判断是否已借过此书,防止重复借同本书 + if sheet1.cell_value(j, 5) == bookid and sheet1.cell_value(j, 8) == "否": + tkinter.messagebox.showerror('错误', '已借过此书且未归还,请先归还再借!') + entry2.delete("0", "end") + return + #获取该书籍编号的书名 + bookname=table.cell(i,0).value + #成功借书,库存减1 + x=int(sheet.cell_value(i,6))-1 + wsheet.write(i,6,str(x)) + wbook.save('书籍信息.xls') + else: + tkinter.messagebox.showerror('错误', '此书已借出,暂无剩余库存!') + entry2.delete("0", "end") + return + break + if t==0: + tkinter.messagebox.showerror('错误','本馆暂无收录此书!') + entry2.delete("0", "end") + return + data=[] + now=datedays.gettomorrow(days=0) + data.append(str(now)) + data.append(str(bookid)) + data.append(str(bookname)) + end=datedays.gettomorrow(days=30) + data.append(str(end)) + data.append("否") + n=4 + #从未借过书的情况 + if sheet1.cell_value(1,4) == "无": + for i in range(len(data)): + wsheet1.write(1, n, data[i]) + n=n+1 + #借过书的情况 + else: + for i in range(len(data)): + wsheet1.write(table1.nrows,n,data[i]) + n=n+1 + wbook1.save(path) + tkinter.messagebox.showinfo('提示', '借书成功!') + entry2.delete("0", "end") + + +#还书 +def returnbook(): + #创建用于输入还书相关信息的窗口 + modify = Tk() + modify.title('还书') + modify.geometry('275x200') + text1 = tkinter.Label(modify, bd=4, fg='black', text='还书账号:') + text1.place(x=20, y=45) + entry1 = tkinter.Entry(modify, width=20, show='') + entry1.place(x=100, y=50) + text2 = tkinter.Label(modify, bd=4, fg='black', text='书籍编号:') + text2.place(x=20, y=95) + entry2 = tkinter.Entry(modify, width=20, show='') + entry2.place(x=100, y=100) + button1 = tkinter.Button(modify, text='退出', command=lambda: modify.destroy(), width=4, height=1) + button1.place(relx=1, rely=1, anchor='se') + button2 = tkinter.Button(modify, width=8, height=1, command=lambda: returnbook2(entry1, entry2), text='确认'); + button2.place(x=100, y=150) +def returnbook2(entry1,entry2): + #判断还书账号是否输入 + if entry1.get()=="": + tkinter.messagebox.showerror('错误', '请输入还书账号!') + entry2.delete("0", "end") + return + #判断归还书籍的书籍编号是否输入 + if entry2.get()=="": + tkinter.messagebox.showerror('错误', '请输入归还书籍的书籍编号!') + entry2.delete("0", "end") + return + account = entry1.get() + path = '用户信息' + '\\' + account + '.xls' + #判断用户是否存在 + try: + xls1 = xlrd.open_workbook(path) + wbook1 = copy.copy(xls1) + wsheet1 = wbook1.get_sheet(0) + sheet1 = xls1.sheet_by_index(0) + table1 = xls1.sheets()[0] + except: + tkinter.messagebox.showerror('错误', '用户不存在!') + #清空错误信息 + entry1.delete("0", "end") + entry2.delete("0", "end") + return + bookid=entry2.get() + xls = xlrd.open_workbook('书籍信息.xls') + wbook=copy.copy(xls) + sheet = xls.sheet_by_index(0) + wsheet=wbook.get_sheet(0) + table = xls.sheets()[0] + n = table.nrows + t=0 + d=0 + #查找是否借过并且尚未归还此书 + for i in range(1,table1.nrows): + if sheet1.cell_value(i,5)==bookid: + #成功查找到未还此书的借书信息 + if sheet1.cell_value(i, 8) == "否": + # 查找对应书籍编号,判断图书馆是否收录有此书 + for j in range(1, n): + if table.cell(j, 4).value == bookid: + d = 1 + #成功还书,库存加1,用户借书信息改为已还书 + x = int(sheet.cell_value(j, 6)) + 1 + wsheet.write(j, 6, str(x)) + wbook.save('书籍信息.xls') + wsheet1.write(i, 8, "是") + wbook1.save(path) + break + #未在书籍信息表格中找到此书 + if d == 0: + tkinter.messagebox.showerror('错误', '本馆暂无收录此书!') + entry2.delete("0", "end") + return + t=1 + break + #查无符合条件的借书信息 + if t==0: + tkinter.messagebox.showerror('错误', '该用户无此借书信息!') + return + tkinter.messagebox.showinfo('提示', '还书成功!') + entry2.delete("0", "end") + +#若不存在名为书籍信息的表格,则创建一个 +if not os.path.exists('书籍信息.xls'): + book = xlwt.Workbook(encoding='utf-8', style_compression=0) + sheet = book.add_sheet('书籍管理系统', cell_overwrite_ok=True) + col = ('书名', '作者', '出版社', '出版日期','书籍编号','书籍位置','库存量') + for i in range(0, 7): + sheet.write(0, i, col[i]) + savepath='书籍信息.xls' + book.save(savepath) +#若不存在名为用户信息的文件夹,则创建一个 +path='用户信息' +if not os.path.exists(path): + os.mkdir('用户信息') +window=createwin() +window.mainloop() # 运行主窗口,保持窗口打开状态,直到用户关闭窗口。 +