Python之ATM+购物车项目详解
文章目录
首先我们要知道一个项目是如何从无到有的
README.py
作业需求:
# 一. 项目需求:模拟实现一个ATM + 购物商城程序
"""
1. 额度 15000或自定义
2. 实现购物商城,买东西加入 购物车,调用信用卡接口结账
3. 可以提现,手续费5%
4. 支持多账户登录
5. 支持账户间转账
6. 记录每月日常消费流水
7. 提供还款接口
8. ATM记录操作日志
9. 提供管理接口,包括添加账户、用户额度,冻结账户等。
10. 用户认证用装饰器
"""
# 二. 开发软件的公司, 客户, 用户三者之间的关系
"""
开发软件的公司: 帮甲方开发软件.
客户: 指的是某些服务行业的客户, 需要找人开发某些软件(甲方)
用户: 甲方的软件已经开始上线,提供给我们(用户)使用。
"""
# 三. 一个项目是如何从无到有的?
# 1. 需求分析
"""
# 1-1. 需求分析流程
1. 拿到项目。会先在客户那里一起讨论需求商量项目的功能是否实现。周期与价格得到一个需求文档。
2. 最后在公司的内部需要开一次会议,最终得到一个开发文档,交给不同岗位的程序员进行开发。
python: 后端, 爬虫
不同的岗位:
UI界面设计: 设计软件的布局会分布软件的外观,切成一张张图片交给前端。
前端: 拿到ui交给他的图片,然后去搭建网页,设计一些页面中哪些位置需要接收数据进行,需要进行数据交互。
后端: 直接核心的业务逻辑调度数据库进行数据的增删查改。
测试: 会给代码进行全面测试,比如压力测试界面测试。
运维: 部署项目。
# 1-2 需求文档分析示例
1. 额度15000或自定义
注册功能。(注册完毕以后用户有15000默认的额度): 用户只有注册了以后才有额度,用户注册了以后,我们还可以给用户设定默认的额度15000.
2. 实现购物商城,买东西加入 购物车,调用信用卡接口结账
购物功能: 用户进入购物功能, 首先要打印购物的列表,清单,有什么东西可以购物,还有物品的价格, 以及物品的个数。用户需要买东西。用户选择完东西。对比用户的余额,用户可以可不可以买? 余额够不够?用户购买成功以后放入购物车并保存到用户的个人信息中。
支付功能: 用户购完物需要付钱,付款的钱要从用户的余额里面去扣。
3. 可以提现,手续费5%
提现功能: 用户可以提现,但是会收取手续费这里涉及到了计算用户提现手续费.
4. 支持多账户登录
登录功能: 支持多账户,由注册功能体现,因为注册所以会有多个用户的账户信息。当用户登录以后,我们保存用户当前的状态。就是说用户暂时登陆以后不需要再输入验证。
5. 支持账户间转账
转账功能: 用户提供转账, 首先看用户有没有这个人, 如果没有那不能转,如果有那么得看用户的余额,用户的余额够不够用用户的余额不够。那么他转就不能转。用户转账成功, 接着我们要跑到收钱的那个用户,我们要定位到收钱的用户,然后对收钱的用户进行加钱。对转钱的当前自己进行减钱。
6. 记录每月日常消费流水
记录消费流水功能(设置金额): 记录用户每个月的消费流水, 以月为单位时间进行划分。统计用户购物支付的钱, 购物的清单, 个数, 统计用户提现, 转账的钱.
7. 提供还款接口
还款功能: 对当前用户的余额, 进行增加操作。
8. ATM记录操作日志
日志功能: 对用户登录以后的所有的操作进行记录。
9. 提供管理接口,包括添加账户、用户额度,冻结账户等
管理员功能: 管理员可以添加账户。管理员可以设置用户的信用额度。管理员可以可以冻结用户账户。
10. 用户认证用装饰器
登录认证装置器: 控制对于用户没有登录之前,操作功能都不能执行。
# 1-3. 提取功能
# 提取出来的功能
1. 注册功能
2. 登录功能
3. 购物功能
4. 支付功能
5. 提现功能
6. 转账功能
7. 还款功能
8. 日志功能
9. 管理员功能 (添加账户、用户额度,冻结账户)
10. 登录认证装饰器
11. 记录消费流水功能
# 提供给用户“选择与操作”的功能
1. 注册
2. 登录
3. 购物
4. 提现
5. 还款
6. 转账
7. 查看金额
8. 查看购物车
9. 查看消费流水
10. 管理员功能
# 提供给"管理员"的功能
1. 修改用户额度
2. 添加账户
3. 冻结账户(以时间作为冻结的依据)
"""
# 2. 软件的架构设计
"""
# 2-1. 程序设计的好处。
1. 思路清晰
2. 不会出现写一半代码是推翻重写。
3. 方便自己或以后的同事更好维护。
# 2-2. 三层架构设计的好处。
1. 把每个功能都分成三部分,逻辑清晰。
2. 如果用户更换不同的用户界面或不同的数据存储机制都不会影响接口层的核心逻辑代码。扩展性强。
3. 可以在接口层,准确的记录日志与流水。
# 2-3. 三层架构
# 注意: 如果没有软件的架构时期到了后期你想进行维护或者扩展功能可能会很难扩展和维护
三层架构:
1. 用户视图层(view): 提供给用户选择的功能界面。登录, 注册等等见界面(前端)
2. 逻辑接口层(interface): 所有核心逻辑都放在接口中。提供给用户视图层来使用的。接收视图层传过来的用户名拿到第三层去做校验。
3. 数据处理层: 接收接口层。传过来的参数。返回相应的数据给接口层或者保存数据。主要做一些数据的增删查改。
"""
# 3. 分任务开发
"""
分任务开发: 多个同步协同去开发项目, 实现高效开发项目。
"""
# 4. 测试
"""
手动测试.
自动化测试。(使用自动化脚本测试)
"""
# 5. 上线运行
一、三层架构详解
二、开发目录结构设计
掌握了三层架构,需求文档和软件架构,那么下一步就可以进行开发目录的建立
bin目录为软件的执行目录
config目录为软件的配置目录
core目录为软件的核心代码目录
db目录为软件的数据存放及数据处理目录
interface目录为软件的结接口层目录
lib目录为软件的公共模块目录
log目录为软件执行的日志目录
README 是介绍和解释项目的文本文件,通常需要包含有关项目内容的信息
1.bin目录
satrt.py
运行程序文件,也称为程序入口文件
import sys,os
DER = os.path.dirname(os.path.dirname(__file__))
sys.path.append(DER) # 添加环境变量
from core import ATM
if __name__ == '__main__':
# Shopping_center.choice()
ATM.run()
# pass
2.config目录
配置文件,通常放置启动程序所必须的配置,以便下一步方便调用,在此文件夹下我也放了两个文件用来记录变量名及其含义
settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
ATM变量名称及其含义
dis = {
'account': input_add_account,
'account_pwd': input_add_account_pwd,
'limit': 15000,
'state': False,
'bank_flower':[],
'shopping_cart':{
}
}---------------------------------初始化字典参数
user_data = {
'account':None, 默认为None
'is_outh':False 默认为False
}---------------------------------全局变量
input_add_account-----------------注册名字
input_add_account_pwd-------------初始密码
input_again_account_pwd-----------再次输入密码
input_account_name----------------账户登录名字
input_account_pwd-----------------账户登录密码
input_withdrawal_money------------提现金额
withdrawal_money------------------%5的手续费
residue_money---------------------账户剩余金额
input_to_user---------------------转账对方账户登录名字
withdraw_money--------------------转账金额
to_user_dis-----------------------对方账户详情字典
from_user_dis---------------------己方账户详情字典
payment_dis-----------------------账户还款接口读取数据的字典
bill_interface_dis----------------获取账单流水接口读取数据的字典
repayment_money-------------------还款/充值金额
bill_bank_flower------------------账单流水bank_flower的列表
account_name----------------------文件内用户名
Shopping变量名称及其含义
dic = {
'1': ['apple',10],
'3': ['tesla',1000],
'4': ['mac',3000],
'5': ['lenovo',30000],
'6': ['chicken',10]
}-----------------