首页 后端开发 Python教程 python如何实现商品进销存管理系统

python如何实现商品进销存管理系统

May 19, 2023 pm 01:52 PM
python

基于python,MySQL,tkinter

import pymysql #导入数据库模块
import tkinter #导入相关的窗体模块
import os #利用os模块可以方便定义完整路径
import  tkinter.messagebox#实现提示框的组件
import  tkinter.simpledialog#简单对话框
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import threading
import pandas as pd  #对数据进行访问
import  sys  #与操作系统交互
def get_resources_path(relative_path):#利用此函数实现资源路径的定位
    if getattr(sys,"frozen",False):
        base_path=sys._MEIPASS #获取临时资源
    else:
        base_path=os.path.abspath(".") #获取当前路径
    return os.path.join(base_path,relative_path)  #获得绝对路径
LOGO_PATH=get_resources_path(os.path.join("resources",'shop_logo.ico'))  #'resources'+os.sep + 'shop_logo.ico'#logo文件路径
IMAGES_PATH=get_resources_path(os.path.join("resources",'background.png'))#'resources' +os.sep+ 'background.png'#图像文件路径
Warehouse_PATH=get_resources_path(os.path.join("resources",'店铺.png'))#'resources' +os.sep+ '店铺.png'#图像文件路径
COMMODITY_DELETE_PATH=get_resources_path(os.path.join("resources",'店铺修改背景图.png'))#'resources' +os.sep+ '店铺修改背景图.png'#图像文件路径
WORDCLOUD_PATH='词云图.png'
EXCEL_COMMODITY=get_resources_path(os.path.join("resources",'商品数据.xlsx'))#'resources'+ os.sep + '商品数据.xlsx'#商品数据的路径
EXCEL_STORE=get_resources_path(os.path.join("resources",'店铺.xlsx'))#'resources'+ os.sep + '店铺.xlsx'#店铺数据的路径
EXCEL_WAREHOUSE=get_resources_path(os.path.join("resources",'库房.xlsx'))#'resources'+ os.sep + '库房.xlsx'#库房数据的路径
EXCEL_CUSTOMER=get_resources_path(os.path.join("resources",'顾客数据.xlsx'))#'resources'+ os.sep + '顾客数据.xlsx'#顾客数据的路径
class MainForm: #定义窗体类,父类
    def __init__(self):#构造窗体
        self.root=tkinter.Tk()#创建一个窗体
        self.root.title("露露小卖店")#设置标题
        self.root.iconbitmap(LOGO_PATH)#设置logo资源
        self.root.geometry('680x500+150+50')#初始化窗口大小
        self.root.resizable(False,False) #固定窗口大小
    def worcloud_s(self,text):    #生产词云图片
        wc= WordCloud(
            collocations=False,
            font_path=r"C:/Windows/Fonts/simfang.ttf",
            background_color="black",
            width=600,
            height=300,
            max_words=50).generate(text)
        wc.to_image()
        wc.to_file("词云图.png")
class The_login(MainForm):  #登录窗口
    def __init__(self):
        super().__init__()
        photo = tkinter.PhotoImage(file=IMAGES_PATH)  # 设置图像资源
        tkinter.Label(self.root, image=photo,width=680,height=500).place(x=0,y=0)
        tkinter.Label(self.root, text="用户名", font=("黑体", 20)).place(x=150,y=200)
        self.entry1 = tkinter.Entry(self.root,font=("黑体", 20))
        self.entry1.place(x=300,y=200)
        tkinter.Label(self.root, text="密码", font=("黑体", 20)).place(x=150,y=250)
        self.entry2 = tkinter.Entry(self.root,font=("黑体", 20),show="*")
        self.entry2.place(x=300,y=250)
        tkinter.Button(self.root, text="店铺登录",command=self.bidui, width=15, font=("微软雅黑", 10)).place(x=150,y=300)
        tkinter.Button(self.root, text="退出", command=self.root.quit, width=15, font=("微软雅黑", 10)).place(x=450, y=300)
        tkinter.Button(self.root, text="导入店铺信息", command=self.store_in, width=10, font=("微软雅黑", 10)).place(x=550, y=450)
        tkinter.Button(self.root, text="店铺注册", command=self.Registered, width=10, font=("微软雅黑", 10)).place(x=0, y=450)
        self.root1=self.root.mainloop()
      #对用户账号,密码进行查询,比对
    def bidui(self):
        global global_id
        def find_store():#查找店铺账号和密码数据
            cursor=conn.cursor()
            sql='select * from store where store_id="%s" and store_password="%s"'%(self.entry1.get(),self.entry2.get())
            cursor.execute(sql)
            conn.commit()
            cursor.close()
            return cursor.fetchone()
        try :
            if bool(find_store())==1:
                print("登录成功")
                global_id=self.entry1.get()
                self.root.destroy()
                The_store()
            else:
                labell = tkinter.Label(self.root, text='登陆失败!', font=("黑体", 10))  ##
                labell.place(x=300, y=0)
        except:
            pass
    def store_in(self):
        def remove_store_all():  # 清除店铺中的数据表数据
            cursor = conn.cursor()  # 创建游标
            cursor.execute('delete from store')
            conn.commit()  # 提交
            cursor.close()  # 关闭游标
        def store_Add():  # 向店铺的表中导入数据
            cursor = conn.cursor()  # 创建游标
            for co in range(len(df["店铺账号"])-1):
                print(co)
                try:
                    sql = 'insert into store values (%s,%s,%s,%s,%s,%s,%s);'  # 添加数据
                    cursor.execute(sql,(
                        df["店铺账号"][co],
                        df["店铺密码"][co],
                        df["店铺名称"][co],
                        df["店铺地址"][co],
                        df["店铺电话"][co],
                        df["店主"][co],
                        df["盈亏"][co]))  # 执行添加数据
                    conn.commit()  # 提交
                except:
                    print(df["店铺名称"][co])
            cursor.close()  # 关闭游
        df = pd.read_excel(EXCEL_STORE)
        remove_store_all()
        store_Add()
        #——————————————————————-——————————店铺注册------------------------------
    def Registered(self):  #店铺注册信息
        def remove_prompt():  # 清空提示信息
            Entry_prompt.delete(0.0, tkinter.END)
            Entry_prompt.update()
            Entry_prompt.insert(tkinter.INSERT,"———————————店铺注册——————————")
        def store_add():#添加店铺信息
            if Entry_user.get()=='':  #用户名不能为空
                remove_prompt()
                Entry_prompt.insert(tkinter.INSERT, "用户名输入为空\n")
            elif Entry_password.get()=='': #密码不能为空
                remove_prompt()
                Entry_prompt.insert(tkinter.INSERT, "密码输入为空\n")
            elif Entry_name.get() == '':  # 名称不能为空
                remove_prompt()
                Entry_prompt.insert(tkinter.INSERT, "店铺名称输入为空\n")
            elif Entry_address.get() == '':  # 地址不能为空
                remove_prompt()
                Entry_prompt.insert(tkinter.INSERT, "店铺地址输入为空\n")
            elif Entry_phon.get() == '':  # 电话不能为空
                remove_prompt()
                Entry_prompt.insert(tkinter.INSERT, "店铺电话输入为空\n")
            elif Entry_master.get() == '':  # 店主不能为空
                remove_prompt()
                Entry_prompt.insert(tkinter.INSERT, "店主输入为空\n")
            else:
                remove_prompt()
                cursor = conn.cursor()  # 创建游标
                try:
                    sql = 'insert into store values (%s,%s,%s,%s,%s,%s,%s);'  # 添加数据
                    cursor.execute(sql, (
                        Entry_user.get(),  #账号
                        Entry_password.get(),#密码
                        Entry_name.get(),#名称
                        Entry_address.get(),#地址
                        Entry_phon.get(),#电话
                        Entry_master.get(),#店主
                        0       )#盈亏
                                   )  # 执行添加数据
                    conn.commit()  # 提交
                    cursor.execute('select * from store where store_id="%s";'%(Entry_user.get()))
                    conn.commit()
                    Entry_prompt.insert(tkinter.INSERT, "店铺注册成功\n")
                    Entry_prompt.insert(tkinter.INSERT, cursor.fetchall())
                except:
                    Entry_prompt.insert(tkinter.INSERT, "店铺账号已存在,请从新输入:\n")
                cursor.close()  # 关闭游
        root=tkinter.Toplevel()   #创建一个附属窗口
        root.title("露露小卖店")   #标题
        root.iconbitmap(LOGO_PATH)  # 设置logo资源
        root.geometry('380x400+150+50')  # 初始化窗口大小
        root.resizable(False, False)  # 固定窗口大小
        tkinter.Button(root,text="确认添加",command=store_add,font=("微软雅黑", 10)).place(x=30,y=360)
        tkinter.Button(root, text="退出", command=root.destroy, font=("微软雅黑", 10)).place(x=320, y=360)
       #店铺账号    店铺密码    店铺名称    店铺地址    店铺电话    店主
        tkinter.Label(root,text="店铺账号",font=("微软雅黑", 10)).place(x=60,y=120)
        tkinter.Label(root, text="店铺密码", font=("微软雅黑", 10)).place(x=60, y=160)
        tkinter.Label(root, text="店铺名称", font=("微软雅黑", 10)).place(x=60, y=200)
        tkinter.Label(root, text="店铺地址", font=("微软雅黑", 10)).place(x=60, y=240)
        tkinter.Label(root, text="店铺电话", font=("微软雅黑", 10)).place(x=60, y=280)
        tkinter.Label(root, text="店    主", font=("微软雅黑", 10)).place(x=60, y=320)
        Entry_prompt = tkinter.Text(root, width=44,height=5,font=("微软雅黑", 10))
        Entry_prompt.place(x=12, y=10)
        Entry_user=tkinter.Entry(root,font=("微软雅黑", 10))
        Entry_user.place(x=120,y=120)
        Entry_password = tkinter.Entry(root, font=("微软雅黑", 10))
        Entry_password.place(x=120, y=160)
        Entry_name = tkinter.Entry(root, font=("微软雅黑", 10))
        Entry_name.place(x=120, y=200)
        Entry_address = tkinter.Entry(root, font=("微软雅黑", 10))
        Entry_address.place(x=120, y=240)
        Entry_phon = tkinter.Entry(root, font=("微软雅黑", 10))
        Entry_phon.place(x=120, y=280)
        Entry_master = tkinter.Entry(root, font=("微软雅黑", 10))
        Entry_master.place(x=120, y=320)
        remove_prompt()
class The_store(MainForm):#主页面设置
    def __init__(self):
        super().__init__()
        self.Label=tkinter.Label(self.root,text="欢迎光临露露小卖店",bg='#233233',width=32,height=10,
                                     fg='#ffffff',font=("黑体",30))
        self.Label.place(x=20,y=0)
        self.button1 = tkinter.Button(self.root, text="初始化", command=self.Ininia, height=3, width=10).place(x=0,y=430)
        self.button2 = tkinter.Button(self.root, text="商品", command=self.Commodity_switch, height=3, width=10).place(x=150,y=430)
        self.button3 = tkinter.Button(self.root, text="店铺", command=self.Shop_switch, height=3, width=10).place(x=300,y=430)
        self.button4 = tkinter.Button(self.root, text="库房", command=self.Warehouse_switch, height=3, width=10).place(x=450,y=430)
        self.button1 = tkinter.Button(self.root, text="退出", command=quit, height=3, width=10).place(x=600,y=430)
        self.root.mainloop()
    def  Commodity_switch(self):  #商品
        self.root.destroy()  #关闭主界面
        Commodity_From()   #进入商品界面
    def Shop_switch(self):   #店铺
        self.root.destroy()  # 关闭主界面
        Shop_From()
    def Warehouse_switch(self):  #库房
        self.root.destroy()  # 关闭主界面
        Warehouse()
    def Ininia(self):   #具体初始化
        self.Label.place_forget()
        text=tkinter.Text(self.root,width=80,height=20,font=('微软雅黑', 10))
        scroll = tkinter.Scrollbar()
        scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
        text.place(x=20, y=20)
        scroll.config(command=text.yview)
        text.config(yscrollcommand=scroll.set)
        text.insert(tkinter.INSERT,"----------数据加载开始---------\n")
        INn=Initialize()
        def After_xx():
            for i in INn.Accord():
               text.insert(tkinter.INSERT,i)
               text.insert(tkinter.INSERT, '\n')
            text.insert(tkinter.END,"数据加载完毕")
        self.root.after(100,After_xx())
class Initialize:  #对数据库进行初始化
    def __init__(self):
        self.df_commodity=pd.read_excel(EXCEL_COMMODITY)
        self.df_warehouse = pd.read_excel(EXCEL_WAREHOUSE)
        self.df_customer = pd.read_excel(EXCEL_CUSTOMER)
        self.remove_all()
        self.all_refresh()
    def remove_all(self):  #清除数据表数据
        cursor = conn.cursor()   #创建游标
        cursor.execute('delete from commodity;')   #清除商品数据
        cursor.execute('delete from warehouse;')       #清除库房信息
        cursor.execute('delete from customer') #清除顾客信息
        conn.commit()    #提交
        cursor.close()  #关闭游标
    def all_refresh(self):
        def commodity_Add():#向商品commodity的表中导入数据'DW-1201090311','其它蔬菜',4,2,20210101,'2年',1,8
            global global_id
            cursor = conn.cursor()   #创建游标
            for co in range(len(self.df_commodity["商品编码"])):
                try:
                    sql = 'insert into commodity values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'#添加数据
                    cursor.execute(sql, (
                    self.df_commodity["商品编码"][co],
                    self.df_commodity["商品名称"][co],
                    self.df_commodity["商品售价"][co],
                    self.df_commodity["商品进价"][co],
                    self.df_commodity["生产日期"][co],
                    self.df_commodity["保质期"][co],
                    self.df_commodity["商品规格"][co],
                    self.df_commodity["销售数量"][co],
                    global_id,
                    self.df_commodity["库房编号"][co],
                    None)
                                   )  # 执行添加数据
                except:
                    print(self.df_commodity["商品编码"][co])
            conn.commit()  # 提交
            cursor.close()  # 关闭游标
        def warehouse_Add():#向库房的表中导入数据'DW-1201090311','其它蔬菜',4,2,20210101,'2年',1,8
            global global_id
            cursor = conn.cursor()   #创建游标
            for co in range(len(self.df_warehouse["库房编号"])):
                try:
                    sql = 'insert into warehouse values (%s,%s,%s,%s,%s,%s,%s);'#添加数据
                    cursor.execute(sql, (
                    self.df_warehouse["库房编号"][co],
                    self.df_warehouse["库房密码"][co],
                    self.df_warehouse["库房名称"][co],
                    self.df_warehouse["库房地址"][co],
                    self.df_warehouse["库房电话"][co],
                    self.df_warehouse["库房管理人"][co],
                    global_id     )
                                   )  # 执行添加数据
                except:
                    print(self.df_warehouse["库房编号"][co])
            conn.commit()  # 提交
            cursor.close()  # 关闭游标
        def customer_Add():#向顾客的表中导入数据
            global global_id
            def go_shopping():  #查看购物情况
                sql=' select sum(commodity_amount) from commodity GROUP BY customer_id;'
                cursor.execute(sql)
                conn.commit()
                return  cursor.fetchall()
            cursor = conn.cursor()  # 创建游标
            for co in range(len(self.df_customer["用户账号"])):
                try:
                    sql = 'insert into customer values (%s,%s,%s,%s,%s,%s);'#添加数据
                    cursor.execute(sql, (
                    self.df_customer["用户账号"][co],
                    self.df_customer["密码"][co],
                    self.df_customer["用户名"][co],
                    self.df_customer["电话"][co],
                    go_shopping(),
                    global_id  )
                                   )  # 执行添加数据
                except:
                    print(self.df_customer["用户账号"][co])
            conn.commit()  # 提交
            cursor.close()  # 关闭游标
        commodity_Add()
        warehouse_Add()
        customer_Add()
    def Accord(self):
        cursor = conn.cursor()  #创建游标
        a=[]
        for co1 in range(len(self.df_commodity["商品编码"])):
            try:
                sql='select * from commodity where commodity_id="%s"'%(self.df_commodity["商品编码"][co1])
                cursor.execute(sql)
                a.append(cursor.fetchall())   #结果导出
            except:
                continue
        for co2 in range(len(self.df_warehouse["库房编号"])):
            try:
                sql='select * from warehouse where warehouse_id="%s"'%(self.df_warehouse["库房编号"][co2])
                cursor.execute(sql)
                a.append(cursor.fetchall())   #结果导出
            except:
                continue
        for co in range(len(self.df_customer["用户账号"])):
            try:
                sql='select * from customer where customer_id="%s"'%(self.df_customer["用户账号"][co])
                cursor.execute(sql)
                a.append(cursor.fetchall())   #结果导出
            except:
                continue
        conn.commit()        #提交
        cursor.close()    #关闭游标
        return a
class Commodity_From(MainForm):  #商品界面设置
    def __init__(self):
        super().__init__()
        self.Commodity_select_photo()
        photo_word = tkinter.PhotoImage(file=WORDCLOUD_PATH)
        tkinter.Label(self.root, image=photo_word, width=600, height=400).place(x=30, y=0)
        tkinter.Label(self.root,text="------------你的年度销量---------",font=("微软雅黑", 20)).place(x=100,y=0)
        self.button1 = tkinter.Button(self.root, text="增加", command=self.Commodity_add_s, height=3, width=10).place(x=0, y=430)
        self.button2 = tkinter.Button(self.root, text="删除", command=self.Commodity_drop_s, height=3, width=10).place(x=150, y=430)
        self.button3 = tkinter.Button(self.root, text="修改", command=self.Commodity_delente_s, height=3, width=10).place(x=300, y=430)
        self.button4 = tkinter.Button(self.root, text="查询", command=self.Commodity_select_s, height=3, width=10).place(x=450, y=430)
        self.button1 = tkinter.Button(self.root, text="返回", command=self.The_store_power, height=3, width=10).place(x=600, y=430)
        self.root.mainloop()
    def Commodity_add_s(self):#  进入增加界面
        self.root.destroy()  # 关闭商品界面
        Commodity_add()    #进入增加界面
    def Commodity_drop_s(self):#进入删除界面
        self.root.destroy()
        Commodity_drop()
    def Commodity_delente_s(self): #进去修改界面
        self.root.destroy()
        Commodity_delente()
    def Commodity_select_s(self): #进入查询界面
        self.root.destroy()
        Commodity_select()
    def The_store_power(self): #进入主界面
        self.root.destroy()
        The_store()
    def Commodity_select_photo(self):#查询所有的商品信息commodity_name
        global global_id
        a=[]
        cursor=conn.cursor()
        sql='select commodity_name from commodity where store_id="%s"'%(global_id)
        cursor.execute(sql)
        conn.commit()
        cursor.close()
        for i in cursor.fetchall():
            a.append(i[0])
        self.worcloud_s(str(a))   #生成图片
class Commodity_add(MainForm):# 商品类,,增删除,改,查
    def __init__(self):
        super().__init__()
        tkinter.Label(self.root,text="增加商品信息",font=("微软雅黑", 20)).place(x=260,y=0)
        tkinter.Label(self.root, text="商品编码", font=("微软雅黑", 10)).place(x=0,y=200)
        self.entryss1 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss1.place(x=60,y=200)
        tkinter.Label(self.root, text="商品名称", font=("微软雅黑", 10)).place(x=200,y=200)
        self.entryss2 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss2.place(x=260,y=200)
        self.Text_1 = tkinter.Text(self.root, height=6, width=80,font=("微软雅黑", 10))   #输出标注框
        self.Text_1.place(x=20,y=50)
        tkinter.Label(self.root, text="商品售价", font=("微软雅黑", 10)).place(x=0,y=270)
        self.entryss3 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss3.place(x=60,y=270)
        tkinter.Label(self.root, text="商品进价", font=("微软雅黑", 10)).place(x=0,y=350)
        self.entryss4 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss4.place(x=60,y=350)
        tkinter.Label(self.root, text="生产日期", font=("微软雅黑", 10)).place(x=200,y=270)
        self.entryss5 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss5.place(x=260,y=270)
        tkinter.Label(self.root, text="保质期", font=("微软雅黑", 10)).place(x=200,y=350)
        self.entryss6 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss6.place(x=260,y=350)
        tkinter.Label(self.root, text="商品规格", font=("微软雅黑", 10)).place(x=400,y=270)
        self.entryss7 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss7.place(x=460,y=270)
        tkinter.Label(self.root, text="销售数量", font=("微软雅黑", 10)).place(x=400,y=350)
        self.entryss8 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss8.place(x=460,y=350)
        tkinter.Label(self.root, text="仓库编号", font=("微软雅黑", 10)).place(x=400, y=200)
        self.entryss9 = tkinter.Entry(self.root, font=("微软雅黑", 10))
        self.entryss9.place(x=460, y=200)
        tkinter.Button(self.root,text="确认添加",command=self.add_s,font=("微软雅黑", 15)).place(x=200,y=420)
        tkinter.Button(self.root, text="取消   ", command=self.add_Cancel, font=("微软雅黑",15)).place(x=400,y=420)
        tkinter.Button(self.root, text="返回主菜单", command=self.The_store_1, font=("微软雅黑", 15)).place(x=0, y=450)
        tkinter.Button(self.root, text="返回     ", command=self.Commodity_From_1, font=("微软雅黑", 15)).place(x=600, y=450)
        self.root.mainloop()
    def The_store_1(self):#返回主菜单
        self.root.destroy()
        The_store()
    def Commodity_From_1(self):    #返回商品菜单
        self.root.destroy()
        Commodity_From()
    def drop_Text_1(self):#清除显示信息
        self.Text_1.delete(0.0, tkinter.END)
        self.Text_1.update()
    def add_s(self):  #处理增加
        global global_id
        cursor = conn.cursor()  # 创建sql游标
        if self.entryss1.get() =='':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT,"你的商品编码输入为空")
        elif self.entryss2.get() =='':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT,"你的商品名称输入为空")
        elif self.entryss3.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的商品售价输入为空")
        elif self.entryss4.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的商品进价输入为空")
        elif self.entryss5.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的生产日期输入为空")
        elif self.entryss6.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的保质期输入为空")
        elif self.entryss7.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的商品规格输入为空")
        elif self.entryss8.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的销售数量输入为空")
        elif self.entryss9.get() == '':
            self.drop_Text_1()
            self.Text_1.insert(tkinter.INSERT, "你的仓库编号输入为空")
        else:
            try:
                sql = "insert into commodity values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"  # 添加数据
                cursor.execute(sql,(
                        self.entryss1.get(),  #商品编号
                        self.entryss2.get(),  #商品名称
                        self.entryss3.get(),  #商品售价
                        self.entryss4.get(),  #商品进价
                        self.entryss5.get(), #生产日期
                        self.entryss6.get(),  #保质期
                        self.entryss7.get(),  #商品规格
                        self.entryss8.get(),  #销售数量
                        global_id,           #店铺编号
                        self.entryss9.get(),  #库房编号
                        None                        #顾客编号为空
                                            ))
                conn.commit()   #提交
                cursor.execute('select * from commodity where commodity_id="%s"' % (self.entryss1.get()))
                conn.commit()
                cursor.close()  #关闭游标
                self.drop_Text_1()
                self.Text_1.insert(tkinter.INSERT, "数据添加成功")
                self.Text_1.insert(tkinter.INSERT,cursor.fetchall())
 
            except:
                try:
                    sql = 'select * from commodity where commodity_id="%s"' % (self.entryss1.get())
                    cursor.execute(sql)
                    conn.commit()
                    self.drop_Text_1()
                    self.Text_1.insert(tkinter.INSERT, "数据存在:")
                    self.Text_1.insert(tkinter.INSERT, cursor.fetchall())
                    cursor.close()
                except:
                    self.drop_Text_1()
                    self.Text_1.insert(tkinter.INSERT, "商品数据不符合类型,从新添加:")
    def add_Cancel(self):   #取消输入的信息
        self.entryss1.delete(0, tkinter.END)
        self.entryss2.delete(0, tkinter.END)
        self.entryss3.delete(0, tkinter.END)
        self.entryss4.delete(0, tkinter.END)
        self.entryss5.delete(0, tkinter.END)
        self.entryss6.delete(0, tkinter.END)
        self.entryss7.delete(0, tkinter.END)
        self.entryss8.delete(0, tkinter.END)
        self.entryss9.delete(0, tkinter.END)
        self.Text_1.delete(0.0, tkinter.END)
        self.entryss1.update()
        self.entryss2.update()
        self.entryss3.update()
        self.entryss4.update()
        self.entryss5.update()
        self.entryss6.update()
        self.entryss7.update()
        self.entryss8.update()
        self.entryss9.update()
        self.Text_1.update()
        self.Text_1.insert(tkinter.INSERT,"请选择其他")
        #————————————————————————————店铺————————————————————————————————,
class Commodity_drop(MainForm):  #删除界面
    def __init__(self):
        super().__init__()
        self.Textw = tkinter.Text(self.root, height=18, width=80, font=("微软雅黑", 10))
        self.Textw.place(x=15, y=0)
        tkinter.Label(self.root,text="输入需要删除的商品编号或商品名称",font=("微软雅黑", 20)).place(x=100,y=350)
        self.Entry_1=tkinter.Entry(self.root,font=("微软雅黑", 20))
        self.Entry_1.place(x=20,y=400)
        tkinter.Button(self.root,text="查询",command=self.commodity_select_drop,font=("微软雅黑", 10)).place(x=380,y=400)
        tkinter.Button(self.root, text="返回", command=self.commodity_return, font=("微软雅黑", 10)).place(x=600, y=450)
        tkinter.Button(self.root, text="确定清除", command=self.commodity_confirm, font=("微软雅黑", 10)).place(x=450, y=400)
        tkinter.Button(self.root, text="取消清除", command=self.commodity_confirm, font=("微软雅黑", 10)).place(x=550, y=400)
        self.commodity_refersh()   #显示提示页面
        self.commodity_select()  #显示所有的商品信息
        self.root.mainloop()
    def commodity_return(self): #返回商品菜单
        self.root.destroy()
        Commodity_From()
    def commodity_confirm(self):  #提示确认查询
        self.commodity_refersh()
        self.Textw.insert(tkinter.INSERT,"请先查询\n")
        self.commodity_select()
    def commodity_refersh(self):  #刷新界面
        self.Textw.delete(0.0,tkinter.END)
        self.Textw.update()
        self.Textw.insert(tkinter.INSERT,
                          "----------------------------------请输入你要删除的商品编号,或商品名称----------------------------------\n")
    def commodity_select(self):  #查询所有的商品
        cursor = conn.cursor()  # 创建sql游标
        sql = 'select * from commodity '   # 查询所有商品的信息
        cursor.execute(sql)
        self.Textw.insert(tkinter.INSERT, "你的商品信息为:\n")
        for fetchone in cursor.fetchall():
            self.Textw.insert(tkinter.INSERT, fetchone)
            self.Textw.insert(tkinter.INSERT, '\n')
    #——————————————————————————————————————————————————————删除页面————————————————————————————————————————————————————
    def commodity_select_drop(self):  #查询需要删除的商品信息
        if self.Entry_1.get() == '':
            self.commodity_refersh()
            self.Textw.insert(tkinter.INSERT, "你的输入为空:\n")
            self.commodity_select()
        else:
            try:
                def selecte_id_look():
                    cursor = conn.cursor()  # 创建sql游标
                    sql1 = 'select * from commodity where commodity_id="%s"' % (self.Entry_1.get())  # 查询需要删除的信息
                    cursor.execute(sql1)
                    conn.commit()  # 提交
                    cursor.close()  # 关闭游标
                    self.commodity_refersh()
                    self.Textw.insert(tkinter.INSERT, "你输入的的商品编号查询的信息为:\n")
                    return cursor.fetchall()
                def selecte_name_look():
                    cursor = conn.cursor()  # 创建sql游标
                    sql2 = 'select * from commodity where commodity_name="%s"' % (self.Entry_1.get())  # 查询需要删除的信息
                    cursor.execute(sql2)
                    conn.commit()  # 提交
                    cursor.close()  # 关闭游标
                    self.commodity_refersh()
                    self.Textw.insert(tkinter.INSERT, "你输入的的商品名称查询的信息为:\n")
                    return cursor.fetchall()
                def button_id():
                    tkinter.Button(self.root, text="确定清除", command=delete_id,
                                   font=("微软雅黑", 10)).place(x=450, y=400)
                    tkinter.Button(self.root, text="取消清除", command=self.commodity_select, font=("微软雅黑", 10)).place(
                        x=550, y=400)
                def button_name():
                    tkinter.Button(self.root, text="确定清除", command=delete_name,
                                   font=("微软雅黑", 10)).place(x=450, y=400)
                    tkinter.Button(self.root, text="取消清除", command=self.commodity_select, font=("微软雅黑", 10)).place(
                        x=550, y=400)
                def delete_id():
                    cursor = conn.cursor()  # 创建sql游标
                    sql = 'delete from commodity where commodity_id="%s"' % (self.Entry_1.get())
                    cursor.execute(sql)
                    conn.commit()  # 提交
                    cursor.close()  # 关闭游标
                    self.Textw.insert(tkinter.INSERT, "数据删除成功\n")
                def delete_name():
                    cursor = conn.cursor()  # 创建sql游标
                    sql = 'delete from commodity where commodity_name="%s"' % (self.Entry_1.get())
                    cursor.execute(sql)
                    conn.commit()  # 提交
                    cursor.close()  # 关闭游标
                    self.Textw.insert(tkinter.INSERT, "数据删除成功\n")
                if bool(selecte_id_look())==True:
                    for fetchone in selecte_id_look():
                        self.Textw.insert(tkinter.INSERT, fetchone)
                        self.Textw.insert(tkinter.INSERT, '\n')
                    button_id()
                elif bool(selecte_name_look())==True:
                    for fetchone in selecte_name_look():
                        self.Textw.insert(tkinter.INSERT, fetchone)
                        self.Textw.insert(tkinter.INSERT, '\n')
                    button_name()
                else:
                    self.commodity_refersh()
                    self.Textw.insert(tkinter.INSERT, "你输入的的商品信息错误或没有此商品:\n")
            except:
                self.Textw.insert(tkinter.INSERT, "程序运行故障:\n")
        #_____________________________________修改页面————————————————————————————————————————————————————————————
class Commodity_delente(MainForm): #修改
    def __init__(self):
        super().__init__()
        photo=tkinter.PhotoImage(file=COMMODITY_DELETE_PATH)
        tkinter.Label(self.root, image=photo, width=680, height=500).place(x=0, y=0)
        tkinter.Label(self.root,text="修改商品信息",font=("黑体",20)).place(x=250,y=0)
        tkinter.Label(self.root, text="所有商品信息", font=("微软雅黑", 10)).place(x=110, y=30)
        self.Text_select=tkinter.Text(self.root,width=40,height=13,font=("微软雅黑", 10))  #显示所有商品信息
        self.Text_select.place(x=10,y=50)
        tkinter.Label(self.root, text="修改商品信息", font=("微软雅黑", 10)).place(x=110, y=300)  #显示查询和修改的商品信息
        self.Text_delete = tkinter.Text(self.root, width=40, height=8,font=("微软雅黑", 10))
        self.Text_delete.place(x=10, y=320)
        tkinter.Label(self.root, text="查询商品信息", font=("微软雅黑", 10)).place(x=500, y=30)
        tkinter.Label(self.root, text="输入商品编号:", font=("微软雅黑", 10)).place(x=350, y=50)
        self.Entry_id = tkinter.Entry(self.root,font=("微软雅黑", 10))   #输入商品编号
        self.Entry_id.place(x=450, y=50)
        tkinter.Button(self.root, text="查询",command=self.select_id_commodity, font=("微软雅黑", 7)).place(x=630, y=50)
        tkinter.Label(self.root, text="修改商品内容:", font=("微软雅黑", 10)).place(x=350, y=100)
        self.Entry_update = tkinter.Entry(self.root, font=("微软雅黑", 10))  #输入修改的商品信息
        self.Entry_update.place(x=450, y=100)
        tkinter.Button(self.root,text="商品名称",command=self.update_name,font=("微软雅黑",10)).place(x=450,y=150)
        tkinter.Button(self.root, text="商品售价", command=self.update_price, font=("微软雅黑", 10)).place(x=550, y=150)
        tkinter.Button(self.root, text="商品进价", command=self.update_pur_price, font=("微软雅黑", 10)).place(x=450, y=200)
        tkinter.Button(self.root, text="生产日期", command=self.update_production, font=("微软雅黑", 10)).place(x=550, y=200)
        tkinter.Button(self.root, text="保质期", command=self.update_life, font=("微软雅黑", 10)).place(x=450, y=250)
        tkinter.Button(self.root, text="商品规格", command=self.update_speci, font=("微软雅黑", 10)).place(x=550, y=250)
        tkinter.Button(self.root,text="库房编号",command=self.warehouse_id,font=("微软雅黑",10)).place(x=450,y=300)
        tkinter.Button(self.root, text="返回", command=self.commodity_return, font=("微软雅黑", 10)).place(x=600, y=450)
        self.selecte_Text_query()   #跟新并查询商品信息
        self.root.mainloop()
    def commodity_return(self):  #返回商品菜单
        self.root.destroy()
        Commodity_From()
    def selecte_Text_query(self):  # 更新并查询商品信息
        self.Text_select.delete(0.0, tkinter.END)
        self.Text_select.update()
        try:
            cursor=conn.cursor()
            sql='select * from commodity '
            cursor.execute(sql)
            conn.commit()
            cursor.close()
            for i in cursor.fetchall():
                self.Text_select.insert(tkinter.INSERT,i)
                self.Text_select.insert(tkinter.INSERT,'\n')
        except:
            pass
    def delete_Text_query(self): #跟新输出显示框的信息
        self.Text_delete.delete(0.0,tkinter.END)
        self.Text_delete.update()
        self.Text_delete.insert(tkinter.INSERT,"你查询到的商品为:\n")
    def select_id_commodity(self):   #根据id查询信息
        def commodity_select_id():  #查询商品信息
            def select_id():
                cursor = conn.cursor()  # 创建sql游标
                sql = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
                cursor.execute(sql)
                conn.commit()  # 提交
                cursor.close()  # 关闭游标
                return cursor.fetchall()
            if bool(select_id())==True:
                for i in select_id():
                    self.Text_delete.insert(tkinter.INSERT, i)
                    self.Text_delete.insert(tkinter.INSERT,'\n')
            else:
                self.Text_delete.insert(tkinter.INSERT,"没有该商品信息:\n")
        if self.Entry_id.get()=='':
            self.delete_Text_query()
            self.Text_delete.insert(tkinter.INSERT,"你的输入为空:\n请从新输入;\n")
        else:
            commodity_select_id()
    def update_name(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set commodity_name="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的商品名称修改成功;\n")
        except:
            pass
    def update_price(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set commodity_price="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的商品售价修改成功;\n")
        except:
            pass
    def update_pur_price(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set commodity_pur_price="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的商品进价修改成功;\n")
        except:
            pass
    def update_production(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set commodity_production="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的生产日期修改成功;\n")
        except:
            pass
    def update_life(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set commodity_life="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的保质期修改成功;\n")
        except:
            pass
    def update_speci(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set commodity_speci="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的商品规格修改成功;\n")
        except:
            pass
    def warehouse_id(self):
        self.delete_Text_query()
        try:
            cursor=conn.cursor()
            sql='update commodity set warehouse_id="%s" where commodity_id="%s"'%(self.Entry_update.get(),self.Entry_id.get())
            cursor.execute(sql)
            conn.commit()
            sql2 = 'select * from commodity where commodity_id="%s"' % (self.Entry_id.get())
            cursor.execute(sql2)
            conn.commit()
            self.Text_delete.insert(tkinter.INSERT,cursor.fetchall())
            cursor.close()
            self.Text_delete.insert(tkinter.INSERT, "\n你的库房修改成功;\n")
        except:
            pass
class Commodity_select(MainForm) :  #查询
    def __init__(self):
        super().__init__()
        tkinter.Label(self.root, text="查询商品信息", font=("黑体", 20)).place(x=250, y=0)
        tkinter.Label(self.root, text="所有商品信息", font=("微软雅黑", 10)).place(x=110, y=30)
        self.Text_select = tkinter.Text(self.root, width=40, height=13, font=("微软雅黑", 10))  # 显示所有商品信息
        self.Text_select.place(x=10, y=50)
        tkinter.Label(self.root, text="查询商品信息", font=("微软雅黑", 10)).place(x=500, y=30)
        #商品编号
        tkinter.Label(self.root, text="输入商品编号查询:", font=("微软雅黑", 10)).place(x=350, y=50)
        self.Entry_id = tkinter.Entry(self.root, font=("微软雅黑", 10))  # 输入商品编号
        self.Entry_id.place(x=450, y=50)
        tkinter.Button(self.root, text="查询",command=self.selecte_id_commodity ,font=("微软雅黑", 7)).place(x=630, y=50)
        tkinter.Label(self.root, text="所有商品编号信息", font=("微软雅黑", 10)).place(x=100, y=300)  # 显示查询和修改的商品信息
        self.Text_id = tkinter.Text(self.root, width=30, height=8, font=("微软雅黑", 10))
        self.Text_id.place(x=10, y=320)
        # 商品名称
        tkinter.Label(self.root, text="输入商品名称查询:", font=("微软雅黑", 10)).place(x=350, y=100)
        self.Entry_name = tkinter.Entry(self.root, font=("微软雅黑", 10))  # 输入修改的商品信息
        self.Entry_name.place(x=450, y=100)
        tkinter.Button(self.root, text="查询",command=self.selecte_name_commodity, font=("微软雅黑", 7)).place(x=630, y=100)
        tkinter.Label(self.root, text="所有商品名称信息", font=("微软雅黑", 10)).place(x=300, y=300)  # 显示查询和修改的商品信息
        self.Text_name = tkinter.Text(self.root, width=30, height=8, font=("微软雅黑", 10))
        self.Text_name.place(x=210, y=320)
        #商品库房名称
        tkinter.Label(self.root, text="输入库房名称查询:", font=("微软雅黑", 10)).place(x=350, y=150)
        self.Entry_warehouse = tkinter.Entry(self.root, font=("微软雅黑", 10))  # 输入修改的商品信息
        self.Entry_warehouse.place(x=450, y=150)
        tkinter.Button(self.root, text="查询",command=self.selecte_warehouse_commodity, font=("微软雅黑", 7)).place(x=630, y=150)
        tkinter.Label(self.root, text="库房所有商品信息", font=("微软雅黑", 10)).place(x=500, y=300)  # 显示查询和修改的商品信息
        self.Text_warehouse = tkinter.Text(self.root, width=30, height=8, font=("微软雅黑", 10))
        self.Text_warehouse.place(x=410, y=320)
        tkinter.Button(self.root, text="返回", command=self.commodity_return, font=("微软雅黑", 10)).place(x=600, y=450)
        self.selecte_Text_query()  # 跟新并查询商品信息
        self.root.mainloop()
    def commodity_return(self): #返回商品界面
        self.root.destroy()
        Commodity_From()
    def selecte_Text_query(self):  # 更新并查询商品信息
        self.Text_select.delete(0.0, tkinter.END)
        self.Text_select.update()
        try:
            cursor = conn.cursor()
            sql = 'select * from commodity '
            cursor.execute(sql)
            conn.commit()
            cursor.close()
            for i in cursor.fetchall():
                self.Text_select.insert(tkinter.INSERT, i)
                self.Text_select.insert(tkinter.INSERT, '\n')
        except:
            pass
    def selecte_id_commodity(self): #根据商品id查询商品信息
        def text_id_query():  #清空text里面的信息
            self.Text_id.delete(0.0,tkinter.END)
            self.Text_id.update()
        if self.Entry_warehouse.get()=='':
            text_id_query()
            self.Text_id.insert(tkinter.INSERT,"你输入的库房账号为空\n")
        else:
            text_id_query()
            def select_id():
                cursor=conn.cursor()
                sql='select * from commodity where warehouse_id="%s"'%(self.Entry_warehouse.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if bool(select_id())==True:
                for i in select_id():
                    self.Text_id.insert(tkinter.INSERT,i)
                    self.Text_id.insert(tkinter.INSERT,'\n')
            else:
                self.Text_id.insert(tkinter.INSERT,"你输入的商品不在店铺\n")
    def selecte_name_commodity(self): #根据商品name查询商品信息
        def text_name_query():  #清空text里面的信息
            self.Text_name.delete(0.0,tkinter.END)
            self.Text_name.update()
        if self.Entry_name.get()=='':
            text_name_query()
            self.Text_name.insert(tkinter.INSERT,"你输入的商品名称为空\n")
        else:
            text_name_query()
            def select_name():
                cursor=conn.cursor()
                sql='select * from commodity where commodity_name="%s"'%(self.Entry_name.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if bool(select_name())==True:
                for i in select_name():
                    self.Text_name.insert(tkinter.INSERT,i)
                    self.Text_name.insert(tkinter.INSERT,'\n')
            else:
                self.Text_name.insert(tkinter.INSERT,"你输入的商品名称查询不在店铺\n")
    def selecte_warehouse_commodity(self): #根据商品id查询商品信息
        def text_warehouse_query():  #清空text里面的信息
            self.Text_warehouse.delete(0.0,tkinter.END)
            self.Text_warehouse.update()
        if self.Entry_warehouse.get()=='':
            text_warehouse_query()
            self.Text_warehouse.insert(tkinter.INSERT,"你输入的库房为空\n")
        else:
            text_warehouse_query()
            def select_warehouse():
                cursor=conn.cursor()
                sql='select * from commodity where commodity_id="%s"'%(self.Entry_id.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if bool(select_warehouse())==True:
                for i in select_warehouse():
                    self.Text_warehouse.insert(tkinter.INSERT,i)
                    self.Text_warehouse.insert(tkinter.INSERT,'\n')
            else:
                self.Text_warehouse.insert(tkinter.INSERT,"你输入的库房查询不在店铺\n")
class Shop_From(MainForm):  #店铺界面设置,店铺可以查询,修改,导出仓库信息全部商品
    def __init__(self):
        super().__init__()
        self.button1 = tkinter.Button(self.root, text="顾客", command=self.Customer, height=3, width=10).place(x=0, y=430)
        self.button2 = tkinter.Button(self.root, text="商品", command=self.Commodiyt_from_1, height=3, width=10).place(x=150, y=430)
        self.button3 = tkinter.Button(self.root, text="库房", command=self.Warehouse_1, height=3, width=10).place(x=300, y=430)
        self.button4 = tkinter.Button(self.root, text="导入导出", command=self.export_1, height=3, width=10).place(x=450, y=430)
        self.button1 = tkinter.Button(self.root, text="返回", command=self.The_store_1, height=3, width=10).place(x=600, y=430)
        self.root.mainloop()
    def Commodiyt_from_1(self):#进入商品界面
        self.root.destroy()
        Commodity_From()
    def The_store_1(self):#进入主界面
        self.root.destroy()
        The_store()
    def Warehouse_1(self):  # 进入库房界面
        self.root.destroy()
        Warehouse()
    def export_1(self):#进入导出界面
        self.root.destroy()
        Shop_export()
    def Customer(self):#  顾客管理
        def remove_Text_purint():  #清空Customer_Text_purint数据
            Customer_Text_purint.delete(0.0, tkinter.END)
            Customer_Text_purint.update()
        def import_user():  #导出所有用户信息到Customer_Text中
            cursor = conn.cursor()
            sql = 'select * from customer'
            cursor.execute(sql)
            Customer_Text.delete(0.0, tkinter.END)
            Customer_Text.update()
            Customer_Text.insert(tkinter.INSERT, '你的所有商品信息\n')
            for x in cursor.fetchall():
                Customer_Text.insert(tkinter.INSERT,x)
                Customer_Text.insert(tkinter.INSERT, '\n')
            conn.commit()
            cursor.close()
        def query_user():# 查询用户信息
            cursor=conn.cursor()
            sql='select * from customer where customer_id="%s" and customer_password="%s"'%(Customer_Entry_user.get(),Customer_Entry_password.get())
            cursor.execute(sql)
            conn.commit()
            cursor.close()
            return cursor.fetchall()
        #....................修改用户名.........................
        def delete_user():#  修改用户信息
            def delete_user_od() : #修改
                cursor = conn.cursor()
                sql='update customer set customer_name="%s" where customer_id="%s"'%(Customer_Entry_name.get(),Customer_Entry_user.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
            if Customer_Entry_user.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "用户名输入为空\n")
            elif Customer_Entry_password.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "密码输入为空\n")
            else:
                try:
                    remove_Text_purint()   #清空
                    Customer_Text_purint.insert(tkinter.INSERT,'你原用户信息\n')  # 提示信息
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  #查询
                    Customer_Text_purint.insert(tkinter.INSERT, "\n你修改后用户信息\n")  # 查询
                    delete_user_od()  #进行修改
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  # 在查询
                except:
                    remove_Text_purint()
                    Customer_Text_purint.insert(tkinter.INSERT, "用户修改失败\n")
        # ....................修改密码.........................
        def delete_password():#修改密码
            def delete_user_od() : #对密码修改
                cursor = conn.cursor()
                sql='update customer set customer_password="%s" where customer_id="%s"'%(Customer_Entry_password.get(),Customer_Entry_user.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
            def query_user():  # 查询用户信息
                cursor = conn.cursor()
                sql = 'select * from customer where customer_id="%s"'% (
                Customer_Entry_user.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if Customer_Entry_user.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "用户名输入为空\n")
            elif Customer_Entry_password.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "密码输入为空\n")
            else:
                try:
                    remove_Text_purint()   #清空
                    Customer_Text_purint.insert(tkinter.INSERT,'你原用户信息\n')  # 提示信息
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  #查询
                    Customer_Text_purint.insert(tkinter.INSERT, "\n你修改后的用户信息\n")  # 查询
                    delete_user_od()  #进行修改
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  # 在查询
                except:
                    remove_Text_purint()
                    Customer_Text_purint.insert(tkinter.INSERT, "用户修改失败\n")
            # ....................增加用户.........................
        def add_user():  #增加用户
            def delete_user_add() : #增加修改
                cursor = conn.cursor()
                sql='insert into customer values(%s,%s,%s,0)'%(Customer_Entry_user.get(),Customer_Entry_name.get(),Customer_Entry_password.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
            def query_user():  # 查询用户信息
                cursor = conn.cursor()
                sql = 'select * from customer where customer_id="%s"'% (
                Customer_Entry_user.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if Customer_Entry_user.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "用户名输入为空\n")
            elif Customer_Entry_password.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "密码输入为空\n")
            else:
                try:
                    remove_Text_purint()   #清空
                    Customer_Text_purint.insert(tkinter.INSERT, "你增加的用户信息\n")  # 查询
                    delete_user_add()  #进行修改
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  # 在查询
                except:
                    remove_Text_purint()
                    Customer_Text_purint.insert(tkinter.INSERT, "用户已存在,用户添加失败\n")
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  # 在查询
            # ....................删除用户.........................
        def drop_user():  #删除用户
            def delete_user_drop() : #删除修改
                cursor = conn.cursor()
                sql='delete from customer where customer_id="%s" and customer_password="%s"'%(Customer_Entry_user.get(),Customer_Entry_password.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
            def query_user():  # 查询用户信息
                cursor = conn.cursor()
                sql = 'select * from customer where customer_id="%s"'% (
                Customer_Entry_user.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if Customer_Entry_user.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "用户名输入为空\n")
            elif Customer_Entry_password.get()=='':
                remove_Text_purint()
                Customer_Text_purint.insert(tkinter.INSERT, "密码输入为空\n")
            else:
                try:
                    remove_Text_purint()   #清空
                    Customer_Text_purint.insert(tkinter.INSERT, "你删除的用户信息\n")  # 查询
                    delete_user_drop()  #删除
                    Customer_Text_purint.insert(tkinter.INSERT, query_user())  # 在查询
                except:
                    remove_Text_purint()
                    Customer_Text_purint.insert(tkinter.INSERT, "用户输入不对,用户删除失败\n")
        tkinter.Label(self.root, text="顾客信息", font=("黑体", 20)).place(x=260, y=0)
        Customer_Text=tkinter.Text(self.root,width=50,height=20,font=("微软雅黑",10))
        Customer_Text.place(x=0,y=30)
        import_user()
        tkinter.Label(self.root, text="用户信息修改", font=("黑体", 10)).place(x=500, y=10)
        tkinter.Label(self.root, text="用户账号", font=("黑体", 10)).place(x=420, y=50)
        tkinter.Label(self.root, text="密    码", font=("黑体", 10)).place(x=420, y=100)
        tkinter.Label(self.root, text="用 户 名", font=("黑体", 10)).place(x=420, y=150)
        tkinter.Label(self.root, text="电    话", font=("黑体", 10)).place(x=420, y=200)
        Customer_Entry_user = tkinter.Entry(self.root, font=("微软雅黑", 10))  # 显示框
        Customer_Entry_user.place(x=500,y=50)
        Customer_Entry_password = tkinter.Entry(self.root, font=("微软雅黑", 10),show='*')  # 显示框
        Customer_Entry_password.place(x=500,y=100)
        Customer_Entry_name = tkinter.Entry(self.root, font=("微软雅黑", 10))  # 显示框
        Customer_Entry_name.place(x=500, y=150)
        Customer_Entry_phon = tkinter.Entry(self.root, font=("微软雅黑", 10))  # 显示框
        Customer_Entry_phon.place(x=500, y=200)
        tkinter.Button(self.root,text="修改用户信息",command=delete_user,font=('微软雅黑',10)).place(x=420,y=250)
        tkinter.Button(self.root, text="修改密码", command=delete_password, font=('微软雅黑', 10)).place(x=420, y=300)
        tkinter.Button(self.root, text="添加用户", command=add_user, font=('微软雅黑', 10)).place(x=560, y=250)
        tkinter.Button(self.root, text="删除用户", command='1111', font=('微软雅黑', 10)).place(x=560, y=300)
        Customer_Text_purint=tkinter.Text(self.root,width=30,height=3,font=("微软雅黑",10))
        Customer_Text_purint.place(x=420, y=350)
        Customer_Text_purint.insert(tkinter.INSERT,"输入正确的账号密码可以修改用户名\n输入正确的账号可以修改密码\n"
                                                   "输入没有的账号,用户名,密码可以添加账号\n输入正确的账号,密码可以删除账号")
class Shop_export(MainForm):#导入导出
    def __init__(self):
        super().__init__()
        tkinter.Label(self.root, text="导入导出顾客商品信息", font=("黑体", 20)).place(x=200, y=0)
        self.prompt=tkinter.Text(self.root,width=55,height=5,font=("微软雅黑",15))
        self.prompt.place(x=10,y=50)
        #————————————————导入————————————————————————
        tkinter.Label(self.root,text="输入导入的绝对地址:",font=("微软雅黑",15)).place(x=70,y=200)
        self.leading_in=tkinter.Entry(self.root,font=("黑体",15))
        self.leading_in.place(x=50,y=250)
        tkinter.Button(self.root, text="导入顾客", command=self.leading_in_customer,font=("微软雅黑",15)).place(x=100, y=300)
        tkinter.Button(self.root, text="导入商品", command=self.leading_in_commodity, font=("微软雅黑",15)).place(
            x=100, y=350)
        #————————————————导出————————————————
        tkinter.Label(self.root, text="输入导出的绝对地址:", font=("微软雅黑", 15)).place(x=420, y=200)
        self.leading_out = tkinter.Entry(self.root, font=("黑体", 15))
        self.leading_out.place(x=400, y=250)
        tkinter.Button(self.root, text="导出顾客", command=self.leading_out_customer, font=("微软雅黑",15)).place(x=450, y=300)
        tkinter.Button(self.root, text="导出商品", command=self.leading_out_commodity,font=("微软雅黑",15)).place(
            x=450, y=350)
        tkinter.Button(self.root, text="查看顾客", command=self.look_customer, font=("微软雅黑", 15)).place(x=0, y=430)
        tkinter.Button(self.root, text="查看商品", command=self.look_commodity, font=("微软雅黑", 15)).place(x=300, y=430)
        tkinter.Button(self.root, text="返回商品", command=self.The_store_1,font=("微软雅黑",15)).place(x=600,y=430)
        self.root.mainloop()
    def The_store_1(self): #返回商品
        self.root.destroy()
        The_store()
    def clean_prompt(self):  #清除提示框
        self.prompt.delete(0.0,tkinter.END)
        self.prompt.update()
    def look_customer(self): #查看顾客
        cursor=conn.cursor()
        cursor.execute("select * from customer")
        conn.commit()
        cursor.close()
        self.clean_prompt()
        for i in cursor.fetchall():
            self.prompt.insert(tkinter.INSERT,i)
    def look_commodity(self): #查看商品
        cursor=conn.cursor()
        cursor.execute("select * from commodity")
        conn.commit()
        cursor.close()
        self.clean_prompt()
        for i in cursor.fetchall():
            self.prompt.insert(tkinter.INSERT,i)
    def leading_in_customer(self):  #导入顾客信息
        global global_id
        self.clean_prompt()
        address=self.leading_in.get()
        df_customer=pd.read_excel(address)
        def go_shopping():  # 查看购物情况
            sql = ' select sum(commodity_amount) from commodity GROUP BY customer_id;'
            cursor.execute(sql)
            conn.commit()
            return cursor.fetchone()
        cursor = conn.cursor()  # 创建游标
        try:
            for co in range(len(df_customer["用户账号"])):
                try:
                    sql = 'insert into customer values (%s,%s,%s,%s,%s,%s);'  # 添加数据
                    cursor.execute(sql, (
                        df_customer["用户账号"][co],
                        df_customer["密码"][co],
                        df_customer["用户名"][co],
                        df_customer["电话"][co],
                        go_shopping(),
                        global_id)
                                   )  # 执行添加数据
                    conn.commit()  # 提交
                except:
                    self.prompt.insert(tkinter.INSERT,"你的用户账号已导入\n")
                    self.prompt.insert(tkinter.INSERT,df_customer["用户账号"][co])
                    self.prompt.insert(tkinter.INSERT, "\n")
        except:
            self.prompt.insert(tkinter.INSERT, "错误:你导入的信息不符合导入格式\n")
        cursor.close()  # 关闭游标
    def leading_in_commodity(self):  #导入顾客信息
        global global_id
        self.clean_prompt()
        address = self.leading_in.get()
        df_commodity = pd.read_excel(address)
        cursor = conn.cursor()  # 创建游标
        try:
            for co in range(len(df_commodity["商品编码"])):
                try:
                    sql = 'insert into commodity values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'  # 添加数据
                    cursor.execute(sql, (
                        df_commodity["商品编码"][co],
                        df_commodity["商品名称"][co],
                        df_commodity["商品售价"][co],
                        df_commodity["商品进价"][co],
                        df_commodity["生产日期"][co],
                        df_commodity["保质期"][co],
                        df_commodity["商品规格"][co],
                        df_commodity["销售数量"][co],
                        global_id,
                        df_commodity["库房编号"][co],
                        df_commodity["顾客编号"][co])
                                   )  # 执行添加数据
                    conn.commit()  # 提交
                except:
                    self.prompt.insert(tkinter.INSERT, "你的商品账号已导入\n")
                    self.prompt.insert(tkinter.INSERT, df_commodity["商品编码"][co])
                    self.prompt.insert(tkinter.INSERT, "\n")
        except:
            self.prompt.insert(tkinter.INSERT, "错误:你导入的信息不符合导入格式\n")
        cursor.close()  # 关闭游标
    def leading_out_customer(self): #导出顾客
        def select_():
            cursor = conn.cursor()
            cursor.execute("select * from customer")
            conn.commit()
            cursor.close()
            return cursor.fetchall()
        b=['顾客帐号','顾客密码','顾客名称','顾客电话','消费情况','店铺帐号']
        c=self.leading_out.get()
        df=pd.DataFrame(select_(),columns=b)
        try:
            df.to_excel(c,index=0)
        except:
            self.prompt.insert(tkinter.INSERT,"地址格式错误:")
    def leading_out_commodity(self): #导出顾客
        def select_commoidty():
            cursor = conn.cursor()
            cursor.execute("select * from commodity")
            conn.commit()
            cursor.close()
            return cursor.fetchall()
        b=['商品编号','商品名称','商品售价','商品进价','生产日期','保质期','商品规格','销售数量','店铺编号','库房编号','顾客编号']
        c=self.leading_out.get()
        df=pd.DataFrame(select_commoidty(),columns=b)
        try:
            df.to_excel(c,index=0)
        except:
            self.prompt.insert(tkinter.INSERT,"地址格式错误:")
class Warehouse(MainForm):#库房
    def __init__(self):
        super().__init__()
        tkinter.Label(self.root, text="库房", font=("黑体", 20)).place(x=300, y=0)
        #库房统计查询
        tkinter.Button(self.root, text="库存情况", command=self.Warehouse_situation, height=3, width=10).place(x=0, y=430)
        tkinter.Button(self.root, text="库存导出", command=self.leading_out_warehouse, height=3, width=10).place(x=300, y=430)
        tkinter.Button(self.root, text="返回菜单", command=self.The_store_1, height=3, width=10).place(x=600, y=430)
        self.root.mainloop()
    def The_store_1(self):  #返回菜单
        self.root.destroy()
        The_store()
    def Warehouse_situation(self):  #库存情况
        tkinter.Label(self.root, text="店铺帐号:", font=("微软雅黑", 15)).place(x=100,y=200)
        self.entry_warehouse = tkinter.Entry(self.root, font=("微软雅黑", 15))
        self.entry_warehouse.place(x=250, y=200)
        tkinter.Label(self.root, text="店铺密码:", font=("微软雅黑", 15)).place(x=100, y=250)
        self.entry_password = tkinter.Entry(self.root, font=("微软雅黑", 15))
        self.entry_password.place(x=250, y=250)
        tkinter.Button(self.root, text="查询", command=self.Warehouse_confirm,font=("微软雅黑", 10)).place(x=600, y=200)
        self.Text_warehouse=tkinter.Text(self.root,width=80,height=7,font=("微软雅黑", 10))
        self.Text_warehouse.place(x=12,y=30)
        tkinter.Label(self.root, text="导出地址:", font=("微软雅黑", 15)).place(x=100, y=300)
        self.leading_warehouse_Entry = tkinter.Entry(self.root, font=("微软雅黑", 15))
        self.leading_warehouse_Entry.place(x=250, y=300)
    def remove_Text_warehouse(self):
        self.Text_warehouse.delete(0.0,tkinter.END)
        self.Text_warehouse.update()
    def Warehouse_confirm(self):  #执行查询结果
        self.remove_Text_warehouse()
        def selecte_warehouse():
            try:
                cursor = conn.cursor()
                sql=' select commodity_name,count(*),warehouse_id from commodity GROUP BY commodity_name having ' \
                    'warehouse_id=(select warehouse_id from warehouse where warehouse_id="%s"' \
                    ' and warehouse_password="%s")'%(self.entry_warehouse.get(),self.entry_password.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                self.remove_Text_warehouse()
                return cursor.fetchall()
            except:
                pass
        if bool(selecte_warehouse())==True:
            self.Text_warehouse.insert(tkinter.INSERT, "商品名称,库存,库房号:\n")
            for i in selecte_warehouse():
                self.Text_warehouse.insert(tkinter.INSERT,i)
                self.Text_warehouse.insert(tkinter.INSERT,'\n')
        else:
            self.Text_warehouse.insert(tkinter.INSERT,"库房账号,或密码输入不对\n")
    def leading_out_warehouse(self):  #导出库存
        self.remove_Text_warehouse()
        try:
            def selecte_warehouse():
                cursor = conn.cursor()
                sql = 'select commodity_name,count(*),warehouse_id from commodity group by commodity_name having warehouse_id="%s"'%(self.entry_warehouse.get())
                cursor.execute(sql)
                conn.commit()
                cursor.close()
                return cursor.fetchall()
            if bool(selecte_warehouse())==True:
                df=pd.DataFrame(selecte_warehouse(),columns=["商品名称","剩余数量","库房名称"])
                df.to_excel(self.leading_warehouse_Entry.get(),index=0)
                self.Text_warehouse.insert(tkinter.INSERT, "库存导出成功\n")
            else:self.Text_warehouse.insert(tkinter.INSERT,"请先查库存\n")
        except:
            self.Text_warehouse.insert(tkinter.INSERT,"程序运行错误:\n")
if __name__=="__main__":
    conn=pymysql.connect(   #连接MySQL
        host='localhost',   #本地服务器
        port=3306, #服务器端口
        user='root', #用户名
        password='123456',
        db='cpsim',
        charset='utf8'
        )
    global_id = 0
    The_login()
    conn.close()
登录后复制

以上是python如何实现商品进销存管理系统的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql 是否要付费 mysql 是否要付费 Apr 08, 2025 pm 05:36 PM

MySQL 有免费的社区版和收费的企业版。社区版可免费使用和修改,但支持有限,适合稳定性要求不高、技术能力强的应用。企业版提供全面商业支持,适合需要稳定可靠、高性能数据库且愿意为支持买单的应用。选择版本时考虑的因素包括应用关键性、预算和技术技能。没有完美的选项,只有最合适的方案,需根据具体情况谨慎选择。

mysql安装后怎么使用 mysql安装后怎么使用 Apr 08, 2025 am 11:48 AM

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

mySQL下载完安装不了 mySQL下载完安装不了 Apr 08, 2025 am 11:24 AM

MySQL安装失败的原因主要有:1.权限问题,需以管理员身份运行或使用sudo命令;2.依赖项缺失,需安装相关开发包;3.端口冲突,需关闭占用3306端口的程序或修改配置文件;4.安装包损坏,需重新下载并验证完整性;5.环境变量配置错误,需根据操作系统正确配置环境变量。解决这些问题,仔细检查每个步骤,就能顺利安装MySQL。

mysql下载文件损坏无法安装的修复方案 mysql下载文件损坏无法安装的修复方案 Apr 08, 2025 am 11:21 AM

MySQL下载文件损坏,咋整?哎,下载个MySQL都能遇到文件损坏,这年头真是不容易啊!这篇文章就来聊聊怎么解决这个问题,让大家少走弯路。读完之后,你不仅能修复损坏的MySQL安装包,还能对下载和安装过程有更深入的理解,避免以后再踩坑。先说说为啥下载文件会损坏这原因可多了去了,网络问题是罪魁祸首,下载过程中断、网络不稳定都可能导致文件损坏。还有就是下载源本身的问题,服务器文件本身就坏了,你下载下来当然也是坏的。另外,一些杀毒软件过度“热情”的扫描也可能造成文件损坏。诊断问题:确定文件是否真的损坏

mysql 需要互联网吗 mysql 需要互联网吗 Apr 08, 2025 pm 02:18 PM

MySQL 可在无需网络连接的情况下运行,进行基本的数据存储和管理。但是,对于与其他系统交互、远程访问或使用高级功能(如复制和集群)的情况,则需要网络连接。此外,安全措施(如防火墙)、性能优化(选择合适的网络连接)和数据备份对于连接到互联网的 MySQL 数据库至关重要。

mysql安装后怎么优化数据库性能 mysql安装后怎么优化数据库性能 Apr 08, 2025 am 11:36 AM

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

如何针对高负载应用程序优化 MySQL 性能? 如何针对高负载应用程序优化 MySQL 性能? Apr 08, 2025 pm 06:03 PM

MySQL数据库性能优化指南在资源密集型应用中,MySQL数据库扮演着至关重要的角色,负责管理海量事务。然而,随着应用规模的扩大,数据库性能瓶颈往往成为制约因素。本文将探讨一系列行之有效的MySQL性能优化策略,确保您的应用在高负载下依然保持高效响应。我们将结合实际案例,深入讲解索引、查询优化、数据库设计以及缓存等关键技术。1.数据库架构设计优化合理的数据库架构是MySQL性能优化的基石。以下是一些核心原则:选择合适的数据类型选择最小的、符合需求的数据类型,既能节省存储空间,又能提升数据处理速度

MySQL安装后服务无法启动的解决办法 MySQL安装后服务无法启动的解决办法 Apr 08, 2025 am 11:18 AM

MySQL拒启动?别慌,咱来排查!很多朋友安装完MySQL后,发现服务死活启动不了,心里那个急啊!别急,这篇文章带你从容应对,揪出幕后黑手!读完后,你不仅能解决这个问题,还能提升对MySQL服务的理解,以及排查问题的思路,成为一名更强大的数据库管理员!MySQL服务启动失败,原因五花八门,从简单的配置错误到复杂的系统问题都有可能。咱们先从最常见的几个方面入手。基础知识:服务启动流程简述MySQL服务启动,简单来说,就是操作系统加载MySQL相关的文件,然后启动MySQL守护进程。这其中涉及到配置

See all articles