题目:
1、使用系统需要登录验证,注册时需要填写购物的预算信息
2、用户可以任意查看商品信息和已加购的商品信息
3、用户根据商品编号购买商品,购买时检测余额是否够,够的话直接结算,不够的话清除购物车内的商品并提醒重新加购
4、可随时退出,退出时打印已购买商品和余额
要求:将功能封装为函数,用尽可能友好的方式输出
拓展:将注册过的用户信息写入文件,下次执行程序时,可通过读取文件获得已注册过的用户信息
#登录
#用户登录成功返回True,登录失败返回False
def login(username, passwd):
if username in user and user[username]["passwd"] == passwd:
return True
else:
return False
#注册
#传入用户名、密码、预算信息
def register(username, passwd, budget):
if username in user:
print("用户名已存在!")
else:
#添加新的用户信息
user[username] = {"passwd": passwd, "budget": budget}
# dict --> str
user_str = json.dumps(user)
#打开文本文件,将注册的用户信息写入文件
fp = open("userinfo.txt", "w")
fp.write(user_str)
#用完后关闭文件,不然会一直占用内存资源
fp.close()
print(f"{username}用户注册成功!")
#查看商品信息
def checkMessage():
print("以下是商品信息:".center(40, "-"))
for i in goodsmess:
print(f"商品编号:{i},商品:{goodsmess[i]['name']},单价:{goodsmess[i]['price']}")
print("-"*45)
#将商品加入购物车
def addGoods(goodsid, goodsnum):
#若购物车中暂无需要加购的商品,将商品数量初始化为0,再加上需要加购的数量
#get属性:获取值,若未找到关键字默认返回None,也可以指定返回值
cart[goodsid] = cart.get(goodsid, 0) +goodsnum
print(f"加购{goodsnum}个{goodsmess[goodsid]['name']}成功")
#查看购物车
def checkCart():
if cart:
print("以下为购物车中的的商品信息:".center(40, "-"))
for i in cart:
print(f"商品编号:{i},商品:{goodsmess[i]['name']},单价:{goodsmess[i]['price']}")
print("-" * 50)
else:
#购物车为空时给出提醒
print("购物车为空".center(40, "-"))
#结算购物车
def payCart():
#pay记录用户需要支付的金额
for i in cart:
pay = cart[i] * goodsmess[i]['price']
print(f"你一共需要支付{pay}元")
if pay <= float(user[username]['budget']):
#注意运算时的类型
#money变量记录结算后的预算信息
money = float(user[username]['budget'])
money = money - pay
user[username]['budget'] = str(money)
user_str = json.dumps(user)
#将购买商品后的预算信息写入文件中
fp = open("userinfo.txt", "w")
fp.write(user_str)
fp.close()
print(f"购买成功,你的余额为{user[username]['budget']}")
#备份
cart2.update(cart.copy())
#清除购物车中的商品信息
cart.clear()
else:
print("余额不足,将自动清空购物车中商品,请重新加购商品")
cart.clear()
#退出系统
def exitSystem():
print("-" * 50)
print("谢谢惠顾!欢迎下次光临!")
if cart2:
for i in cart2:
print("以下是你本次购买的商品:")
print(f"购买{goodsmess[i]['name']}:{cart2[i]*goodsmess[i]['price']}元")
else:
print("本次购物,你未购买商品")
print(f"你目前的余额为{user[username]['budget']}")
print("-" * 50)
#主程序
import json
#保存用户信息,格式为{用户名:{"passwd":密码, "budget":预算}}
user = {}
#保存购物车中的商品信息,格式为{商品编号, 商品数量}
cart = {}
#cart2在进行清空购物车时,对cart里面的内容进行备份
cart2 = {}
#商品信息
goodsmess = {'F00001': {'name': '苹果', 'price': 1.2},
'F00002': {'name': '香蕉', 'price': 5.5},
'F00003': {'name': '橘子', 'price': 1.5},
'F00004': {'name': '梨子', 'price': 4.5},
'F00005': {'name': '西瓜', 'price': 0.8},
}
print("欢迎进入三乐购物系统!".center(40))
while 1:
print("-" * 50)
print("1、登录".center(40))
print("2、注册".center(40))
print("3、退出".center(40))
print("-" * 50)
option = input("请输入你的选择:")
if option == "1":
fp = open("userinfo.txt")
user_str = fp.read()
user = json.loads(user_str)
username = input("请输入用户名:")
passwd = input("请输入密码:")
if login(username, passwd):
print(f"{username}用户登录成功!")
print(f"欢迎光临!你的余额为{user[username]['budget']}")
while 1:
print("-"*50)
print("1、查看商品信息".center(40))
print("2、将商品加入购物车".center(40))
print("3、查看购物车".center(40))
print("4、结算购物车".center(40))
print("5、退出购物系统".center(40))
print("-" * 50)
choice = input("请输入你的选择:")
if choice == "1":
checkMessage()
elif choice == "2":
goodsid = input("请输入你想购买的商品编号(F00001~F00005):")
if goodsid in goodsmess:
goodsnum = input("请输入你想购买的数量:")
if goodsnum.isdigit():
#将字符串转换为整型,以便计算
goodsnum = int(goodsnum)
addGoods(goodsid, goodsnum)
else:
print("请输入正确的商品数量")
else:
print("对不起,该商品不存在")
elif choice == "3":
checkCart()
elif choice == "4":
payCart()
elif choice == "5":
exitSystem()
break
else:
print("输入错误,请重新输入!")
else:
print("用户不存在,请重新选择!")
elif option == "2":
#读取文件中的信息赋值给user
fp = open("userinfo.txt")
user_str = fp.read()
fp.close()
#dict --> str
user = json.loads(user_str)
username = input("请输入用户名:")
passwd = input("请输入密码:")
budget = input("请输入你的预算:")
register(username, passwd, budget)
elif option == "3":
break
else:
print("输入错误,请重新输入!")
userinfo.txt文件中的用户信息:
运行结果: