欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pythonATM,购物车项目实战_补充5-interface接口

程序员文章站 2022-03-04 17:54:06
...

interface:

interface/admin_interface.py

from db import db_handler

# 修改额度接口

def change_balance_interface(username,money):
    user_dic=db_handler.select(username)

    if user_dic:
        #修改额度
        user_dic["balance"]=int(money)

        #保存修改后的用户数据
        db_handler.save(user_dic)

        return True,"额度修改成功!"

    return False,"修改额度用户不存在!"



#冻结账户接口
def lock_user_interface(username):
    user_dic=db_handler.select(username)

    if user_dic:
        #将locked的默认值修改为True
        user_dic['lcoker']=True

        db_handler.save(user_dic)

        return True,f"用户{username}冻结成功!"
    return False,"冻结用户不存在"














interface/bank_interface.py



"""
银行相关业务的接口
"""
from db import db_handler


#提现接口(手续费5%,就是每次提现都是花费5%)
def withdraw_interface(username,money):

    #1)先获取用户字典
    user_dic=db_handler.select(username)

    #账户中的金额
    balance=int(user_dic.get('balance'))

    #提现本金+手续费
    money2=int(money)*1.05

    #判断用户金额是否足够
    if balance>=money2:
        #2)修改用户字典中的金额
        balance-=money2
        user_dic['balance']=balance

        #3) 记录流水
        flow=f'用户[{username}]体现金额[{money}$]成功,手续费用为[{money2-float(money)}]'
        user_dic['flow'].append(flow)


        # 3.1)在保存数据,或者更新数据
        db_handler.save(user_dic)


        return True,f'用户[{username}]提取金额[{money}]成功,手续费为:{money2-float(money)}$'

    return False,f'提现金额不足,请重新输入!'


# 还款接口
def repay_interface(username,money):
    """
    1.获取用户的金额
    2.给用户的金额做加钱的操作
    :return:
    """
    # 1.获取用户字典
    user_dic=db_handler.select(username)

    #2.直接做加钱操作
    # user_dic["balance"]----->int
    user_dic['balance']+=money

    #3.记录流水
    flow=f'用户:[{username}] 还款[{money}]成功!'
    user_dic['flow'].append(flow)

    #3.调用数据处理层,将修改后的数据更新
    db_handler.save(user_dic)

    return True,f'用户:[{username}] 还款:[{money}]成功,当前额度为:{user_dic["balance"]}'



# 转账接口

def transfer_interface(login_user,to_user,money):
    """
    1.获取“当前用户”数据
    2.获取“目标用户”数据
    3.获取转账金额
    :param login_user:
    :param to_user:
    :param money:
    :return:
    """
    #1)获取 当前用户  字典
    login_user_dic=db_handler.select(login_user)

    #2)获取“目标用户:字典
    to_user_dic=db_handler.select(to_user)

    #3)判断目标用户是否存在
    if not to_user_dic:
        return False,"目标用户不存在"

    #4若用户存在,则判断“当前用户的转账金额”是否足够
    if login_user_dic['balance']>=money:
        #5)若足够,则开始给目标用户转账
        #5.1)给当前用户的数据,做减钱的操作
        login_user_dic['balance']-=money

        #5.2)给目标用户的数据,做加钱的操作
        to_user_dic["balance"]+=money

        #5.3记录当前用户与目标用户的流水
        #当前用户流水
        login_user_flow=f'用户[{login_user}]给用户:[{to_user}]转账:[{money}]成功'
        login_user_dic['flow'].append(login_user_flow)

        # 给目标用户流水
        to_user_flow = f'用户[{to_user}]接收用户:[{login_user}]转账:[{money}]成功'
        to_user_dic['flow'].append(to_user_flow)

        #6.保存用户数据
        #6.1)调用数据处理层的save功能,保存当前用户数据
        db_handler.save(login_user_dic)

        #6.2)给调用数据处理层的save功能,保存目标用户数据
        db_handler.save(to_user_dic)

        return True,f'用户:[{login_user}]给用户[{to_user}]转账:[{money}]元,成功!'

    return False,"当前用户转账金额不足!"


#查看流水接口
def check_flow_interface(login_user):
    user_dic=db_handler.select(login_user)
    return user_dic.get('flow')   #返回一个list列表


#支付接口
def pay_interface(login_user,cost):
    user_dic=db_handler.select(login_user)

    #判断用户金额是否足够
    if user_dic.get('balance')>=cost:
        # 足够就是减钱
        user_dic['balance']-=cost

        #记录消费流水
        flow=f"用户消费金额:[{cost}]"
        user_dic['flow'].append(flow)

        #保存数据
        db_handler.save(user_dic)
        # return True,或者false 交给购物接口来处理
        return True

    return False

interface/shop_interface.py


"""
购物商城接口
"""

from db import db_handler

#商品准备结算接口
def shopping_interface(login_user,shopping_car):
    #1)计算消费总额
    #{‘商品名称’:["价格","数量"]}
    cost=0
    for price_number in shopping_car.values():
        price,number=price_number
        cost+=(price*number)

    #导入银行接口
    from interface import bank_interface
    #逻辑校验成功后,再调用银行的支付接口
    flag=bank_interface.pay_interface(login_user,cost)

    if flag:
        return True,"支付成功,准备发货!"
    return False,"支付失败,金额不足!"


#购物车添加接口
def add_shop_car_interface(login_user,shopping_car):
    #1)获取当前用户的购物车
    user_dic=db_handler.select(login_user)

    #获取用户文件中的商品的数据
    shop_car=user_dic.get("shop_car")

    #2)添加购物车
    #2.1)判断当前用户选择的商品是否已经存在
    # shopping_car--->{'商品名':["商品价格,商品数量"]}

    for shop_name,price_number in shopping_car.items():
        #每个商品的数量
        number=price_number[1]

        #2.2)若有商品重复,则累加商品数量

        if shop_name in shop_car:
            user_dic['shop_car'][shop_name][1]+=number

        else:
            #2.3)若不是重复的,更新到商品字典中
            user_dic['shop_car'].update({shop_name:price_number})

    #保存用户数量
    db_handler.save(user_dic)

    return True,"添加购物车成功!"


#查看购物车接口
def check_shop_car_interface(username):
    user_dic=db_handler.select(username)
    return user_dic.get('shop_car')




interface/user_interface.py

"""
逻辑接口层
    用户接口
"""


from db import db_handler
from lib import common

# 注册接口

def register_interface(username,password,balance=15000):
    #2)查看用户是否存在
    #2.1)调用数据处理层中的select函数,会返回用户字典或者None

    user_dic=db_handler.select(username)
    #{user:user,pwd:pwd...} or None
    # 若用户存在则return ,告诉用户重新输入
    if user_dic:
        # return(False,'用户名已经存在!')
        return False,'用户名已存在!'
    #3)若用户不存在,则保存用户数据

    #做密码加密
    password=common.get_pwd_md5(password)



    #3.1 组织用户的数据的字典信息
    user_dict={
        'username':username,
        'password':password,
        'balance':balance,
        # 用于记录用户流水的列表
        'flow':[],
        # 用于记录用户购物车
        'shop_car':{},
        #locked 用于记录用户是否被冻结
        #False:未冻结  True:已经被冻结
        #
        'locked':False
    }

    #3.2 保存数据
    db_handler.save(user_dict)

    return True,f'{username}注册成功!'



# 登录接口

def login_interface(username,password):
    #1)先查看当前用户数据是否存在
    #{用户数据字典} or None
    user_dict=db_handler.select(username)

    #用户判断用户是否存在

    #若有冻结用户 则需要判断是否被锁定
    if user_dict.get("locked"):
        return False,"当前用户已被锁定"



    #2)判断用户是否存在
    if user_dict:
        #给用户输入的密码做一次加密
        password=common.get_pwd_md5(password)
        #3)校验密码是否一致
        if password==user_dict.get('password'):
            return True,f'用户:{username}登录成功!'
        else:
            return False,'密码错误'

    return False,'用户不存在,请重新输入'

#查看余额接口
def check_bal_interface(username):
    user_dic=db_handler.select(username)
    return user_dic['balance']