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则不能进行金钱相关操作



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



可以修改商品价格和信息

可以移除用户



可以查看所有用户的信息



10月31日ATM编写逻辑描述的更多相关文章

  1. 2016年10月31日 星期一 --出埃及记 Exodus 19:16

    2016年10月31日 星期一 --出埃及记 Exodus 19:16 On the morning of the third day there was thunder and lightning, ...

  2. 2017年10月31日结束Outlook 2007与Office 365的连接

    2017 年10月31日 ,微软即将推出 Office 365中Exchange Online邮箱将需要Outlook for Windows的连接,即通过HTTP Over MAPI方式,传统使用R ...

  3. 易初大数据 spss 2019年10月31日 wangqingchao

    ---恢复内容开始--- 1.描述性统计分析方法是指应用分类.制表.图形及概括性数据指标来概括数据分析特征的方法. 2.而推断性统计分析方法则是通过随机抽样,应用统计方法把从样本数据得到的结论推广到总 ...

  4. 2016年10月31日--网页 Windows对象操作

    Window.opener:打开当前窗口的源窗口,如果当前窗口是首次启动浏览器打开的,则opener是null. Window.open(URL,name,features,replace):open ...

  5. 中国省市县数据库sql文件(2017年10月31日之前)

    摘自国家统计局 sql文件下载地址:https://files.cnblogs.com/files/zxj95121/%E7%9C%81%E5%B8%82%E5%8E%BFsql.zip 2019.4 ...

  6. 18年10月31日 NOIP模拟赛

    T1.exercise 题解 数据很小直接模拟 代码 #include<iostream> #include<cstdio> #include<cmath> #in ...

  7. SPSS 2019年10月31日 20:20:53今日学习总结

    ◆描述性统计分析 概念:描述性统计分析方法是指应用分类.制表.图形及概括性数据指标(去均值,方差等)来概括数据分布特征的方法. 而推断性统计分析方法则是通过随机抽样,应用统计方法把从样本数据得到的结论 ...

  8. Techparty-广州 10 月 31 日 Docker 专场沙龙 后记

    华为的童鞋技术能力很强,但是两位讲师的都没听进去.重点听了两个,一个是芒果TV的Docker 之路,另一个是Coding的实践和思考. 芒果TV的主讲人是一直仰慕的CMGS,从豆瓣出来后去了国企芒果台 ...

  9. Week8(10月31日):并发

    Part I:提问  =========================== 1. 更新关联.删除关联数据,需要注意哪些问题?以Instructor类为例说明. 2. 已知某请假系统,请实现以下界面的 ...

  10. ADO.NET数据访问基础与综合应用2020年10月31日20:17:09学习笔记

    四.创建数据表 1.数据表的名称. 2.表中的字段名.数据类型.是否可以为空.字段的约束.必备的字段(通常会有一个ID,表示实体的唯一性:可以直接手写,也可以使用种子标识自动生成,给定起始值,给定增长 ...

随机推荐

  1. [数据结构-线性表1.2] 链表与 LinkedList<T>(.NET 源码学习)

    [数据结构-线性表1.2] 链表与 LinkedList<T> [注:本篇文章源码内容较少,分析度较浅,请酌情选择阅读] 关键词:链表(数据结构)    C#中的链表(源码)    可空类 ...

  2. .NET7 一个实用功能-中央包管理

    依赖管理是 NuGet 的核心功能.Nuget管理单个项目的依赖关系很容易.管理多项目解决方案的依赖关系可能会变得很困难,因为它们的规模和复杂性开始扩大. 在您管理许多不同项目的公共依赖项的情况下,您 ...

  3. Seata 1.5.2 源码学习

    文章有点长,我决定用半个小时来给您分享~ 基于Seata 1.5.2,项目中用 seata-spring-boot-starter 1. SeataDataSourceAutoConfiguratio ...

  4. python列表、元祖

    #列表创建1 a=['李刚','李白','王维','苏轼','李商隐','苏洵','王安石','司马光'] #列表创建2 b=list(['李刚','李白','王维','苏轼','李商隐','苏洵', ...

  5. Java 同步锁ReentrantLock与抽象同步队列AQS

    AbstractQueuedSynchronizer 抽象同步队列,它是个模板类提供了许多以锁相关的操作,常说的AQS指的就是它.AQS继承了AbstractOwnableSynchronizer类, ...

  6. Go语言核心36讲15---结构体

    我们都知道,结构体类型表示的是实实在在的数据结构.一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型. 前导内容:结构体类型基础知识 当然了,结构体类型也可以不包含任何字段,这样并 ...

  7. cmd唤醒windows设置,并配置opsshd

    1. 从cmd唤起windows设置 这个东西很有意思,大部分在运行窗口输入的内容,从cmd或powershell都能唤起,如:control控制面板,但偶尔有些操作就不能通用, 如: ms-sett ...

  8. MASA Framework -- 跨进程事件 IntegrationEventBus入门与设计

    概述 跨进程事件总线允许发布和订阅跨服务传输的消息, 服务的发布与订阅不在同一个进程中 在Masa Framework中, 跨进程总线事件提供了一个可以被开箱即用的程序 IntegrationEven ...

  9. 安装mySql 出现 one more product requirements have not been satisified

    安装mySql 出现 one more product requirements have not been satisified 原因是缺少一些依赖环境. 在弹出的对话框中点击 否. 然后点击执行, ...

  10. 【面试题总结】JVM01-组成及垃圾回收

    一.概念 1.JVM组成及作用 (1)组成:类加载器.运行时数据区(Java内存模型).执行引擎.本地库接口 (2)作用: 类加载器(ClassLoader)把class文件转换成字节码: 运行时数据 ...