花店花品信息管理系统开发实战:Python实现简易门店管理系统
在零售行业中,门店的商品信息管理是核心环节之一。本文将以花店场景为例,详细讲解如何使用Python开发一款轻量级的花品信息管理系统,实现用户登录验证、花品信息的增删改查、排序与折扣设置等核心功能,帮助初学者理解Python基础语法、数据结构及函数式编程的应用。
一、系统设计思路
本系统采用Python原生语法开发,无第三方框架依赖,核心设计思路如下:
- 数据存储:使用列表嵌套字典的方式存储用户信息和花品信息,结构清晰且易于操作;
- 功能拆分:将登录、显示、新增、删除、修改、排序、查询等功能拆分为独立函数,遵循"单一职责"原则;
- 交互逻辑:通过控制台交互实现用户操作,采用循环结构保证程序持续运行,同时增加输入校验提升用户体验。
二、核心功能实现解析
2.1 数据初始化
首先定义用户信息和花品信息的基础数据结构,列表用于存储多条数据,字典用于描述单条数据的属性:
python
# 用户数据(用户名、密码、姓名)
user1 = {"用户名": "admin", "密码": "123", "姓名": "店长"}
userlist = [user1]
# 花品数据(编号、名称、价格、折扣)
commodity1 = {"编号": "1", "名称": "向日葵", "价格":20.0, "折扣": 9.0}
commodity2 = {"编号": "2", "名称": "郁金香", "价格":32.0, "折扣": 8.5}
commodity3 = {"编号": "3", "名称": "康乃馨", "价格":42.0, "折扣": 8.8}
commodity4 = {"编号": "4", "名称": "满天星", "价格":25.0, "折扣": 9.0}
commoditylist = [commodity1, commodity2, commodity3, commodity4]
2.2 登录验证功能
登录功能是系统的安全入口,实现了以下核心逻辑:
- 最多3次密码错误尝试,超过则锁定用户;
- 遍历用户列表校验账号密码,匹配成功则登录;
- 返回登录状态,作为后续功能访问的前置条件。
python
def login():
msg = "失败"
count = 0
while True:
print("********************************************")
print("* 欢迎使用花店信息管理系统 *")
print("*********************************************")
print("请先登录!")
uname = input("请输入账号:")
upwd = input("请输入密码:")
for user in userlist:
if uname == user["用户名"] and upwd == user["密码"]:
print("登录成功,欢迎你", user["姓名"])
msg = "成功"
break
if msg == "失败":
count += 1
if count < 3:
print("用户名密码错误!请重新登录", "输入第", count, "次")
else:
print("用户已锁定!")
break
else:
break
return msg
2.3 花品信息核心操作
(1)显示花品列表
遍历花品列表,格式化输出所有花品的编号、名称、价格、折扣信息,为用户提供直观的数据展示:
python
def showProduct():
print("----------花品信息----------")
print("-编号----名称----价格----折扣-")
for commodity in commoditylist:
print("-" + commodity["编号"] + "----" + commodity["名称"] + "-----" + str(commodity["价格"]) + "-----" + str(
commodity["折扣"]))
print("----------------------------")
(2)新增花品信息
自动生成新花品编号(基于现有最大编号+1),接收用户输入的名称和价格,默认折扣为0,新增后自动刷新显示列表:
python
def addProduct():
list1 = []
for num in commoditylist:
list1.append(int(num["编号"]))
num = str(max(list1) + 1)
print("----------添加新花品----------")
mc = input("请输入花品名称:")
jg = float(input("请输入花品价格:"))
zk = 0
newProduct = {"编号": num, "名称": mc, "价格": jg, "折扣": zk}
commoditylist.append(newProduct)
print("商品" + mc + "添加成功")
print("-------------------------------")
showProduct()
(3)删除花品信息
支持按编号删除花品,增加输入校验:若编号不存在,提供"取消/继续"选项,提升交互友好性:
python
def delproduct():
showProduct()
while True:
msg = 0
num = input("请输入要删除花品的编号")
for product in commoditylist:
if num == product["编号"]:
print("商品", product["名称"], "正在删除")
commoditylist.remove(product)
print("删除成功!")
msg = 1
break
if msg == 0:
print("输入的花品编号不正确,请重新输入")
jx = input("取消输入请按1,继续请按2")
if jx == "1":
break
elif jx == "2":
continue
else:
print("输入错误请重新输入")
else:
showProduct()
break
(4)折扣与价格修改
分别实现按名称修改折扣、按编号修改价格的功能,逻辑与删除功能类似,核心是通过遍历列表找到目标花品并更新对应属性:
python
# 设置花品折扣
def setDiscount():
while True:
mag = 0
name = input("请输入要更改折扣的花品名称")
for x in commoditylist:
if name == x["名称"]:
zk = float(input("请输入要设置产品的折扣:"))
x["折扣"] = zk
print(x["名称"] + "的折扣为:" + str(zk))
mag = 1
break
if mag == 0:
print("输入的花品名称不存在,请重新输入")
jx = input("取消输入请按1,继续请按2")
if jx == "1":
break
elif jx == "2":
continue
else:
print("输入错误请重新输入")
else:
showProduct()
break
# 修改花品价格
def setPrice():
while True:
mag = 0
num = input("请输入要更改价格的花品编号")
for x in commoditylist:
if num == x["编号"]:
jg = float(input("请输入要设置产品价格"))
x["价格"] = jg
print(x["名称"] + "的价格为:" + str(jg))
mag = 1
break
if mag == 0:
print("输入的花品编号不存在,请重新输入")
jx = input("取消输入请按1,继续请按2")
if jx == "1":
break
elif jx == "2":
continue
else:
print("输入错误请重新输入")
else:
showProduct()
break
(5)价格排序与信息查询
- 价格排序:支持升序/降序两种方式,先提取所有价格去重后排序,再按排序后的价格匹配花品并输出;
- 信息查询:支持按编号或名称查询,找到目标花品后立即输出并返回,未找到则提示无匹配信息。
python
# 价格排序
def sort():
choice = int(input("请选择升序或者降序(1、升序 2、降序)"))
clist = []
for commodity in commoditylist:
clist.append(commodity["价格"])
clist = list(set(clist))
if choice == 1:
newlist = sorted(clist)
for price in newlist:
for product in commoditylist:
if price == product["价格"]:
print("-" + product["编号"] + "----" + product["名称"] + "-----" + str(
product["价格"]) + "-----" + str(product["折扣"]))
if choice == 2:
newlist = sorted(clist, reverse=True)
for price in newlist:
for product in commoditylist:
if price == product["价格"]:
print("-" + product["编号"] + "----" + product["名称"] + "-----" + str(
product["价格"]) + "-----" + str(product["折扣"]))
# 花品查询
def searchProduct():
choice = int(input("请选择查询方式(1、编号 2、花品名称)"))
if choice == 1:
num = input("请输入要查询的花品编号")
for product in commoditylist:
if num == product["编号"]:
print("-" + product["编号"] + "----" + product["名称"] + "-----" + str(
product["价格"]) + "-----" + str(product["折扣"]))
return
print("未找到该编号对应的花品信息")
elif choice == 2:
name = input("请输入要查询的花品名称")
for product in commoditylist:
if name == product["名称"]:
print("-" + product["编号"] + "----" + product["名称"] + "-----" + str(
product["价格"]) + "-----" + str(product["折扣"]))
return
print("未找到该花品名称对应的花品信息")
else:
print("输入有误,请重新输入")
2.4 主菜单与程序入口
通过双层循环实现程序的持续运行:外层循环控制登录流程,登录成功后进入内层循环(主菜单),用户选择对应功能编号执行操作,输入8则退出系统。
python
while True:
result = login()
if result == "成功":
while True:
print("---------------主菜单---------------")
print("-1、显示所有花品信息")
print("-2、增加花品信息")
print("-3、删除花品")
print("-4、更改花品折扣")
print("-5、更改花品价格")
print("-6、根据价格排序花品")
print("-7、根据编号或者花品名字查询花品")
print("-8、退出")
choice = int(input("请输入您的选项(1-8)"))
if choice == 1:
showProduct()
elif choice == 2:
addProduct()
elif choice == 3:
delproduct()
elif choice == 4:
setDiscount()
elif choice == 5:
setPrice()
elif choice == 6:
sort()
elif choice == 7:
searchProduct()
elif choice == 8:
print("------------系统已退出")
break
else:
print("没有此功能请重新输入")
continue
三、系统运行流程
- 启动程序后,首先进入登录界面,用户输入账号密码(默认admin/123);
- 登录成功后显示主菜单,用户输入1-8的数字选择对应功能;
- 执行对应功能(如新增、删除、修改)后,自动刷新花品列表或返回操作结果;
- 输入8则退出系统,若登录失败超过3次则锁定用户并退出。
四、扩展与优化方向
本系统作为基础版本,可从以下方向优化升级:
- 数据持久化:将列表数据存储到文件(如JSON、CSV)或数据库(如MySQL、SQLite),避免程序重启后数据丢失;
- 用户管理:增加用户注册、密码修改、权限分级(如店长/店员)功能;
- 输入校验增强:对价格、折扣等数值型输入增加范围校验(如折扣0-10,价格大于0);
- 界面优化:使用Tkinter、PyQt等库开发图形化界面,提升操作体验;
- 功能扩展:增加订单管理、库存统计、销售报表等功能,完善门店管理体系。
五、总结
本文通过花店花品信息管理系统的开发案例,讲解了Python列表、字典、函数、循环、条件判断等基础语法的综合应用。该系统虽简易,但覆盖了数据存储、交互逻辑、功能拆分等核心开发思想,适合Python初学者入门学习。通过对系统的扩展优化,可进一步掌握文件操作、数据库连接、GUI开发等进阶技能,为开发更复杂的应用打下基础。