Python练习--购物系统

题目:

        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文件中的用户信息:

运行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值