首页 > 其他分享 >Day26.购物功能

Day26.购物功能

时间:2024-06-13 15:23:59浏览次数:22  
标签:shop 功能 shopping car Day26 购物 购物车 user interface

1.购物功能_src.py中支付结算功能+添加购物车功能

   src.py中的购物功能代码:

# 8. 购物功能
@common.login_auth
def shopping():
    # 不从文件中读取商品数据,直接写
    # 1)创建一个商品列表,列表套列表的商品数据,使用枚举
    # [[商品名称1, 商品单价1], [商品名称2, 商品单价2]...]
    shop_list = [
        ['上海灌汤包', 30],
        ['写真抱枕', 250],
        ['凤爪', 28],
        ['鱼丸', 15],
        ['坦克', 100000],
        ['macbook', 20000],
    ]

    # 初始化当前购物车:
    shopping_car = {}   # {'商品名称': ['单价', '数量']}

    while True:
        # 1)打印商品信息,让用户选择
        # 枚举:enumerate(可迭代对象) -----> (可迭代对象的索引,索引对应的值)
        # 枚举:enumerate(可迭代对象) -----> (0, ['上海灌汤包', 30])
        print('商品列表'.center(50, '='))
        for index, shop in enumerate(shop_list):
            # 解压赋值,拿到商品名称和商品单价
            shop_name, shop_price = shop
            print('商品编号为:[{}]'.format(index), 
                  '商品名称:[{}]'.format(shop_name), 
                  '商品单价:[{}]'.format(shop_price))
        print('end'.center(50, '='))
        # 2)让用户根据商品编号进行选择
        choice = input('请输入商品编号(是否结账输入y or n):').strip()
        
        # 2.1)输入的是 y 进入支付结算功能
        if choice == 'y':
            if not shopping_car:
                print('购物车是空的,不能支付,请重新输入!')
                continue
            # 6)调用支付接口进行支付
            flag, msg = shop_interface.shopping_interface(login_user, shopping_car)
            if flag:
                print(msg)
                break
            else:
                print(msg)
                
        # 2.2)输入的是 n 添加购物车
        elif choice == 'n':
            # 判断当前用户是否添加购物车
            if not shopping_car:
                print('购物车是空的,不能添加,请重新输入!')
                continue
            
            # 7)调用添加购物车接口
            flag, msg =shop_interface.add_shop_car_interface(
                login_user, shopping_car
            )
            if flag:
                print(msg)
                break
            else:
                print(msg)

        # 如果输入不是数字
        if not choice.isdigit():
            print('请输入正确的编号!')
            continue
            
        choice = int(choice)

        # 3)判断choice是否在商品序号中存在
        if choice not in range(len(shop_list)):
            print('请输入正确的编号!')
            continue
        
        # 4)获取商品名称与单价
        shop_name, shop_price = shop_list[choice]

        # 5)加入购物车
        # 5.1)判断用户选择的商品是否重复,重复则数量 +1
        if shop_name in shopping_car:
            # shopping_car[shop_name][1] -----> 1 += 1
            # 添加商品数量
            shopping_car[shop_name][1] = shopping_car[shop_name][1] + 1

        else:
            # 否则数量默认为1
            # {'商品名称':['单价', '数量']}
            shopping_car[shop_name] = [shop_price, 1]

        print('当前购物车:', shopping_car)

2.购物功能_shop_interface.py中商城结算接口和购物车添加功能

  shop_interface.py中的商城结算接口和购物车添加功能接口代码:

'''
购物商城接口
'''
from ATM.db import db_handler


# 商城准备结算接口
def shopping_interface(login_user, shopping_car):

    # 1)计算消费总额
    # {'商品名称': ['单价', '数量']}
    # 总价
    cost = 0
    for price_number in shopping_car.values():
        price, number = price_number
        cost += price *number

    # 2) 导入银行接口
    from ATM.interface import bank_interface

    # 3) 逻辑校验成功后,在调用银行的支付接口
    flag = bank_interface.pay_interface(login_user, cost)
    if flag:
        return True, '支付成功,准备发货!'
    return False, '支付失败,金额不足!'

# 购物车添加接口
def add_shop_car_interface(login_user, shopping_car):
    # 1) 获取当前用户的购物车
    user_dic = db_handler.select(login_user)
    
    # 获取用户文件中的商品的数据
    shop_car = user_dic.get('shop_car')
    
    # 2) 添加购物车
    # 2.1) 判断当前用户选择的商品是否已经存在
    # shopping_car ----> {'商品名': []}
    for shop_name, price_number in shopping_car.items():
        # 获取商品当前的数量
        number = price_number[1]

        # 2.2)若商品重复,则累加商品数量
        if shop_name in shop_car:
            user_dic['shop_car'][shop_name][1] += number
        
        else:
            # 2.3) 若不是重复的,更新到商品字典中
            user_dic['shop_car'].update(
                {shop_name: price_number}
            )
    # 保存购物车数据
    db_handler.save(user_dic)

    return True, '添加购物车成功'

3.购物功能_bank_interface.py中商城结算接口调用银行接口中的支付接口(bank_interface.py)

   bank_interface.py中支付接口代码:

# 支付接口
def pay_interface(login_user, cost):
    user_dic = db_handler.select(login_user)
    
    # 判断用户金额是否足够
    if user_dic.get('balance') >= cost:
        # 账户余额扣钱
        user_dic['balance'] -= cost

        # 记录消费流水
        flow = '用户消费金额:{}'.format(cost)
        user_dic['flow'].append(flow)

        # 扣费后的用户信息保存到文件中
        db_handler.save(user_dic)
    # return True 或 return False 交给购物接口来处理        
        return True
    return False

  bank_interface.py中支付接口调用db_handler.py中的接口代码:

'''
数据处理层
    - 专门用户处理数据的
''' 
import os
from ATM.conf import settings
import json

# 查看数据
def select(username):
    # 1) 接收接口层传过来的username用户名,拼接用户json文件路径
    user_path =  os.path.join(
            settings.USER_DATA_PATH, '{}.json'.format(username)
            )
    # 2) 校验用户json文件是否存在
    if os.path.exists(user_path):
        # 3) 打开数据,并返回分接口层
        with open(user_path, 'r', encoding='utf-8') as f:
            user_dic = json.load(f)
            return user_dic
    # 3) 不return, 默认return None


# 保存数据
def save(user_dic):
    # 1) 拼接用户的数据字典
    username = user_dic.get('username')
    user_path =  os.path.join(
        settings.USER_DATA_PATH, '{}.json'.format(username)
    )
    print('user_path:{}'.format(user_path))
    
    # 2) 保存用户数据
    with open(user_path, 'w', encoding='utf-8') as f:
        # ensure_ascii=False 让文件中的中文数据,显示更美观
        json.dump(user_dic, f, ensure_ascii=False)
        print('用户`{}`数据更新成功'.format(username))

4.购物功能_商城结算功能程序运行结果

5.购物功能_商城加入购物车功能程序运行结果

标签:shop,功能,shopping,car,Day26,购物,购物车,user,interface
From: https://www.cnblogs.com/vless/p/18245937

相关文章

  • 数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验
    在这个数据如潮的时代,SQL已远远超越了简单的查询语言范畴,它已成为数据分析和决策制定的基石,成为撬动企业智慧决策的关键杠杆。SQL的编写和执行效率直接关系到数据处理的速度和分析结果的深度,对企业洞察市场动态、优化业务流程、提升决策质量起着至关重要的作用。如何在浩瀚的数......
  • windows 新增加的功能 揭秘
    1老c++没有被抛弃新c++是老c++的扩展使用新c/c++依然可以使用老代码的系统函数‘API’2html5其实就增加了一个视频播放器,这个播放器看着很‘牛’ 其实它真的很牛兼容性好!3windows10和11在桌面右键有显示功能里面设置图形卡选独立显卡那个芯片那个进程......
  • 水果O2O系统功能
    水果O2O系统功能介绍水果O2O系统是将线上线下的水果销售模式融入到一种新型销售模式,它以互联网为平台,整合线上线下资源,为消费者提供更加便捷、优质的水果购买体验。水果O2O系统主要包含以下功能:1.线上下单消费者可以通过手机端APP、微信小程序等线上渠道进行下单,选择自己......
  • 多校园跑腿小程序源码系统 帮取+代拿+外卖配送 功能超多 带完整的安装代码包+搭建部署
    系统概述多校园跑腿小程序源码系统是一款基于微信小程序平台开发的全功能校园服务应用。该系统采用先进的前后端分离架构,结合云服务技术,确保了系统的高可用性、可扩展性和安全性。系统设计之初就充分考虑到了多校园环境的特殊性,支持多校区独立运营或跨校联合运营模式,满足不同......
  • 一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot
    前言今天大姚给大家分享一款.NET开源(MITLicense)、免费、跨平台、功能强大的绘图库,支持多平台使用(包括:WPF、UWP、WinForm、Silverlight、Xamarin.iOS、Xamarin.Android、Xamarin.Forms和Xamarin.Mac等):OxyPlot。项目源代码WindowsForms项目运行VS打开OxyPlot.WindowsForms......
  • 宏天用户中心功能研究
    目录背景与目的研究方法研究结果分析与讨论结论背景与目的随着企业对数字化转型的迫切需求和用户体验的重视,用户中心设计(User-CenteredDesign,UCD)作为一种设计方法日益受到关注。用户中心设计旨在通过深入理解用户需求和行为,将用户置于设计的核心位置,从而创建出更......
  • 直播预约丨《指标体系建设实战》第三期:指标平台功能架构及落地实践
    指标是反映企业的各项核心业务活动、管理成效的数据体系,指标体系作为联结业务逻辑与数据实体的关键桥梁,是构建高质量数据统计的基础单元,并在量化业务绩效和效果评估中扮演着核心角色。为了更好地服务于客户并提供切实可行的实践指导,自4月24日起,袋鼠云将推出全新《指标体系建设实......
  • Day26.管理员功能
    1.管理员功能_修改用户额度 admin.py中的代码:#修改用户额度defchange_balance():whileTrue:#1)输入需要修改的用户名change_user=input('请输入需要修改额度的用户:').strip()#2)修改的用户额度money=input('......
  • 动态选择4种库存更新策略+缓存预热+多级存储结构——应对高并发秒杀情景和其他多种情
    商城整体功能架构图文字分析:活动入口进行风控检测,这个使用独立的服务来实现,风控使用批量提交的形式来实现,直接运用Java线程池来实现,可以提交一个列表来实现批量,可以参考以下的代码创建批量请求并且进行提交:importjava.util.ArrayList;importjava.util.List;publi......
  • 万界星空科技SMT行业MES系统功能
    在现代制造业中,SMT智能车间MES系统是一种全自动化的生产管理系统,用于监控和控制整个SMT生产流程。它通过监控SMT设备的运行状态、实时追踪生产数据,并与其他系统进行实时数据交换,以提高生产效率、降低生产成本。MES系统采用先进的数据分析和决策支持技术,帮助企业实现智能化生产......