截图一:
功能:登录之前只有查看统计信息------商品库存管理条形图。
截图二:
功能:
登陆成功后,显示用户登录信息,比如用户昵称,欢迎提示语!
功能按钮都可用。【无操作,依旧显示条形图界面】
截图三:
功能:注册功能,重置测试可以,输入框全部清空
截图四:
功能:选中删除,和选中编辑信息,可以多选删除信息,编辑信息只能选择一个。
截图五:
功能:个人信息功能,可以修改信息(昵称,密码),不可修改账号
代码部分:
(本来是按照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