【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()
作者:星毅要努力