购物车ATM项目
项目架构设计
三层架构
1. core目录下的src.py(浏览器/用户视图层)
2. interface目录下的多个py文件(框架/逻辑接口层)
3. db目录下db_handler.py(数据库服务/数据处理层)
逻辑及代码实现
bin文件夹:
start.py:存放启动项目脚本
conf文件夹:
settings.py:里面存放项目的默认配置,一般都是全大写
core文件夹:
src.py里面存放项目核心功能(展示层)
interface文件夹:主要存放项目接口文件(核心逻辑层)
shop_interface # 购物车接口
bank_interface # 银行接口
user_interface # 用户接口
admin_interface # 管理员接口
db文件夹:主要是存放项目相关数据
db_handler.py:存放数据库操作相关的代码
log文件夹:
log.log 主要存放项目日志文件
lib文件夹:
common.py 主要存放项目公共功能
readme文件:主要存放项目相关说明
requirements.txt文件:主要存放项目所需模块及版本
is_login= {'username':''} # 全局变量 保存登录信息
# 用户注册
def register():
pass
# 用户登录
def login():
pass
# 查看余额
def check_balance():
pass
# 余额提现
def Withdraw():
pass
# 账户充值
def pay():
pass
# 转账
def tranfer():
pass
# 查看流水
def check_flow():
pass
# 添加购物车
def add_shop_car():
pass
# 查看购物车
def check_shop_car():
pass
# 结算
def pay_shop_car():
pass
# 管理员
def admin():
pass
# 功能字典
func_dict = {
'1': register,
'2': login,
'3': look_balance,
'4': Withdraw,
'5': pay,
'6': tranfer,
'7': cheak_water,
'8': add_shop_car,
'9': view_shop_car,
'10': clear_shop_car,
'11': admin
}
while True:
print("""
1.用户注册
2.登录功能
3.查看余额
4.余额提现
5.账户充值
6.金额转账
7.查看流水
8.添加购物车
9.查看购物车
10.结算购物车
11.管理员功能
""")
choice = input('请输入功能编号>>>:').strip()
if choice in func_dict:
func_name = func_dict.get(choice)
func_name()
else:
print('功能编号不存在 重新输入')
import os#导入os模块
import sys#导入环境变量模块
base_dir=os.path.dirname(os.path.dirname(__file__))#获取项目根路径
sys.path.append(base_dir)#将项目根路径添加环境变量中
if __name__ == '__main__':#设置启动方法
from core import src#调用core.src文件
src.run()#调用src中的run方法
- 注册功能(user_interface.py)
"""
牢记三层结构
1.用户视图层
2.逻辑接口层
3.数据处理层(数据的增删改查)
"""
1.用户视图层
1.1 获得用户信息
1.2 判断两次密码是否一致
1.3 直接调用用户注册接口
1.4 接收返回值并打印
2.逻辑接口层(register_interface)
2.1 判断用户是否存在,调用第三层数据库
2.2 用户存在则返回用户已经存在,结束本次执行代码
2.2 用户不存在,则对用户的密码进行加密 调用公共工具common的加密函数进行加密
2.3 构造用户字典并调用第三次数据处理层进行数据序列化进json文件的存储
2.4 返回用户注册成功
3.数据处理层(数据的增删改查)
3.1 查看用户是否存在,存在则返回给接口层用户字典信息
3.2 拼接路径完成用户注册(用户信息的存储)
- 登录功能(user_interface.py)
"""
牢记三层结构
1.用户视图层
2.逻辑接口层
3.数据处理层(数据的增删改查)
"""
1.用户视图层
1.1 获取相关用户信息
1.2 判断用户名是否存在,直接调用用户登录接口
1.3 接收返回值并打印
注意:""" 登录接口返回的数据值有两个,为了保证接口调用返回值的一致性,应该让所有的接口函数返回值个数保持一致,都应该变成两个"""
2.逻辑接口层(login_interface)
2.1 判断用户名是否存在,调用第三层数据的查询
2.2 字典接收第三层返回,判断字典是否有数据,结果为false 返回'用户不存在'
2.3 用户存在,进行校验密码,调用公共工具get_hash对密码进行加密
2.4 判断密码是否正确,正确返回用户登录成功,不正确返回'用户密码错误'
3.数据处理层(数据的增删改查)
3.1 查看用户是否存在,存在则返回给接口层用户字典信息
- 查看流水功能(bank_interface.py)
1.用户视图层
1.1 直接调用查看账户余额的接口
1.2 接收返回值并打印
2.逻辑接口层(check_flow_interface)
2.1 查询当前用户字典数据 调用第三层数据的查询
2.2 利用返回的字典直接查看余额
2.3 将余额返回给第一层供用户浏览
3.数据处理层(数据的增删改查)
3.1 返回给第二层用户字典
- 提现功能(bank_interface.py)
1.用户视图层
1.1 输入用户想要提现的数额withdraw_money
1.2 直接调用提现的接口
1.3 接收返回值并打印
2.逻辑接口层(withdraw_intrface)
2.1 调用common的判断输入的withdraw_money是否整数或小数
2.2 如果withdraw_money不是整数或小数,则return给第一层'请输入符合要求的整数或小数'
2.3 如果withdraw_money符合要求,则查询当前用户字典数据 调用第三层数据的查询,并用字典接收
2.4 计算提现的数目和手续费的总和
2.5 判断提现的总和与用户账户余额比较
2.6 账户余额大于提现总和,账户余额减去提现金额,再重新写入第三层数据库中的用户字典
2.7 返回给第一层'转账成功'
2.8 账户余额于于提现总和 ,直接返回给第一层并提示'账户余额不足,请先充值'
3.数据处理层(数据的增删改查)
3.1 进行用户信息的存储
- 还款功能(bank_interface.py)
1.用户视图层
1.1 输入客户想充值的金额pay_money
1.2 直接调用充值的接口
1.3 接收返回值并打印
2.逻辑接口层(pay_money_interface)
2.1 调用common的判断输入的pay_money是否整数或小数
2.2 如果pay_money不是整数或小数,则return给第一层'请输入符合要求的整数或小数'
2.3 查询当前用户字典数据
2.4 将还款金额加入账户余额中,
2.5 再重新写入第三层数据库
2.6 返回给第一层 '充值成功'
3.数据处理层(数据的增删改查)
3.1 进行用户信息的存储
- 转账功能(bank_interface.py)
1.用户视图层
1.1 获取要转账的用户target_name
1.2 获取转账的金额target_money
1.3 调用转账接口
1.4 接收结果并打印
2.逻辑接口层(transfer_interface)
2.1 传过来的值有 is_login.get('username'),target_name,target_money
2.2 校验被转账用户target_name是否存在 调用第三层数据查询,并用target_dict接收
2.3 判断字典是否为空,取反(not)操作 if not target_dict 为false 则返回第一层 '用户不存在'
2.4 判断结果为True,则调用common的判断输入的target_money是否整数或小数
2.5 如果target_money不是整数或小数,则return给第一层'请输入符合要求的整数或小数'
2.6 target_money是整数或小数,调用第三层数据库获取转账人的信息,并用user_dict接收
2.7 判断当前账户余额是否充足 当余额大于target_money,转账人余额减掉target_money,并调用第三层序列化更新当前用户is_login.get('username')信息
2.8 被转账人余额加上target_money,并调用第三层序列化更新用户target_name信息
2.9 返回给第一层 '转账成功'
2.10 判断当前账户余额不足 当余额小于target_money,直接返回给第一层'账户余额不足'
3.数据处理层(数据的增删改查)
3.1 查看用户并返回给第二层用户字典target_dict
3.2 查看用户并返回给第二层用户字典user_dict
3.3 进行用户user_dict信息的存储
3.4 进行用户target_dict信息的存储
- 查看流水(bank_interface.py)
1.用户视图层
1.1 直接调用查看的流水接口
1.2 接收结果并打印
2.逻辑接口层(check_flow_interface)
2.1 直接调用第三层数据库信息查看流水信息
2.2 判断用户流水信息是否为空
2.3 无流水信息返回 '该用户暂无流水记录'
2.4 有流水信息直接返回用户的流水信息user_dict.get('water_flow')
3.数据处理层(数据的增删改查)
3.1 查看用户并返回给第二层用户字典user_dict
- 添加购物车功能(shop_interface.py)
1.用户视图层
1.1 直接调用添加购物车接口
1.2 接收结果并打印
2.逻辑接口层(add_shop_car_interface)
2.1 获取商品信息
2.2 循环打印商品信息供用户选择
2.3 获取用户输入的商品编号choice_num
2.4 判断编号是否是纯数字并判断数字是否超出范围
2.5 根据商品编号获取商品信息
2.6 获取想要购买的商品数量good_num并判断商品数量是否是纯数
2.7 构造临时小字典存储商品信息 temp_shop_car
2.8 写入临时小字典中temp_shop_car
2.9 添加结束标志'q' 用于保存购物车数据
2.10 调用第三层获取当前登录用户的字典数据user_data_dict
2.11 获得old_shop_car = user_data_dict.get('shop_car')
2.12 保存购物车数据 判断存之前商品是否已经添加,分别做各自的添加操作
2.13 调用第三层的数据保存函数
2.14 返回给第一层 '添加购物车成功 欢迎下次再来'
3.数据处理层(数据的增删改查)
3.1 查看用户并返回给第二层用户字典user_data_dict
3.2 进行用户user_data_dictt信息的存储
- 查看购物车功能(shop_interface.py)
1.用户视图层
1.1 直接调用查看购物车接口
1.2 接收结果并打印
2.逻辑接口层(check_shop_car_interface)
2.1 调用第三层数据库,获取取当前登录用户的字典数据并用user_dict接收
2.2 获取当前用户购物车数据shop_car
2.3 判断用户购物车是否有数据
2.4 如果购物车有数据,返回购物车信息'shop_car'
2.5 购物车为空,则返回 '暂无购物车数据'
3.数据处理层(数据的增删改查)
3.1 查看用户并返回给第二层用户字典user_dict
- 结算购物车功能(shop_interface.py)
1.用户视图层
1.1 直接调用查看购物车接口
1.2 接收结果并打印
2.逻辑接口层(clear_shop_car_interface)
2.1 调用第三层数据库,获取取当前登录用户的字典数据并用user_dict接收
2.2 获取当前用户购物车数据及账户余额current_balance
2.3 取反操作 如果购物车为空则直接返回 '购物车空空如也'
2.4 统计购物车商品总价total_money
2.5 比较账户余额与商品总价
2.6 当total_money > current_balance时,直接返回 '账户余额不够'
2.7 当total_money < current_balance时,用户的账户余额静减去total_money
2.8 清空购物车user_data_dict['shop_car'] = {} ,并调第三层数据库存储数据
2.9 返回给第一层 '消费的total_money和账户余额'
3.数据处理层(数据的增删改查)
3.1 查看用户并返回给第二层用户字典user_dict
3.2 进行用户user_data_dictt信息的存储
- 管理员功能
1.用户视图层
2.逻辑接口层
3.数据处理层(数据的增删改查)