【python】图书管理系统

在这里插入图片描述

要运行这个图书管理系统程序,请按照以下步骤操作:
确保您的电脑上已安装Python。Windows 11通常预装了Python,但如果没有,你可以从Python官网(https://www.python.org/downloads/)下载并安装。
将代码保存为文件 book_management_system.py。
打开命令提示符(CMD)或PowerShell:
按下 Win + R 键
输入 cmd 或 powershell,然后按回车
在命令行中,导航到保存 book_management_system.py 文件的目录。例如: cd C:\Users\YourUsername\Documents
运行以下命令来执行程序:python book_management_system.py
执行这个命令后,程序应该会打开一个图形界面窗口,显示图书管理系统的界面。您可以在这个界面中添加新书和查看现有的图书列表。
如果遇到任何问题,比如提示缺少模块,可能需要安装 tkinter。大多数情况下,tkinter 已经随Python一起安装,但如果没有,可以使用以下命令安装:

import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3

class BookManagementSystem:
    def __init__(self, master):
        self.master = master
        self.master.title("图书管理系统")
        self.master.geometry("800x600")
        self.master.configure(bg='#f0f0f0')

        # 创建数据库连接
        self.conn = sqlite3.connect("library.db")
        self.create_table()

        # 创建GUI组件
        self.create_widgets()

    def create_table(self):
        cursor = self.conn.cursor()
        cursor.execute('''CREATE TABLE IF NOT EXISTS books
                          (id INTEGER PRIMARY KEY,
                           title TEXT NOT NULL,
                           author TEXT NOT NULL,
                           year INTEGER)''')
        self.conn.commit()

    def create_widgets(self):
        # 创建主框架
        main_frame = ttk.Frame(self.master, padding="10")
        main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
        self.master.grid_columnconfigure(0, weight=1)
        self.master.grid_rowconfigure(0, weight=1)

        # 创建输入框架
        input_frame = ttk.LabelFrame(main_frame, text="添加新书", padding="10")
        input_frame.grid(row=0, column=0, padx=10, pady=10, sticky=(tk.W, tk.E))

        # 创建标签和输入框
        ttk.Label(input_frame, text="书名:").grid(row=0, column=0, sticky=tk.W, padx=5, pady=5)
        self.title_entry = ttk.Entry(input_frame, width=30)
        self.title_entry.grid(row=0, column=1, padx=5, pady=5)

        ttk.Label(input_frame, text="作者:").grid(row=1, column=0, sticky=tk.W, padx=5, pady=5)
        self.author_entry = ttk.Entry(input_frame, width=30)
        self.author_entry.grid(row=1, column=1, padx=5, pady=5)

        ttk.Label(input_frame, text="出版年份:").grid(row=2, column=0, sticky=tk.W, padx=5, pady=5)
        self.year_entry = ttk.Entry(input_frame, width=30)
        self.year_entry.grid(row=2, column=1, padx=5, pady=5)

        # 创建按钮框架
        button_frame = ttk.Frame(main_frame)
        button_frame.grid(row=1, column=0, padx=10, pady=10, sticky=(tk.W, tk.E))

        ttk.Button(button_frame, text="添加图书", command=self.add_book).grid(row=0, column=0, padx=5, pady=5)
        ttk.Button(button_frame, text="显示所有图书", command=self.show_books).grid(row=0, column=1, padx=5, pady=5)
        ttk.Button(button_frame, text="修改图书", command=self.update_book).grid(row=0, column=2, padx=5, pady=5)
        ttk.Button(button_frame, text="删除图书", command=self.delete_book).grid(row=0, column=3, padx=5, pady=5)

        # 创建树形视图来显示图书
        tree_frame = ttk.Frame(main_frame)
        tree_frame.grid(row=2, column=0, padx=10, pady=10, sticky=(tk.W, tk.E, tk.N, tk.S))
        main_frame.grid_rowconfigure(2, weight=1)

        self.tree = ttk.Treeview(tree_frame, columns=("ID", "Title", "Author", "Year"), show="headings")
        self.tree.heading("ID", text="ID")
        self.tree.heading("Title", text="书名")
        self.tree.heading("Author", text="作者")
        self.tree.heading("Year", text="出版年份")
        
        self.tree.column("ID", width=50)
        self.tree.column("Title", width=200)
        self.tree.column("Author", width=150)
        self.tree.column("Year", width=100)

        # 添加滚动条
        scrollbar = ttk.Scrollbar(tree_frame, orient="vertical", command=self.tree.yview)
        self.tree.configure(yscrollcommand=scrollbar.set)

        self.tree.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
        scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S))

        tree_frame.grid_columnconfigure(0, weight=1)
        tree_frame.grid_rowconfigure(0, weight=1)

        # 为树形视图添加选择事件
        self.tree.bind("<<TreeviewSelect>>", self.on_tree_select)

    def add_book(self):
        title = self.title_entry.get()
        author = self.author_entry.get()
        year = self.year_entry.get()

        if title and author and year:
            cursor = self.conn.cursor()
            cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)", (title, author, year))
            self.conn.commit()
            messagebox.showinfo("成功", "图书添加成功!")
            self.clear_entries()
            self.show_books()
        else:
            messagebox.showerror("错误", "请填写所有字段!")

    def show_books(self):
        self.tree.delete(*self.tree.get_children())
        cursor = self.conn.cursor()
        cursor.execute("SELECT * FROM books")
        for row in cursor.fetchall():
            self.tree.insert("", "end", values=row)

    def clear_entries(self):
        self.title_entry.delete(0, tk.END)
        self.author_entry.delete(0, tk.END)
        self.year_entry.delete(0, tk.END)

    def on_tree_select(self, event):
        selected_items = self.tree.selection()
        if selected_items:
            item = selected_items[0]
            values = self.tree.item(item)['values']
            self.clear_entries()
            self.title_entry.insert(0, values[1])
            self.author_entry.insert(0, values[2])
            self.year_entry.insert(0, values[3])

    def update_book(self):
        selected_items = self.tree.selection()
        if not selected_items:
            messagebox.showerror("错误", "请先选择要修改的图书!")
            return

        item = selected_items[0]
        book_id = self.tree.item(item)['values'][0]
        title = self.title_entry.get()
        author = self.author_entry.get()
        year = self.year_entry.get()

        if title and author and year:
            cursor = self.conn.cursor()
            cursor.execute("UPDATE books SET title=?, author=?, year=? WHERE id=?", (title, author, year, book_id))
            self.conn.commit()
            messagebox.showinfo("成功", "图书信息已更新!")
            self.clear_entries()
            self.show_books()
        else:
            messagebox.showerror("错误", "请填写所有字段!")

    def delete_book(self):
        selected_items = self.tree.selection()
        if not selected_items:
            messagebox.showerror("错误", "请先选择要删除的图书!")
            return

        if messagebox.askyesno("确认", "确定要删除选中的图书吗?"):
            item = selected_items[0]
            book_id = self.tree.item(item)['values'][0]
            cursor = self.conn.cursor()
            cursor.execute("DELETE FROM books WHERE id=?", (book_id,))
            self.conn.commit()
            messagebox.showinfo("成功", "图书已删除!")
            self.clear_entries()
            self.show_books()

    def __del__(self):
        self.conn.close()

if __name__ == "__main__":
    print("Starting Book Management System...")  # 添加这行
    root = tk.Tk()
    app = BookManagementSystem(root)
    root.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值