首页 > 其他分享 >ATM购物车

ATM购物车

时间:2022-11-02 16:55:18浏览次数:179  
标签:shop good car ATM 购物车 py 日志

ATM项目实现思路:

ATM架构设计
    三层架构
        core目录下的src.py(浏览器)             (展示层)
        interface目录下的多个py文件(框架)      (核心逻辑层)
        db目录下db_handler.py(数据库服务)      (数据处理层)

 

 


















项目路径展示:

bin文件夹:

  • start.py:项目启动 

core文件夹:

  • src.py:充当第一层数据展示层

 interface文件夹——负责各功能的逻辑判断:

  • user_interface: 用户注册,用户登录
  • bank_interface:  查看余额,提现,还款,转账,查看流水
  • shop_interface: 添加购物车,查看购物车,结算购物车
  • admin_interface: 冻结账户,删除账户,修改密码,账户充值等

db文件夹:

  • 储存用户数据
  • db_handle:负责数据的保存,数据的查询等

conf文件夹:

  • setting.py:路径配制,日志路径、格式、日志字典配制

lib文件夹:

  • common.py:常用公共功能,如数字加密,装饰器,整数或小数类型判断,日志功能函数等

log文件夹:

  • 记录日志数据

 

第一层(src.py)项目功能搭建:

def register():
    pass


def login():
    pass


def check_balance():
    pass


def withdraw():
    pass



def recharge():
    pass


def transfer():
    pass



def check_flow():
    pass



def add_shop_car():
    pass


def check_shop_car():
    pass


def pay_shop_car():
    pass


def admin():
    pass



func_dict = {
    '1': register,
    '2': login,
    '3': check_balance,
    '4': withdraw,
    '5': recharge,
    '6': transfer,
    '7': check_flow,
    '8': add_shop_car,
    '9': check_shop_car,
    '10':pay_shop_car,
    '11':admin
}


def run():
    while True:
        print("""
            1.注册功能
            2.登陆功能
            3.查看余额
            4.提现功能
            5.充值功能
            6.转账功能
            7.查看流水
            8.添加购物车
            9.查看购物车
            10.结算购物车
            11.管理员功能   
            """)

        choice_num = input('请输入您要的功能编号>>>:').strip()
        if choice_num in func_dict:
            func_name = func_dict.get(choice_num)
            func_name()
        else:
            print('您输入的功能编号不存在,请重新输入')

 

项目启动文件start.py:

项目启动文件start.py可以放在项目根路径,也可以放在bin文件夹下。
该文件首先要做的第一件事就是使用os.path.dirname获取当前项目路径,并将其导入sys.path。
然后就是调用展示层文件src.py。
使用if __name__ == '__main__':标志这个文件是启动文件。

 

配制文件setting.py

1.配制文件存储路径   
2.设置取款费率
3.日志格式、文件路径、日志字典配制

   settings文件中存放的是一些不会变动的信息,如项目的根路径、数据库的路径、日志的存放位置等,这此不会变动的信息,变量名可以采用大写。
   当其他模块要用这些路径的时候的时候,从配置文件导入即可。

   注意当数据库db不存在时,settings.py会进行创建,所以在第三层一定要导入settings.py。

 

公共功能common.py

1.加密
2.校验用户登录状态和管理员装饰器
3.判断输入的数字是否是整数或小数
4.日志功能函数

第一层用户密码需要进行加密,因为其他地方也有可能用到加密操作,所以可的将其封装成函数放入common.py中

 


 判断登录状态和管理员权限的的装饰器可以放在一起,先判断登录状态,通过有参装饰器将普通用户和管理员进行区分,普通用户与管理员设置不同的参数,登录的普通用户可以执行设置normal参数的函数的所有功能,如果想要执行admin管理功能,则还需要判断是否是管理员。

  

 进行取款、充值、转账等功能时,需要输入数字金额,要判断输入的是否是整数或小数,可以通过异常捕获功能来实现。也可以放在common.py中。

 

不同的功能函数需要记录不同的日志类型,所以需要将实现日志功能的接口包装成一个函数,根据不同日志类型上传不同参数。因为日志的路径、格式、字典都是在配制文件中的,所以需要导入settings模块。

 

 数据层db_handler.py

在用户的注册功能、登录功能,还有银行的消费、充值、取款、转账等等都涉及到数据的增、删、改、查,需要对数据进行读取和重新保存,都是一些重复的操作,所以可以将数据的保存、读取分别设置为相应的函数放到db_handler.py文件中,以后要用到的时候可以直接调用。

数据的保存和查询:

 

各功能的拆分、模块调用  

接下来我们分功能来介绍一下每个功能下的相关操作是如何通过模块进行调用的。

注册功能:

 那我们再来看一下现在第一层的展示层:

 

登录功能:

与注册功能差不多,都是在第二层完成了用户名和密码的比对,返回给第一层。涉及到后面的管理员权限时,在登录功能这里需要加上一些其他判断,后面再说。

 

银行功能:

查询余额:

第二层逻辑处理:

  • 读取用户数据文件
  • 获取余额信息
  • 返回给第一层

第一层接受第二层返回的数据值:

 

取款:

第二层逻辑处理:

  • 调用common模块的整数、小数异常捕获,如果未输入小数或者整数,则提醒输入符合要求的数字
  • 读取用户文件数据,获取余额信息
  • 取款金额与用户余额信息+手续费(在配制文件中设置提现手续费)进行比较,余额充足取款成功之后修改字典余额
  • 添加用户流水信息:包括提现时间,提现金额,手续费
  • 记录日志信息
  • 提现成功返回True,提现失败返回False

 第一层接收返回值:

 

充值:

第二层逻辑处理:

  • 调用common模块的小数、整数异常捕获,如果未输入符合要求的数字则返回False,并提醒输入符合要求的数字
  • 获取用户字典数据,直接添加充值金额
  • 添加流水记录: 时间,充值金额,当前余额
  • 保存用户数据
  • 记录日志信息
  • 返回第一层

 

 第一层接受返回值:

 

转账:

第二层逻辑处理:

  • 拼接接受转账用户路径,判断用户是否存在,如果不存在,则返回False
  • 调用common模块的小数、整数判断输入金额是否符合要求,不符合则返回False
  • 读取当前用户字典信息,并获取账户余额
  • 比较当前账户余额和转账金额,余额不足返回False,余额充足修改当前账户和接受转账用户的余额信息
  • 重新保存用户数据
  • 记录流水信息
  • 记录日志信息
  • 返回第一层

 第一层:数据展示和接收返回值

 

查询流水:

第二层逻辑处理:

  • 读取用户字典信息,获取当前流水信息
  • 记录日志信息
  • 返回第一层

第一层:接受第二层返回值和数据展示

 

 购物车功能:

添加购物车:

可以将所有的逻辑判断全部放在第二层,直接返回结果给第一层

第二层:

import time from db import db_handler from lib import common logger = common.get_logger('购物车信息') def add_shop_car_interface(username): temp_shop_car = {} while True: good_list = [ ['挂壁面', 3], ['印度飞饼', 22], ['极品木瓜', 666], ['土耳其土豆', 999], ['伊拉克拌面', 1000], ['董卓戏张飞公仔', 2000], ['仿真玩偶', 10000] ] # 循环打印商品信息供用户选择 for num, good_data in enumerate(good_list): print(f"商品编号:{num} | 商品名称:{good_data[0]} | 商品单价: {good_data[1]}") # 选择商品编号 good_id = input('请输入您要购买的商品编号(q)>>>:') # 结束循环,将选购商品信息写入用户数据文件 if good_id == 'q': user_data_dict = db_handler.select(username) # 读取旧的购物车信息 old_shop_car = user_data_dict.get('shop_car') # 判断旧的购物车中是否有商品 for g_name, g_list in temp_shop_car.items(): # 如果旧的购物车中有商品,则用原来的商品数量加现在的商品数量 if g_name in old_shop_car: old_shop_car[g_name][0] += temp_shop_car[g_name][0] else: # 如果原来购物车中没有商品,则添加选购商品信息 old_shop_car[g_name] = g_list # 将用户信息中的购物加一栏改为修改之后的商品信息 user_data_dict['shop_car'] = old_shop_car # 将新的数据写入文件 db_handler.save(user_data_dict) # 记录日志信息 logger.info(f'用户{username}添加购物车成功') # 返回第一层 return True, '添加购物车成功' if not good_id.isdigit(): print('您输入的商品编号必须为纯数字') continue good_id = int(good_id) if good_id not in range(len(good_list)): print('没有您要的商品编号') continue # 根据商品编号索引取值获取商品信息 target_good_list = good_list[good_id] good_name = target_good_list[0] # 输入要购买的商品数量 good_num = input(f'请输入您要购买的{target_good_list[0]}的数量>>>:').strip() if not good_num.isdigit(): print('商品数量必须为纯数字') continue good_num = int(good_num) # 判断购物车字典中是否有商品 if not good_name in temp_shop_car: temp_shop_car[good_name] = [good_num, target_good_list[1]] # {'挂壁面' :[10,3]} else: temp_shop_car.get(good_name)[0] += good_num print(temp_shop_car)
第一层:

@common.outer('normal')
def add_shop_car():
    flag,msg = shop_interface.add_shop_car_interface(is_login.get('username'))
    print(msg)

 

 查询购物车:

 第二层:

  • 读取用户数据信息写入字典
  • 如果购物车信息存在,则返回True和购物车信息;如果不存在,则返回False,并提醒没有购物车数据
  • 记录日志信息

第一层:

 

 结算购物车:

 第二层:

  • 读取用户数据
  • 获取余额信息
  • 比较商品总价与余额情况
  • 修改余额,重新存入字典
  • 保存新的数据文件
  • 记录日志信息
  • 返回给第一层

 

 

 

 

 

标签:shop,good,car,ATM,购物车,py,日志
From: https://www.cnblogs.com/chen-ao666/p/16849660.html

相关文章

  • ATM项目
    ATM项目项目架构设计三层架构 core目录下的src.py(浏览器/用户视图层) interface目录下的多个py文件(框架/逻辑接口层) db目录下db_handler.py(数据库服务/数据处理层)项......
  • ATM购物车项目
    ATM购物车项目分析注册登陆登陆装饰器查看余额提款额度提现功能充值功能转账功能查看流水添加购物车查看购物车结算购物车ATM功能分析注册1.1先获取用户......
  • ATM
    目录ATM逻辑描述三层框架简介1、第一层(src.py)2、第二层(interface文件夹下内容)3、第三层(db_hanlder)启动函数用户注册功能用户登录common中的小功能检测是否登陆的装饰器判......
  • ATM项目
    ATM项目实战项目需求分析:1.注册(密码要加密)2.登陆3.查看余额4.提现(可自定手续费)5.还款6.转账7.查看流水8.添加购物车功能(商品可配置)9.查看购物车功能10.结算购......
  • ATM
    ATM+购物车1.创建功能字典2.打印功能选项3.执行的功能编号函数4.判断编号是否在功能字典里注册功能:1.获取用户信息2.判断两次密码是否一致4.密码加密(调用h......
  • python第二十五课---ATM购物车所有模块代码,及框架搭建等建议与注释
    ATM购物车1.先把主要用到的文件夹在项目根目录下创建一下!!!2.再先把简单的几个常用的文件创建一下binstart.py#直接写,固定的coresrc.pyconf......
  • ATM+shopping_car ——面条版(待补充)——三层架构思路
    ATM+shopping_car——面条版(待补充)——三层架构思路#coding:utf-8importosimportsysimportjsonroot_dir=os.path.dirname(os.path.dirname(__file__))user......
  • ATM项目
    ATM项目目录框架bin start.pyconf settings.pycore src.pyinterface user_interface.py shop_interface.py bank_interface.py admin_interface.pylib commo......
  • ATM思路
    ATM思路创建文件目录bin文件夹 start.pyconf文件夹 settings.pycore文件夹 conf.pydb文件夹保存用户数据文件interface文件夹 user_interface第二层逻辑......
  • ATM项目思路
    ATM思路创建文件目录bin文件夹 start.pyconf文件夹 settings.pycore文件夹 conf.pydb文件夹保存用户数据文件interface文件夹 user_interface第二层逻辑......