使用Python连接数据库实现超市商品管理

import pymysql
from tkinter import *
from tkinter import messagebox
from tkinter import ttk

db_config = {
    'host': 'localhost',
    'user': 'your_username',
    'password': 'your_password',
    'database': 'supermarket_db'
}

def init_db():
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS products (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            price DECIMAL(10, 2) NOT NULL,
            stock INT NOT NULL
        )
    """)
    conn.commit()
    conn.close()


def add_product(name, price, stock):
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    cursor.execute("INSERT INTO products (name, price, stock) VALUES (%s, %s, %s)", (name, price, stock))
    conn.commit()
    conn.close()


def delete_product(id):
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    cursor.execute("DELETE FROM products WHERE id=%s", (id,))
    conn.commit()
    conn.close()


def fetch_products():
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM products")
    rows = cursor.fetchall()
    cursor.close()
    conn.close()
    return rows


def on_add_click():
    name = name_entry.get()
    price = price_entry.get()
    stock = stock_entry.get()
    if name and price and stock:
        try:
            price = float(price)
            stock = int(stock)
            add_product(name, price, stock)
            messagebox.showinfo("成功", "商品添加成功!")
            refresh_table()
        except ValueError:
            messagebox.showerror("错误", "价格必须为数字,库存必须为整数。")

def on_delete_click():
    selected_item = table.selection()
    if selected_item:
        id = table.item(selected_item)['values'][0]
        delete_product(id)
        messagebox.showinfo("成功", "商品删除成功!")
        refresh_table()

def refresh_table():
    for item in table.get_children():
        table.delete(item)
    for row in fetch_products():
        table.insert('', END, values=row)

init_db()

root = Tk()
root.title("超市商品管理系统")

Label(root, text="商品名称").grid(row=0, column=0)
name_entry = Entry(root)
name_entry.grid(row=0, column=1)

Label(root, text="价格").grid(row=1, column=0)
price_entry = Entry(root)
price_entry.grid(row=1, column=1)

Label(root, text="库存").grid(row=2, column=0)
stock_entry = Entry(root)
stock_entry.grid(row=2, column=1)

Button(root, text="添加商品", command=on_add_click).grid(row=3, column=0, columnspan=2)
Button(root, text="刷新列表", command=refresh_table).grid(row=4, column=0, columnspan=2)


table = ttk.Treeview(root, columns=('ID', 'Name', 'Price', 'Stock'), show='headings')
table.heading('ID', text='ID')
table.heading('Name', text='名称')
table.heading('Price', text='价格')
table.heading('Stock', text='库存')
table.grid(row=5, column=0, columnspan=2)

Button(root, text="删除选中商品", command=on_delete_click).grid(row=6, column=0, columnspan=2)

refresh_table()

root.mainloop()

效果如下:

优点:

①模块化设计:代码结构清晰,将数据库操作(init_db, add_product, delete_product, fetch_products)与界面操作分开,便于维护和扩展。

②错误处理:在on_add_click函数中,尝试将价格和库存转换为相应的类型,并通过异常处理捕捉转换失败的情况,提示用户输入正确的数据格式,提高了程序的健壮性。

③即时反馈:使用messagebox弹窗提供即时的操作反馈,如“商品添加成功!”或“商品删除成功!”,增强了用户体验。

④动态数据展示:通过Treeview组件动态展示数据库中的商品信息,并实现了即时刷新功能,用户可以在添加或删除商品后立即看到更新的结果。

⑤简洁直观的用户界面:界面设计简洁明了,用户可以轻松地添加新商品、刷新列表查看最新数据,以及选择并删除已有商品,操作流程简单易懂。

⑥数据库表的自动创建:通过init_db函数,如果数据库表不存在,则会自动创建,简化了首次部署或数据库迁移的步骤。

⑦安全的数据库连接管理:使用with语句或直接关闭连接的方式管理数据库连接,确保每次操作后资源被妥善释放,减少了资源泄露的风险。

⑧易于扩展:代码基础框架搭建得较为合理,如果需要增加更多功能,如修改商品信息、查询特定商品等,可以在现有基础上较为容易地进行扩展。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值