购物车
1.正常结算的流程
请充值吧,大哥1000
恭喜你~ 充值成功1000元人民币
1000
加载商品中 ...
[##################################################] 100%
序号 商品名称 价格
1 电脑 1999
2 鼠标 10
3 游艇 20
4 美女 998
5 风油精 30
请输入您要购买的商品:2
**************************************************
您选择的商品具体信息:
*-商品名称:鼠标
*-商品单价:10
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:2
**************************************************
您选择的商品具体信息:
*-商品名称:鼠标
*-商品单价:10
*-商品数量:2
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:n
[-------------------您购物车的具体商品如下:-------------------]
序号2: 商品名称:鼠标 商品单价:10 商品数量:2 此商品总价:20
正在结算数据中 ...
[##################################################] 100%
请稍后...
[一共:20元]
[您已经成功购买以上所有商品 , 余额还剩980元,感谢您下次光临~]
2.如果余额不足要删除商品之后再结算
请充值吧,大哥1000
恭喜你~ 充值成功1000元人民币
1000
加载商品中 ...
[##################################################] 100%
序号 商品名称 价格
1 电脑 1999
2 鼠标 10
3 游艇 20
4 美女 998
5 风油精 30
请输入您要购买的商品:2
**************************************************
您选择的商品具体信息:
*-商品名称:鼠标
*-商品单价:10
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:3
**************************************************
您选择的商品具体信息:
*-商品名称:游艇
*-商品单价:20
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:4
**************************************************
您选择的商品具体信息:
*-商品名称:美女
*-商品单价:998
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:1
**************************************************
您选择的商品具体信息:
*-商品名称:电脑
*-商品单价:1999
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:n
[-------------------您购物车的具体商品如下:-------------------]
序号2: 商品名称:鼠标 商品单价:10 商品数量:1 此商品总价:10
序号3: 商品名称:游艇 商品单价:20 商品数量:1 此商品总价:20
序号4: 商品名称:美女 商品单价:998 商品数量:1 此商品总价:998
序号1: 商品名称:电脑 商品单价:1999 商品数量:1 此商品总价:1999
余额不足,还差2027元,请忍痛割爱,删除某些商品
[-------------------请输入要删除的商品序号:-------------------]2
[-------------------您购物车的具体商品如下:-------------------]
序号3: 商品名称:游艇 商品单价:20 商品数量:1 此商品总价:20
序号4: 商品名称:美女 商品单价:998 商品数量:1 此商品总价:998
序号1: 商品名称:电脑 商品单价:1999 商品数量:1 此商品总价:1999
余额不足,还差2017元,请忍痛割爱,删除某些商品
[-------------------请输入要删除的商品序号:-------------------]3
[-------------------您购物车的具体商品如下:-------------------]
序号4: 商品名称:美女 商品单价:998 商品数量:1 此商品总价:998
序号1: 商品名称:电脑 商品单价:1999 商品数量:1 此商品总价:1999
余额不足,还差1997元,请忍痛割爱,删除某些商品
[-------------------请输入要删除的商品序号:-------------------]1
[-------------------您购物车的具体商品如下:-------------------]
序号4: 商品名称:美女 商品单价:998 商品数量:1 此商品总价:998
正在结算数据中 ...
[##################################################] 100%
请稍后...
[一共:998元]
[您已经成功购买以上所有商品 , 余额还剩2元,感谢您下次光临~]
3.不想买了按q退出
请充值吧,大哥absfdsdf
充值失败,非数字.
请充值吧,大哥10000
恭喜你~ 充值成功10000元人民币
10000
加载商品中 ...
[##################################################] 100%
序号 商品名称 价格
1 电脑 1999
2 鼠标 10
3 游艇 20
4 美女 998
5 风油精 30
请输入您要购买的商品:2
**************************************************
您选择的商品具体信息:
*-商品名称:鼠标
*-商品单价:10
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:3
**************************************************
您选择的商品具体信息:
*-商品名称:游艇
*-商品单价:20
*-商品数量:1
已成功添加到购物车~ 请继续shopping ~
**************************************************
请输入您要购买的商品:q
[============== 欢迎下次光临: ==============]
shopping_data.json
{"name":"电脑","price":1999}
{"name":"鼠标","price":10}
{"name":"游艇","price":20}
{"name":"美女","price":998}
{"name":"风油精","price":30}
shopping.py
# ### shopping 购物车
import time,json
money = 0
car = {
}
"""
car = {
1:{"name","price","account":2},
2:{"name","price","account":2},
3:{"name","price","account":2}
}
"""
# 读取数据
def read_data(filename,lst = []):
with open(filename,mode="r+",encoding="utf-8") as fp:
for i in fp:
dic = json.loads(i)
lst.append(dic)
return lst
# 商品列表
goods_lst = read_data("shopping_data.json")
# 进度条
def progress(percent,):
# 如果百分比超过了1,说明数据已经接受完毕;
if percent > 1:
percent = 1
# 打印对应的#号效果
strvar = "#" * int(percent * 50)
# %% => %
print("\r[%-50s] %d%%" % (strvar,int(percent * 100)) , end="" )
# 执行进度条
def exe_process():
# 初始化接受的字节数
recv_size = 0
# 文件接受总大小
total_size = 102400
while recv_size < total_size:
recv_size += 1024
# 模拟延迟
time.sleep(0.01)
# 计算百分比
percent = recv_size/total_size #0.001
# 调用进度条
progress(percent)
# 充值
def recharge():
global money
while True:
strvar = input("请充值吧,大哥~")
if strvar.isdecimal():
money = int(strvar)
print("恭喜你~ 充值成功{}元人民币".format(money))
break
else:
print("充值失败,非数字.")
# 加载中
def loading():
print("加载商品中 ... ")
exe_process()
print()
# 展现商品
def show_goods():
# 序号 商品名称 价格
strvar = "{}".format("商品名称").center(20)
print("序号"+strvar+"价格")
for k,v in enumerate(goods_lst,start=1):
# 把序号加到字典v当中
v["num"] = k
# 商品的内容
print("{v[num]:<12}{v[name]:<12} {v[price]}".format(v=v))
# 报错信息
def error():
print("*"*50)
print("*{val:^44}*".format(val="这是错误的选项"))
print("*"*50)
time.sleep(0.5)
# 添加购物车
def add_car(num):
"""
# 购物车: {序号 : 商品信息(名称,价格,数量) }
car = {
1:{"name","price","account":2},
2:{"name","price","account":2},
3:{"name","price","account":2}
}
# 商品列表
[
{'name': '电脑', 'price': 1999, 'num': 1},
{'name': '鼠标', 'price': 10, 'num': 2},
{'name': '游艇', 'price': 20, 'num': 3},
{'name': '美女', 'price': 998, 'num': 4},
{'name': '风油精', 'price': 30, 'num': 5}
]
"""
# print(goods_lst)
# 当前购买的商品不再购物车当中,那就添加购物车
if num not in car:
car[num] = {
"name":goods_lst[num-1]["name"],
"price":goods_lst[num-1]["price"],
"account":1
}
# 当前购买的商品再购物车当中,只是在商品的数量上做累加
else:
car[num]["account"] += 1
# print(car)
# 展现购物车
def show_car(num):
print("*"*50)
print("您选择的商品具体信息:")
print("*-商品名称:{}".format(car[num]["name"]))
print("*-商品单价:{}".format(car[num]["price"]))
print("*-商品数量:{}".format(car[num]["account"]))
print("*"*50)
print("已成功添加到购物车~ 请继续shopping ~")
# 计算价格
def balance():
total = 0
print("[-------------------您购物车的具体商品如下:-------------------]")
# 序号2: 商品名称:鼠标 商品单价:10 商品数量:1 此商品总价:10
# 序号3: 商品名称:游艇 商品单价:20 商品数量:1 此商品总价:20
for k,v in car.items():
# 计算当前商品的总价格
cur_price = v["price"] * v["account"]
# 计算购物车中所有商品的总价格
total += cur_price
v["num"] = k
v["cur_price"] = cur_price
print("序号{v[num]}: 商品名称:{v[name]} 商品单价:{v[price]} 商品数量:{v[account]} 此商品总价:{v[cur_price]}".format(v=v))
return total
# 成功消息
def success(total,money):
print("正在结算数据中 ... ")
exe_process()
print("\n请稍后...")
time.sleep(0.1)
print("[一共:{}元]".format(total))
# 剩余的金额 = 充值的金额 - 消费的金额
print("[您已经成功购买以上所有商品 , 余额还剩{}元,感谢您下次光临~]".format(money-total))
# 删除商品
def del_goods(total,money):
print("余额不足,还差{}元,请忍痛割爱,删除某些商品".format(total-money))
num = input("[-------------------请输入要删除的商品序号:-------------------]")
# 判断当前num是存数字字符串
if num.isdecimal():
num = int(num)
# 判断该序号是否是购物车中的数据
if num in car:
car[num]["account"] -= 1
# 如果数量已经减到0件,意味着从购物车中清空该数据.
if not car[num]["account"]:
car.pop(num)
else:
error()
else:
error()
# 退出
def myexit():
print("[============== 欢迎下次光临: ==============]")
time.sleep(0.5)
def main():
# 1.充值
recharge()
# 2.加载中
loading()
# 3.展示商品
show_goods()
# 4.购买商品
sign = True
while sign:
num = input("请输入您要购买的商品:")
# 购买商品
if num.isdecimal():
num = int(num)
if 0 < num <= len( goods_lst ):
# 添加购物车
add_car(num)
# 展现购物车
show_car(num)
else:
error()
# 计算商品
elif num.upper() == "N":
while True:
total = balance()
if total > money:
# 删除购物车中的商品
del_goods(total,money)
else:
# 打印成功的消息
success(total,money)
sign = False
break
# 按q退出
elif num.upper() == "Q":
# 退出
myexit()
sign = False
# 都不满足,直接报错
else:
error()
main()