import tkinter as tk from tkinter import ttk, messagebox import mysql.connector from datetime import datetime
class LoginSystem: def __init__(self): self.root = tk.Tk() self.root.title("电脑销售管理系统") self.root.geometry("400x500") try: self.conn = mysql.connector.connect( host="localhost", user="salesadmin", password="password123", database="ComputerSalesDB" ) self.cursor = self.conn.cursor() except mysql.connector.Error as err: messagebox.showerror("数据库连接错误", f"错误: {err}") return
self.main_frame = ttk.Frame(self.root, padding="10") self.main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
self.user_type = tk.StringVar(value="manager") self.create_user_type_radio()
self.create_login_widgets()
self.toggle_button = ttk.Button( self.main_frame, text="切换到注册", command=self.toggle_login_register ) self.toggle_button.grid(row=6, column=0, columnspan=2, pady=10)
self.is_login = True
def create_user_type_radio(self): """创建用户类型选择单选按钮""" type_frame = ttk.LabelFrame(self.main_frame, text="用户类型", padding="5") type_frame.grid(row=0, column=0, columnspan=2, pady=10, sticky="ew")
ttk.Radiobutton( type_frame, text="管理员", variable=self.user_type, value="manager" ).grid(row=0, column=0, padx=5) ttk.Radiobutton( type_frame, text="营业员", variable=self.user_type, value="assistant" ).grid(row=0, column=1, padx=5) ttk.Radiobutton( type_frame, text="采购员", variable=self.user_type, value="shopper" ).grid(row=0, column=2, padx=5)
def create_login_widgets(self): """创建登录界面组件""" ttk.Label(self.main_frame, text="用户ID:").grid(row=1, column=0, pady=5) self.id_entry = ttk.Entry(self.main_frame) self.id_entry.grid(row=1, column=1, pady=5)
ttk.Label(self.main_frame, text="用户名:").grid(row=2, column=0, pady=5) self.name_entry = ttk.Entry(self.main_frame) self.name_entry.grid(row=2, column=1, pady=5)
self.submit_button = ttk.Button( self.main_frame, text="登录", command=self.handle_submit ) self.submit_button.grid(row=5, column=0, columnspan=2, pady=10)
def toggle_login_register(self): """切换登录和注册界面""" self.is_login = not self.is_login if self.is_login: self.toggle_button.config(text="切换到注册") self.submit_button.config(text="登录") else: self.toggle_button.config(text="切换到登录") self.submit_button.config(text="注册")
def handle_submit(self): """处理登录或注册提交""" user_id = self.id_entry.get().strip() user_name = self.name_entry.get().strip() user_type = self.user_type.get()
if not user_id or not user_name: messagebox.showerror("错误", "请填写所有字段!") return
if self.is_login: self.handle_login(user_id, user_name, user_type) else: self.handle_register(user_id, user_name, user_type)
def handle_login(self, user_id, user_name, user_type): """处理登录逻辑""" try: table_name = self.get_table_name(user_type) id_field = self.get_id_field(user_type) name_field = self.get_name_field(user_type)
query = f"SELECT * FROM {table_name} WHERE {id_field} = %s AND {name_field} = %s" self.cursor.execute(query, (user_id, user_name)) result = self.cursor.fetchone()
if result: messagebox.showinfo("成功", "登录成功!") self.open_main_window(user_type, user_id, user_name) else: messagebox.showerror("错误", "用户名或ID错误!")
except mysql.connector.Error as err: messagebox.showerror("数据库错误", f"错误: {err}")
def handle_register(self, user_id, user_name, user_type): """处理注册逻辑""" try: table_name = self.get_table_name(user_type) id_field = self.get_id_field(user_type) name_field = self.get_name_field(user_type)
check_query = f"SELECT * FROM {table_name} WHERE {id_field} = %s" self.cursor.execute(check_query, (user_id,)) if self.cursor.fetchone(): messagebox.showerror("错误", "该ID已被注册!") return
insert_query = f"INSERT INTO {table_name} ({id_field}, {name_field}) VALUES (%s, %s)" self.cursor.execute(insert_query, (user_id, user_name)) self.conn.commit()
messagebox.showinfo("成功", "注册成功!")
except mysql.connector.Error as err: messagebox.showerror("数据库错误", f"错误: {err}")
def get_table_name(self, user_type): """获取用户类型对应的表名""" return { "manager": "manager", "assistant": "assistant", "shopper": "shopper" }[user_type]
def get_id_field(self, user_type): """获取用户类型对应的ID字段名""" return { "manager": "mID", "assistant": "aID", "shopper": "shopperID" }[user_type]
def get_name_field(self, user_type): """获取用户类型对应的名称字段名""" return { "manager": "mNAME", "assistant": "aNAME", "shopper": "shopperNAME" }[user_type]
def open_main_window(self, user_type, user_id, user_name): """打开主窗口""" main_window = tk.Toplevel(self.root) main_window.title(f"电脑销售管理系统 - {user_type}") main_window.geometry("800x600")
welcome_label = ttk.Label( main_window, text=f"欢迎, {user_name} ({user_id})", font=('Helvetica', 12, 'bold') ) welcome_label.pack(pady=20)
if user_type == "manager": self.create_manager_widgets(main_window) elif user_type == "assistant": self.create_assistant_widgets(main_window) elif user_type == "shopper": self.create_shopper_widgets(main_window)
def create_manager_widgets(self, window): """创建管理员界面组件""" ttk.Button(window, text="查看销售统计", command=lambda: self.show_sales_statistics()).pack(pady=5) ttk.Button(window, text="管理用户", command=lambda: self.manage_users()).pack(pady=5) ttk.Button(window, text="库存管理", command=lambda: self.manage_inventory()).pack(pady=5)
def create_assistant_widgets(self, window): """创建营业员界面组件""" ttk.Button(window, text="销售登记", command=lambda: self.register_sale()).pack(pady=5) ttk.Button(window, text="查询商品", command=lambda: self.search_goods()).pack(pady=5) ttk.Button(window, text="查看个人销售记录", command=lambda: self.view_personal_sales()).pack(pady=5)
def create_shopper_widgets(self, window): """创建采购员界面组件""" ttk.Button(window, text="采购登记", command=lambda: self.register_purchase()).pack(pady=5) ttk.Button(window, text="查看库存", command=lambda: self.view_inventory()).pack(pady=5) ttk.Button(window, text="供应商管理", command=lambda: self.manage_providers()).pack(pady=5)
def run(self): """运行应用""" self.root.mainloop()
if __name__ == "__main__": app = LoginSystem() app.run()
|