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. 未关中断情况下的hardlock

    最近遇到一例crash,3.10内核,hardlock,查看对应的堆栈,中断是使能的. 查看对应的hrtimer_interrupts和hrtimer_interrupt_save的值,发现确实相等. ...

  2. 字节微服务HTTP框架Hertz使用与源码分析|拥抱开源

    一.前言 Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp.gin.echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性 ...

  3. 开源IPTV源服务程序使用教程

    Streaming-Media-Server-Pro 前言 我的目标是将程序打造成属于每个人的直播源服务,且对每个人完全开源免费!可作为家庭影院电视.视频等流媒体的提供商,兼容全平台,只需下载视频播放 ...

  4. 校园网跨网段共享文件Samba+SSH

    Introduction This tutorial contains screenshots for the English version of Windows 10. Separate inst ...

  5. 【面试题】JS使用parseInt()、正则截取字符串中数字

    JS使用parseInt()和正则截取字符串中数字 点击打开视频讲解更加详细 parseInt() 函数 定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 当参数 radix ...

  6. The 19th Zhejiang Provincial Collegiate Programming Contest

    目录 A.JB Loves Math B.JB Loves Comma C. JB Wants to Earn Big Money G. Easy Glide I. Barbecue L. Candy ...

  7. aspnetcore6.0源代码编译调试

    虽然编译源码折腾了几个时间(卡在restore),最后还是跑起来了aspnetcore6.0mvc源码项目,下面说步骤,前提是网络能连外,对于不能连外的懒得折腾. 第一步 电脑找个地克隆下GitHub ...

  8. Traefik 2.0 实现灰度发布

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484478&idx=1&sn=238390dc ...

  9. tar.gz方式安装nacos设置使用systemct进行service方式的管理并设置开机自启动--废弃不用这个

    nacos解压缩目录是:/opt/nacos 编写shell脚本 # vim /opt/nacos/bin/nacos.sh #!/bin/bash source /etc/profile workD ...

  10. PPR管及管件的类型、规格与选用

    1. PPR管的类型及参数识读 2. 常用的PPR管件及规格 3. 住宅给水管的PPR管及管件的需求量