diff --git a/README.md b/README.md index 8bc2d26..2716677 100644 --- a/README.md +++ b/README.md @@ -1,876 +1,25 @@ -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() # 运行主窗口,保持窗口打开状态,直到用户关闭窗口。 \ No newline at end of file +小组分工 +学号:2100300507 姓名:张小婷 组内互评得分:99 +个人在团队中的主要工作: +创建书籍信息表格及用户信息文件夹 +添加书籍、用户信息 +用户借书、还书 +总的以及添加部分图形界面设计 +学号:2100300504 姓名:李科涵 组内互评得分:98 +个人在团队中的主要工作: +删除书籍、用户信息 +删除部分界面设计 +学号:2100301804 姓名:莫海林 组内互评得分:98 +修改书籍、用户信息 +修改部分界面设计 +学号:2100300603 姓名:刘晓玉 组内互评得分:98 +个人在团队中的主要工作: +查询书籍、用户信息 +查询部分界面设计 +综合实验报告 +PPT +学号:2100300602 姓名:何懿玲 组内互评得分:98 +个人在团队中的主要工作: +显示所有书籍、用户信息 +统计超期限未还书用户信息 +显示和统计部分界面设计