ATM逻辑描述

三层框架简介

这里我们使用三层框架的结构编写代码

1、第一层(src.py)

功能展示和数据获取层,顾名思义打印数据或是获取用户输入

2、第二层(interface文件夹下内容)

一类功能可以归类到一个py文件中,提供接口文件供第一层调用,使用中会调用到第三层

部分通用小功能放到了common中,数据库相关代码放到了db_hanlder

3、第三层(db_hanlder)

存放一些对数据库进行操作的功能,供第二层调用

启动函数

放在src中

1、整理出一个功能字典,启动代码的时候通过功能字典中的标号来选择执行的功能

2、判断一下用户输入是否在范围内(字典内的标号),如果在的话就调用对应函数

用户注册功能

src层获取输入,并且打印输出结果,主体的判断功能放到interface中的user_interface中,src中调用获取结果。

功能:

判断用户输入的数据是否符合格式

判断两次密码是否一致

判断用户名是否已被注册

如果没有上面的情况就写入数据到数据库保存起来(密码要加密)

用户登录

src层获取输入,并且打印输出结果,主体的判断功能放到interface中的user_interface中,src中调用获取结果。

功能:

判断用户输入的数据是否符合格式

判断数据库中是否有这个用户(是否已经注册)

判断密码是否正确

如果上面条件都符合就在src中定义一个变量记录登陆的用户名称,方便后面的功能调用

common中的小功能

检测是否登陆的装饰器

没有什么特点,就是套上装饰器模版后在内层函数写上判断是否登陆的语句,因为会频繁使用所以放到了common中

判断输入是否为空

判断数据值是否为纯数字

定义一个函数用于对密码进行哈希加密

定义一个函数进行日志记录

定义一个函数用于判断输入是否为整数或小数

配置和日志字典写在settings中

查看余额

src中调用interface文件夹中的文件,查看当前登陆用户的余额,src中接收返回值并打印结果



账户提现

src中获取用户输入(提现数量),interface文件中执行判断和操作,结果返回src中输入打印。

功能:

判断输入的数据是否符合格式

判断用户中的余额是否足够提现(加上手续费)

如果上面条件都符合了,就当成提现成功,修改数据库中的数据值

充值功能

src中获取充值的金额,其他功能也是放到interface中执行,结果返回src中输入打印。

功能:

先判断输入的值是否符合格式

接下来就是充值,把结果写到数据库文件中去

转账功能

src中获取转账对象和金额,其他功能也是放到interface中执行,结果返回src中输入打印。

功能:

先判断转账对象名称和金额的输入是否符合格式

接着判断转账对象是否存在(已经注册)

接着判断转账金额是否足够

如果上述条件都符合,那就直接转账返回结果并写入数据库中

查看账单

src因为只能放输入输出,而输入账单信息需要调用第三层的操作数据库的代码,因此整体功能放到第二次,第一层就留一个调用interface函数的操作。

功能:

调用第三层的代码获取账单信息,然后格式化输出结果

购物车功能

添加购物车

src中格式化输出商品信息,获取用户需要购买的商品编号和数量,接着调用接口层的功能函数来判断并返回结果输出。

功能:

先判断用户的输入是否符合格式

接着判断用户选择的编号是否在范围内

接着再判断数据库中的购物车中是否有内容,如果有就加到小字典中进来

最后实现连续添加的时候是先添加到小字典中

只有在提出的时候才会写入数据库中的

结算购物车

src文件中调用interface中的函数,然后输出结果

功能:

先根据用户名获取购物车中的信息,然后根据价格和数量统计总价进行结算,如果用户余额不足以支付,就提示,否则就扣款清空购物车保存到数据库中

查看购物车

src中还是调用interface中的函数,然后输出结果

功能:

根据用户名调用第三层函数获取购物车信息,然后格式化输出

清空购物车

src中还是调用interface中的函数,然后输出结果

功能:

根据用户名调用第三层函数获取购物车信息,然后情况内容再写入数据库中保存

修改购物车

因为要获取购物车中的信息,涉及到了第三层的函数所以所有功能都扔到第二层(输出输入的时候反正都是一个窗口看不出来)

功能:

先获取数据库中的购物车信息,然后格式化输出

接着获取用户输入(需要修改的商品信息和修改后的数量)

判断输入格式是否正确

接着把修改后的数量写到、数据库文件中,如果数量为0 可以直接删除键值对

管理员功能

src中建立函数,套用run函数的格式,创建功能字典模拟功能。

冻结用户交易功能

在用户的数据库文件中设置一个is_lock键值对,值是布尔值,如果为True则不能进行金钱相关操作



还可以设置提现时候手续费的利率



可以修改商品价格和信息

可以移除用户



可以查看所有用户的信息



Python基础阶段总结:ATM项目实战的更多相关文章

  1. python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作

    python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改.删除操作 项目目录: ├── flask_redis_news.py ├── forms.py ├ ...

  2. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  3. python基础1 - 多文件项目和代码规范

    1. 多文件项目演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 –  一个项目通常会包含 很多源文件 在 ...

  4. Python基础:模块化来搭项目

    简单模块化 import 最好在最顶端 sys.path.append("..")表示把当前程序所在位置向上提了一级 在python3规范中,__init__.py并不是必须的. ...

  5. Java自学基础、进阶、项目实战网站推荐

    推荐一个自学的好平台,有Java基础,前端,后端,基础的内容都有讲解,还有框架的讲解和实战项目,特别适合自学 JAVA 自学网站 JAVA 练习题 Spring 教程 Mybatis 教程 Sprin ...

  6. python基础阶段练习题 拾英札记(1)

    python很灵活,学起来有人机交互的快乐感,贵在坚持. 做题对自学python很有帮助,融汇贯通-查漏补缺-巩固提高. 写了一些注释,希望能对您有所帮助. #1.输入一个3位数,计算个位.百位.十位 ...

  7. python基础阶段 经典练习题 拾英札记(2)

    因为编程的练习题是交互式的,在不断调试和不断渐进完善中,你会有一种成就感和快乐感,不断的修缮,不断的尝试. 其实,认知自己,和探索世界,也是这样的啊. 只要不放弃,要坚持. #7  根据列表lt,实现 ...

  8. python基础阶段 经典练习题 拾英札记(3)

    对于编程学习来说,动手操练和重复训练很重要. 因为这是一个注重实践的活,最终要下笔落字. 更何况,即使你看了很多博客,听了很多课,你脑中的认识和手指下的-屏幕上的反馈,逻辑上是两个维度-两个载体的,中 ...

  9. python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入

    1.新闻处理页面redis_news.py #coding:utf-8 import math import redis class RedisNews(object): def __init__(s ...

随机推荐

  1. [开源内卷] .NET 定时任务 -- FreeScheduler 支持 cron、持久化、可变定时设置

    前言 卷了,卷了,卷了,最近太卷...这篇文章写了好几天了,由于同类型文章太多,排期到今天发布.实在不想卷,得罪了!各位定时任务开源大佬们! .NET 定时组件生态实在太强大了,写下此文只希望能供大家 ...

  2. 刷题记录:Codeforces Round #731 (Div. 3)

    Codeforces Round #731 (Div. 3) 20210803.网址:https://codeforces.com/contest/1547. 感觉这次犯的低级错误有亿点多-- A 一 ...

  3. k8s中ingress,service,depoyment,pod如何关联

    k8s中pod通过label标签名称来识别关联,它们的label  name一定是一样的.ingress,service,depoyment通过selector 中app:name来关联 1.查询发布 ...

  4. 第八十篇:Vue购物车(一) 购物车基本框架

    好家伙,又是购物车 来吧,这是参照黑马的课程写的一个购物车 目录结构如下: 1.首先组件导入, Counter.vue <template> <div class="num ...

  5. KingbaseES sys_blocking_pids 函数

    会话出现了锁等待,想要快速查询到堵塞的会话,可以使用 sys_blocking_pids 函数来实现这一目的. sys_blocking_pids:获取哪些会话阻塞了某个会话(输入参数). sys_b ...

  6. Bypass Windows Defender Dump Lsass(手法拙劣)

    0x00.前言 Windows Defender是一款内置在Windows操作系统的杀毒软件程序,本文旨在记录实战环境中,服务器存在Windows Defender情况下转储凭证的渗透手法,技术简单粗 ...

  7. 面试突击82:SpringBoot 中如何操作事务?

    在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现. 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法: 使用 Tr ...

  8. TDengine概述以及架构模型

    TDengine TDengine是一个高效的存储.查询.分析时序大数据的平台,专为物联网.车联网.工业互联网.运维监测等优化而设计. 您可以像使用关系型数据库MySQL一样来使用它. TDengin ...

  9. Mybatis 一级缓存和二级缓存原理区别 (图文详解)

    Java面试经常问到Mybatis一级缓存和二级缓存,今天就给大家重点详解Mybatis一级缓存和二级缓存原理与区别@mikechen Mybatis缓存 缓存就是内存中的数据,常常来自对数据库查询结 ...

  10. AlertManager 何时报警

    转载自:https://www.qikqiak.com/post/alertmanager-when-alert/ 在使用 Prometheus 进行监控的时候,通过 AlertManager 来进行 ...