Python小论文-图书管理系统+Python+tkinter+sqlite3+PersistentDB线程池管理

这篇具有很好参考价值的文章主要介绍了Python小论文-图书管理系统+Python+tkinter+sqlite3+PersistentDB线程池管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

该系统主要通过tkinter库实现图书管理系统,包含对SQLite3数据库的增删改查的知识点。主要功能有:登录、注册、图书查询、借书、还书、图书录入、图书删除、图书统计、管理员新增、数据库查询等模块。

Python小论文-图书管理系统+Python+tkinter+sqlite3+PersistentDB资源池

Python桌面应用Demo

Python程序设计课后作业参考

Tkinter Treeview控件使用

Tkinter Frame控件嵌套使用(实现同TK页面内Frame切换)

Tk图形化界面

二、系统实现功能介绍及使用方法

登录功能:

功能说明:普通用户或管理员用户输入账号、密码再点击登录按钮进行登录,系统会根据用户的角色属性不同进入对应的界面,并带入登录用户的信息到下个页面;点击注册可跳转至注册页面,注册页面中点击返回登录按钮可跳转回登录界面。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 界面绘制方法代码实现:

     def create_page(self):
        self.page = Frame(self.root)  # 创建Frame
        self.register_page = Register_Page(self.root)
        self.register_page.pack_forget()
        self.page.pack()
        Label(self.page).grid(row=0, stick=W)
        Label(self.page, text='账号').grid(row=1, stick=W, pady=10)
        Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
        Label(self.page, text='密码').grid(row=2, stick=W, pady=10)
        Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
        Button(self.page, text='登录', command=self.login_check).grid(row=3, stick=W, pady=5)
        Button(self.page, text='注册', command=self.to_register).grid(row=3, stick=E, column=1)
        Button(self.register_page, text='返回登录', command=self.to_login).grid(row=6, stick=E, column=1)
  1. 登录方法代码实现:

     def login_check(self):
        user_name = str(self.username.get()).strip()
        password = str(self.password.get()).strip()
        if user_name and password:
            password_md5 = utils.get_md5(password)
            user_info = data_manipulation.find_user_info_by_user_name_and_password(user_name, password_md5)
            if user_info:
                role = user_info.get('role')
                # role 等于0为普通用户
                if role == 0:
                    self.page.destroy()
                    User_MainPage(self.root, user_info)
                # role 等于1为管理员账号
                elif role == 1:
                    self.page.destroy()
                    Admin_MainPage(self.root, user_info)
            else:
                showwarning(title='登录失败', message='账号或密码错误!')
        else:
            showwarning(title='登录失败', message='账号或密码未输入!')

注册功能

功能说明:若选择注册功能,进入注册界面,用户输入账号、学号、姓名、密码、确认密码,根据用户输入的信息,系统会判断所有输入框是否已经输入信息,还会判断用户名或学号是否已经存在以及两次输入的密码是否相同,异常则弹窗提示,密码通过MD5加密后存储到数据库中,数据库中密码不明文展示,防止密码泄露。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 注册界面绘制代码实现:

     def create_page(self):
        Label(self, text='账       号:').grid(row=1, stick=W, pady=15)
        Entry(self, textvariable=self.username).grid(row=1, column=1, stick=E)
        Label(self, text='学       号: ').grid(row=2, stick=W, pady=15)
        Entry(self, textvariable=self.user_id).grid(row=2, column=1, stick=E)
        Label(self, text='姓       名: ').grid(row=3, stick=W, pady=15)
        Entry(self, textvariable=self.nickname).grid(row=3, column=1, stick=E)
        Label(self, text='密       码: ').grid(row=4, stick=W, pady=15)
        Entry(self, textvariable=self.user_password, show='*').grid(row=4, column=1, stick=E)
        Label(self, text='重新输入密码: ').grid(row=5, stick=W, pady=15)
        Entry(self, textvariable=self.user_password_re, show='*').grid(row=5, column=1, stick=E)
        Button(self, text='注册', command=self.register_admin).grid(row=6, stick=W, column=0)
  1. 注册方法代码实现:

     def register_admin(self):
        user_name = str(self.username.get()).strip()
        nickname = str(self.nickname.get()).strip()
        user_id = str(self.user_id.get()).strip()
        password = str(self.user_password.get()).strip()
        password_re = str(self.user_password_re.get()).strip()
        print(user_name, nickname, user_id, password, password_re)
        if user_id and user_name and nickname and password and password_re:
            if password == password_re:
                user_info = data_manipulation.find_user_info_by_user_id_or_user_name(user_id, user_name)
                if user_info:
                    showwarning(message='输入的用户名或学号已经存在!')
                else:
                    res = data_manipulation.insert_user_info(user_id, user_name, utils.get_md5(password), nickname)
                    if res:
                        showinfo(message='注册成功!')
                    else:
                        showwarning(message='注册失败,请稍后重试!')
            else:
                showwarning(message='两次输入密码不一致!')
        else:
            showwarning(message='注册信息输入有误!')

普通用户功能:借书记录页面

功能说明:普通用户登录后默认进入借书记录界面,使用Treeview展示当前登录用户的借书记录(不包含已归还记录),用户可以点击刷新按钮刷新借书记录,未选中记录时点击还书按钮,则弹窗提示用户需要选中借书记录。选中借书记录后点击还书,更新图书记录表对应书籍可借数量,已经更新借书记录表中记录的归还时间、借书状态、借书天数,只要有一条数据更新失败则提示用户还书失败,数据库操作不进行提交;当数据库均更新成功时弹出还书成功页面,显示归还书名、用户名、姓名、借出日期、归还日期、借出天数。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 界面绘制代码实现:

    def create_page(self):
        self.page = Frame(self.root)  # 创建Frame
        self.queryPage = QueryFrame(self.root, self.user_info)  # 查询界面
        self.borrowPage = BorrowFrame(self.root, self.user_info)  # 借阅界面
        menubar = Menu(self.root)
        menubar.add_command(label='借书记录', command=self.return_data)
        menubar.add_command(label='查询图书', command=self.query_data)
        menubar.add_command(label='借阅图书', command=self.borrow_data)
        x_scroll = Scrollbar(self.page, orient=HORIZONTAL)
        y_scroll = Scrollbar(self.page, orient=VERTICAL)
        self.root['menu'] = menubar  # 设置菜单栏
        columns = ['记录ID', '书名', '图书编号', '借出时间']
        self.table = Treeview(master=self.page,  # 父容器
                              height=10,  # 表格显示的行数,height行
                              columns=columns,  # 显示的列
                              show='headings',  # 隐藏首列
                              xscrollcommand=x_scroll.set,  # x轴滚动条
                              yscrollcommand=y_scroll.set,  # y轴滚动条
                              )
        for column in columns:
            self.table.heading(column=column, text=column, anchor=CENTER, )  # 定义表头
            self.table.column(column=column, width=150, minwidth=100, anchor=CENTER, )  # 定义列
        x_scroll.config(command=self.table.xview)
        x_scroll.pack(side=BOTTOM, fill=X)
        y_scroll.config(command=self.table.yview)
        y_scroll.pack(side=RIGHT, fill=Y)
        self.table.pack(fill=BOTH, expand=True)
        self.page.pack()
        self.btn_frame = Frame()
        self.btn_frame.pack()
        Button(self.btn_frame, text='刷  新', font=("宋体", 14, "bold"), command=self.update_table_data).grid(row=1,stick=W,column=1,pady=20,padx=50)
        Button(self.btn_frame, text='还  书', font=("宋体", 14, "bold"), command=self.return_book).grid(row=1, stick=E,column=2,pady=20, padx=50)
  1. 借书记录表格数据更新方法代码实现:

    def delete_table_item(self):
        obj = self.table.get_children()  # 获取所有对象
        for o in obj:
            self.table.delete(o)  # 删除对象
 
    def update_table_data(self):
        self.delete_table_item()
        borrow_list = data_manipulation.find_book_borrowing_record_by_user_id(user_id=self.user_info.get('user_id'))
        if borrow_list:
            borrow_show_list = []
            for borrow_info in borrow_list:
                borrow = [borrow_info.get('id'), borrow_info.get('book_name'), borrow_info.get('book_id'),
                          borrow_info.get('borrowing_time')]
                borrow_show_list.append(borrow)
            for index, data in enumerate(borrow_show_list):
                self.table.insert('', END, values=data)  # 添加数据到末尾
  1. 归还图书方法代码实现:

    def return_book(self):
        cur_item = self.table.focus()
        select_info = self.table.item(cur_item)
        print(select_info)
        if len(select_info.get('values')) == 0:
            showwarning(title='错误', message='请选中需要归还书籍的借书记录!')
        else:
            book_id = select_info.get('values')[2]
            record_id = select_info.get('values')[0]
            book_name = select_info.get('values')[1]
            borrowing_time = utils.get_str_to_timestamp_ten(select_info.get('values')[3])
            user_name = self.user_info.get('user_name')
            nickname = self.user_info.get('nickname')
            if book_id and record_id:
                return_time = utils.get_format_time_by_ten()
                lending_days = int((int(time.time()) - borrowing_time) / 86400)
                if lending_days == 0:
                    lending_days = 1
                return_res = data_manipulation.update_borrowing_record(book_id, record_id, return_time, 3, lending_days)
                if return_res:
                    self.update_table_data()
                    borrow_win = Tk()
                    borrow_win.title('归还成功')
                    borrow_win.geometry('500x300')
                    Label(borrow_win, text='书    名:' + book_name, font=("宋体", 14, "bold")).grid(row=1, stick=W, pady=10, padx=100)
                    Label(borrow_win, text='用    户:' + user_name, font=("宋体", 14, "bold")).grid(row=2, stick=W, pady=10, padx=100)
                    Label(borrow_win, text='姓    名:' + nickname, font=("宋体", 14, "bold")).grid(row=3, stick=W, pady=10, padx=100)
                    Label(borrow_win, text='借出日期:' + utils.get_format_time_by_ten(borrowing_time),
                          font=("宋体", 14, "bold")).grid(row=4, stick=W, pady=10, padx=100)
                    Label(borrow_win, text='归还日期:' + return_time,
                          font=("宋体", 14, "bold")).grid(row=5, stick=W, pady=10, padx=100)
                    Label(borrow_win, text='借出天数:' + str(lending_days) + '  天', font=("宋体", 14, "bold")).grid(row=6, stick=W, pady=10, padx=100)
                else:
                    showwarning(title='错误', message='还书失败,请稍后重试!')
            else:
                showwarning(title='错误', message='请确认还书信息是否正确!')

普通用户功能:图书查询功能

功能说明:点击菜单“查询图书”选项,进入查询界面,在输入框输入查找的书名,点击“查找”按钮,系统访问存储图书的books数据库表,对书名进行模糊查询,如果该书存在,则返回该书的所有信息,弹出新的弹窗,使用表格展示图书列表(如下图),若不存在,则弹出警告。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 查找方法代码实现:

     def find_book(self):
        book_name = str(self.book_name.get()).strip()
        if book_name:
            book_info_list = data_manipulation.find_book_info_by_book_name(book_name)
            if book_info_list:
                book_window = Tk()
                book_window.title('该图书信息')
                book_window.geometry('500x400')
                x_scroll = Scrollbar(book_window, orient=HORIZONTAL)
                y_scroll = Scrollbar(book_window, orient=VERTICAL)
                columns = ['编号', '书名', '作者', '数量', '可借数量', '价格/元']
                table = Treeview(
                    master=book_window,  # 父容器
                    height=10,  # 表格显示的行数,height行
                    columns=columns,  # 显示的列
                    show='headings',  # 隐藏首列
                    xscrollcommand=x_scroll.set,  # x轴滚动条
                    yscrollcommand=y_scroll.set,  # y轴滚动条
                )
                for column in columns:
                    table.heading(column=column, text=column, anchor=CENTER,
                                  command=lambda name=column: showinfo('', '{}描述信息~~~'.format(name)))  # 定义表头
                    table.column(column=column, width=100, minwidth=100, anchor=CENTER, )  # 定义列
                x_scroll.config(command=table.xview)
                x_scroll.pack(side=BOTTOM, fill=X)
                y_scroll.config(command=table.yview)
                y_scroll.pack(side=RIGHT, fill=Y)
                table.pack(fill=BOTH, expand=True)
                for index, data in enumerate(book_info_list):
                    table.insert('', END, values=data)  # 添加数据到末尾
                book_window.mainloop()
            else:
                showwarning(message="您查询的书籍不存在!")
        else:
            showwarning(message="请输入您要查询的书名!")

普通用户功能:借阅功能

功能说明:点击菜单“借阅图书”菜单选项,进入借阅界面,输入图书编号,点击“借书”按钮,系统访问存储书籍的books表,如果表中存在该书且该书的可借数量不为0,则弹出“借书成功”的信息,并将借书的信息写入借书记录表borrowing_record中,books表中对应书籍可借数量执行数量减一的操作。若输入信息错误或书籍不存在,则弹出相应的错误信息。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 借书方法代码实现:

     def borrow_book(self):
        book_id = str(self.book_id.get()).strip()
        user_id = self.user_info.get('user_id')
        if book_id and user_id:
            book_info = data_manipulation.find_book_info_by_book_id(book_id)
            if book_info:
                residual_quantity = book_info[4]
                if residual_quantity > 0:
                    borrow_res = data_manipulation.insert_borrowing_record(book_id, user_id)
                    if borrow_res:
                        showinfo(title='成功', message='借书成功!')
                    else:
                        showwarning(title='错误', message='借书失败,请稍后重试!')
                else:
                    showwarning(title='错误', message='该书已被借完!')
            else:
                showwarning(title='错误', message='该书不存在!')
        else:
            showwarning(title='错误', message='请输入图书编号后重试!')

普通用户功能:菜单功能

  1. 菜单栏绘制代码及切换代码实现:

self.page = Frame(self.root)  # 创建Frame
        self.queryPage = QueryFrame(self.root, self.user_info)  # 查询界面
        self.borrowPage = BorrowFrame(self.root, self.user_info)  # 借阅界面
        menubar = Menu(self.root)
        menubar.add_command(label='借书记录', command=self.return_data)
        menubar.add_command(label='查询图书', command=self.query_data)
        menubar.add_command(label='借阅图书', command=self.borrow_data)
    def query_data(self):
        self.queryPage.pack()
        self.borrowPage.pack_forget()
        self.page.pack_forget()
        self.btn_frame.pack_forget()
 
    def borrow_data(self):
        self.queryPage.pack_forget()
        self.borrowPage.pack()
        self.page.pack_forget()
        self.btn_frame.pack_forget()
 
    def return_data(self):
        self.queryPage.pack_forget()
        self.borrowPage.pack_forget()
        self.page.pack()
        self.btn_frame.pack()
        self.update_table_data()

管理员功能:录入书籍功能

功能说明:管理员界面默认为录入界面,输入书籍的书名、作者、数量及价格信息,点击”录入“按钮,系统判断数据库books表中是否有该书,如果有该书信息,则对其数量加上输入的对应数量,如果该书不存在,则新增一条该书的信息。信息填写不完全则弹窗提示。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 图书录入代码实现:

    def add_books(self):
        book_name = str(self.book_name.get()).strip()
        book_author = str(self.book_author.get()).strip()
        book_total = str(self.book_total.get()).strip()
        book_price = str(self.book_price.get()).strip()
        if book_name and book_author and book_total and book_price:
            book_info = data_manipulation.find_book_info_by_book_name_and_author(book_name, book_author)
            if book_info:
                book_id = book_info[0]
                update_book_info_res = data_manipulation.update_book_info(book_id, book_total)
                if update_book_info_res:
                    showinfo(tatle='录入成功', message='图书数量已增加成功!')
                else:
                    showwarning(title='录入失败', message='图书数量增加失败!')
            else:
                insert_book_res = data_manipulation.insert_book_info(book_name, book_author, book_total, book_price)
                if insert_book_res:
                    showinfo(title='录入成功', message='图书信息录入成功!')
                else:
                    showwarning(title='录入失败', message='图书信息录入失败!')
        else:
            showwarning(title='录入失败', message='请输入所有图书信息后重试!')

管理员功能:删除书籍功能

功能说明:点击菜单“删除书籍”选项,进入删除书籍界面,输入图书编号及删除数量,点击“删除”按钮,系统判断books表中是否存在该书的信息,不存在则弹出警告,存在则判断该书可借数量是否比要删除的数量大,如比输入的数量大,则在数据库books表中减少该书的总数及可借数量信息,弹出“删除成功”的信息。若比输入的数量小,则提示删除失败。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 删除图书功能代码实现:

     def delete_books(self, event):
        cur_item = self.table.focus()
        select_info = self.table.item(cur_item)
        print(select_info)
        if len(select_info.get('values')) == 0:
            showwarning(title='错误', message='请选中需要查看统计信息的书籍!')
        else:
            book_id = select_info.get('values')[0]
            result = simpledialog.askinteger(title='删除书籍', prompt='请输入您要删除的数量:', initialvalue='0')
            book_delete_num = result
            if book_delete_num is not None:
                if book_delete_num != 0:
                    book_info = data_manipulation.find_book_info_by_book_id(book_id)
                    if book_info:
                        residual_quantity = book_info[4]
                        if int(residual_quantity) >= int(book_delete_num):
                            delete_book_res = data_manipulation.delete_book_num(book_id, book_delete_num)
                            if delete_book_res:
                                self.find_book()
                                showinfo(message='图书数量删除成功!')
                            else:
                                showwarning(message='图书数量删除失败!')
                        else:
                            showwarning(message='需要删除的图书数量大于可借数量,删除失败!')
                    else:
                        showwarning(message='未查询到图书信息,请确认图书编号输入正确!')
                else:
                    showwarning(message='请输入需要删除的图书数量!')

管理员功能:统计书籍功能

功能说明:点击菜单“统计书籍”选项,进入统计书籍界面,输入该书的图书编号,点击“统计”按钮,系统判断数据库books表中是否有该书,如果没有弹出相应的提示,如果存在,则显示书的书名、总数、借出数量,剩余数量。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 统计书籍代码实现:

     def count_books(self, *args):
        cur_item = self.table.focus()
        select_info = self.table.item(cur_item)
        print(select_info)
        if len(select_info.get('values')) == 0:
            showwarning(title='错误', message='请选中需要查看统计信息的书籍!')
        else:
            book_id = select_info.get('values')[0]
            book_info = data_manipulation.find_book_info_by_book_id(book_id)
            if book_info:
                # id, book_name, author, total, residual_quantity, price, gmt_created
                book_name = book_info[1]
                book_total = book_info[3]
                residual_quantity = book_info[4]
                quantity_lent = book_total - residual_quantity
                if self.count_win:
                    self.count_win.destroy()
                self.count_win = Tk()
                self.count_win.title('统计信息')
                self.count_win.geometry('300x300')
                Label(self.count_win).grid(row=0, stick=W, pady=5)
                Label(self.count_win, text='书     名:    ' + book_name).grid(row=1, stick=W, pady=10, padx=90)
                Label(self.count_win, text='总     数:    ' + str(book_total) + '本').grid(row=2, stick=W, pady=15,
                                                                                        padx=90)
                Label(self.count_win, text='借出数量:   ' + str(quantity_lent) + '本').grid(row=3, stick=W, pady=15, padx=90)
                Label(self.count_win, text='剩余数量:    ' + str(residual_quantity) + '本').grid(row=4, stick=W, pady=15,
                                                                                            padx=90)

管理员功能:管理员账号注册功能

功能说明:点击菜单“添加管理员”选项,进入注册界面,输入新账号,姓名,新密码,重新输入新密码,点击“注册”按钮,系统判断该账号是否存在,重新输入密码是否一致,如出现错误,则返回相应的错误信息,否则,则显示注册成功。

pythonweb图书管理系统论文,Python,tkinter,python,Powered by 金山文档
  1. 管理员账号注册代码实现:文章来源地址https://www.toymoban.com/news/detail-782919.html

    def register_admin(self):
        admin_user_name = str(self.admin_user_name.get()).strip()
        admin_nickname = str(self.admin_nickname.get()).strip()
        admin_password = str(self.admin_password.get()).strip()
        admin_password_re = str(self.admin_password_re.get()).strip()
        print(admin_user_name, admin_nickname, admin_password, admin_password_re)
        if admin_user_name and admin_nickname and admin_password and admin_password_re:
            if admin_password == admin_password_re:
                user_info = data_manipulation.find_user_info_by_user_name(admin_user_name)
                if user_info:
                    showwarning(message='输入的用户名已经存在!')
                else:
                    admin_user_count = data_manipulation.find_user_count(role=1)
                    res = data_manipulation.insert_user_info(admin_user_count + 1, admin_user_name,
                                                             utils.get_md5(admin_password), admin_nickname)
                    if res:
                        showinfo(message='注册成功!')
                    else:
                        showwarning(message='注册失败,请稍后重试!')
            else:
                showwarning(message='两次输入密码不一致!')
        else:
            showwarning(title='注册失败', message='注册信息输入有误!')

业务数据查询、插入、修改、删除代码实现:

 import db_utils
 
def find_user_info_by_user_name_and_password(user_name, password):
    sql = "select id,user_id,user_name,nickname,role,user_status,gmt_created from user_account where " \
          "user_name=? and password=? limit 1"
    data = (user_name, password)
    res = db_utils.find_one(sql, data)
    if res:
        user_info = {'id': res[0], 'user_id': res[1], 'user_name': res[2], 'nickname': res[3], 'role': res[4],
                     'user_status': res[5], 'gmt_created': res[6]}
        return user_info
    return res
     
def find_user_info_by_user_id_or_user_name(user_id, user_name):
    sql = "select id,user_id,user_name,password,nickname,role,user_status,gmt_created from user_account where " \
          "user_id=? or user_name=? limit 1"
    data = (user_id, user_name)
    res = db_utils.find_one(sql, data)
    return res
     
def find_user_info_by_user_name(user_name):
    sql = "select id,user_id,user_name,password,nickname,role,user_status,gmt_created from user_account where " \
          "user_name=? limit 1"
    data = (user_name,)
    res = db_utils.find_one(sql, data)
    return res
     
def insert_user_info(user_id=None, user_name=None, password=None, nickname=None, role=0, user_status=1):
    sql = "insert into user_account(user_id,user_name,password,nickname,role,user_status) " \
          "values(?,?,?,?,?,?)"
    data = (user_id, user_name, password, nickname, role, user_status)
    res = db_utils.insert(sql, data)
    print(res)
    return res
     
def find_user_count(role=1):
    sql = "select count(1) from user_account where role=? limit 1"
    data = (role,)
    res = db_utils.find_one(sql, data)
    return res[0]
     
def find_book_info_by_book_id(book_id):
    sql = "select id,book_name,author,total,residual_quantity,price,gmt_created from books where id=?"
    data = (book_id,)
    res = db_utils.find_one(sql, data)
    return res
     
def find_book_info_by_book_name_and_author(book_name, author):
    sql = "select id,book_name,author,total,residual_quantity,price,gmt_created from books where book_name=? " \
          "and author=?"
    data = (book_name, author)
    res = db_utils.find_one(sql, data)
    return res
     
def find_book_info_by_book_name(book_name):
    sql = "select id,book_name,author,total,residual_quantity,price,gmt_created from books where book_name like ?"
    data = (f'%{book_name}%',)
    res = db_utils.find_list(sql, data)
    if res:
        print(res)
        book_info_list = []
        for row in res:
            book_info_list.append(list(row))
        return book_info_list
    return res
     
def insert_book_info(book_name, author, total, price):
    sql = "insert into books(book_name,author,total,residual_quantity,price) values(?,?,?,?,?)"
    residual_quantity = total
    data = (book_name, author, total, residual_quantity, price)
    res = db_utils.insert(sql, data)
    return res
     
def update_book_info(book_id, total):
    sql = "update books set total=total+?,residual_quantity=residual_quantity+? where id=?"
    residual_quantity = total
    data = (total, residual_quantity, book_id)
    sql_info = [(sql, data)]
    res = db_utils.update(sql_info)
    return res
     
def delete_book_num(book_id, book_delete_num):
    sql = "update books set total=total-?,residual_quantity=residual_quantity-? where id=?"
    data = (book_delete_num, book_delete_num, book_id)
    sql_info = [(sql, data)]
    res = db_utils.update(sql_info)
    return res
     
def find_book_borrowing_count(book_id, book_status=2):
    sql = "select count(1) from borrowing_record where id=? and book_status=? limit 1"
    data = (book_id, book_status)
    res = db_utils.find_one(sql, data)
    return res[0]
     
def find_book_borrowing_record_by_user_id(user_id):
    sql = "select br.id,br.book_id,b.book_name,br.user_id,br.borrowing_time,br.return_time,br.book_status," \
          "br.lending_days,br.gmt_created from " \
          "borrowing_record as br left join books as b on br.book_id=b.id where br.user_id=? and br.book_status=2"
    data = (user_id,)
    res = db_utils.find_list(sql, data)
    if res:
        borrow_list = []
        for row in res:
            borrow_info = {'id': row[0], 'book_id': row[1], 'book_name': row[2], 'user_id': row[3],
                           'borrowing_time': row[4], 'return_time': row[5], 'book_status': row[6],
                           'lending_days': row[7], 'gmt_created': row[8]}
            borrow_list.append(borrow_info)
        return borrow_list
    return res
     
def insert_borrowing_record(book_id, user_id, book_status=2, lending_days=0):
    sql_borrow = "insert into borrowing_record(book_id,user_id,book_status,lending_days) values(?,?,?,?)"
    data_borrow = (book_id, user_id, book_status, lending_days)
    sql_book = "update books set residual_quantity=residual_quantity-1 where id=?"
    data_book = (book_id,)
    sql_info_list = [(sql_borrow, data_borrow), (sql_book, data_book)]
    res = db_utils.update(sql_info_list)
    return res
     
def update_borrowing_record(book_id, record_id, return_time=None, book_status=3, lending_days=None):
    sql_borrow = "update borrowing_record set return_time=?,book_status=?,lending_days=? where id=?"
    data_borrow = (return_time, book_status, lending_days, record_id)
    sql_book = "update books set residual_quantity=residual_quantity+1 where id=?"
    data_book = (book_id,)
    sql_info_list = [(sql_borrow, data_borrow), (sql_book, data_book)]
    res = db_utils.update(sql_info_list)
    return res

通用工具类代码实现:

import hashlib
import datetime
import time
 
def get_md5(string):
    if string:
        return hashlib.md5(string.encode('utf-8')).hexdigest()
    else:
        raise ValueError('需要MD5加密的字符串为空!')
def get_current_time():
    """获取当前时间戳(秒)"""
    return int(time.time())
def get_format_time_by_ten(time_ten=None, fmt="%Y-%m-%d %H:%M:%S"):
    """秒级时间戳转指定格式日期"""
    time_ten = time_ten if (time_ten is not None) else get_current_time()
    return datetime.datetime.fromtimestamp(time_ten).strftime(fmt)
def get_str_to_timestamp_ten(str_time, fmt="%Y-%m-%d %H:%M:%S"):
    """日期格式转时间戳(秒)"""
    return int(datetime.datetime.strptime(str_time, fmt).timestamp())

到了这里,关于Python小论文-图书管理系统+Python+tkinter+sqlite3+PersistentDB线程池管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java毕业设计——基于java+Java Swing+sqlserver的图书馆书库管理系统设计与实现(毕业论文+程序源码)——图书馆书库管理系统

    大家好,今天给大家介绍基于java+Java Swing+sqlserver的图书馆书库管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 毕业

    2024年02月03日
    浏览(51)
  • Python图书管理系统(一)

    最近在写一个项目—— 图书管理系统 在完成这个项目的道路上我写了2个基础的图书管理系统。 ①用IO完成数据存储的图书管理系统 ②用MySQL完成数据存储的图书管理系统    今天先来更新第一个用IO操作的图书管理系统!!! 话不多说,上代码! 如果Python基础打得牢,写

    2024年02月11日
    浏览(45)
  • 图书管理系统(python、django)

    1. 系统简介 该实验设计开发一个简单的图书管理数据库系统,包括图书馆内书籍的信息、学校在校师生的信息以及师生的借阅信息。此系统用户面向图书管理员和借阅读者,图书馆管理员可以完成图书、读者等基本信息的增加、删除和修改、查看;读者可以进行图书的借阅、

    2024年02月05日
    浏览(61)
  • 用Python做图书管理系统

           有一次,小编去图书馆,发现在图书馆中有一个“图书管理系统”,有“还书““借阅”“添加书籍”等功能。我便也打算做一个“图书管理系统”。 为了制作一个友好的“图书管理系统”,先列出所有功能的菜单。如下: 第二步,用户会输入 0~6 的整数,以对应相

    2024年02月04日
    浏览(45)
  • 用python实现简易图书管理系统

    很多图书馆都有自己的图书管理系统,它主要担负的功能有 借书和还书 ,以及图书管理员对图书的操作等。 用户登录/注册—借书/还书/查看图书----(管理员)添加、修改图书信息 txt文件 首先,在任意位置创建一个文件夹,创建以下几个txt文件: bookISDN,ISDN.txt :存储书籍的

    2024年02月08日
    浏览(48)
  • 基于Python的图书信息管理系统

    进入21世纪以来,信息技术从根本上推动了图书馆的飞速发展,计算机和计算机管理系统已成为图书馆进行图书管理的主要设备和系统。虽然目前很多大型的图书馆已经有一整套比较完善的管理系统,但是在一些中小型的图书馆中,大部分工作仍需手工完成,工作起来效率比

    2024年02月04日
    浏览(57)
  • 图书信息管理系统(python,sqlite)

           sqlite数据库具体的结构设计和数据的截图放最后,因为图片有点多,但是能更好的帮助大家理解和实现该系统  目录 一、任务描述 二、功能实现 三、数据库设计​编辑 四、程序流程图(某些新加功能没有)  五、python代码(带注释) 六、具体数据库结构设计截图

    2024年02月03日
    浏览(49)
  • 基于Python+MySQL的图书管理系统

    目录 前言 一、开发环境与开发工具 二、系统需求分析 三、系统功能分析 四、数据库设计 1、数据库概念结构设计 (1)数据流程图  (2)系统ER图 2、数据库逻辑结构设计 3、数据库物理结构设计 五、数据库应用系统各个模块代码设计          1、主界面模块 2、登录界

    2024年02月02日
    浏览(46)
  • python图书书籍管理系统及推荐评分系统vue

    本系统提供给管理员对书籍分类、书籍信息、书籍评分、留言板等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证,为管理员操作提高了效率,也使其数据安全性得到了保障。随着信息化时代的到来,网络系统都趋向于智能化、系统化,书籍管理及推

    2024年02月09日
    浏览(38)
  • Python 基础 (十)Python实现简单的图书管理系统

    Python 基础 (一)Python基本认识与环境搭建 Python 基础 (一)Python基本认识与环境搭建 Python 基础 (二)Python变量与基本数据类型 Python 基础 (二)Python变量与基本数据类型 Python 基础 (三)Python基本语句与基本运算 Python 基础 (三)Python基本语句与基本运算 Python 基础 (四

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包