python实现简单购物系统优化版
新增知识点:
json库
json是轻量级数据交换格式
因为新版本使用文件存储用户信息
但是文件只能写入字符串,取出来的也是字符,所以要借助json来转换格式
在购物商场里面用来将转换用户信息格式便于储存和读取。
例如
import json
str1 = '{"root":["123456",1]}'
# 把json格式的字符串转化成对应的数据结构对象
d1 = json.loads(str1)
print(d1,type(d1))
# 把对应的数据结构对象转化成json格式的字符串
str2 = json.dumps(d1)
print(str2,type(str2))
E:\python\python3.9.1\python.exe E:/tlbb/三乐购物系统/购物系统.py
{'root': ['123456', 1]} <class 'dict'>
{"root": ["123456", 1]} <class 'str'>
Process finished with exit code 0
###########################################
函数规范
1.函数的功能是接收参数,进行判断或者实现某个功能返回结果,所以我们尽量把别的内容写到外面
2.原则上一个函数做一件事
3.函数返回值:
每个函数都会有返回值,即使你没有明确写出,那么它的返回值也会被默认为None。尽量保证每个函数的返回值都是有意义的。哪怕它没有什么操作,你也可以返回boolen类型来判断执行是否顺利。
###########################################
三乐购物系统:
新增功能:
实现用户信息固化:
使用文件存储用户信息,使用json库以特定格式保存用户信息
vip.txt:
{"sc": {"passwd": "123456", "money": 200.0}, "wang": {"passwd": "123456789", "money": "500"}}
# 注册函数
def register(name, passwd, money):
"""
注册函数
:param name:
:param passwd:
:param money:
:return:
"""
with open("vip.txt", "w", encoding="utf-8") as fp:
user[name] = {"passwd": passwd, "money": money}
# #把对应的数据结构对象转化成json格式的字符串 写入文件存储起来
fp.write(json.dumps(user))
print("/***注册成功***/")
在退出时会更新用户信息,已达到更新余额的效果
elif option == '3':
# 再次写入用户信息,达到更新余额的效果
with open("vip.txt", "w", encoding="utf-8") as fp:
fp.write(json.dumps(user))
print("退出成功!")
print("欢迎您下次再来!")
break
源代码:
"""
@name : 三乐购物系统v2.py
@author : wangshenghu
@projectname: tlbb
@Date : 2022/3/12
"""
import json
goods = {'F00001': {'name': '苹果', 'price': 10},
'F00002': {'name': '香蕉', 'price': 5.5},
'F00003': {'name': '草莓', 'price': 30}}
with open("vip.txt") as fp:
# 判断文件是否为空
if fp.read().strip():
fp.seek(0)
# # 把json格式的字符串转化成对应的数据结构对象
user = json.loads(fp.read())
else:
user = {}
# 购物车函数
def shopping_car():
"""
购物车函数
:return:
"""
print("我的购物车:")
print("商品编号 商品名称 商品单价 商品数量 总价")
for i, j in goodscar.items():
print(f"{i} {j['name']} {j['price']} {j['count']} {j['total_price']}")
# 结账函数
def pay_money():
"""
结账函数
:return:
"""
amoney = float(user[name]['money'])
if amoney >= totalprice:
amoney -= totalprice
user[name]['money'] = amoney
print("==========accessfuluy!==========")
print("支付成功")
print(f"您的余额为 :{user[name]['money']} ")
else:
print("您的余额不足是否充值 y/n")
p = input("请输入 y / n :")
if p == 'y':
recharge()
elif p == 'n':
print("已经返回菜单")
else:
print("您的输入有误!")
# 充值函数
def recharge():
"""
充值函数
:return:
"""
print("欢迎进入充值系统".center(50, "*"))
recharge_money = float(input("请输入您的充值金额"))
bmoney = float(user[name]['money'])
user[name]['money'] = bmoney + recharge_money
print("充值成功!")
print(f"充值后的金额为:{user[name]['money']}")
# 商品信息函数
def showgooods():
"""
显示商品信息
:return:
"""
print("欢迎购物".center(50, "*"))
print("商品编号 商品名称 商品价格")
for i, j in goods.items():
print(f"{i} {j['name']} {j['price']}")
# 登录验证函数
def login(name, passwd):
"""
登录验证函数
:param name:
:param passwd:
:return:
"""
if name in user:
if passwd == user[name]["passwd"]:
return True
else:
print("密码输入错误!")
else:
print("用户不存在或用户名输入错误!")
# 注册函数
def register(name, passwd, money):
"""
注册函数
:param name:
:param passwd:
:param money:
:return:
"""
with open("vip.txt", "w", encoding="utf-8") as fp:
user[name] = {"passwd": passwd, "money": money}
# #把对应的数据结构对象转化成json格式的字符串 写入文件存储起来
fp.write(json.dumps(user))
print("/***注册成功***/")
def menu():
"""
菜单函数
:return:
"""
print("#########################")
print("1.查看商品信息")
print("2.查看购物车")
print("3.结账")
print("4.充值")
print("5.exit")
print("#########################")
while True:
goodscar = {}
print("/ 欢迎来到三乐购物系统 /".center(50, "*"))
print("1.注册".center(50, " "))
print("2.登录".center(50, " "))
print("3.exit".center(51, " "))
option = input("请输入你的选择:")
if option == '1':
print("/ 欢迎注册三乐超市! /".center(50, "*"))
name = input("请输入用户名:")
passwd = input("请输入密码:")
money = input("请输入您的充值金额:")
register(name, passwd, money)
elif option == '2':
print("/ 欢迎登录三乐购物系统 /".center(50, "="))
name = input("请输入用户名:")
passwd = input("请输入密码:")
if login(name, passwd):
print("/===登录成功!===/".center(50, " "))
while True:
menu()
choice = input("请输入您的选择:")
if choice == '1':
showgooods()
goods_num = input("请输入要购买的商品号:")
count = int(input("请输入要购买的数量:"))
# 判断是否有重复商品在购物车里面,有就合并这两个商品
if goods_num in goodscar:
goodscar[goods_num]['count'] += count
else:
goodscar.update({goods_num: {'name': goods[goods_num]['name'],
'price': goods[goods_num]['price'],
'count': count,
'total_price': count * float(goods[goods_num]['price'])}})
elif choice == '2':
shopping_car()
elif choice == '3':
totalprice = 0
print("正在结算中......")
for i, j in goodscar.items():
totalprice += j['total_price']
print(f"您应该支付的金额 :{totalprice}")
print(f"您的余额为 : {user[name]['money']} ")
pay_money()
elif choice == '4':
recharge()
elif choice == '5':
break
else:
print("输入错误,请重新输入")
elif option == '3':
# 再次写入用户信息,达到更新余额的效果
with open("vip.txt", "w", encoding="utf-8") as fp:
fp.write(json.dumps(user))
print("退出成功!")
print("欢迎您下次再来!")
break
else:
print("输入错误,请重新输入")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通