python ATM购物车
项目开发流程

# 1.需求分析
产品经理了解业务人员提出需求的项目背景、方向,进行业务梳理,对项目功能阐述,制作思维导图等
# 2.架构设计
架构师会根据具体的业务需求选择
开发的编程语言、
项目的后端框架、
项目所需的数据库(主库、从库)
项目组织结构(软件开发目录规范、自定义结构)
项目功能划分(将一个大项目拆分成多个小项目)
项目的报价
还需要产品经理继续叠加报价(其他部分人员开销等)
# 3.分组开发
将项目拆分之后的多个小项目交给不同开发部门下的多个编程人员编写
每个人可能只会写很小的一部分(降低复杂度 提升开发效率 缩短开发周期)
# 4.项目测试
交给测试部门全面测试
项目打包,发布版本到测试服务器,测试人员根据需求文档测试项目,数据是否显示正确,数据是否有缺失,校验是否通过及流程是否通畅等,未通过的流程测试提交到禅道,分配给相应的开发人员调整
# 5.交付上线
将项目打包给运维人员运行维护即可
需求分析
# 项目大致需求
- 额度15000或自定义
- 支持多账户登录
- 可以查看账户余额
- 可以提现(可自定义手续费比例)
- 提供还款接口
- 支持账户间转账
- 记录每月日常消费流水
- 实现购物商城,买东西加入购物车,调用信用卡接口结账
- 提供管理接口,包括添加账户、用户额度,冻结账户等
- ATM记录操作日志
- 用户认证功能
# 提炼项目功能
1.用户注册
2.登录功能
3.查看余额
4.余额提现
5.账户充值
6.金额转账
7.查看流水
8.添加购物车
9.查看购物车
10.结算购物车
11.管理员功能
# 项目大致技术栈
1.python基础核心编程
2.函数(装饰器)
3.常见内置模块(os,sys,json)
程序的构架设计
# 程序设计的好处
1.思路清晰
2.不会出现写一半代码时推翻重写
3.方便自己或以后的同事更好的维护
# 三层架构设计的好处
1.把每个功能都分成三部分,逻辑清晰
2.如果用户更换不同的用户界面或不同的数据存储机制都不会影响接口层的核心逻辑代码,扩展性强
3.可以在接口层,准确的记录日志与流水
s
#展示层
用于与用户交互的,可以接收用户的输入,打印接口返回的数据
#逻辑层
接收用户视图层传递过来的参数,根据逻辑判断调用数据层加以处理,并返回一个结果给用户视图层
#数据层
接收逻辑接口层传递过来的参数,做数据的增删改查
'''ATM架构牛逼之处!
程序的扩展性非常的强
比如展示层等我们以后学了前端可以直接替换成页面
展示层目前是cmd操作 可以换成页面
核心逻辑层以后学了框架之后替换成框架
逻辑层目前是普通的python代码 可以换成django框架
数据存取层以后学了数据库直接替换成数据库
数据层目前是json文件 可以换成MySQL数据库'''

ATM购物车
# 1.搭建项目目录
针对启动脚本文件start.py可以放在bin目录下 也可以直接放在项目根目录
将第二层分为三个文件(根据功能的不同)
start.py
conf
settings.py
lib
common.py
core
src.py
interface
user_interface
bank_interface
shop_interface
db
log
readme
#功能模块框架的搭建
'利用空函数搭建基本功能框架'
def register():
pass
def login():
pass
def check_account():
pass
def withdraw():
pass
def repay():
pass
def transfer():
pass
def check_flow():
pass
def add_shop_car():
pass
def check_shop_car():
pass
#主体代码的编写:
'根据需求编写主体代码'
func_dict = {
'1':register,
'2':login,
'3':check_account,
'4':withdraw,
'5':repay,
'6':transfer,
'7':check_flow,
'8':add_shop_car,
'9':check_shop_car,
}
def run():
while True:
print("""
1.用户注册
2.用户登录
3.查看余额
4.余额体现
5.账户充值
6.金额转账
7.查看流水
8.添加购物车
9.查看购物车
""")
choice = input("请输入你的编号:").strip()
if choice in func_dict:
func_name = func_dict.get(choice)
func_name()
else:
print("请输入正确的编号")
#start.py运行程序:
import os
import sys
base_dir = os.path.dirname(__file__)
sys.path.append(base_dir)
from core import src
if __name__ == '__main__':
src.run()
注册功能按三层拆分:
#展示层:
username = input("请输入你要注册的用户名:").strip()
password = input("请输入你要注册的密码:").strip()
password2 = input("请再次输入你的密码:").strip()
if not password == password2:
print("用户密码不一致")
return
res = user_interface.check_user_interface(username)
if res:
print(res)
return
msg = user_interface.register_interface(username, password)
print(msg)
#逻辑层:
from db import db_handler
def register_interface(username, password):
user_dict = {
'username': username,
'password': password,
'balance': 15000,
'flow': [],
'shop_car': {},
'is_lock': False,
'is_admin': False,
}
db_handler.save(user_dict)
return f'{username}用户注册成功'
def check_user_interface(username):
res = db_handler.select(username)
if res:
return '用户已存在'
else:
return
#数据处理层:
import os
import json
from conf import settings
def save(user_dict):
username = user_dict.get('username')
file_dir = os.path.join(settings.DB_DIR, f'{username}.json')
with open(file_dir, 'w', encoding='utf8')as f:
json.dump(user_dict, f, ensure_ascii=False)
def select(username):
file_path = os.path.join(settings.DB_DIR, f'{username}.json')
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf8')as f:
return json.load(f)
