ATM项目工程

发布时间 2023-06-07 21:41:26作者: Chimengmeng

ATM项目工程

【一】大逻辑

(1)在主程序文件中创建程序入口

(2)在核心代码文件(视图层)搭建程序框架

(3)进行代码功能分配

  • 功能树详解
- ATM 项目根目录
    - README.md 项目说明书

    - start.py 项目启动文件的创建方式二,直接暴露在最外层

    - conf 配置文件
    - settings.py

    - lib 公共方法文件
    - common.py

    - core(用户视图层) 存放用户视图层代码文件
    - src.py

    - interface(逻辑接口层) 存放核心业务逻辑代码
    - user_interface.py 用户相关接口
    - bank_interface.py 银行相关接口
    - shop_interface.py 购物相关接口

    - db(数据处理层) 存放数据与数据处理层代码
    - db_hander.py 数据处理层代码
    - user_data 用户数据

    - log 存放日志文件

    - bin(启动文件目录) 存放启动文件的方式一,单独创建目录
            	- main.py
  • README.md

    • 存放项目的说明,包括但不限于,程序运行展示
    • 存放一些对程序的解释型语句
  • start.py

    • 项目启动文件的创建方式二,直接暴露在最外层
    • 在整体ATM项目文件夹下创建程序入口
      • 好处:
        • 省了一步创建文件夹
      • 建议用方式一
        • 创建bin目录,启动文件在bin目录下
  • conf 配置文件夹 --- 存放配置文件

    • settings.py
      • 存放设置相关的代码
        • 比如日志设置
  • lib 公共方法文件

    • common.py
      • 存放所有函数或者部分函数公用的函数代码或逻辑
  • core(用户视图层) 存放用户视图层代码文件

    • src.py
      • 存放展示给用户看的代码部分,简单的说就是反馈给用户展示的部分
        • 例如,函数主逻辑
        • 函数相关的反馈结果的展示
  • interface(逻辑接口层) 存放核心业务逻辑代码

    • user_interface.py 用户相关接口
      • 用来处理用户相关的主逻辑代码
      • 例如,登陆和注册功能
        • 将登陆成功或失败后的结果反馈给用户视图层进行展示
        • 每个功能的进入接口
    • bank_interface.py 银行相关接口
      • 用来处理银行相关的逻辑代码
      • 例如,银行提款,
      • 银行存款
      • 银行还款
    • shop_interface.py 购物相关接口
      • 用来处理购物相关的代码
      • 例如处理购物车数据
      • 统计消费金额交给银行接口进行处理
  • db(数据处理层) 存放数据与数据处理层代码

    • db_hander.py 数据处理层代码
      • 用来处理有关数据的存储
      • 处理有关数据的查找
    • user_data 用户数据
      • 存放用户数据的变量值
  • log 存放日志文件

    • 用来存放生成的log日志文件
  • bin(启动文件目录) 存放启动文件的方式一,单独创建目录
    - main.py

【二】功能分配

【一】主函数逻辑

  • 展示功能菜单

  • 为每个功能创建程序入口

  • 创建大逻辑函数 - 每个函数都要能反复调用

【二】注册函数

  • 用户输入用户名和密码
  • 二次校验密码

(1)校验密码交给用户逻面板辑层

  • 拿到用户输入的用户名和密码

(2)传给数据处理层

  • 传给数据处理层,拿到所有的用户数据
  • 根据输入的用户名,读取数据库中的个人全部信息
  • 返回全部信息给用户逻面板辑层

(3)拿到数据处理层传回来的用户数据

  • 判断用户是否存在
    • 用户存在,返回结果并返回展示数据
    • 用户不存在,进行注册函数
  • 拿到用户输入的用户名和密码
    • 为了密码的安全性,进行md5加密
    • 从随机产生的验证码中拿到验证码当做盐

(4)将盐和原密码拼接后的密码传递给公用函数文件进行md5加密

  • 加密层加密后返回加密的数据

(5)返回用户面板继续进行注册逻辑

  • 拿到加密后的密码
  • 进行数据库数据格式的拼接组织成完整的用户数据
  • 内容包括
    • 用户名
    • 加密后的密码
    • 初始化余额
    • 流水记录表
    • 购物车表
    • 默认用户状态(未被锁定)
  • 将组织好的数据传给数据处理层

(6)调用数据处理层的数据接口

  • 从用户面板拿到传过来的用户数据
  • 调用保存数据函数进行数据的存储
  • 反馈结果
    • 保存成功,提示语
    • 未成功,提示语
  • 返回用户面板

(7)拿到数据处理层反馈的结果

  • 进行日志的录入(可选)
  • 反馈结果给视图展示层

(8)接收到用户面板的反馈结果

  • 拿到用户面板的反馈结果
    • 注册成功
      • 打印提示语
      • 终止注册
    • 注册未成功
      • 二次注册

(9)校验密码两次是否一致

  • 不一致则终止循环
  • 进行二次用户注册

【三】登录功能

(1)用户输入账号和密码

(2)调用用户面板将数据传给验证函数

(3)用户面板的登录接口拿到输入的账号密码

(4)从数据处理层根据用户名拿到相应的用户数据

(5)判断用户是否存在 - 同时判断用户状态是否被锁定

  • 如果用户状态被锁定,返回状态和提示语交给用户视图层进行展示

  • 从用户数据中拿到字典中的盐

  • 拼接拿到的盐和注册输入的密码

  • 将 盐和密码 拼接后的数据传给公用方法中的加密函数进行加密‘

(6)从用户面板接收到加密后的密码进行加密

  • 接收到用户面板传过来的加盐的密码

  • 进行密码的加密

  • 反馈给用户面板层,加密后的密码

(7)用户面板层拿到加密后的数据

  • 拿到加密后的数据

  • 提取用户数据中存入的密码

  • 进行比对,是否一致

  • 一致

    • 则向用户视图层反馈状态与提示语
    • 记录日志(可选)
  • 不一致

    • 返回状态码,打印提示语,记录日志(可选)

(8)用户不存在

  • 反馈状态码并反馈提示语

(9)返回到用户视图层

  • 从用户面板层拿到返回的状态码和提示语
  • 进行状态码判定

(9.1)用户登陆成功

  • 声明全局变量,加载当前用户姓名(不需要密码等信息,需要可以去数据处理层直接调用接口返回数据)
  • 只需要知道当前的登录用户是谁即可
  • 退出登录功能,返回功能菜单

(9.2)用户登陆失败

  • 打印失败信息
  • 进行二次登录

【四】额外添加:认证装饰器

以后的每个功能都需要,用户登录后才能使用,因此要加一个认证装饰器

  • 认证装饰器属于公共功能 ,存储在公共方法中

(1)套用装饰器模板进行功能扩充

(2)从用户视图层拿到用户登陆用户的姓名

  • (全局加载的姓名):只有登录后全局登录用户才会加载

(3)判断全局用户是否存在

(3.1)用户存在

  • 进行接下来的功能函数进行调用

(3.2)用户不存在

  • 反馈未登录信息,不允许进入功能
  • 跳转到登录功能函数

【五】查询余额功能(基于认证装饰器)

银行数据的处理属于银行业务,调用银行逻辑层的银行接口

(1)进入到银行接口,查询余额功能

  • 根据传过来的全局登录用户
  • 调用数据处理层,拿到对应用户的详细信息
  • 反馈给用户视图层,对应用户的对应的余额信息

(2)返回到用户视图层

  • 接收到银行接口返回的余额数据
  • 对余额数据进行打印数输出

【六】提现功能(基于认证装饰器)

提现功能也是银行的业务,所以调用银行接口的提现业务

(1)首先让用户输入需要体现的金额

  • 判断金额是否为数字,不是数字则进行二次输入

(2)将全局用户姓名和输入的提现金额传递给银行的提现接口

  • 从用户视图层,拿到用户姓名和提现金额

(3)调用数据处理层的接口

  • 拿到用户的全部信息数据

(4)开始进行提现(存在手续费)

  • 手续费固定则写死

    • 不固定可以添加到配置文件中,根据用户输入的金额,进行动态的手续费利率的获取
  • 计算一共需要花费的金额

    • 提现钱 + 手续费 = 提现费 * (1+费率)

(5)判断用户的余额是否充足

(5.1)用户余额不足反馈状态和提示信息

(5.2)用户余额充足,提示状态和提示信息

  • 对用户数据中的余额数据进行更改

    • 用户余额 - 提现 - 手续费
  • 得到最终的余额

  • (5.3)记录日志/流水

(6)调用数据处理层进行数据的覆写

  • 反馈状态信息 和 提示信息

(7)根据银行提现接口返回的状态和提示语进行输出

  • 从银行接口拿到状态和提示语
  • 成功体现
    • 打印提示语,退出当前功能返回到功能菜单
  • 余额不足或者其他原因
    • 打印提示语,退出到功能菜单

【七】还款功能(基于认证装饰器)

还款也是银行业务,所以要调用银行接口进行处理

(1)让用户输入还款金额

(1.1)判断输入的是否为数字

(1.2)纠正用户的金额大于 0

(1.3)用户输入金额小于 0 进行二次输入

  • 将还款金额和全局登录用户名传递给银行还款接口

(2)从用户视图层拿到传递过来的用户名和还款金额

(3)根据用户名调用数据处理层拿到用户的全部数据

(4)根据用户的全部数据提取到余额数据

  • 对用户的余额进行 加钱 操作

(5)记录流水/日志

(5.1)将流水添加到流水列表里

(6)调用数据处理层进行数据的覆写

(7)反馈状态码和提示语给用户视图层

(8)从银行接口拿到反馈的状态和提示语

  • 根据状态打印相关的提示语
  • 成功充值
    • 打印充值成功提示语
    • 终止当前功能,返回功能菜单

(9)失败充值(不存在) -

【十】转账功能

转账也是银行业务,所以还是要调用银行接口

(1)用户输入目标账户和目标金额

(1.1)判断金额大于 0 且为数字

  • 金额不大于 0 进行二次输入

(2)用户金额大于 0 传递给银行接口 当前登录用户名,目标用户名 ,目标金额

(3)调用数据处理层,拿到当前登录用户的详细数据,和目标用户的详细数据

(3.1)判断目标用户是否存在

  • 不存在则反馈数据

(4)用户存在,判断输入的金额是否大于转账用户的余额

(4.1)若余额不充足则终止转账,打印提示语

(5)用户存在进行余额的操作

  • 将转账用户的金额进行减钱操作
  • 对目标用户进行加钱的操作

(6)记录日志/流水(流水是两个人分别记录,并不能记录单独一条)

(7)调用数据处理层进行数据的覆写

  • 覆写当前用户数据
  • 覆写目标用户数据

(8)反馈提示语和状态码给用户视图层进行展示

(8.1)用户转账成功

  • 打印提示语
    • 退出当前功能

(8.2)转账失败

  • 打印提示语

【十一】查看流水功能(基于认证装饰器)

查看流水也属于银行业务,所以要调用银行接口

(1)调用银行接口传递给当前登陆用户的姓名

(2)银行查询流水接口拿到用户名

(3)调用数据处理层进行数据的查询,拿到全部用户数据

(4)反馈给用户视图层,用户数据中的流水部分

(5)用户视图层拿到反馈的流水列表

(5.1)流水记录不为空

  • 循环打印每一条流水记录

(5.2)流水记录为空

  • 打印提示语:流水为空

【十二】购物车功能(基于认证装饰器)--- 单独购物车功能文件

【1】主逻辑:打印商品信息 --- 用户选择商品 --- 添加购物车 --- 结算

  • 初始化购物车

  • 打印商品信息供用户选择

    • 若购物车商品不存在由管理员进行初始化
  • 对商品进行选择

  • 结算功能

  • 添加购物车功能

  • 商品编号选择

  • 确认编号是否存在

【2】初始化商品数据部分(可选)

  • 初始化商品列表
(1)调用数据处理层拿到商品数据
  • 如果商品数据存在
    • 进行数据的拼接
  • 如果商品数据不存在
    • 返回空结果

【3】展示商品数据部分(可选)

  • 拿到商品详情对商品详情进行数据格式化输出

【4】添加购物车功能

(1)判断用户是否添加过购物车
  • 购物车不能为空
    • 购物车为空
    • 购物车为空则二次选择
(2)调用购物车接口层,购物添加接口(传入用户名和购物车)
  • 先根据用户名拿到当前用户的数据详情
  • 提取到用户数据中的购物车
(3)循环获取购物车中的键值对,解压赋值出两个变量
  • 如果商品存在则商品数量 +1
  • 如果商品数量不存在则自动更新默认数据 1
(4)调用数据接口层进行数据的覆写
(5)返回用户状态和提示语
(6)返回购物商城 拿到返回的状态和提示语
(7)添加购物车成功则退出当前功能
(8)失败则打印添加失败,二次执行函数

【5】支付结算功能

(1)判断当前购物车是否为空
  • 如果购物车为空,则二次购物
  • 返回提示语
(2)购物车不为空则调用购物商城面板层支付接口进行支付(拿到当前用户名和购物车数据)
  • 初始化消费总额
(3)对购物车中的值进行提取
  • 分别拿到商品数据中的价格和数量
  • 计算总额
(4)调用商城接口层进行付费
  • 根据用户名拿到用户详细数据
  • 判断用户金额是否足够

(4.1)用户金额不足够则返回失败

(4.2)金额足够进行扣款

(5)用户金额减去消费金额,得到日志(或反馈消息)
  • 添加日志(可选)
  • 添加流水
(6)调用数据处理层进行数据的覆写
  • 返回成功状态
(7)返回到商城接口层接收到反馈信息
  • 根据状态和提示语进行打印输出
  • 支付结束,退出此功能

【十三】查看购物车(基于认证装饰器)

(1)直接调用购物车面板中的查看购物车接口

  • 根据用户名调用数据处理层返回用户详细数据
  • 根据用户详细数据提取出购物车数据

(2)判断返回的购物车是否为空

  • 为空则打印提示语

(3)购物车不为空循环展示购物车中的数据

【十四】管理员功能(基于登录装饰器) --- 单独的文件作为入口

主逻辑

  • 创建程序入口
  • 创建循环
  • 创建功能菜单

【十五】管理员功能之添加新用户

  • 直接调用注册接口进行注册

【十六】管理员功能之修改用户额度

(1)管理员输入修改的额度金额 和 要修改额度的用户

(2)调用管理员面板中的修改余额功能接口

(3)从数据处理层拿到用户的全部数据‘

(4)判断用户数据是否存在,不存咋则打印提示语

(5)用户存在对余额进行更改

(6)调用数据处理层进行数据的覆写

(7)反馈结果给管理员层

(8)对管理员面板的信息进行打印输出

【十七】管理员功能之冻结用户

(1)管理员输入需要冻结的用户名

(2)调用管理员面板中的锁定用户接口

(3)调用数据处理层拿到用户的详细数据

(4)判断用户是否存在

(4.1)用户不存在 反馈信息

(5)用户存在,修改用户详细数据中的锁定状态

  • 将数据传给数据处理层进行数据的覆写

(6)记录日志,反馈状态和提示语

(7)管理层对反馈的结果进行打印输出

【三】流程图方案设计

【1】三层架构原理

【2】主逻辑

【3】用户视图层

【4】注册逻辑

【5】登录逻辑

【6】登录认证装饰器

【7】查询余额

【8】提款功能

【9】还款功能