├── Admir_MainPage.py ├── LoginPage.py ├── README.md ├── Register_Page.py ├── User_MainPage.py ├── book.gif ├── book_lend.txt ├── books.txt ├── login_admir.txt ├── login_true.txt ├── main.py ├── view_admir.py ├── view_user.py ├── welcome.gif └── 运行界面截图 ├── 1.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 16.png ├── 17.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png └── 9.png /Admir_MainPage.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from view_admir import * 3 | 4 | class Admir_MainPage(object): 5 | def __init__(self,master = None): 6 | self.root = master #定义内部变量root 7 | self.root.geometry('%dx%d'%(510,475)) 8 | self.creatPage() 9 | 10 | def creatPage(self): 11 | self.addPage = AddFrame(self.root)#录入界面 12 | self.deletePage = DeleteFrame(self.root) #删除界面 13 | self.countPage = CountFrame(self.root) #统计界面 14 | self.register_admirPage = Register_admirFrame(self.root) #添加新管理员界面 15 | self.addPage.pack()#默认录入界面 16 | menubar = Menu(self.root) 17 | menubar.add_command(label = '录入书籍',command = self.addData) 18 | menubar.add_command(label = '删除书籍',command = self.deleteData) 19 | menubar.add_command(label = '统计书籍',command = self.countData) 20 | menubar.add_command(label = '添加管理员',command = self.register_admirData) 21 | self.root['menu'] = menubar #设置菜单栏 22 | 23 | def addData(self): 24 | self.addPage.pack() 25 | self.deletePage.pack_forget() 26 | self.countPage.pack_forget() 27 | self.register_admirPage.pack_forget() 28 | 29 | def deleteData(self): 30 | self.addPage.pack_forget() 31 | self.deletePage.pack() 32 | self.countPage.pack_forget() 33 | self.register_admirPage.pack_forget() 34 | 35 | def countData(self): 36 | self.addPage.pack_forget() 37 | self.deletePage.pack_forget() 38 | self.countPage.pack() 39 | self.register_admirPage.pack_forget() 40 | 41 | def register_admirData(self): 42 | self.addPage.pack_forget() 43 | self.deletePage.pack_forget() 44 | self.countPage.pack_forget() 45 | self.register_admirPage.pack() -------------------------------------------------------------------------------- /LoginPage.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from tkinter.messagebox import * 3 | from User_MainPage import * 4 | from Admir_MainPage import * 5 | from Register_Page import * 6 | 7 | class LoginPage(object): 8 | def __init__(self,master = None): 9 | self.root = master #定义内部变量root 10 | self.root.geometry('%dx%d' % (300,200))#设置窗口大小 11 | self.username = StringVar() 12 | self.password = StringVar() 13 | self.createPage() 14 | 15 | def createPage(self): 16 | self.page = Frame(self.root) #创建Frame 17 | self.page.pack() 18 | Label(self.page).grid(row = 0,stick = W) 19 | Label(self.page,text = '账号').grid(row = 1,stick = W,pady = 10) 20 | Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E) 21 | Label(self.page,text = '密码').grid(row = 2,stick = W,pady = 10) 22 | Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E) 23 | Button(self.page,text = '用户登录',command = self.loginCheck).grid(row = 3,stick =W, pady = 5) 24 | Button(self.page,text = '管理员登录',command = self.admir_loginCheck).grid(row = 3,stick =E,column=1) 25 | Button(self.page,text = '注册',command = self.registerCheck).grid(row = 4,stick =W,column=1,padx = 20,pady = 5) 26 | 27 | def loginCheck(self): 28 | name = self.username.get() 29 | password = self.password.get() 30 | f = open('login_true.txt') 31 | for line in f: 32 | str = line.strip() 33 | str2 = ',' 34 | user_name = str[:str.index(str2)] 35 | pass_word = str[str.index(str2)+1:] 36 | if name == user_name and pass_word == password: 37 | temp = 1 38 | break 39 | else: 40 | temp = 0 41 | if temp == 1 : 42 | self.page.destroy() 43 | User_MainPage(self.root) 44 | elif temp == 0 : 45 | showinfo(title = '失败', message = '账号或密码错误,重新登录!') 46 | 47 | def admir_loginCheck(self): 48 | admir_name = self.username.get() 49 | admir_password = self.password.get() 50 | f1 = open('login_admir.txt') 51 | for line1 in f1: 52 | str = line1.strip() 53 | str1 = ',' 54 | admir_name_txt = str[:str.index(str1)] 55 | admir_password_txt = str[str.index(str1)+1:] 56 | if admir_name == admir_name_txt and admir_password == admir_password_txt: 57 | temp = 3 58 | break 59 | else: 60 | temp = 4 61 | if temp == 3: 62 | self.page.destroy() 63 | Admir_MainPage(self.root) 64 | elif temp == 4: 65 | showinfo(title='失败', message='账号或密码错误,重新登录!') 66 | 67 | def registerCheck(self): 68 | self.page.destroy() 69 | Register_Page(self.root) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python图书管理系统 2 | 3 | ### 一、简介 4 | 5 | 该系统主要通过tkinter库实现图书管理系统,该项目包含对文件的操作,对字符串解析的python知识点 6 | 7 | ### 二、系统实现功能介绍及使用方法 8 | 9 | #### 1、登录功能: 10 | 11 | ![1](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\1.png) 12 | 13 | 不同用户通过输入账号、密码再点击按钮选择登录的方式,进入对应的用户界面。 14 | 15 | #### 2、注册功能 16 | 17 | ![2](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\2.png) 18 | 19 | 若选择注册功能,进入注册界面,用户输入新账号、新密码、学号、重新输入新密码,根据用户输入的信息,系统会判断用户名是否已经存在、两次输入的密码是否拥有、学号是否为特定格式,并弹出如下图的警告。 20 | 21 | ![3](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\3.png) 22 | 23 | #### 3、普通用户功能 24 | 25 | ##### A、首页 26 | 27 | ![4](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\4.png) 28 | 29 | ##### B、查询功能 30 | 31 | ![5](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\5.png) 32 | 33 | 点击菜单“查询”选项,进入查询界面,在输入框输入查找的书名,点击“查找”按钮,系统访问存储书名的books.txt文件,如果该书存在,则返回该书的所有信息(如下图),若不存在,则弹出警告。 34 | 35 | ![6](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\6.png) 36 | 37 | ##### C、借阅功能 38 | 39 | ![image-20200206170645945](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\7.png) 40 | 41 | 点击菜单“借阅”选项,进入借阅界面,输入书名、用户名及密码,点击“借书”按钮,系统访问存储书籍的文件(books.txt),如果文件中存在该书且该书的数量不为0,则弹出“借书成功”的信息,并将借书的用户、书名、时间写入book_lend.txt,文件books.txt执行数量减一的操作。若输入信息错误或书籍不存在,则弹出相应的信息 42 | 43 | ##### D、归还功能 44 | 45 | ![8](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\8.png) 46 | 47 | 点击菜单“归还”选项,进入还书界面,输入书名、用户名及密码,点击“还书”按钮,系统访问存储借书信息的文件(book_lend.txt),如果文件中存在对应的书名,用户名,则在book_lend.txt中删除该条信息,并且books.txt文件中图书数量加一,同时弹出有过信息的窗口(如下图),如果不存在该条信息或其他信息有误,则弹出相应信息。 48 | 49 | ![9](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\9.png) 50 | 51 | #### 4、管理员功能 52 | 53 | ##### A、录入书籍功能 54 | 55 | 管理员界面默认为录入界面,输入书籍的编号、书名、作者、数量及价格信息,点击”录入“按钮,系统判断文件books.txt中是否有该书,如果有该书信息,则对其数量加输入的对应数量,如果该书不存在,则新增一条该书的信息。 56 | 57 | ![10](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\10.png) 58 | 59 | ##### B、删除书籍功能 60 | 61 | 点击菜单“删除书籍”选项,进入删除书籍界面,输入书名及删除数量,点击“删除”按钮,系统判断books.txt中是否存在该书的信息,不存在则弹出警告,存在则判断该书数量是否比要删除的数量小,如比输入的数量小,则在文件books.txt中删除该书的信息,若比输入的数量大,则在该书信息后面的数量减掉相应输入的数量,弹出“删除成功”的信息。 62 | 63 | ![11](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\11.png) 64 | 65 | ##### C、统计书籍功能 66 | 67 | 点击菜单“删除书籍”选项,进入统计书籍界面,输入该书的书名,点击“统计”按钮,系统判断books.txt中是否有该书,如果没有弹出相应的提示,如果存在,则显示书的数量,借出数量,剩余数量。 68 | 69 | ![12](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\12.png) 70 | 71 | ##### D、管理员注册功能 72 | 73 | 点击菜单“管理员注册”选项,进入注册界面,输入新账号,新密码,重新输入新密码,点击“注册”按钮,系统判断该账号是否存在,重新输入密码是否一致,如出现错误,则返回相应的错误信息,否则,则显示注册成功。 74 | 75 | ![13](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\13.png) 76 | 77 | #### 注: 78 | 79 | ##### 1、books.txt文件的格式为: 80 | 81 | ![14](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\14.png) 82 | 83 | ##### 2、book_lend.txt文件的格式为: 84 | 85 | ![15](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\15.png) 86 | 87 | ##### 3、login_admir.txt文件的格式为: 88 | 89 | ![16](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\16.png) 90 | 91 | ##### 4、login_true.txt文件的格式为: 92 | 93 | ![17](E:\寒假Py学习\books\图书管理系统\python-books\运行界面截图\17.png) 94 | 95 | ##### 5、测试账号,密码 96 | 97 | 用户账号:gu、用户密码:1111 98 | 99 | 管理员账号:admir、管理员密码:123 100 | 101 | -------------------------------------------------------------------------------- /Register_Page.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from tkinter.messagebox import * 3 | 4 | class Register_Page(object): 5 | def __init__(self, master=None): 6 | self.root = master #定义内部变量root 7 | self.root.geometry('%dx%d' % (500, 420)) #设置窗口大小 8 | self.username = StringVar() 9 | self.studentId = StringVar() 10 | self.userpassword = StringVar() 11 | self.userpasswordre = StringVar() 12 | self.createPage() 13 | 14 | def createPage(self): 15 | self.page = Frame(self.root) 16 | self.page.pack() 17 | Label(self.page).grid(row = 0,stick = W,pady = 20) 18 | Label(self.page, text = '账 号:',font = ("楷体",15,"bold")).grid(row = 1,stick = W,pady = 15) 19 | Entry(self.page,textvariable=self.username,font = ("楷体",15,"bold")).grid(row = 1,column = 1,stick = E) 20 | Label(self.page, text = '学 号: ',font = ("楷体",15,"bold")).grid(row=2, stick=W, pady=15) 21 | Entry(self.page, textvariable=self.studentId,font = ("楷体",15,"bold")).grid(row=2, column=1, stick=E) 22 | Label(self.page, text = '密 码: ',font = ("楷体",15,"bold")).grid(row=3, stick=W, pady=15) 23 | Entry(self.page, textvariable=self.userpassword,font = ("楷体",15,"bold"),show = '*').grid(row=3, column=1, stick=E) 24 | Label(self.page, text = '重新输入密码: ',font = ("楷体",15,"bold")).grid(row=4, stick=W, pady=15) 25 | Entry(self.page, textvariable=self.userpasswordre,font = ("楷体",15,"bold"),show = '#').grid(row=4, column=1, stick=E) 26 | Button(self.page, text='注册',font = ("楷体",15,"bold"),command = self.register_admir).grid(row = 5,stick=W,column=1, pady=20,padx = 30) 27 | 28 | def register_admir(self): 29 | name = self.username.get() 30 | id = self.studentId.get() 31 | password = self.userpassword.get() 32 | passwordre = self.userpasswordre.get() 33 | id_str = id[4:6] 34 | f = open('login_true.txt') 35 | temp = 0 36 | for line in f: 37 | l = line.strip().split(',') 38 | if l[0] == name: 39 | showwarning(message='输入用户名已经存在') 40 | temp = 1 41 | break 42 | else: 43 | continue 44 | if temp != 1 and id_str == '41' and password ==passwordre: 45 | fw = open('login_true.txt','a') 46 | fw.write(name+','+password+'\n') 47 | fw.close() 48 | showinfo(message='注册成功!') 49 | elif temp != 1 and password != passwordre: 50 | showwarning(message='两次输入密码不一致') 51 | elif temp != 1 and id_str != '41': 52 | showwarning(message='学号输入有误!') 53 | -------------------------------------------------------------------------------- /User_MainPage.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from view_user import * 3 | 4 | class User_MainPage(object): 5 | def __init__(self,master = None): 6 | self.root = master #定义内部变量root 7 | self.root.geometry('%dx%d'%(510,475)) 8 | self.creatPage() 9 | 10 | def creatPage(self): 11 | self.firstPage = FirstFrame(self.root)#首页 12 | self.queryPage = QueryFrame(self.root) #查询界面 13 | self.borrowPage = BorrowFrame(self.root) #借阅界面 14 | self.returnPage = ReturnFrame(self.root) #归还界面 15 | self.firstPage.pack()#默认查询界面 16 | menubar = Menu(self.root) 17 | menubar.add_command(label = '首页',command = self.firstData) 18 | menubar.add_command(label = '查询',command = self.queryData) 19 | menubar.add_command(label = '借阅',command = self.borrowData) 20 | menubar.add_command(label = '归还',command = self.returnData) 21 | self.root['menu'] = menubar #设置菜单栏 22 | 23 | def firstData(self): 24 | self.firstPage.pack() 25 | self.queryPage.pack_forget() 26 | self.borrowPage.pack_forget() 27 | self.returnPage.pack_forget() 28 | 29 | def queryData(self): 30 | self.firstPage.pack_forget() 31 | self.queryPage.pack() 32 | self.borrowPage.pack_forget() 33 | self.returnPage.pack_forget() 34 | 35 | def borrowData(self): 36 | self.firstPage.pack_forget() 37 | self.queryPage.pack_forget() 38 | self.borrowPage.pack() 39 | self.returnPage.pack_forget() 40 | 41 | def returnData(self): 42 | self.firstPage.pack_forget() 43 | self.queryPage.pack_forget() 44 | self.borrowPage.pack_forget() 45 | self.returnPage.pack() -------------------------------------------------------------------------------- /book.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/book.gif -------------------------------------------------------------------------------- /book_lend.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/book_lend.txt -------------------------------------------------------------------------------- /books.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/books.txt -------------------------------------------------------------------------------- /login_admir.txt: -------------------------------------------------------------------------------- 1 | admir,123 2 | edg,456l,1 3 | l,1 4 | -------------------------------------------------------------------------------- /login_true.txt: -------------------------------------------------------------------------------- 1 | ld,233 2 | gu,1111 3 | ldd,000 4 | f,000 5 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from LoginPage import * 3 | 4 | root = Tk() 5 | root.title('图书管理系统') 6 | LoginPage(root) 7 | root.mainloop() 8 | -------------------------------------------------------------------------------- /view_admir.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from tkinter.messagebox import * 3 | 4 | class AddFrame(Frame): 5 | def __init__(self,master = None): 6 | Frame.__init__(self, master) 7 | self.root = master #定义内部变量root 8 | self.book_ID = StringVar() 9 | self.book_Name = StringVar() 10 | self.book_Writer = StringVar() 11 | self.book_Num = StringVar() 12 | self.book_Price = StringVar() 13 | self.createPage() 14 | 15 | def createPage(self): 16 | Label(self).grid(row = 0,stick = W,pady = 10) 17 | Label(self, text = '编 号:',font = ("楷体",15,"bold")).grid(row = 1,stick = W,pady = 15) 18 | Entry(self,textvariable=self.book_ID,font = ("楷体",15,"bold")).grid(row = 1,column = 1,stick = E) 19 | Label(self, text = '书 名: ',font = ("楷体",15,"bold")).grid(row=2, stick=W, pady=15) 20 | Entry(self, textvariable=self.book_Name,font = ("楷体",15,"bold")).grid(row=2, column=1, stick=E) 21 | Label(self, text = '作 者: ',font = ("楷体",15,"bold")).grid(row=3, stick=W, pady=15) 22 | Entry(self, textvariable=self.book_Writer,font = ("楷体",15,"bold")).grid(row=3, column=1, stick=E) 23 | Label(self, text = '数量 /本: ',font = ("楷体",15,"bold")).grid(row=4, stick=W, pady=15) 24 | Entry(self, textvariable=self.book_Num,font = ("楷体",15,"bold")).grid(row=4, column=1, stick=E) 25 | Label(self, text = '价格 /元: ',font = ("楷体",15,"bold")).grid(row=5, stick=W, pady=15) 26 | Entry(self, textvariable=self.book_Price,font = ("楷体",15,"bold")).grid(row=5, column=1, stick=E) 27 | Button(self, text='录 入',font = ("楷体",15,"bold"),command = self.add_books).grid(row = 6,stick=W,column=1, pady=20,padx = 40) 28 | 29 | def add_books(self): 30 | bookid = self.book_ID.get() 31 | bookname = self.book_Name.get() 32 | bookwriter = self.book_Writer.get() 33 | booknum = self.book_Num.get() 34 | bookprice = self.book_Price.get() 35 | f = open('books.txt') 36 | temp = 0 37 | for line in f: 38 | l = line.strip().split(',') 39 | if l[1] == bookname: 40 | temp = 1 41 | break 42 | else: 43 | continue 44 | if temp == 1:#该书已经存在,则修改其数量 45 | with open('books.txt','r') as fr: 46 | lines = fr.readlines() 47 | with open('books.txt','w') as fw: 48 | for line in lines: 49 | v = line.strip().split(',') 50 | if bookname == v[1]: 51 | num = int(booknum)+int(v[3]) 52 | num_str = str(num) 53 | fw.write(v[0]+','+v[1]+','+v[2]+','+num_str+','+v[4]+'\n') 54 | else: 55 | fw.write(line) 56 | fr.close() 57 | fw.close() 58 | else:#该书不存在,则添加录入信息 59 | fw = open('books.txt','a') 60 | fw.write(bookid+','+bookname+','+bookwriter+','+booknum+','+bookprice+'\n') 61 | fw.close() 62 | showinfo(message='录入成功!') 63 | 64 | class DeleteFrame(Frame): 65 | def __init__(self,master = None): 66 | Frame.__init__(self, master) 67 | self.root = master #定义内部变量root 68 | self.book_Name = StringVar() 69 | self.booknum_Delete = StringVar() 70 | self.createPage() 71 | 72 | def createPage(self): 73 | Label(self).grid(row = 0,stick = W,pady = 10) 74 | Label(self, text = '书 名:',font = ("楷体",15,"bold")).grid(row = 1,stick = W,pady = 15) 75 | Entry(self,textvariable=self.book_Name,font = ("楷体",15,"bold")).grid(row = 1,column = 1,stick = E) 76 | Label(self, text = '删除数量 /本: ',font = ("楷体",15,"bold")).grid(row=2, stick=W, pady=15) 77 | Entry(self, textvariable=self.booknum_Delete,font = ("楷体",15,"bold")).grid(row=2, column=1, stick=E) 78 | Button(self, text='删 除',font = ("楷体",15,"bold"),command = self.delete_books).grid(row = 6,stick=W,column=1, pady=20,padx = 30) 79 | 80 | def delete_books(self): 81 | bookname = self.book_Name.get() 82 | book_num_delete = self.booknum_Delete.get() 83 | f = open('books.txt') 84 | temp = 0 85 | for line in f: 86 | l = line.strip().split(',') 87 | if bookname == l[1] and int(l[3]) > int(book_num_delete): #要删除的书数量小于库存数量 88 | temp = 1 89 | break 90 | elif bookname == l[1] and int(l[3]) <= int(book_num_delete):#要删除的书数量大于等于库存数量 91 | temp = 2 92 | break 93 | else: 94 | continue 95 | if temp == 1: 96 | with open('books.txt','r') as fr: 97 | lines = fr.readlines() 98 | with open('books.txt','w') as fw: 99 | for line in lines: 100 | v = line.strip().split(',') 101 | if bookname == v[1]: 102 | num = int(l[3]) - int(book_num_delete) 103 | str_value = str(num) 104 | fw.write(l[0]+','+l[1]+','+l[2]+','+str_value+','+l[4]+ '\n') 105 | else: 106 | fw.write(line) 107 | fr.close() 108 | fw.close() 109 | showinfo(message='删除成功!') 110 | elif temp == 2: 111 | with open('books.txt','r') as fr: 112 | lines = fr.readlines() 113 | with open('books.txt','w') as fw: 114 | for line in lines: 115 | v = line.strip().split(',') 116 | if bookname == v[1]: 117 | continue 118 | fw.write(line) 119 | fr.close() 120 | fw.close() 121 | showinfo(message='删除成功!') 122 | else: 123 | showwarning(title = 'Waring',message = '您输入的图书书名有误,请重新输入!') 124 | 125 | class CountFrame(Frame): 126 | def __init__(self,master = None): 127 | Frame.__init__(self, master) 128 | self.root = master #定义内部变量root 129 | self.book_Name = StringVar() 130 | self.createPage() 131 | 132 | def createPage(self): 133 | Label(self).grid(row = 0,stick = W,pady = 40) 134 | Label(self, text = '书 名:',font = ("楷体",15,"bold")).grid(row = 1,stick = W,pady = 20) 135 | Entry(self,textvariable=self.book_Name,font = ("楷体",15,"bold")).grid(row = 1,column = 1,stick = E) 136 | Button(self, text='统 计',font = ("楷体",15,"bold"),command = self.count_books).grid(row = 6,stick=W,column=1, pady=20,padx = 30) 137 | 138 | def count_books(self): 139 | bookname = self.book_Name.get() 140 | f = open('books.txt') 141 | for line in f: 142 | l = line.strip().split(',') 143 | if l[1] == bookname: 144 | count_remain = int(l[3]) 145 | break 146 | else: 147 | continue 148 | f1 = open('book_lend.txt') 149 | count_lend = 0 150 | for line1 in f1: 151 | l1 = line1.strip().split(',') 152 | if l1[0] == bookname: 153 | count_lend += 1 #!Python 中是没有 ++ 和 -- 的 154 | else: 155 | continue 156 | count_all = count_remain + count_lend 157 | countWin = Tk() 158 | countWin.title('统计信息') 159 | countWin.geometry('500x400') 160 | Label(countWin).grid(row = 0,stick = W,pady = 20) 161 | Label(countWin, text = '书 名: '+bookname,font = ("楷体",15,"bold")).grid(row=1, stick=W, pady=10,padx = 90) 162 | Label(countWin, text = '总 数: '+str(count_all),font = ("楷体",15,"bold")).grid(row = 2,stick = W,pady = 15,padx = 90) 163 | Label(countWin, text = '借出数量: '+str(count_lend)+'本',font = ("楷体",15,"bold")).grid(row = 3,stick = W,pady = 15,padx = 90) 164 | Label(countWin, text = '剩余数量: '+str(count_remain)+'本',font = ("楷体",15,"bold")).grid(row = 4,stick = W,pady = 15,padx = 90) 165 | 166 | class Register_admirFrame(Frame): 167 | def __init__(self,master = None): 168 | Frame.__init__(self, master) 169 | self.root = master #定义内部变量root 170 | self.admir_Name = StringVar() 171 | self.admir_Password = StringVar() 172 | self.admir_Password_repetion = StringVar() 173 | self.createPage() 174 | 175 | def createPage(self): 176 | Label(self).grid(row = 0,stick = W,pady = 20) 177 | Label(self, text = '账 号:',font = ("楷体",15,"bold")).grid(row = 1,stick = W,pady = 15) 178 | Entry(self,textvariable=self.admir_Name,font = ("楷体",15,"bold")).grid(row = 1,column = 1,stick = E) 179 | Label(self, text = '密 码: ',font = ("楷体",15,"bold")).grid(row=2, stick=W, pady=15) 180 | Entry(self, textvariable=self.admir_Password,font = ("楷体",15,"bold"),show = '*').grid(row=2, column=1, stick=E) 181 | Label(self, text = '重新输入密码: ',font = ("楷体",15,"bold")).grid(row=3, stick=W, pady=15) 182 | Entry(self, textvariable=self.admir_Password_repetion,font = ("楷体",15,"bold"),show = '#').grid(row=3, column=1, stick=E) 183 | Button(self, text='注册',font = ("楷体",15,"bold"),command = self.register_admir).grid(row = 4,stick=W,column=1, pady=20,padx = 30) 184 | 185 | def register_admir(self): 186 | admirname = self.admir_Name.get() 187 | admirpassword = self.admir_Password.get() 188 | admirpasstwo = self.admir_Password_repetion.get() 189 | f = open('login_admir.txt') 190 | temp = 0 191 | for line in f: 192 | l = line.strip().split(',') 193 | if l[0] == admirname: 194 | showwarning(message='输入用户名已经存在') 195 | temp = 1 196 | break 197 | else: 198 | continue 199 | if temp != 1 and admirpassword == admirpasstwo: 200 | fw = open('login_admir.txt','a') 201 | fw.write(admirname+','+admirpassword+'\n') 202 | fw.close() 203 | showinfo(message='注册成功!') 204 | elif temp != 1 and admirpassword != admirpasstwo: 205 | showwarning(message='两次输入密码不一致') 206 | -------------------------------------------------------------------------------- /view_user.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | from tkinter.messagebox import * 3 | import datetime 4 | 5 | class FirstFrame(Frame):# 继承Frame 6 | def __init__(self,master=None): 7 | Frame.__init__(self,master) 8 | self.root = master 9 | self.createPage() 10 | 11 | def createPage(self): 12 | self.photo = PhotoImage(file = "welcome.gif")#tkinter默认只显示gif图片 13 | Label(self,image = self.photo).grid(row=0, column=1, stick=W, padx=3) 14 | 15 | class QueryFrame(Frame): 16 | def __init__(self,master=None): 17 | Frame.__init__(self,master) 18 | self.root = master 19 | self.book_Name = StringVar() 20 | self.createPage() 21 | 22 | def createPage(self): 23 | Label(self).grid(row=0, stick=W, pady=10) 24 | Label(self, text = '书 名: ',font = ("宋体",14,"bold")).grid(row=1, stick=W, pady=10) 25 | Entry(self, textvariable = self.book_Name,font = ("宋体",14,"bold")).grid(row=1, column=1, stick=E) 26 | Button(self,text = '查 找',font = ("宋体",14,"bold"),command = self.find_book).grid(row = 2,stick=W,column=1, pady=20,padx = 50) 27 | 28 | def find_book(self): 29 | bookname = self.book_Name.get() 30 | f2 = open('books.txt') 31 | for line2 in f2: 32 | str1 = line2.strip() 33 | List = str1.split(',') 34 | bookid_txt = List[0] 35 | bookname_txt = List[1] 36 | bookwriter_txt = List[2] 37 | booknum_txt = List[3] 38 | bookprice_txt = List[4] 39 | if bookname_txt == bookname: 40 | temp = 1 41 | break 42 | else: 43 | temp = 2 44 | if temp == 1: 45 | bookWindow = Tk() 46 | bookWindow.title('该图书信息') 47 | bookWindow.geometry('500x300') 48 | Label(bookWindow).grid(row=0, stick=W, pady=8) 49 | Label(bookWindow,text = '编 号:'+bookid_txt,font = ("宋体",14,"bold")).grid(row=1, stick=W, pady=10,padx = 100) 50 | Label(bookWindow,text = '书 名:'+bookname_txt,font = ("宋体",14,"bold")).grid(row=2, stick=W, pady=10,padx = 100) 51 | Label(bookWindow,text = '作 者:'+bookwriter_txt,font = ("宋体",14,"bold")).grid(row=3, stick=W, pady=10,padx = 100) 52 | Label(bookWindow,text = '数 量:'+booknum_txt+' 本',font = ("宋体",14,"bold")).grid(row=4, stick=W, pady=10,padx = 100) 53 | Label(bookWindow,text = '价 格:'+bookprice_txt+' 元',font = ("宋体",14,"bold")).grid(row=5, stick=W, pady=10,padx = 100) 54 | bookWindow.mainloop() 55 | elif temp == 2: 56 | showinfo(message=("您查询的书籍不存在!")) 57 | 58 | class BorrowFrame(Frame): 59 | def __init__(self,master=None): 60 | Frame.__init__(self,master) 61 | self.root = master 62 | self.book_Name = StringVar() 63 | self.user_Name = StringVar() 64 | self.user_Password = StringVar() 65 | self.createPage() 66 | 67 | def createPage(self): 68 | Label(self).grid(row=0, stick=W, pady=10) 69 | Label(self, text = '书 名: ',font = ("宋体",14,"bold")).grid(row=1, stick=W, pady=20) 70 | Entry(self, textvariable = self.book_Name,font = ("宋体",14,"bold")).grid(row=1, column=1, stick=E) 71 | Label(self, text = '用户名: ',font = ("宋体",14,"bold")).grid(row=2, stick=W, pady=20) 72 | Entry(self, textvariable = self.user_Name,font = ("宋体",14,"bold")).grid(row=2, column=1, stick=E) 73 | Label(self, text = '密 码: ',font = ("宋体",14,"bold")).grid(row=3, stick=W, pady=20) 74 | Entry(self, textvariable = self.user_Password, show='*',font = ("宋体",14,"bold")).grid(row=3, column=1, stick=E) 75 | Button(self,text = '借 书',font = ("宋体",14,"bold"),command = self.borrow_book).grid(row = 4,stick=W,column=1, pady=20,padx = 50) 76 | 77 | def borrow_book(self): 78 | f = open('books.txt') 79 | f1 = open('login_true.txt') 80 | bookname = self.book_Name.get() 81 | username = self.user_Name.get() 82 | userpassword =self.user_Password.get() 83 | for line in f1: 84 | str1 = line.strip() 85 | List = str1.split(",") 86 | username_txt = List[0] 87 | userpassword_txt = List[1] 88 | if username == username_txt and userpassword == userpassword_txt: 89 | temp = 1 90 | break 91 | else: 92 | temp = 2 93 | if temp == 1: 94 | for line2 in f: 95 | str1 = line2.strip() 96 | List1 = str1.split(",") 97 | bookname_txt = List1[1] 98 | booknum_txt = List1[3] 99 | if bookname == bookname_txt: 100 | if int(booknum_txt) > 0: 101 | temp1 = 1 102 | else: 103 | temp1 =2 104 | break 105 | else: 106 | temp1 = 0 107 | if temp1 == 0: 108 | showwarning(title = 'Error',message = '该书不存在!') 109 | elif temp1 == 2: 110 | showwarning(title = 'Error',message = '该书已被借完!') 111 | else: 112 | with open('books.txt', 'r') as fr: 113 | lines=fr.readlines() 114 | with open('books.txt', 'w') as fw: 115 | for line in lines: 116 | l = line.strip().split(',') 117 | if bookname == l[1]: 118 | num=int(l[3])-1 119 | str_value = str(num) 120 | fw.write(l[0]+','+l[1]+','+l[2]+','+str_value+','+l[4]+ '\n') 121 | else: 122 | fw.write(line) 123 | fr.close() 124 | fw.close() 125 | borrow_date = datetime.datetime.now().strftime('%Y-%m-%d') 126 | fw1 = open('book_lend.txt','a') 127 | fw1.write(bookname+','+username+','+borrow_date+'\n') 128 | showinfo(title = 'Success',message = '借书成功!') 129 | else: 130 | showwarning(title = 'Error', message = '账号或密码错误,重新登录!') 131 | 132 | 133 | class ReturnFrame(Frame): 134 | def __init__(self,master=None): 135 | Frame.__init__(self,master) 136 | self.root = master 137 | self.book_Name_re = StringVar() 138 | self.user_Name_re = StringVar() 139 | self.user_Password_re = StringVar() 140 | self.createPage() 141 | 142 | def createPage(self): 143 | Label(self).grid(row=0, stick=W, pady=10) 144 | Label(self, text = '书 名: ',font = ("宋体",14,"bold")).grid(row=1, stick=W, pady=20) 145 | Entry(self, textvariable = self.book_Name_re,font = ("宋体",14,"bold")).grid(row=1, column=1, stick=E) 146 | Label(self, text = '用户名: ',font = ("宋体",14,"bold")).grid(row=2, stick=W, pady=20) 147 | Entry(self, textvariable = self.user_Name_re,font = ("宋体",14,"bold")).grid(row=2, column=1, stick=E) 148 | Label(self, text = '密 码: ',font = ("宋体",14,"bold")).grid(row=3, stick=W, pady=20) 149 | Entry(self, textvariable = self.user_Password_re, show='*',font = ("宋体",14,"bold")).grid(row=3, column=1, stick=E) 150 | Button(self,text = '还 书',font = ("宋体",14,"bold"),command = self.return_book).grid(row = 4,stick=W,column=1, pady=20,padx = 50) 151 | 152 | def return_book(self): 153 | f = open('books.txt') 154 | f1 = open('login_true.txt') 155 | bookname = self.book_Name_re.get() 156 | username = self.user_Name_re.get() 157 | userpassword =self.user_Password_re.get() 158 | for line in f1: 159 | str1 = line.strip() 160 | List = str1.split(",") 161 | username_txt = List[0] 162 | userpassword_txt = List[1] 163 | if username == username_txt and userpassword == userpassword_txt: 164 | temp = 1 165 | break 166 | else: 167 | temp = 2 168 | if temp == 1: 169 | for line2 in f: 170 | List1 = line2.strip().split(",") 171 | bookname_txt = List1[1] 172 | if bookname == bookname_txt:#若该书存在temp1置为1 173 | temp1 = 1 174 | break 175 | else: 176 | temp1 = 0 177 | if temp1 == 0: 178 | showwarning(title = 'Waring',message = '您输入的图书书名有误,请重新输入!') 179 | elif temp1 == 1: 180 | with open('books.txt','r') as fr: 181 | lines = fr.readlines() 182 | with open('books.txt','w') as fw: 183 | for line in lines: 184 | l = line.strip().split(',') 185 | if bookname == l[1]: 186 | num = int(l[3])+1 187 | str_value = str(num) 188 | fw.write(l[0]+','+l[1]+','+l[2]+','+str_value+','+l[4]+ '\n') 189 | else: 190 | fw.write(line) 191 | fr.close() 192 | fw.close() 193 | sign = 0 194 | with open ('book_lend.txt','r') as fr1: 195 | lines1 = fr1.readlines() 196 | with open ('book_lend.txt','w') as fw1: 197 | for line1 in lines1: 198 | v = line1.strip().split(',') 199 | if v[0] == bookname and v[1] == username and sign == 0: 200 | list2 = v[2].strip().split('-') 201 | date1 = datetime.date(year=int(list2[0]),month=int(list2[1]),day=int(list2[2])) 202 | back_date = datetime.datetime.now().strftime('%Y-%m-%d') 203 | list3 = back_date.strip().split('-') 204 | date2 = datetime.date(year=int(list3[0]),month=int(list3[1]),day=int(list3[2])) 205 | date = (date2-date1).days+1 206 | sign = 1 #设置sign保证只删除1条数据 207 | borrowWin = Tk() 208 | borrowWin.title('借书信息') 209 | borrowWin.geometry('500x300') 210 | Label(borrowWin).grid(row=0, stick=W, pady=8) 211 | Label(borrowWin,text = '书 名:'+bookname,font = ("宋体",14,"bold")).grid(row=1, stick=W, pady=10,padx = 100) 212 | Label(borrowWin,text = '用 户:'+username,font = ("宋体",14,"bold")).grid(row=2, stick=W, pady=10,padx = 100) 213 | Label(borrowWin,text = '借出日期:'+list2[0]+'年'+list2[1]+'月'+list2[2]+'日',font = ("宋体",14,"bold")).grid(row=3, stick=W, pady=10,padx = 100) 214 | Label(borrowWin,text = '借出天数:'+str(date)+' 天',font = ("宋体",14,"bold")).grid(row=4, stick=W, pady=10,padx = 100) 215 | continue 216 | fw1.write(line1) 217 | fr1.close() 218 | fw1.close() 219 | showinfo(title = 'Success',message = '还书成功!') 220 | else: 221 | showwarning(title = 'Error', message = '账号或密码错误,重新登录!') -------------------------------------------------------------------------------- /welcome.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/welcome.gif -------------------------------------------------------------------------------- /运行界面截图/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/1.png -------------------------------------------------------------------------------- /运行界面截图/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/10.png -------------------------------------------------------------------------------- /运行界面截图/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/11.png -------------------------------------------------------------------------------- /运行界面截图/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/12.png -------------------------------------------------------------------------------- /运行界面截图/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/13.png -------------------------------------------------------------------------------- /运行界面截图/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/14.png -------------------------------------------------------------------------------- /运行界面截图/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/15.png -------------------------------------------------------------------------------- /运行界面截图/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/16.png -------------------------------------------------------------------------------- /运行界面截图/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/17.png -------------------------------------------------------------------------------- /运行界面截图/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/2.png -------------------------------------------------------------------------------- /运行界面截图/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/3.png -------------------------------------------------------------------------------- /运行界面截图/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/4.png -------------------------------------------------------------------------------- /运行界面截图/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/5.png -------------------------------------------------------------------------------- /运行界面截图/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/6.png -------------------------------------------------------------------------------- /运行界面截图/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/7.png -------------------------------------------------------------------------------- /运行界面截图/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/8.png -------------------------------------------------------------------------------- /运行界面截图/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/best-ld/python-books/f8e65292ded402e427ed5c79428616440995fa48/运行界面截图/9.png --------------------------------------------------------------------------------