Python小程序之-购物车

购物车

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()

猜你喜欢

转载自blog.csdn.net/qq_45957580/article/details/107880470