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("输入错误,请重新输入")



  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值