Buping 2 years ago
parent e267bbc4be
commit e3414804ff

@ -2,12 +2,21 @@ import tkinter as tk
from tkinter import messagebox
from tkinter import simpledialog
import os
import pymysql
from tkinter import ttk # 添加这一行来导入ttk
class CarSalesSystem:
def __init__(self, master):
self.master = master
master.title("汽车销售系统")
# 初始化数据库连接和游标
self.db_connect = pymysql.connect(
host="localhost",
user="root",
password="a123456a",
charset="utf8",
database="汽车" # 直接指定数据库无需执行use语句
)
self.cursor = self.db_connect.cursor()
self.cars = [] # 这里简单用列表存储汽车信息,实际应用中建议使用数据库
# 创建界面元素
@ -25,24 +34,37 @@ class CarSalesSystem:
self.button_view.pack(pady=5)
def add_car(self):
car_info = simpledialog.askstring("添加汽车", "请输入汽车信息,格式:品牌,型号,价格,颜色").strip()
car_info = simpledialog.askstring("添加汽车", "请输入汽车信息,格式:品牌,型号,价格,颜色")
if car_info:
self.cars.append(car_info.split(','))
messagebox.showinfo("成功", "汽车添加成功!")
# 解析用户输入的汽车信息
pp, xh, jg, color = car_info.split(',')
# 预防SQL注入使用参数化查询
insert_sql = "INSERT INTO tj (pp, xh, jg, color) VALUES (%s, %s, %s, %s)"
try:
self.cursor.execute(insert_sql, (pp, xh, float(jg), color)) # 注意价格转换为浮点数
self.db_connect.commit() # 提交事务,保存更改
messagebox.showinfo("成功", "汽车添加成功,并已保存至数据库!")
except Exception as e:
messagebox.showerror("错误", f"添加汽车到数据库时发生错误:{e}")
self.db_connect.rollback() # 发生错误时回滚事务
# 注意这里假设你已经有了一个名为tj的表用于存储汽车信息且字段对应为(pp, xh, jg, color)
# 实际使用时请根据你的数据库表结构进行调整
def delete_car(self):
car_to_delete = simpledialog.askstring("删除汽车", "请输入要删除的汽车型号:").strip()
print(f"尝试删除的型号: {car_to_delete}, 当前所有汽车信息: {self.cars}")
car_to_delete = simpledialog.askstring("删除汽车", "请输入要删除的汽车型号:")
if car_to_delete:
for car in self.cars:
if len(car) >= 2 and car[1] == car_to_delete:
self.cars.remove(car)
messagebox.showinfo("成功", f"{car_to_delete}已从系统中删除。")
break
else:
messagebox.showerror("错误", f"未找到型号为{car_to_delete}的汽车。")
else:
messagebox.showwarning("警告", "请输入有效的汽车型号进行删除操作。")
# 预防SQL注入使用参数化查询
delete_sql = "DELETE FROM tj WHERE xh = %s"
try:
self.cursor.execute(delete_sql, (car_to_delete,))
self.db_connect.commit() # 提交事务,确保删除操作生效
messagebox.showinfo("成功", f"{car_to_delete}已从数据库中删除。")
except Exception as e:
messagebox.showerror("错误", f"删除汽车信息时发生错误:{e}")
self.db_connect.rollback() # 发生错误时回滚事务,保持数据库一致性
def edit_car(self):
edit_car_model = simpledialog.askstring("编辑汽车", "请输入要编辑的汽车型号:")
@ -58,10 +80,30 @@ class CarSalesSystem:
messagebox.showerror("错误", f"未找到型号为{edit_car_model}的汽车。")
def view_cars(self):
if self.cars:
car_details = "\n".join([", ".join(car) for car in self.cars])
messagebox.showinfo("所有汽车信息", car_details)
else:
# 使用Treeview显示数据
view_window = tk.Toplevel(self.master)
view_window.title("所有汽车信息")
columns = ("品牌", "型号", "价格", "颜色")
tree = ttk.Treeview(view_window, columns=columns, show="headings")
for column in columns:
tree.heading(column, text=column)
tree.column(column, width=100, anchor="center")
# 从数据库获取数据并插入Treeview
sql_show = "SELECT * FROM tj"
self.cursor.execute(sql_show)
rows = self.cursor.fetchall()
for row in rows:
tree.insert("", "end", values=row)
tree.pack(fill=tk.BOTH, expand=True)
scrollbar = ttk.Scrollbar(view_window, orient="vertical", command=tree.yview)
tree.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
if not rows:
messagebox.showinfo("提示", "目前没有汽车信息。")

Loading…
Cancel
Save