https://github.com/LieLieLiekey/Small-supermarket-inventory-management-system
欢迎大家访问。
supermarketmanage.py ,负责软件的开始界面和调用其他几个人员界面
basic.py ,负责软件与数据库交流的函数,提供软件与数据库所需的基本查询、修改、删除等功能
frontdesk.py ,售货员的前台界面以及功能
purchasemanage.py ,进货员的前台界面以及功能
adminmanage.py ,管理员的前台界面以及功能
generaloperat.py ,包含所有员工共有的一些操作函数
commodity.py ,商品对象的定义
cashier.py ,售货员对象的定义
purchaser.py ,进货员的定义
注:该代码是sql课程设计,使用python3.7编写前台和后台与数据库交互的部分(from NYIST 计工学院计科专业 17级DCH) ,费时四天,无任何抄袭,都为自己一个一个写的。
sql代码等过了验收再放出来
import pymssql
from basic import Basic
from frontdesk import FrontDesk
from purchasemanage import PurchaseManage
from adminmanage import AdminManage
import os
def link():
conn = pymssql.connect(host="127.0.0.1", # 连接数据库
user="sa",
password="123",
database="supermarket", # Suppermarket
charset="utf8")
return conn
def meta():
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 售货员界面")
print("2: 进货员界面")
print("3: 管理员界面")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
front_desk=FrontDesk()
front_desk.meta()
elif cmd=="2":
purchase_manage = PurchaseManage()
purchase_manage.meta()
elif cmd=="3":
admin_manage = AdminManage()
admin_manage.meta()
else:
break
os.system("pause")
if __name__ == '__main__':
try:
conn=link()
Basic.setConn(conn)
meta()
except Exception as e:
print("出现错误,原因:",e)
from cashier import *
from commodity import *
import datetime
import random
class Basic:
conn=None
# def __init__(self,conn):
# self.conn=conn
@classmethod
def setConn(cls,conn):#ok
Basic.conn=conn
@classmethod
def runQuery(cls,sql):#ok
with Basic.conn.cursor() as cursor:
cursor.execute(sql)
ans=cursor.fetchall()
return ans
@classmethod
def runModify(cls,sql):#ok
with Basic.conn.cursor() as cursor:
cursor.execute(sql)
Basic.conn.commit()
@classmethod
def queryOneCommodity(cls, com_num):#==queryOneCommodityView
'''返回列表,没有则返回空列表'''
sql="select * from Commodity where commodity_no='{}'".format(com_num)
# print(sql)
ans=Basic.runQuery(sql)
if ans!=[]:
ans=ans[0]
return ans
@classmethod
def queryAllCommodity(cls):# ==queryAllCommodityView
'''返回列表'''
sql = "select * from Commodity"
return Basic.runQuery(sql)
@classmethod
def queryOneCashier(cls,cash_num):
sql ="select * from Cashier where cashier_no='{}'".format(cash_num)
res=Basic.runQuery(sql)
if res!=[]:
res = res[0]
return res
@classmethod
def queryOnePurchase(cls,pur_num):
sql ="select * from Purchaser where purchaser_no='{}'".format(pur_num)
res=Basic.runQuery(sql)
if res!=[]:
res = res[0]
return res
@classmethod
def addOneSell(cls,cashier_no,com_no,sell_no,sell_cnt,sell_rmoney):#向支付条目中添加信息
sql="insert into Sell values('{}','{}','{}',{},{},'{}')".format(cashier_no,com_no,sell_no,sell_cnt,sell_rmoney,Basic.getNowTime())
Basic.runModify(sql)
@classmethod
def addOneCommodity(cls,com_no,com_name,com_type,com_size,com_price,com_mdate,com_edate,com_quantity):
sql="insert into Commodity values('{}','{}','{}','{}',{},'{}','{}',{})".format(com_no,com_name,com_type,com_size,com_price,com_mdate,com_edate,com_quantity)
Basic.runModify(sql)
@classmethod
def modifyOneCommodity(cls,com_num, com_name, com_type, com_size, com_price, com_mdate, com_edate, com_quantity):
sql='''update Commodity
set Commodity__name='{}',commodity__type1='{}',commodity__size='{}',commodity__sprice={},commodity__mdate='{}',commodity__edate='{}',commodity__quantity={}
where commodity_no='{}'
'''.format(com_name, com_type, com_size, com_price, com_mdate, com_edate, com_quantity,com_num)
Basic.runModify(sql)
@classmethod
def addOneCommodityCnt(cls,com_num,com_cnt):
sql = "update Commodity set commodity__quantity=commodity__quantity +{} where commodity_no='{}'".format(com_cnt,com_num)
Basic.runModify(sql)
@classmethod
def addOneCashier(cls,cash_no,cash_name,cash_pwd,cash_sex,cash_age,cash_hourse,cash_salary,cash_phone,cash_entry):
sql="insert into Cashier values('{}','{}','{}','{}',{},{},{},{},'{}')".format(cash_no,cash_name,cash_pwd,cash_sex,cash_age,cash_hourse,cash_salary,cash_phone,cash_entry)
Basic.runModify(sql)
@classmethod
def modifyOneCashier(cls,cash_no,cash_name,cash_pwd,cash_sex,cash_age,cash_hourse,cash_salary,cash_phone,cash_entry):
sql='''update Cashier set cashier_name='{}',cashier_pwd='{}',cashier_sex='{}',cashier_age={},cashier_hourse={},cashier_salary={},cashier_phone={},cashier_entrytime='{}' where cashier_no='{}'
'''.format(cash_name,cash_pwd,cash_sex,cash_age,cash_hourse,cash_salary,cash_phone,cash_entry,cash_no)
Basic.runModify(sql)
@classmethod
def addOnePurchaser(cls,pur_no,pur_name,pur_sex,pur_age,pur_salary,pur_phone,pur_entry):
sql="insert into Purchaser values('{}','{}','{}',{},{},{},'{}')".format(pur_no,pur_name,pur_sex,pur_age,pur_salary,pur_phone,pur_entry)
Basic.runModify(sql)
@classmethod
def modifyOnePurchaser(cls,pur_no, pur_name, pur_sex, pur_age, pur_salary, pur_phone, pur_entry):
sql='''update Purchaser
set purchaser_name='{}',purchaser_sex='{}',purchaser_age={},purchaser_salary={},purchaser_phone={},purchaser_entrytime='{}'
where purchaser_no='{}'
'''.format(pur_name, pur_sex, pur_age, pur_salary, pur_phone, pur_entry,pur_no)
Basic.runModify(sql)
@classmethod
def delCommodityCnt(cls,com_num,com_cnt):
'''删除某一个商品的数量 '''
sql="update Commodity set commodity__quantity=commodity__quantity -{} where commodity_no='{}'".format(com_cnt,com_num)
Basic.runModify(sql)
@classmethod
def delOneCashier(cls,cash_no):
sql="delete from Cashier where cashier_no='{}'".format(cash_no)
Basic.runModify(sql)
@classmethod
def delOnePurchase(cls,pur_no):
sql="delete from Purchaser where purchaser_no='{}'".format(pur_no)
Basic.runModify(sql)
@classmethod
def delOneCommodity(cls,com_no):
sql="delete from Commodity where commodity_no='{}'".format(com_no)
Basic.runModify(sql)
@classmethod
def addOneStock(cls,pur_no,com_no,stock_no,com_price,com_cnt,in_date):
sql = "insert into Stock values('{}','{}','{}',{},{},'{}')".format(pur_no,com_no,stock_no,com_price,com_cnt,in_date)
Basic.runModify(sql)
@classmethod
def queryAllStock(cls):
sql="select * from Stock"
res=Basic.runQuery(sql)
return res
@classmethod
def queryAllCashier(cls):
sql="select * from Cashier"
res=Basic.runQuery(sql)
return res
@classmethod
def queryAllPurchaser(cls):
sql="select * from Purchaser"
res=Basic.runQuery(sql)
return res
@classmethod
def queryAllSell(cls):
sql="select * from Sell"
res=Basic.runQuery(sql)
return res
@classmethod
def getNowTime(cls):
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@classmethod
def getFlowNum(cls):
res=datetime.datetime.now().strftime("%Y%m%d")+"%06d"%(random.randint(0,1000000))
return res
@classmethod
def queryOneSellFlowNum(cls,sell_num):
sql="select * from sell where sell_no='{}'".format(sell_num)
res=cls.runQuery(sql)
if res!=[]:
res=res[0]
return res
@classmethod
def queryOneStockFlowNum(cls,stock_num):
sql="select * from stock where stock_no='{}'".format(stock_num)
res=cls.runQuery(sql)
if res!=[]:
res=res[0]
return res
from basic import Basic
from commodity import Commodity
from prettytable import PrettyTable
from cashier import Cashier
import os
class ShopCar:
'''储存商品对象和购买数量
'''
def __init__(self):
self.shop_list=[]
def addCommodity(self,com,com_cnt):#传入商品信息和购买数量
''' *保证库存肯定是有货的
商品重复则直接添加数量,否则添加到列表即可
'''
com_no=com.getNo()
for i in range(len(self.shop_list)):
now_com=self.shop_list[i][0]
if now_com.getNo()==com_no:
self.shop_list[i][1]+=com_cnt
return
#购物车不存在该商品
self.shop_list.append([com,com_cnt])
return
def delCommodity(self,com_num,com_cnt):
'''保证满足
'''
for i in range(len(self.shop_list)):
now_com=self.shop_list[i][0]
if now_com.getNo()==com_num:
self.shop_list[i][1]-=com_cnt
if self.shop_list[i][1]==0:
self.shop_list.pop(i)
return
def clear(self):
'''清空购物车'''
self.shop_list.clear()
def getMonery(self):
'''得到总钱数'''
res=0.0
for com,cnt in self.shop_list:
res+=com.getPrice()*cnt
return res
def getCommodityCnt(self,com_num):
'''返回商品编号对应的数量'''
res=0
for com,cnt in self.shop_list:
if com.getNo()==com_num:
res=cnt
break
return res
def printList(self):
'''打印当前购物车信息
["商品编号", "商品名称", "商品类型","规格","单价","购买数量"]
'''
table=PrettyTable(["商品编号", "商品名称", "商品类型","规格","单价","购买数量"])
for com, cnt in self.shop_list:
table.add_row([com.getNo(),com.getName(),com.getType(),com.getSize(),com.getPrice(),cnt])
print(table)
print("总价:",self.getMonery(),end="\n\n")
def getlist(self):
''' 返回购买信息'''
# res_list=[]
# for i in self.shop_list:
# com=i[0]
# cnt=i[2]
# res_list.append((com.getNo(),cnt))#返回商品编号和 购买的数量
# return res_list
return self.shop_list
def empty(self):
if not self.shop_list:
return True
return False
class FrontDesk:
'''前台控制'''
def __init__(self):
self.admin=None
self.car=ShopCar()
def exitLogin(self):
print("账号 {} 已经退出登陆.".format(self.admin.getNo()))
self.admin=None
def meta(self):
'''前台:菜单'''
if self.login()==False:
return
while(True):
os.system("cls")
print("------------------------------------------------")
print("1: 查询单个商品信息")
print("2: 查看所有商品信息")
print("3: 购买功能")
if self.admin!=None:
print("4: 退出登录")
print(" 其他数字退出")
print("------------------------------------------------")
cmd=input("请输入选项:").strip()
if cmd=="1":
self.queryOne()
elif cmd=="2":
self.queryAll()
elif cmd=="3":
if (self.admin!=None) or self.login():
self.shopingMeta()
elif self.admin!=None and cmd=="4":
self.exitLogin()
break
else:
break
os.system("pause")
def login(self):
'''前台:admin登陆'''
in_num=input("请输入您的账号:").strip()
cash=Basic.queryOneCashier(in_num)
if not cash:
print("不存在该账号.")
return False
cashier=Cashier(cash)
in_pwd=input("请输入您的密码:").strip()
if cashier.getPwd()==in_pwd:
self.admin=cashier
print("登陆成功.")
return True
else:
print("密码错误.")
return False
def queryAll(self):
'''前台:查询所有商品信息'''
info=Basic.queryAllCommodity()
table = comm = Commodity.getTableaHead()
for i in info:
table.add_row(i)
print(table)
print("以上共 {} 条记录.".format(len(info)))
def queryOne(self):
'''前台:查询一个商品信息'''
com_num=input("请输入需要查询商品的编号:")
res=Basic.queryOneCommodity(com_num)
if not res:#res为空
print("没有该商品")
else:
table=comm=Commodity.getTableaHead()
table.add_row(res)
print(table,end="\n\n")
def shopingMeta(self):
'''前台:购买'''
while True:
os.system("cls")
print("当前购物车:")
self.car.printList()
print("-------\n")
print("1:向购物车中添加商品")
print("2:从购物车中删除商品")
print("3:清空购物车")
print("4:结算")
print("--------------------其他选项退出")
cmd=input("请输入选项:").strip()
if cmd=="1":
self.addCom()
elif cmd=="2":
self.delCom()
elif cmd=="3":
self.clearShopCar()
elif cmd=="4":
self.pay()
else:
break
os.system("pause")
def addCom(self):
'''前台: 添加购物车 '''
com_num=input("请输入商品编号:").strip()
com_info=Basic.queryOneCommodity(com_num)
if not com_info:
print("商品不存在.")
return
com=Commodity(com_info)
com_cnt=int(input("请输入商品数量:").strip())
if com_cnt <=0:
print("购买数量必须大于0.")
return
if com_cnt>com.getQuantiy() :
print("商品库存不足.")
else :
self.car.addCommodity(com,com_cnt)
print("添加进入购物车成功.")
def clearShopCar(self):
'''前台:清空购物车'''
cmd=input("输入 1 确认清空购物车:").strip()
if cmd=="1":
self.car.clear()
print("购物车已清空.")
else:
print("操作已取消.")
def delCom(self):
'''前台:删除购物车某一个物品'''
com_num = input("请输入商品编号:").strip()
have_cnt=self.car.getCommodityCnt(com_num)
if have_cnt==0:
print("购物车中无该商品")
else:
del_cnt=int(input("购物车中该商品有 {} 个,请输入需要删除该商品的数量:".format(have_cnt)).strip())
self.car.delCommodity(com_num,min(del_cnt,have_cnt))
print("删除成功.")
def getFlowNum(self):
while True:
num=Basic.getFlowNum()
info=Basic.queryOneSellFlowNum(num)
if info==[]:
return num
def pay(self):
'''前台:结算'''
if self.car.empty():
print("购物车是空的.")
return
all_money=self.car.getMonery()
pay_money=float(input("请支付{}元:".format(all_money)).strip())
if pay_money<all_money :
print("支付失败.")
else:
print("支付成功,找零{}元. ".format(pay_money-all_money))
shop_list=self.car.getlist()
for com,com_cnt in shop_list:
#删除库存数量
Basic.delCommodityCnt(com.getNo(),com_cnt)
#添加购买信息
num=self.getFlowNum()
Basic.addOneSell(self.admin.getNo(),com.getNo(),num,com_cnt,com.getPrice()*com_cnt)
print("您已经成功购买以下商品,支付{}元 ,找零{}元 .".format(pay_money,pay_money-all_money))
self.car.printList()
self.car.clear()
from basic import Basic
from commodity import Commodity
from prettytable import PrettyTable
from purchaser import Purchaser
import os
import generaloperat
from purchaser import Purchaser
class PurchaseManage:
def __init__(self):
self.admin=None
def login(self):
'''带前台的登陆界面'''
pur_num=input("请输入您的编号:").strip()
pur=Basic.queryOnePurchase(pur_num)
if not pur:
print("不存在该编号.")
return False
else:
self.admin=Purchaser(pur)
return True
def meta(self):
'''操作选项界面'''
if not self.login():
return
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 查询单个商品信息")
print("2: 查看所有商品信息")
print("3: 添加商品信息")
print("4: 查看所有进货信息")
print("5: 进货")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
self.queryOne()
elif cmd=="2":
self.queryAll()
elif cmd=="3":
self.addOne()
elif cmd=="4":
self.querAllStock()
elif cmd=="5":
self.purchase()
else:
self.admin=None
break
os.system("pause")
def querAllStock(self):
generaloperat.queryAllStock()
def addOne(self):
'''前台 添加一个新的商品,库存数量为0'''
com_num=input("请输入要添加的商品编号:").strip()
com=Basic.queryOneCommodity(com_num)
if com!=[]:
print("该商品已存在不能重复添加.")
return
com_name=input("请输入商品名称:").strip()
com_type=input("请输入商品类型:").strip()
com_size=input("请输入规格:").strip()
com_price=float(input("请输入单价:").strip())
com_mdate=input("请输入生产日期(格式 年-月-日):").strip()
com_edate=input("请输入过期日期(格式 年-月-日):").strip()
com_quantity=0
try:
Basic.addOneCommodity(com_num,com_name,com_type,com_size,com_price,com_mdate,com_edate,com_quantity)
print("添加成功")
except Exception as e:
print("添加失败,原因:",e)
def purchase(self):
'''前台 进货'''
com_num=input("请输入要进货的商品编号:").strip()
com=Basic.queryOneCommodity(com_num)
if com==[]:
print("该商品不存在,请先添加该商品.")
return
com_cnt=int(input("请输入进货的数量:").strip())
com_price = float(input("请输入进货的单价:").strip())
in_date = input("请输入进货日期(格式 年-月-日):").strip()
try:
num=self.getFlowNum()
Basic.addOneStock(self.admin.getNo(), com_num, num, com_price, com_cnt, in_date)
Basic.addOneCommodityCnt(com_num,com_cnt)
print("操作成功.")
except Exception as e:
print("操作失败,原因:",e)
def queryAll(self):
'''前台 查看所有商品信息'''
generaloperat.queryAllCommodity()
def queryOne(self):
'''前台 查看一个商品信息'''
generaloperat.queryOneCommodity()
def exitlogin(self):
'''前台 退出登陆 ,保证已经登陆'''
self.admin=None
def getFlowNum(self):
while True:
num=Basic.getFlowNum()
info=Basic.queryOneStockFlowNum(num)
if info==[]:
return num
import generaloperat
from basic import Basic
from commodity import Commodity
from purchaser import Purchaser
import os
class AdminManage:
def login(self):
'''前台的登陆'''
pwd=input("请输入管理员密码:").strip()
if pwd!="123456":
print("密码错误.")
return False
return True
def metaQuery(self):
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 查看所有商品信息")
print("2: 查看所有售货员信息")
print("3: 查看所有进货员信息")
print("4: 查看所有售货信息")
print("5: 查看所有进货信息")
print("6: 查看单个售货员信息(未开发)")
print("7: 查看单个进货员信息(未开发)")
print("8: 查看单个商品信息(未开发)")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
self.queryAllCommodity()
elif cmd=="2":
self.queryAllCashier()
elif cmd=="3":
self.queryAllPurchaser()
elif cmd=="4":
self.queryAllSell()
elif cmd=="5":
self.queryAllStock()
else:
break
os.system("pause")
def metaAdd(self):
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 增加新的售货员")
print("2: 增加新的进货员")
print("3: 增加新的商品")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
self.addOneCashier()
elif cmd=="2":
self.addOnePurchaser()
elif cmd=="3":
self.addOneCommodity()
else:
break
os.system("pause")
def metaDel(self):
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 移除一个售货员")
print("2: 移除一个进货员")
print("3: 移除一个商品")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
self.delOneCashier()
elif cmd=="2":
self.delOnePurchaser()
elif cmd=="3":
self.delOneCommodity()
else:
break
os.system("pause")
def metaModity(self):
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 修改售货员信息")
print("2: 修改进货员信息")
print("3: 修改库存中商品信息")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
self.modifyOneCashier()
elif cmd=="2":
self.modifyOnePurchaser()
elif cmd=="3":
self.modifyOneCommodity()
else:
break
os.system("pause")
def meta(self):
'''前台 菜单'''
if not self.login():
return
while True:
os.system("cls")
print("------------------------------------------------")
print("1: 进入查询菜单")
print("2: 进入添加菜单")
print("3: 进入删除菜单")
print("4: 进入修改菜单")
print(" 其他数字退出")
print("------------------------------------------------")
cmd = input("请输入选项:").strip()
if cmd=="1":
self.metaQuery()
elif cmd=="2":
self.metaAdd()
elif cmd=="3":
# continue
self.metaDel()
elif cmd=="4":
pass
self.metaModity()
else:
break
os.system("pause")
def queryAllCommodity(self):
generaloperat.queryAllCommodity()
def queryAllCashier(self):
'''前台 查询所有cashier的信息'''
generaloperat.queryAllCashier()
def queryAllPurchaser(self):
'''前台 查询所有purchase'''
generaloperat.queryAllPurchaser()
def queryAllSell(self):
'''前台 查询所有sell'''
generaloperat.queryAllSell()
def queryAllStock(self):
'''前台'''
generaloperat.queryAllStock()
def addOneCashier(self):
'''前台'''
cash_no=input("请输入增加售货员的编号:").strip()
cash=Basic.queryOneCashier(cash_no)
if cash!=[]:
print("该编号已存在不能重复添加.")
return
cash_name=input("请输入该员工的姓名:").strip()
cash_pwd=input("请输入该员工的密码:").strip()
cash_sex=input("请输入该员工的性别:").strip()
cash_age=int(input("请输入该员工的年龄:").strip())
cash_hourse=float(input("请输入该员工的日工作量:").strip())
cash_salary=float(input("请输入该员工的月工资:").strip())
cash_phone=input("请输入该员工的手机号:").strip()
cash_entry=input("请输入该员工的出生日期(eg: 2019-6-4):").strip()
try:
Basic.addOneCashier(cash_no,cash_name,cash_pwd,cash_sex,cash_age,cash_hourse,cash_salary,cash_phone,cash_entry)
print("添加售货员成功.")
except Exception as e:
print("添加售货员失败,原因:",e)
def addOnePurchaser(self):
''''''
pur_no=input("请输入增加进货员的编号:").strip()
pur=Basic.queryOnePurchase(pur_no)
if pur!=[]:
print("该编号已存在不能重复添加.")
return
pur_name=input("请输入该员工的姓名:").strip()
pur_sex=input("请输入该员工的性别:").strip()
pur_age=int(input("请输入该员工的年龄:").strip())
pur_salary=float(input("请输入该员工的月工资:").strip())
pur_phone=input("请输入该员工的手机号:").strip()
pur_entry=input("请输入该员工的出生日期(eg: 2019-6-4):").strip()
try:
Basic.addOnePurchaser(pur_no,pur_name,pur_sex,pur_age,pur_salary,pur_phone,pur_entry)
print("添加进货员成功.")
except Exception as e:
print("添加进货员失败,原因:",e)
def addOneCommodity(self):
''''''
com_num = input("请输入要添加的商品编号:").strip()
com = Basic.queryOneCommodity(com_num)
if com != []:
print("该商品已存在不能重复添加.")
return
com_name = input("请输入商品名称:").strip()
com_type = input("请输入商品类型:").strip()
com_size = input("请输入规格:").strip()
com_price = float(input("请输入单价:").strip())
com_mdate = input("请输入生产日期(格式 年-月-日):").strip()
com_edate = input("请输入过期日期(格式 年-月-日):").strip()
com_quantity = int(input("请输入库存数量:").strip())
try:
Basic.addOneCommodity(com_num, com_name, com_type, com_size, com_price, com_mdate, com_edate, com_quantity)
print("添加商品成功")
except Exception as e:
print("添加商品失败,原因:", e)
def delOneCashier(self):
''''''
cash_no=input("请输入要移除的售货员的编号:").strip()
cash=Basic.queryOneCashier(cash_no)
if cash==[]:
print("不存在该员工.")
return
cmd=input("确认移除该员工?(移除后所有与该员工有关的售货记录都会删除.y/n)").strip()
if cmd[0]=='y'or cmd[0]=='Y':
Basic.delOneCashier(cash_no)
print("操作成功.")
else:
print("操作失败.")
def delOnePurchaser(self):
pur_no=input("请输入要移除的售货员的编号:").strip()
pur=Basic.queryOnePurchase(pur_no)
if pur==[]:
print("不存在该员工.")
return
cmd=input("确认移除该员工?(移除后所有与该员工有关的进货记录都会删除.y/n)").strip()
if cmd[0]=='y'or cmd[0]=='Y':
Basic.delOnePurchase(pur_no)
print("操作成功.")
else:
print("操作失败.")
def delOneCommodity(self):
''''''
com_no=input("请输入要移除的商品的编号:").strip()
com=Basic.queryOneCommodity(com_no)
if com==[]:
print("不存在该商品.")
return
cmd=input("确认移除该商品?(移除后所有与该商品有关的进出货记录都会删除.y/n)").strip()
if cmd[0]=='y'or cmd[0]=='Y':
Basic.delOneCommodity(com_no)
print("操作成功.")
else:
print("操作失败.")
def modifyOneCashier(self):
cash_no = input("请输入需要修改的售货员的编号:").strip()
cash = Basic.queryOneCashier(cash_no)
if cash == []:
print("该售货员不存在.")
return
cash_name = input("请输入修改后的姓名:").strip()
cash_pwd = input("请输入该员工的密码:").strip()
cash_sex = input("请输入该员工的性别:").strip()
cash_age = int(input("请输入该员工的年龄:").strip())
cash_hourse = float(input("请输入该员工的日工作量:").strip())
cash_salary = float(input("请输入该员工的月工资:").strip())
cash_phone = input("请输入该员工的手机号:").strip()
cash_entry = input("请输入该员工的出生日期(eg: 2019-6-4):").strip()
try:
Basic.modifyOneCashier(cash_no, cash_name, cash_pwd, cash_sex, cash_age, cash_hourse, cash_salary,
cash_phone, cash_entry)
print("修改成功.")
except Exception as e:
print("修改失败,原因:", e)
def modifyOnePurchaser(self):
pur_no = input("请输入需要修改的进货员的编号:").strip()
pur = Basic.queryOnePurchase(pur_no)
if pur == []:
print("该售货员不存在.")
return
pur_name = input("请输入修改后的姓名:").strip()
pur_sex = input("请输入该员工的性别:").strip()
pur_age = int(input("请输入该员工的年龄:").strip())
pur_salary = float(input("请输入该员工的月工资:").strip())
pur_phone = input("请输入该员工的手机号:").strip()
pur_entry = input("请输入该员工的出生日期(eg: 2019-6-4):").strip()
try:
Basic.modifyOnePurchaser(pur_no, pur_name, pur_sex, pur_age, pur_salary, pur_phone, pur_entry)
print("修改成功.")
except Exception as e:
print("修改失败,原因:", e)
def modifyOneCommodity(self):
com_num = input("请输入要修改的商品编号:").strip()
com = Basic.queryOneCommodity(com_num)
if com == []:
print("该商品不存在.")
return
com_name = input("请输入修改后的商品名称:").strip()
com_type = input("请输入修改后的商品类型:").strip()
com_size = input("请输入修改后的规格:").strip()
com_price = float(input("请输入修改后的单价:").strip())
com_mdate = input("请输入修改后的生产日期(格式 年-月-日):").strip()
com_edate = input("请输入修改后的过期日期(格式 年-月-日):").strip()
com_quantity = int(input("请输入修改后的库存数量:").strip())
try:
Basic.modifyOneCommodity(com_num, com_name, com_type, com_size, com_price, com_mdate, com_edate, com_quantity)
print("修改商品成功")
except Exception as e:
print("修改商品失败,原因:", e)
from basic import Basic
from commodity import Commodity
from prettytable import PrettyTable
from purchaser import Purchaser
from cashier import Cashier
def queryAllCommodity():
'''前台:查询所有商品信息'''
info = Basic.queryAllCommodity()
table = comm = Commodity.getTableaHead()
for i in info:
table.add_row(i)
print(table)
print("以上共 {} 条记录.".format(len(info)))
def queryOneCommodity():
'''前台:查询一个商品信息'''
com_num = input("请输入需要查询商品的编号:")
res = Basic.queryOneCommodity(com_num)
if not res: # res为空
print("没有该商品")
else:
table = comm = Commodity.getTableaHead()
table.add_row(res)
print(table, end="\n\n")
def queryOneCahier():
cash_no=input("请输入需要查询的售货员的编号:").strip()
cash=Basic.queryOneCashier(cash_no)
if cash==[]:
print("该售货员不存在.")
return
table=Commodity.getTableaHead()
table.add_row(cash)
print(table)
def queryOnePurchaser():
pur_no=input("请输入需要查询的进货员的编号:").strip()
pur=Basic.queryOnePurchase(pur_no)
if pur==[]:
print("该进货员不存在.")
return
table=Purchaser.getTableaHead()
table.add_row(pur)
print(table)
def queryAllStock():
'''前台:查看所有进货信息'''
info=Basic.queryAllStock()
table=PrettyTable(["进货员编号","商品编号","进货流水号","进货单价","增加数量","进货日期"])
for i in info:
table.add_row(i)
print(table)
print("以上共 {} 条记录.".format(len(info)))
def queryAllCashier():
'''前台 查询所有cashier的信息'''
info=Basic.queryAllCashier()
# print(info)
table=Cashier.getTableaHead()
# print(table)
for i in info:
table.add_row(i)
print(table)
print("以上共{}条记录.".format(len(info)))
def queryAllPurchaser():
'''前台 查询所有purchase'''
info=Basic.queryAllPurchaser()
table=Purchaser.getTableaHead()
for i in info:
table.add_row(i)
print(table)
print("以上共{}条记录.".format(len(info)))
def queryAllSell():
info=Basic.queryAllSell()
table=PrettyTable(["收银员编号","商品编号","出售流水号","出售数量","总价","日期"])
for i in info:
table.add_row(i)
print(table)
print("以上共 {} 条记录.".format(len(info)))
from prettytable import PrettyTable
class Commodity:
def __init__(self,info_list=None):
self.info=info_list
def getNo(self):
return self.info[0]
def getName(self):
return self.info[1]
def getType(self):
return self.info[2]
def getSize(self):
return self.info[3]
def getPrice(self):
return self.info[4]
def getDate(self):
return self.info[5]
def getmDate(self):
return self.info[6]
def getQuantiy(self):
return self.info[7]
@classmethod
def getTableaHead(cls):
return PrettyTable(["商品编号", "商品名称", "商品类型","规格","单价","生产日期","过期日期","库存数量"])
from prettytable import PrettyTable
class Cashier:
def __init__(self,info_list=None):
self.info=info_list
def getNo(self):
return self.info[0]
def getName(self):
return self.info[1]
def getPwd(self):
return self.info[2]
def getSex(self):
return self.info[3]
def getAge(self):
return self.info[4]
def getHourse(self):
return self.info[5]
def getSalary(self):
return self.info[6]
def getPhone(self):
return self.info[7]
def getEntrytime(self):
return self.info[8]
@classmethod
def getTableaHead(cls):
return PrettyTable(["售货员编号", "姓名", "密码","性别","年龄","Hourse",r"工资/月","手机号","出生日期"])
from prettytable import PrettyTable
class Purchaser:
def __init__(self,info_list=None):
self.info=info_list
def getNo(self):
return self.info[0]
def getName(self):
return self.info[1]
def getSex(self):
return self.info[2]
def getAge(self):
return self.info[3]
def getSalary(self):
return self.info[4]
def getPhone(self):
return self.info[5]
def getEntrytime(self):
return self.info[6]
@classmethod
def getTableaHead(cls):
return PrettyTable(["进货员编号", "姓名","性别","年龄",r"工资/月","手机号","出生日期"])
SRS直播用FFmpeg转码报错:[flv @ 0x3e733c0] Failed to update header with correct duration.[flv @ 0x3e733c0] Failed to update header with correct filesize.Error writing trailer of rtmp://127.0.0.1:1935/live?vhost=defaultVhost/26347_31e2d7e3ce2d4d378ad2887cf559d52
我想把古老编程环境系列完成,这是unix篇,其实从linux开始,该系列就有些变味了,变成了操作系统的介绍,本unix篇将分FreeBSD、Solaris、SCO等几个部分,unix的发行版不是很多,有些像AIX、HP-UX、IRIX等根本不能用在x86上,所有做个全面的介绍是有可能的。有些老的unix确实难装,而且vmware作为虚拟化软件,对老系统兼容性不如bochs、dosbox等模拟器,说
Selenium一、基本使用from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDrive
CODEVS 题目描述 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ,其中 ai表示第一列火柴中第 i 个火柴的高度,bi表示第二列火柴中第 i 个火柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最
android报错: java.lang.IllegalArgumentException: column '_id' does not exist使用Cursor相关的Adapter时需要一个自增的列,且名字必需为 _id。举个特殊的例子:--创建一张SQLite的表 (字段均大写)Create Table Test(_ID integer primary key...
窗体控件Command1Command1Command1'窗体代码:Private Sub Command1_Click()SetDisplaymode 800, 600End SubPrivate Sub Command2_Click()SetDisplaymode 1920, 1080End SubPrivate Sub Command3...
目录摘要引言摘要这篇论文提出了用于建模Web规模异质图的异质图转换架构(HGT)。为了对异质的节点和边进行建模,作者设计了和节点类别、边类别有关的参数,来表征在每个边上的异质性的注意力,这使得HGT可以为不同类型的节点和边生成专用的表示。HGT还可以处理动态的异质图。作者在HGT中引入相对时间编码技术,可以捕获到任意时间段内的动态结构依赖关系。为了能够处理Web规模的图数据,还设计了mini-batch图采样算法——HGSampling,实现高效并可扩展的训练。引言参考博客:https://b
(给前端大学加星标,提升前端技能.)作者:吕小鸣https://juejin.im/post/5d7990a16fb9a06ad16f9d55前端架构师,听起来就是个很高大上的职位,在大多数程序员的眼中,架构师一般从事后端开发,Java或者C++出身,它们往往拥有这十八般武艺,可以解决业务中出现的各种问题。好像架构师就从来没有和前端有过关系,那么真的是这样么,通读此文,便可豁然开朗。前端...
windows下安装MySQL数据库,照着帖子安装了两个电脑,没次都有一点小错误,参考别人的安装记录,根据自己的安装过程,记录一下。(一个电脑安装的5.7.25一个电脑安装的5.7.26)一、MySQL官网下载安装包 https://dev.mysql.com/downloads/mysq二、移到安装目录下:解压下载的文件1.2.配置环境变量3.在解压的文...
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档达梦数据库备份恢复总结前言随着IT科技的不断发展,数据已成为各大企业的核心资产,数据安全性越来越被重视。数据库备份是 DBA 日常最重要的工作内容。备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。本章主要介绍 DM 备份与还原的概述和基本概念,为理解归档配置、备份还原的原理与工具使用奠定基础。内容主要包括:逻辑备份与恢复、物理备份与恢复等。一、备份、还原与恢复的关系是什么?.
java常见面试考点往期文章推荐: java常见面试考点(四十一):short运算小错误 java常见面试考点(四十二):序列化与反序列化 java常见面试考点(四十三):泛型 java常见面试考点(四十四):Comparable和Comparator接口 java常见面试考点(四十五):阻塞队列【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);本博客的内容来自于:java常见面试考点(四十六):生产者消费者;学习、合作与交流联系q384660495;
一、什么是泛型泛型:数据类型的参数化,任意化。将某一个类/接口/方法/变量的数据类型象使用参数一样传递给类/接口/方法/变量。二、为什么需要泛型第一天 类中的x,y变量需要int类型package com.wangxing.test1;public class IntTest { private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x =