ATM项目三层结构

ATM项目三层结构

1 用户视图层

# 1.注册
import os
from interface import user_interface
from interface import shop_interface
from interface import bank_interface
from lib import common

online_user = None


# 注册功能
def register():
    print("注册功能执行中,输入q退出")
    while 1:
        reg_user = input("请输入要注册的用户名:").strip()
        if reg_user.upper() == "Q":
            break
        if not user_interface.reg_user_check(reg_user):
            print("用户名已存在,请重新输入")
            continue
        reg_password1 = input("请输入密码:")
        reg_password2 = input("请确认密码:")
        if reg_password1 == reg_password2:
            user_interface.new_user_info(reg_user, reg_password1)
            print("注册成功!")
            return
        else:
            print("两次密码不一致,请重新输入!")
            continue


# register()

# 2 登录功能
def login():
    while 1:
        login_user = input("请输入用户名:[输入q退出]")
        if login_user.upper() == "Q":
            break
        login_password = input("请输入密码")
        flag, msg = user_interface.login_check(login_user, login_password)
        if flag is False:
            print(msg)
            continue
        print(msg)
        global online_user
        online_user = login_user
        return login_user


# print(login())
# 3 查看余额
@common.user_identify
def check_account():
    print("查询余额功能执行中")
    res = bank_interface.check_account_func(online_user)
    print('用户:{},您的余额为{},您的额度为{}'.format(online_user, res[0], res[1]))


# 4 提现
@common.user_identify
def with_draw():
    while 1:
        print("提现功能执行中")
        money = input('请输入要提现的金额:')
        if money.upper() == "Q":
            break
        if not money.isdigit():
            print("只能输入数字,请重新输入")
            continue
        flag, msg = bank_interface.with_draw_func(money, online_user)
        print(msg)
        if flag is True:
            break
        else:
            continue


# 5 还款
@common.user_identify
def pay_back():
    pass


# 6 转账
@common.user_identify
def transfer():
    pass


# 7 购物车功能
@common.user_identify
def shopping_cart():
    cargo_dic = shop_interface.show_cargo()
    while 1:
        print("欢迎选购~~")
        for name, price in cargo_dic.items():
            print("商品名:[{}],价格:[{}]".format(name, price))
        cargo_name = input("请输入商品名:").strip()
        if cargo_name.upper() == "Q":
            break
        quantity = input("请输入购买的数量:").strip()
        if cargo_name in cargo_dic and quantity.isdigit():
            msg = shop_interface.choose_cargo(cargo_name, quantity, online_user)
            print(msg)
        else:
            print("请输入正确的编号和数量")


# 8 查看流水
@common.user_identify
def current_account():
    record = bank_interface.current_record(online_user)
    for i in record:
        print(i)


# 9 查看购物车
@common.user_identify
def check_shoppping_cart():
    cart_dic = shop_interface.show_shopping_cart(online_user)
    print("您购物车内的商品为:")
    for cargo, num in cart_dic.items():
        print("[{}]:[{}]个".format(cargo, num))


func_dic = {"1": ['注册', register],
            "2": ['登录', login],
            "3": ['查询余额', check_account],
            "4": ['提现', with_draw],
            "5": ['还款', pay_back],
            "6": ['转账', transfer],
            "7": ['购物车', shopping_cart],
            "8": ['查看流水', current_account],
            "9": ['查看购物车', check_shoppping_cart]}


def run():
    while 1:
        for k, v in func_dic.items():
            print(k, v[0])
        func = input("请输入功能编号:[温馨提示: 输入q退出]").strip()
        if func.upper() == "Q":
            break
        if not func.isdigit():
            print("功能只能输入数字!")
            continue
        if func in func_dic:
            func_dic[func][1]()
        else:
            print("编号不存在")
            continue

2 逻辑接口层

'''
逻辑接口层之user部分
'''
from conf import settings
from db import db_handler
import logging.config

logging.config.dictConfig(settings.LOGGING_DIC)


# 1 注册用户名检测
def reg_user_check(user_name):
    '''
    用于查看注册的用户名是否存在
    :return: None ----->用户名存在,不能注册
    :return: 1------>用户名不存在,可以注册
    '''
    if not db_handler.select_user(user_name):
        return 1


# 2 登录验证用户名密码
def login_check(user_name, password):
    user_dic = db_handler.select_user(user_name)
    # 用户不存在
    if user_dic is None:
        return False, "用户名不存在"
    password = db_handler.encrypt(password)
    # 验证密码
    if user_dic["password"] == password:
        logger1 = logging.getLogger('用户登录')
        logger1.info('用户{}登录'.format(user_name))
        return True, "登陆成功"
    else:
        return False, "密码错误"


def new_user_info(reg_user, reg_password1):
    password = db_handler.encrypt(reg_password1)
    db_handler.save_data(
        {"user": reg_user, "password": password, "balance": 0, "limit": 15000, "locked": False, "current_account": [],
         "shopping_cart": {}})
'''
逻辑接口层之shop部分
'''
import json
from conf import settings
from db import db_handler


def show_cargo():
    with open(settings.DB_CARGO_INFO_PATH,"rb") as f:
        cargo_dic = json.load(f)
    return cargo_dic


def choose_cargo(cargo_name,quantity,online_user):
    user_dic = db_handler.select_user(online_user)
    user_dic["shopping_cart"][cargo_name]=quantity
    db_handler.save_data(user_dic)
    return "所选商品:[{}]--[{}]个已加入购物车~".format(cargo_name,quantity)


def show_shopping_cart(online_user):
    user_dic = db_handler.select_user(online_user)
    return user_dic["shopping_cart"]
'''
逻辑接口层之bank部分
'''
import time
from db import db_handler
import logging.config
from conf import settings

logging.config.dictConfig(settings.LOGGING_DIC)

# 查询余额接口
def check_account_func(online_user):
    user_dic = db_handler.select_user(online_user)
    balance = user_dic["balance"]
    logger = logging.getLogger('查询余额')
    logger.info('用户{}查询余额'.format(online_user))
    return balance


# 提现接口
def with_draw_func(money, online_user):
    money = float(money)
    cost = money * 1.05
    user_dic = db_handler.select_user(online_user)
    balance = float(user_dic["balance"])
    # 判断余额
    if cost < balance:
        user_dic["balance"] = balance - cost
        fee = money * 0.05
        # 流水信息
        record = "{}提现{}元,手续费{}元".format(time.strftime("%Y-%m-%d %X"), money, fee)
        user_dic["current_account"].append(record)
        db_handler.save_data(user_dic)
        logger = logging.getLogger('提现')
        logger.info("用户{}提现{},手续费{}".format(online_user, money, fee))
        return True, "用户[{}]提现[{}]元成功,手续费为[{}]元".format(online_user, money, fee)
    else:
        return False, "余额不足,无法提现,共需{}元".format(cost)


def current_record(online_user):
    user_dic = db_handler.select_user(online_user)
    return user_dic["current_account"]

3 数据处理层

'''
数据处理层
'''

import json
import os
from conf import settings


# 获取用户信息
def select_user(user):
    user_path = os.path.join(settings.DB_USER_PATH, "{}.json".format(user))
    if os.path.exists(user_path):
        with open(user_path, "r", encoding="utf-8") as f:
            user_dic = json.load(f)
            return user_dic


# 密码加密
def encrypt(info):
    import hashlib
    m = hashlib.md5()
    salt = "嘟嘟喂嘟嘟"
    m.update(salt.encode("utf-8"))
    m.update(info.encode("utf-8"))
    res = m.hexdigest()
    return res


def save_data(user_dic):
    user_name = user_dic["user"]
    user_path = os.path.join(settings.DB_USER_PATH, "{}.json".format(user_name))
    with open(user_path, "w", encoding="utf-8") as f1:
        json.dump(user_dic, f1, ensure_ascii=False)

猜你喜欢

转载自www.cnblogs.com/achai222/p/12623035.html