Python商城管理系统,连接SQLite3数据库,界面切换有商品条形图

截图一:

功能:登录之前只有查看统计信息------商品库存管理条形图。

截图二:

功能:

登陆成功后,显示用户登录信息,比如用户昵称,欢迎提示语!

功能按钮都可用。【无操作,依旧显示条形图界面】

截图三:

功能:注册功能,重置测试可以,输入框全部清空

截图四:

功能:选中删除,和选中编辑信息,可以多选删除信息,编辑信息只能选择一个。

截图五:

功能:个人信息功能,可以修改信息(昵称,密码),不可修改账号

代码部分:

(本来是按照MVC三层写的,结果写着写着视图层和逻辑层就写到一起了!写到一半想改过来时,感觉写完再改也很简单,结果发现,改过来同样耗时耗力气,索性就这样吧。本来对三层架构不太清晰,越写越清晰,边写边看别人的代码,看被人主要看别人的逻辑思路,这个程序纯按照自己的思路写的,功能简单,简单的把模糊查询都省略了,其实写到最后越写越多,想写的实在是太多了,期末了,时间不允许,就这样吧!总结一下:写的时候方向就要写对,比如MVC严格按照这个路子写,不能偏,不然工作量很大。写完这个程序,感觉算是入门了吧!哈哈哈,边学边写,用了几个星期。刚开始面向对象都看不懂,很多代码觉得太难了,到最后,越写感觉越简单,写的越快!)

注意:变量名命不规范。这个以后也要注意!

view.py  这部分把逻辑和视图写一起了:

from tkinter import * 
from tkinter import ttk
from sqliteCon import sql
from tkinter import messagebox
from showCanvas import ShowDraw
class View:
  def __init__(self):
    # 加载数据库对象
    self.sql=sql()
    # self.mod=Mod()
    self.showDraw=ShowDraw()
    # 显示主窗口
    self.windows()
    # 显示登录模块
    self.winUser()
    # 显示中间功能按钮模块
    self.winFunc()
    # 显示每个功能的窗口
    self.winMain()

    # 欢迎标签的动态数值绑定
    self.e1=StringVar()
    self.e2=StringVar()
    self.e3=StringVar()
    self.e4=StringVar()
    self.e5=StringVar()
    self.ee1=StringVar()
    self.ee2=StringVar()
    # 根据这个数字控制窗口的出现。销毁框架用
    self.showElemNum=0
    #登陆标记 默认未登录为false  登录为true
    # self.flag=True
    self.flag=False
        # 显示条形图
        # 显示条形图
    self.winCanvas()
    # self.showLuoji()

  def windows(self):
    # 视图 主窗口
    self.window = Tk()                     # 窗口实例化
    self.window.title('商城管理系统')      #设置窗口名字
    self.window.geometry('800x600+500+300')  #设置窗口大小 宽*高,并设置窗口位置
    self.window.resizable(0,0)  #窗口大小不可更改

  def winUser(self):
    # 用户登录视图
    # 在框架里设置lable时,框架自身失去背景色,高为标签的高。
    # 框架里有内容,不用设置高,宽,自动撑起来
    self.frame_user=Frame(bg="#c7c7c7")# 账户密码框架
    # 账户密码框架置顶靠左显示  
    self.label_user=Label(self.frame_user,text="账号:",bg="#c7c7c7")
    self.entry_user=Entry(self.frame_user)
    self.label_pwd=Label(self.frame_user,text="密码:",bg="#c7c7c7")
    self.entry_pwd=Entry(self.frame_user,show='*')
    # 登录、注册按钮
    self.btn_login=Button(self.frame_user,text="登录",command=self.login)
    self.btn_logout=Button(self.frame_user,text="退出",command=self.logout)
    self.btn_register=Button(self.frame_user,text="注册",command=self.regiter)
    # 欢迎用户
    self.LWNText=StringVar()
    self.LWText=StringVar()
    self.label_wel_name=Label(self.frame_user,textvariable=self.LWNText,pady=15,bg="#c7c7c7")
    self.label_wel=Label(self.frame_user,textvariable=self.LWText,pady=15,bg="#c7c7c7")
    # 放置组件
    self.frame_user.pack(side=TOP,fill=X)
    self.label_user.pack(side=LEFT,padx=15,pady=15)
    self.entry_user.pack(side=LEFT)
    self.label_pwd.pack(side=LEFT,padx=15,pady=15)
    self.entry_pwd.pack(side=LEFT)
    self.btn_login.pack(side=LEFT,padx=24)
    self.btn_logout.pack(side=LEFT)
    self.btn_register.pack(side=LEFT,padx=24)
    self.label_wel_name.pack(side=RIGHT)
    self.label_wel.pack(side=RIGHT)

  def winFunc(self):
    # 主共能 中间菜单按钮
    self.frame_func=Frame()
    self.btn_query=Button(self.frame_func,text="查询商品",command=self.winQuery)
    self.btn_add=Button(self.frame_func,text="添加商品",command=self.winAdd)
    self.btn_showCanvas=Button(self.frame_func,text="数据统计",command=self.winCanvas)
    self.btn_personalInfo=Button(self.frame_func,text="个人信息",command=self.winPersnInfo)  
    # 放置组件
    self.frame_func.pack()
    self.btn_query.pack(side=LEFT,pady=8,padx=32)
    self.btn_add.pack(side=LEFT,pady=8,padx=32)
    self.btn_showCanvas.pack(side=LEFT,pady=8,padx=32)
    self.btn_personalInfo.pack(side=LEFT,pady=8,padx=32)

  def winMain(self):
    # 显示内容frame
    self.frame_main=Frame(height=500,width=800,bg="#c7c7c7")
    # 放置组件
    self.frame_main.pack()

  def winCanvas(self):
    self.showLuoji()
    self.showElemNum=5
    self.frame_canvas=Frame(self.frame_main)
    self.frame_canvas.pack()
    self.showDraw.draw_bar(self.frame_canvas)



    
  def winPersnInfo(self):
    #个人信息管理 
    # 判断之前是否有窗口,有则销毁
    self.showLuoji()
    self.showElemNum=4
    self.infoLabel=Frame(self.frame_main)
    self.infoLabel.grid(padx=270,pady=80,ipadx=30,ipady=30)
    self.infoLabelName=Label(self.infoLabel,text="昵  称:")
    self.infoLabelName.grid(row=2,column=1,pady=20,sticky=E)
    self.infoEntryName=Entry(self.infoLabel,textvariable=self.ee1)
    self.infoEntryName.grid(row=2,column=2)
    self.infoLabelUser=Label(self.infoLabel,text="账  号:")
    self.infoLabelUser.grid(row=4,column=1,pady=20,sticky=E)
    self.infoEntryUser=Entry(self.infoLabel,textvariable=self.ee2)
    self.infoEntryUser.grid(row=4,column=2)
    self.infoLabelPwd=Label(self.infoLabel,text=" 原密码:")
    self.infoLabelPwd.grid(row=5,column=1,pady=20,sticky=E)
    self.infoEntryPwd=Entry(self.infoLabel,show="*")
    self.infoEntryPwd.grid(row=5,column=2)
    self.infoLabelPwd2=Label(self.infoLabel,text=" 新密码:")
    self.infoLabelPwd2.grid(row=8,column=1,pady=20,sticky=E)
    self.infoEntryPwd2=Entry(self.infoLabel)
    self.infoEntryPwd2.grid(row=8,column=2,sticky=W)
    self.infoSaveBtn=Button(self.infoLabel,text="更改",command=self.infoSave)
    self.infoSaveBtn.grid(row=10,column=1,columnspan=2,sticky=W,padx=50)
    self.infoczBtn=Button(self.infoLabel,text="重置",command=self.infoCZ)
    self.infoczBtn.grid(row=10,column=2,sticky=E,padx=30)
    self.infoShow()
    
  def infoCZ(self):
    self.infoEntryName.delete(0,END)
    self.infoEntryPwd.delete(0,END)
    self.infoEntryPwd2.delete(0,END)
    
  def infoShow(self):
    # 获取当前用户的账号,并填入文本输入框
    # usering是列表类型,存的是当前登录的用户信息
    users=self.sql.selectUser()
    for user in users:
      if user[1]==self.usering[1]:
        # 设置昵称
        self.ee1.set(user[3])
        # 设置账号
        self.ee2.set(user[1])
        # 设置账号输入框不可点击
        self.infoEntryUser.config(state=DISABLED)
        
  def infoSave(self):
    # 获取输入框的数据
    user_num=self.infoEntryUser.get()
    user_pwd1=self.infoEntryPwd2.get()
    user_pwd0=self.infoEntryPwd.get()
    user_name=self.infoEntryName.get()
    if user_num and user_pwd1 and user_pwd0 and user_name:
      if user_pwd0==self.usering[2]:
        if self.sql.updateUser(user_pwd=user_pwd1,user_name=user_name,user_num=user_num):
          messagebox.showinfo(message='已更改!请重新登录!')
          # 密码更改后直接退出当前用户
          self.logout()
        else:
          messagebox.showerror(message='更改失败!')
    else:
      messagebox.showerror(message='输入框不能为空!')
    
  def winQuery(self):
    # 信息查询
    self.showLuoji()
    self.showElemNum=2
    self.frameQuery=Frame(self.frame_main,bg="#c7c7c7")
    self.labTitle=Label(self.frameQuery,text='商品信息',bg="#c7c7c7")
    columns=('prod_id','prod_name','prod_price','prod_detail','prod_stock')
    self.dataListFrame=Frame(self.frameQuery)
    # show='headings' 隐藏首列
    self.dataList=ttk.Treeview(self.dataListFrame,height=15,show='headings',columns=columns)
    #滚动条  方向垂直  yview函数系统自带
    self.listVScroll=Scrollbar(self.dataListFrame,orient='vertical',command=self.dataList.yview)
    # 放在右边,进行Y轴填充
    self.listVScroll.pack(side=RIGHT,fill=Y)
    # 给treeview添加配置,将Scrollbar与 每行数据绑定。
    self.dataList.configure(yscrollcommand=self.listVScroll.set)
    self.dataList.column('prod_id',width=100,anchor='center')
    self.dataList.column('prod_name',width=100,anchor='center')
    self.dataList.column('prod_price',width=100,anchor='center')
    self.dataList.column('prod_detail',width=150,anchor='center')
    self.dataList.column('prod_stock',width=80,anchor='center')
    self.dataList.heading('prod_id',text='商品编号')
    self.dataList.heading('prod_name',text='商品名称')
    self.dataList.heading('prod_price',text='商品价格')
    self.dataList.heading('prod_detail',text='商品描述')
    self.dataList.heading('prod_stock',text='商品数量')

    self.frameQuery.pack(padx=130,pady=10)
    self.labTitle.pack()
    self.dataListFrame.pack()
    self.dataList.pack()
    self.delBtn=Button(self.frameQuery,text='删除所选信息',command=self.deleteBtn)
    self.delBtn.pack(pady=12,padx=120,side=LEFT)
    self.editBtn=Button(self.frameQuery,text='编辑所选信息',command=self.editSelectBtn)
    self.editBtn.pack(pady=12,side=LEFT)
    self.printItem()

  def printItem(self):
    # 逻辑代码  获取并显示数据库所有商品信息
    itemsData=self.sql.selectProd()
    i=0
    for item in itemsData:
      # 向treeview里插入所有数据
      self.dataList.insert('',i,values=item)
      i=i+1

  def deleteBtn(self):
    # 删除选中的数据
    # self.dataList.selection()获取选中的数据可以是单条记录,也可以是多条
    for item in self.dataList.selection():
      itemText=self.dataList.item(item,"values") 
      # print(itemText[0])
      # 从数据库中删除选中的项
      self.sql.deleteProd(itemText[0])
      # 清空treeview
    self.delTreeItems()
      # 重新显示数据库商品信息
    self.printItem()
    
  def delTreeItems(self):
    #清空treeview里的所有信息 
    # get_children()得到 treeview里得每一条数据,并删除
    x=self.dataList.get_children()
    for item in x:
      self.dataList.delete(item)  

  def winAdd(self):
    self.showLuoji()
    self.showElemNum=3

    self.frameAdd=Frame(self.frame_main,bg="#c7c7c7") 
    self.labelProdId=Label(self.frameAdd,text='商品编号:',bg="#c7c7c7") 
    self.entryProdId=Entry(self.frameAdd,textvariable=self.e1)
    self.labelProdName=Label(self.frameAdd,text='商品名称:',bg="#c7c7c7") 
    self.entryProdName=Entry(self.frameAdd,textvariable=self.e2)
    self.labelProdPrice=Label(self.frameAdd,text='商品价格:',bg="#c7c7c7") 
    self.entryProdPrice=Entry(self.frameAdd,textvariable=self.e3)
    self.labelProdDetail=Label(self.frameAdd,text='商品描述:',bg="#c7c7c7") 
    self.entryProdDetail=Entry(self.frameAdd,textvariable=self.e4)
    self.labelProdStock=Label(self.frameAdd,text='商品数量:',bg="#c7c7c7") 
    self.entryProdStock=Entry(self.frameAdd,textvariable=self.e5)
    self.addBtn=Button(self.frameAdd,text='添加',command=self.add)
    self.delBtn=Button(self.frameAdd,text='修改',command=self.update2)

    self.frameAdd.grid(ipady=60,padx=300,pady=100)
    self.labelProdId.grid(row=0,column=1,pady=20)
    self.entryProdId.grid(row=0,column=2)
    self.labelProdName.grid(row=1,column=1)
    self.entryProdName.grid(row=1,column=2)
    self.labelProdPrice.grid(row=2,column=1,pady=20)
    self.entryProdPrice.grid(row=2,column=2)
    self.labelProdDetail.grid(row=3,column=1)
    self.entryProdDetail.grid(row=3,column=2)
    self.labelProdStock.grid(row=4,column=1,pady=20)
    self.entryProdStock.grid(row=4,column=2)
    self.addBtn.grid(row=5,column=1,columnspan=2,sticky=W,padx=50)
    self.delBtn.grid(row=5,column=2,sticky=E,padx=30)
      

  def editSelectBtn(self):
    # 编辑模块
    for item in self.dataList.selection():
      itemText=self.dataList.item(item,"values") 
      # print(itemText[0])
      # 从数据库中删除选中的项
      self.e1.set(itemText[0])
      self.e2.set(itemText[1])
      self.e3.set(itemText[2])
      self.e4.set(itemText[3])
      self.e5.set(itemText[4])
    self.frameQuery.destroy()
    self.winAdd()
    self.entryProdId.config(state=DISABLED)

  def update2(self):  
    # 这是添加商品中的修改按钮
    prod_id=self.entryProdId.get()
    prod_name=self.entryProdName.get()
    prod_price=self.entryProdPrice.get()
    prod_detail=self.entryProdDetail.get()
    prod_stock=self.entryProdStock.get()
    if prod_id!='' and prod_name!='' and prod_price!='' and prod_detail!='' and prod_stock!='':
      if self.sql.updateProd(prod_name=prod_name,prod_price=prod_price,prod_detail=prod_detail,prod_stock=prod_stock,prod_id=prod_id):
        messagebox.showinfo(message='修改成功!')
      else:
        messagebox.showerror(message='修改失败!')
        # 商品编号输入框变为正常(可更改)
      self.entryProdId.config(state=NORMAL)  
      # 清空文本输入框内容
      self.entryProdId.delete(0,len(prod_id))
      self.entryProdName.delete(0,len(prod_name))
      self.entryProdPrice.delete(0,len(prod_price))
      self.entryProdDetail.delete(0,len(prod_detail))
      self.entryProdStock.delete(0,len(prod_stock)) 
    else:
      messagebox.showerror(message='输入框不能为空!')

    # 添加商品信息
  def add(self):
    prod_id=self.entryProdId.get()
    prod_name=self.entryProdName.get()
    prod_price=self.entryProdPrice.get()
    prod_detail=self.entryProdDetail.get()
    prod_stock=self.entryProdStock.get()
    # 判断是否输入数据
    if prod_id!='' and prod_name!='' and prod_price!='' and prod_detail!='' and prod_stock!='':
      if self.sql.insertProd(prod_id=prod_id,prod_name=prod_name,prod_price=prod_price,prod_detail=prod_detail,prod_stock=prod_stock):
        messagebox.showinfo(message='添加成功!')
      else:
        messagebox.showerror(message='添加失败!')
      self.entryProdId.delete(0,len(prod_id))
      self.entryProdName.delete(0,len(prod_name))
      self.entryProdPrice.delete(0,len(prod_price))
      self.entryProdDetail.delete(0,len(prod_detail))
      self.entryProdStock.delete(0,len(prod_stock)) 
    else:
      messagebox.showerror(message='输入框不能为空!')

  def login(self):
    # 登录功能
    users=self.sql.selectUser()
    user=self.entry_user.get()
    pwd=self.entry_pwd.get()
    if len(users) > 0:
      for row in users:
        if user==row[1] and pwd==row[2]:
          self.LWNText.set(row[3])
          self.LWText.set('欢迎你!')
              # 显示条形图
          self.winCanvas()
          # 保存当前用户名
          self.usering=row
          # print(row[1])
          self.flag=True
          # 文本输入框不可更改
          self.entry_user.config(state=DISABLED)
          self.entry_pwd.config(state=DISABLED)
          self.showLuoji()
          messagebox.showinfo(message='登陆成功!')
          break
      if not self.flag:
        messagebox.showerror(message='账户或密码错误!')
    else:
      messagebox.showwarning(message='无法登录!')
        # 显示条形图
    self.winCanvas()  

  def logout(self):
    # 退出功能
    self.flag=False
    self.showLuoji()
    self.LWNText.set('')
    self.LWText.set('你还未登录!')
    # 设置可编辑
    self.entry_user.config(state=NORMAL)
    self.entry_pwd.config(state=NORMAL)
    # 清空文本框内容
    self.entry_user.delete(0,END)
    self.entry_pwd.delete(0,END)
        # 显示条形图
    self.winCanvas()

  def regiter(self):
    # 注册功能
    self.showLuoji()
    self.showElemNum=1
    # 注册按钮点一下是我们想要的效果,第二下直接覆盖界面,无法解决
    self.regLebel=LabelFrame(self.frame_main)
    self.regLebel.pack(pady=69,padx=238,ipadx=40,ipady=38)
    self.regLabelUser=Label(self.regLebel,text="昵  称:")
    self.regLabelUser.grid(row=2,column=0,pady=20,sticky=E)
    self.regEntryUser=Entry(self.regLebel)
    self.regEntryUser.grid(row=2,column=1,columnspan=2,pady=20,sticky=W)
    self.regLabelName=Label(self.regLebel,text="账  号:")
    self.regLabelName.grid(row=4,column=0,pady=20,sticky=E)
    self.regEntryName=Entry(self.regLebel)
    self.regEntryName.grid(row=4,column=1,pady=20,columnspan=2,sticky=W)
    self.regLabelPwd=Label(self.regLebel,text="密    码:")
    self.regLabelPwd.grid(row=5,column=0,pady=20,sticky=E)
    self.regEntryPwd=Entry(self.regLebel,show="*")
    self.regEntryPwd.grid(row=5,column=1,pady=20,columnspan=2,sticky=W)
    self.regLabelPwd2=Label(self.regLebel,text="确认密码:")
    self.regLabelPwd2.grid(row=8,column=0,pady=20,sticky=E)
    self.regEntryPwd2=Entry(self.regLebel,show="*")
    self.regEntryPwd2.grid(row=8,column=1,columnspan=2,pady=20,sticky=W)
# 
# 始终对不齐,这个标签是多余的,删除注册界面会对不齐,问题可能是Labelframe得问题,另一个地方用的frame,用同样的方法对齐了
    Label(self.regLebel,text="       ").grid(row=10,column=0,padx=40)
# 
    self.czBtn=Button(self.regLebel,text="重置",command=self.regCZBtn)
    self.czBtn.grid(row=10,column=1,sticky=W)
    self.regitBtn=Button(self.regLebel,text="注册",command=self.regBtn)
    self.regitBtn.grid(row=10,column=2,sticky=W)

  def regCZBtn(self):
    # 重置功能
    self.regEntryUser.delete(0,END)
    self.regEntryName.delete(0,END)
    self.regEntryPwd.delete(0,END)
    self.regEntryPwd2.delete(0,END)

  def regBtn(self):
    # 获取输入值
    username=self.regEntryUser.get()
    usernum=self.regEntryName.get()
    userpwd=self.regEntryPwd.get()
    userpwd2=self.regEntryPwd2.get()
    # 判断输入内容
    if username!=""and usernum!="" and userpwd!="" and userpwd2!="":
      if userpwd==userpwd2:
        if self.sql.register(usernum=usernum,userpwd=userpwd,username=username):
          messagebox.showinfo(message="注册成功!")
        else:
          messagebox.showerror(message="注册失败!")
      else:
        messagebox.showerror(message="密码输入不一致!")
    else:
      messagebox.showinfo(message="请填入完整信息!")        

  def showLuoji(self):
      if not self.flag:
        self.btn_query.config(state=DISABLED)
        self.btn_add.config(state=DISABLED)
        self.btn_personalInfo.config(state=DISABLED)
        self.btn_logout.config(state=DISABLED)
      else:
        self.btn_add.config(state=NORMAL)
        self.btn_query.config(state=NORMAL)
        self.btn_personalInfo.config(state=NORMAL)
        self.btn_logout.config(state=NORMAL)
      if self.showElemNum==1:
        self.regLebel.destroy()
      elif self.showElemNum==2:
        self.frameQuery.destroy()
      elif self.showElemNum==3:
        self.frameAdd.destroy()
      elif self.showElemNum==4:
        self.infoLabel.destroy()
      elif self.showElemNum==5:
        self.frame_canvas.destroy()  
      if not self.flag:  
        self.LWNText.set('')
        self.LWText.set('请登录账户!')  
        
# __name__:模块的名字
# 当脚本运行时内置变量__name__的值为__main__
# 课本p216页  模块的主要属性
if __name__ == "__main__":
    view=View()
    view.window.mainloop()# 进入消息循环

showCanvas.py  画条形图


import tkinter as tk
import matplotlib
import matplotlib.pyplot as plt
# 创建画布需要的库
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# 导入画图常用的库
from matplotlib.figure import Figure
from sqliteCon import sql
class ShowDraw:
    def __init__(self):
        self.sql=sql()
        # self.main()
    def draw_bar(self,frame):
        # 存放商品数量
        self.itemLabels = []
        # 存放商品名
        self.itemXTexts=[]

        items=self.sql.selectProd()
        for item in items:
            if item[4]<=70:
                self.itemLabels.append(item[4])
                self.itemXTexts.append(item[1])

        # --------------------------------
        # 创建图像   画布大小 单位英寸  分辨率100
        f=plt.figure(figsize=(8,4),dpi=100)
        canvas=FigureCanvasTkAgg(f,master=frame)
        canvas.get_tk_widget().grid()
        # 直接输出整块画布,不分成小块  1*1  1
        a=f.add_subplot(111)
          # 解决汉字乱码问题
        plt.rcParams['font.sans-serif'] = ['SimHei']
         # 使用指定的汉字字体类型(此处为黑体)
        
        a.clear()
        # 绘条形图
        plt.bar(range(len(self.itemLabels)),self.itemLabels,align='center',color='blue')
        plt.title('商品库存条形图')
        # 设置x轴坐标
        plt.xticks(range(len(self.itemXTexts)),self.itemXTexts)
        # y轴的值
        plt.ylim([0,200])
        # 为每个条形图添加数值标签
        for x,y in enumerate(self.itemLabels):
            plt.text(x,y+20,'%s'%round(y,1),ha='center')
        canvas.draw()

if __name__=="__main__":
    s=ShowDraw()
      

sqliteCon.py   数据库连接

import sqlite3

class sql:
  def __init__(self):
    # 连接数据库
    self.conn=sqlite3.connect('test.db')
    #创建游标
    self.cursor=self.conn.cursor()
    # 按账号修改用户用到的SQL语句
    self.SQLUpdateUser="update user set user_pwd=?,user_name=? where user_num=?"    
    # 注册  插入SQL语句
    # self.SQLregister="insert into user(user_num,user_pwd,user_name) values(?,?,?);"
    self.SQLInsertUser="insert into user(user_num,user_pwd,user_name)values(?,?,?)"
    # 查询用户
    self.SQLSelectUser="select * from user"
    # 查询商品信息
    self.SQLSelectProd="select * from product"
    #插入产品信息   \是连接作用
    self.SQLInsertProd="insert into product(prod_id,prod_name,prod_price,prod_detail,prod_stock)\
                        values(?,?,?,?,?)"
    # 修改商品信息  更新
    self.SQLUpdateProd="update product set prod_name=?,prod_price=?,\
                                           prod_detail=?,prod_stock=? where prod_id=?"   
    # 按 商品编号 删除 商品 
    self.SQLDelectProd="delete from product where prod_id=?"
    # 模糊查询  
    # self.SQLSearch="select * from product where prod_id like ? or prod_name like ? or prod_price like ? or prod_detail like ? or prod_stock like ?"
  def __del__(self):
    # 释放对象,执行方法
    # 关闭游标
    self.cursor.close() 
    #关闭连接
    self.conn.close()
    
  def register(self,**userss):
    # 注册用户
    try:
      # print(userss)
      # 可变参数:p109
      # **表示放在字典里的参数,*元组
      # param 是列表,userss['usernum']获取字典里的值,并放入列表  用于下一句的参数
      param=[userss['usernum'],userss['userpwd'],userss['username']]
      self.cursor.execute(self.SQLInsertUser,param)
      # 没有提交方法,数据不更改!
      self.conn.commit()
      return True
    except sqlite3.Error:
      return False  
    
  def updateUser(self,**kwargs):
    # 修改更新用户信息
    try:
      param=[kwargs['user_pwd'],kwargs['user_name'],kwargs['user_num']]  
      self.cursor.execute(self.SQLUpdateUser,param)
      self.conn.commit()
      return True
    except sqlite3.Error:
      return False

  def selectUser(self):
    # 查询用户
    self.cursor.execute(self.SQLSelectUser)
    # 返回一个二维数组,记录所有符合条件的记录,若无数据返回none
    result=self.cursor.fetchall()
    return result

  def selectProd(self):
    # 查询商品信息
    self.cursor.execute(self.SQLSelectProd)
    result=self.cursor.fetchall()
    return result

  def insertProd(self,**kwargs):
    # 添加商品
    try:
      param=[kwargs['prod_id'],kwargs['prod_name'],kwargs['prod_price'],kwargs['prod_detail'],kwargs['prod_stock']]  
      self.cursor.execute(self.SQLInsertProd,param)
      self.conn.commit()
      return True
    except sqlite3.Error:
      return False
  
  def deleteProd(self,prod_id):
    # 按商品编号删除信息
    try:
      self.cursor.execute(self.SQLDelectProd,[prod_id])
      self.conn.commit()
      # 记录有效行数
      effectRow=self.cursor.rowcount
      if effectRow>0:
        return True
      else:
        return False
    except sqlite3.Error:
      return False   
    
  def updateProd(self,**kwargs):
     #  按商品编号更新信息
    try:
      param=[kwargs['prod_name'],kwargs['prod_price'],kwargs['prod_detail'],kwargs['prod_stock'],kwargs['prod_id']]  
      self.cursor.execute(self.SQLUpdateProd,param)
      self.conn.commit()
      return True
    except sqlite3.Error:
      return False
      # 模糊查询
  # def searchProd(self, key):
  #       try:
  #         # 列表生成器
  #           param = ['%' + str(key) + '%' for i in range(5)]
  #           self.cursor.execute(self.SQLSearch, param)
  #           result = self.cursor.fetchall()
  #           return result
  #       except sqlite3.Error:
  #           return None

 

 

 

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值