一个简单的图书管理系统(课程设计)

pycharm图书管理系统的设计,要用MySQL建立一个名为tushuguanli的数据库并在·数据库中建立三个表分别为books和borrow_books和 用户信息 的表
并把密码改为自己的密码




pycharm代码
import tkinter as tk
from tkinter import messagebox


import mysql.connector

class LoginWindow:  #创建第一个库11111
    def __init__(self, root):
        self.root = root
        self.root.title("登录")

        # 创建标签和输入框
        tk.Label(root, text="用户名").grid(row=0, column=0)
        tk.Label(root, text="密码").grid(row=1, column=0)
        self.username_entry = tk.Entry(root)                 #用户名输入框
        self.password_entry = tk.Entry(root, show="*")       #密码输入框带星号
        self.username_entry.grid(row=0, column=1)            #用grid放在第0行1列
        self.password_entry.grid(row=1, column=1)            #用grid放在第1行1列

        # 创建按钮
        self.login_button = tk.Button(root, text="登录", command=self.login)
        self.login_button.grid(row=2, column=0, columnspan=2)   #登录按钮2行0列占两列

    def login(self):
        username = self.username_entry.get()
        password = self.password_entry.get()    #用户名和密码从输入框输入

        # 检查用户名和密码
        if username == "admin" and password == "admin":
            messagebox.showinfo("登录成功", "管理员登录成功")
            self.open_book_app(is_admin=True)
        elif username == "user" and password == "user":
            messagebox.showinfo("登录成功", "用户登录成功")
            self.open_library_app()
        else:
            messagebox.showerror("登录失败", "用户名或密码错误")


    def open_library_app(self):
        self.root.destroy()     #关闭销毁root窗口
        root = tk.Tk()          #创建了一个新的Tkinter窗口
        app = LibraryApp(root)  #root传递
        root.mainloop()         #启动了Tkinter的事件循环

    def open_book_app(self, is_admin=True):
        self.root.destroy()
        root = tk.Tk()
        app = BookManagerApp(root, is_admin=is_admin)
        root.mainloop()

class LibraryApp:
        def __init__(self, root,is_admin=False):
            self.root = root
            self.is_admin = is_admin
            self.root.title("图书借阅系统")

            # 创建数据库连接和游标
            self.db = mysql.connector.connect(
                host="localhost",
                user="root",
                password="在里面输入自己的密码",
                database="tushuguanli"
            )
            self.cursor = self.db.cursor()

            # 创建标签和输入框
            tk.Label(root, text="书名").grid(row=0, column=0)
            tk.Label(root, text="作者").grid(row=1, column=0)
            tk.Label(root, text="姓名").grid(row=2, column=0)
            tk.Label(root, text="电话号码").grid(row=3, column=0)
            self.title_entry = tk.Entry(root)
            self.author_entry = tk.Entry(root)
            self.name_entry = tk.Entry(root)
            self.phone_entry = tk.Entry(root)
            self.title_entry.grid(row=0, column=1)
            self.author_entry.grid(row=1, column=1)
            self.name_entry.grid(row=2, column=1)
            self.phone_entry.grid(row=3, column=1)

            # 创建按钮
            self.borrow_button = tk.Button(root, text="查询书籍", command=self.search)
            self.borrow_button.grid(row=6, column=0, columnspan=2)

            self.borrow_button = tk.Button(root, text="借阅书籍", command=self.borrow_book)
            self.borrow_button.grid(row=7, column=0, columnspan=2)

            self.return_button = tk.Button(root, text="归还书籍", command=self.return_book)
            self.return_button.grid(row=8, column=0, columnspan=2)

        def search(self):
            title = self.title_entry.get()
            if not title:
                messagebox.showerror("错误", "请输入要查询的书籍名称")
                return
            query = "SELECT * FROM books WHERE title = %s"
            self.cursor.execute(query, (title,))
            result = self.cursor.fetchall()
            if result:
                book_title = result[0][1]
                book_author = result[0][2]
                book_summary = result[0][3]
                book_location = result[0][4]
                messagebox.showinfo("查询结果",
                                    f"书名: {book_title}\n作者: {book_author}\n简介: {book_summary}\n位置: {book_location}")
            else:
                messagebox.showinfo("查询结果", "未找到该书籍")

        def borrow_book(self):
            title = self.title_entry.get()
            author = self.author_entry.get()
            name = self.name_entry.get()
            phone = self.phone_entry.get()

            if not (title and author and name and phone):
                messagebox.showerror("错误", "请填写完整信息")
                return

            if not title:
                messagebox.showerror("错误", "请输入要借阅的书籍名称")
                return

            # 检查书籍是否存在
            book_exists_query = "SELECT * FROM books WHERE title = %s"
            self.cursor.execute(book_exists_query, (title,))    #建立游标
            book = self.cursor.fetchone()                              #fetchone方法获取结果

            if not book:
                messagebox.showerror("错误", "书籍不存在")
                return

            # 从表books中查询特定书名的数据并插入到表borrow_books中
            insert_query = "INSERT INTO borrow_books (title, author, summary, location) " \
                           "SELECT title, author, summary, location FROM books WHERE title = %s"
            self.cursor.execute(insert_query, (title,))

            # 删除books表中的对应书籍
            book_query = "DELETE FROM books WHERE title = %s"
            self.cursor.execute(book_query, (title,))

            # 插入用户信息
            user_query = "INSERT INTO 用户信息 (name, phone) VALUES (%s, %s)"
            self.cursor.execute(user_query, (name, phone))  #建立游标

            # 提交事务
            self.db.commit()

            messagebox.showinfo("成功", "成功借阅书籍")
        def return_book(self):
            title = self.title_entry.get()  # 从界面中获取用户输入的书名
            author = self.author_entry.get()  # 从界面中获取用户输入的作者名
            name = self.name_entry.get()  # 从界面中获取用户输入的名字
            phone = self.phone_entry.get()  # 从界面中获取用户输入的电话号码
            if not (title and author and name and phone):
                messagebox.showerror("错误", "请填写完整信息")
                return
                # 检查用户信息是否存在
            user_exists_query = "SELECT * FROM 用户信息 WHERE name = %s AND phone = %s"
            self.cursor.execute(user_exists_query, (name,phone))
            user = self.cursor.fetchone()
            if not user:
                messagebox.showerror("错误", "用户信息不存在")
                return
            book_exists_query = "SELECT * FROM books WHERE title = %s"
            self.cursor.execute(book_exists_query, (title,))
            book = self.cursor.fetchone()
            if book:
                messagebox.showerror("错误", "书籍已存在库中")
                return
                # 从表borrow_books中查询特定书名的数据并插入到表books中
            insert_query = "INSERT INTO books (title, author, summary, location)" \
                           "SELECT title, author, summary, location FROM borrow_books WHERE title = %s"
            self.cursor.execute(insert_query, (title,))

            user_query = "DELETE FROM 用户信息 WHERE name = %s AND phone = %s"  # 构建一个SQL插入语句,向名为用户信息的表中去除用户信息

            delete_query = "DELETE FROM borrow_books WHERE title = %s AND author = %s AND summary = %s AND location = %s"  # 构建一个SQL插入语句,向名为borrow_books的表中去除用借书信息
            try:

                self.cursor.execute(user_query, (name,phone))  # 执行SQL查询,将占位符%s替换为实际的书名,并执行插入操作
                self.db.commit()  # 提交保存
                messagebox.showinfo("成功", "书籍已归还")  # 弹出消息
            except Exception as e:
                messagebox.showinfo("错误",f"操作失败:{str(e)}")


class BookManagerApp:   #第二个库
    def __init__(self, root, is_admin):
        self.root = root
        self.is_admin = is_admin
        if is_admin:
            self.root.title("图书管理系统 - 管理员")
        else:
            self.root.title("图书管理系统 - 用户")



        # 创建标签和输入框
        tk.Label(root, text="书名").grid(row=0, column=0)
        tk.Label(root, text="作者").grid(row=1, column=0)
        tk.Label(root, text="简介").grid(row=2, column=0)
        tk.Label(root, text="位置").grid(row=3, column=0)
        self.title_entry = tk.Entry(root)
        self.author_entry = tk.Entry(root)
        self.summary_entry = tk.Entry(root)
        self.location_entry = tk.Entry(root)
        self.title_entry.grid(row=0, column=1,sticky="nsew")    #居中
        self.author_entry.grid(row=1, column=1,sticky="nsew")
        self.summary_entry.grid(row=2, column=1,sticky="nsew")
        self.location_entry.grid(row=3, column=1,sticky="nsew")



        # 创建按钮
        self.add_book_button = tk.Button(root, text="添加书籍", command=self.add_book)
        self.add_book_button.grid(row=4, column=0, columnspan=2,sticky="nsew")

        self.delete_book_button = tk.Button(root, text="删除书籍", command=self.delete_book)
        self.delete_book_button.grid(row=5, column=0, columnspan=2,sticky="nsew")

        self.search_book_button = tk.Button(root, text="查询书籍", command=self.search_book)
        self.search_book_button.grid(row=6, column=0, columnspan=2,sticky="nsew")

        self.update_book_button = tk.Button(root, text="更新书籍", command=self.update_book)
        self.update_book_button.grid(row=7, column=0, columnspan=2,sticky="nsew")

        self.root.geometry("300x300")  # 设置窗口大小为宽400像素,高300像素

        # 连接到数据库
        self.db = mysql.connector.connect(
            host="localhost",
            user="root",
            password="在里面输入自己的密码",
            database="tushuguanli"
        )
        self.cursor = self.db.cursor()

    def add_book(self):
        title = self.title_entry.get()  #从界面中获取用户输入的书名
        author = self.author_entry.get()    #从界面中获取用户输入的作者名
        summary = self.summary_entry.get()    #从界面中获取用户输入的简介
        location = self.location_entry.get()   #从界面中获取用户输入的位置
        if not all([title, author, summary, location]):
            messagebox.showerror("错误", "请填写完整信息")
            return
        query = "INSERT INTO books (title, author,summary,location) VALUES (%s, %s, %s, %s)" #构建一个SQL插入语句,向名为books的表中插入书名和作者名
        self.cursor.execute(query, (title, author,summary,location)) #执行SQL查询,将占位符%s替换为实际的书名和作者名,并执行插入操作
        self.db.commit()    #提交保存
        messagebox.showinfo("成功", "书籍已添加")  #弹出消息

    def delete_book(self):
        title = self.title_entry.get()
        if not title:
            messagebox.showerror("错误", "请输入要删除的书籍名称")
            return
        query = "DELETE FROM books WHERE title = %s"
        self.cursor.execute(query, (title,))
        self.db.commit()
        messagebox.showinfo("成功", "书籍已删除")


    def search_book(self):
            title = self.title_entry.get()
            if not title:
                messagebox.showerror("错误", "请输入要查询的书籍名称")
                return
            query = "SELECT * FROM books WHERE title = %s"
            self.cursor.execute(query, (title,))
            result = self.cursor.fetchall()
            if result:
                book_title = result[0][1]
                book_author = result[0][2]
                book_summary = result[0][3]  # 假设书籍介绍在第三列
                book_location = result[0][4]
                messagebox.showinfo("查询结果", f"书名: {book_title}\n作者: {book_author}\n简介: {book_summary}\n位置: {book_location}")
            else:
                messagebox.showinfo("查询结果", "未找到该书籍")

    def update_book(self):
        title = self.title_entry.get()
        author = self.author_entry.get()
        summary = self.summary_entry.get()  # 假设summary对应的Entry为self.summary_entry
        location = self.location_entry.get()  # 假设location对应的Entry为self.location_entry
        if not all([title, author, summary, location]):
            messagebox.showerror("错误", "请填写完整信息")
            return
        query = "UPDATE books SET author = %s, summary = %s, location = %s WHERE title = %s"
        self.cursor.execute(query, (author, summary, location, title))
        self.db.commit()
        messagebox.showinfo("成功", "书籍信息已更新")





if __name__ == "__main__":
    root = tk.Tk()
    login_window = LoginWindow(root)
    root.mainloop()

创建数据库和表

CREATE TABLE books (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    summary TEXT,
    location VARCHAR(255)
);
CREATE TABLE borrow_books (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    summary TEXT,
    location VARCHAR(255)
);
CREATE TABLE 用户信息 (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    phone VARCHAR(20)
);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值