import os
import sys
import json
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from conf import settings
import accounts
import logger
import db_handler
'''
本模块是transaction,商城、记账、还钱、取钱等所有与账户金额相关的操作
'''
def transaction(type,user_data):
'''
该函数实现根据配置文件去判断操作类型
:param type: 接收操作类型
:param user_data: 接收用户数据
:return:
'''
if user_data["is_auth"]:
for temp in settings.ALGORITHM:
if type == "exit":
exit("退出成功")
if temp == type:
eval(type)(user_data,type)
else:
print("用户未登录,请重新登录")
def account(user_data,*agrs):
'''
该函数实现打印账户信息
:param user_data:
:param agrs:
:return:
'''
info2 = '''
------------------------------------账户信息------------------------------------
姓名:{_name} , 信用卡额度:{_limit} , 当前未还金额:{_used} ,可取现金额:{_cash}
'''.format(_name = user_data["account_data"]["name"],
_limit = user_data["account_data"]["limit"],
_used = float(user_data["account_data"]["used"]),
_cash = user_data["account_data"]["cancash"])
print(info2)
info = "%s查询了当前账户信息"%user_data["account_data"]["name"]
logger.write_logger(settings.logfile1,info)
def mall(user_data,*args):
while True:
print("**********欢迎进入商城**********")
with open(r'F:myPythonAtmatmdocsmall.json','r',encoding='utf-8') as f:
commodity = json.load(f)
for index,temp in enumerate(commodity):
print(index,temp)
choise = input("请输入购买商品的编号 >>>>")
if choise == 'q':
break
for index,temp in enumerate(commodity):
if index == int(choise):
deduct_cost(user_data,temp)
def invok_creditCard(user_data):
acc_acount = accounts.load(user_data["account_data"]["account"])
return acc_acount
def deduct_cost(user_data,commodity):
acc_acount = invok_creditCard(user_data)
if acc_acount["limit"] - acc_acount["used"] - commodity["价格"] > 0:
acc_acount["used"] = acc_acount["used"] + commodity["价格"]
acc_acount["cancash"] = (acc_acount["limit"] - acc_acount["used"])/2
accounts.dump(acc_acount)
accounts.dump_f(commodity,settings.MALL)
print(" 33[32;1m 商品%s购买成功 33[0m"%commodity["商品"])
else:
print(" 33[31;1m 信用卡额度不够 33[0m")
def algorithm(_key,user_cash):
'''
该函数实现配置文件中操作类型的金额算法,判断是否有手续费并计算
:param _key:
:param user_cash:
:return:
'''
for temp in settings.ALGORITHM:
if temp == _key:
if settings.ALGORITHM[temp]["action"] == "minus":
use = user_cash + user_cash * settings.ALGORITHM[temp]["interset"]
return use
elif settings.ALGORITHM[temp]["action"] == "add":
use = user_cash + user_cash * settings.ALGORITHM[temp]["interset"]
return use
else:
return 0
def cash(user_data,type):
'''
该函数实现取现功能
:param user_data:
:param type:
:return:
'''
acc_data = accounts.load(user_data["account_data"]["account"])
user_data["account_data"] = acc_data
user_cash = input("请输入取款金额 >>>")
user_cash = float(user_cash)
old_amount = user_data["account_data"]["cancash"]
new_amount = algorithm(type,user_cash)
if user_cash > old_amount:
msg = "当前可取现额度不足"
print(" 33[31;1m %s 33[0m"%msg)
else:
user_data["account_data"]["used"] = user_data["account_data"]["used"] + new_amount
result = user_data["account_data"]["cancash"] - new_amount
if result > 0:
user_data["account_data"]["cancash"] = result
else:
user_data["account_data"]["cancash"] = 0
msg = "取现成功"
print(" 33[31;1m %s,已取现%.2f,手续费为%.2f,当前可用额度为%.2f 33[0m"%(msg,user_cash,new_amount - user_cash,user_data["account_data"]["limit"] - user_data["account_data"]["used"]))
accounts.dump(user_data["account_data"])
info = "%s取现操作:%s" % (user_data["account_data"]["account"], msg)
logger.write_logger(settings.logfile1, info)
info1 = "%s账户取现%.2f,手续费%.2f"%(user_data["account_data"]["account"],user_cash,new_amount - user_cash)
logger.write_logger(settings.logfile, info1)
def refund(user_data,type):
'''
该函数实现还款功能
:param user_data:
:param type:
:return:
'''
acc_data = accounts.load(user_data["account_data"]["account"])
user_data["account_data"] = acc_data
user_refund = input("请输入你要还款金额 >>>")
user_refund = float(user_refund)
# old_amount = user_data["account_data"]["cancash"]
new_amount = algorithm(type,user_refund)
if user_refund > user_data["account_data"]["used"]:
user_data["account_data"]["used"] = 0
if user_data["account_data"]["cancash"] < user_data["account_data"]["limit"] / 2:
user_data["account_data"]["cancash"] = user_data["account_data"]["limit"] / 2 + user_refund - user_data["account_data"]["used"]
else:
user_data["account_data"]["cancash"] = user_data["account_data"]["cancash"] + user_refund
user_data["account_data"]["limit"] = user_data["account_data"]["limit"] + user_refund - user_data["account_data"]["used"]
print(" 33[31;1m 还款成功,已还款%.2f,当前可用额度为%.2f 33[0m"%(user_refund,user_data["account_data"]["limit"]))
accounts.dump(user_data["account_data"])
else:
user_data["account_data"]["used"] = user_data["account_data"]["used"] - user_refund
result = user_data["account_data"]["cancash"] + user_refund
user_data["account_data"]["cancash"] = result
if user_data["account_data"]["used"] < 0:
user_data["account_data"]["limit"] = user_data["account_data"]["limit"] - user_data["account_data"]["used"]
accounts.dump(user_data["account_data"])
print(" 33[31;1m 还款成功,已还款%.2f,当前可用额度为%.2f 33[0m" % (user_refund, user_data["account_data"]["limit"]))
info = "%s还款成功"%user_data["account_data"]["account"]
info1 = "%s账户还款%.2f,手续费%.2f"%(user_data["account_data"]["account"],user_refund,new_amount - user_refund)
logger.write_logger(settings.logfile1,info)
logger.write_logger(settings.logfile,info1)
def transfer(user_data,type):
'''
该函数实现转账功能
:param user_data:
:param type:
:return:
'''
other_account = input("请输入转入的账号 >>>")
other_amount = float(input("请输入转账的金额 >>>"))
acc_data = accounts.load(user_data["account_data"]["account"])
user_data["account_data"] = acc_data
use = algorithm(type,other_amount)
if user_data["account_data"]["limit"] < other_amount:
msg = "账户金额不足"
print(" 33[31;1m %s 33[0m")%msg
return
else:
user_data["account_data"]["limit"] = user_data["account_data"]["limit"] - use
user_data["account_data"]["used"] = user_data["account_data"]["used"] + use
user_data["account_data"]["cancash"] = user_data["account_data"]["cancash"] - use
accounts.dump(user_data["account_data"])
other_data = accounts.load(other_account)
if other_data:
other_data["limit"] = other_data["limit"] + other_amount
if other_data["used"] + other_amount > 0:
other_data["used"] = 0
else:
other_data["used"] = other_data["used"] + other_amount
other_data["cancash"] = other_data["cancash"] + other_amount
accounts.dump(other_data)
msg = "转账成功"
print(" 33[31;1m %s,转账金额%.2f,转账手续费%.2f,对方账号%s 33[0m" % (msg,other_amount,use-other_amount,other_data["account"]))
info = "%s转账:%s" % (user_data["account_data"]["account"],msg)
info1 = "%s账户转账%.2f,手续费%.2f,转入账户%s" % (user_data["account_data"]["account"], other_amount, use - other_amount,other_account)
logger.write_logger(settings.logfile1, info)
logger.write_logger(settings.logfile, info1)
def consumption(user_data,type):
'''
该函数实现消费功能
:return:
'''
pay = float(input("请输入刷卡金额 >>>"))
acc_data = accounts.load(user_data["account_data"]["account"])
use = algorithm(type,pay)
if acc_data["limit"] > use:
acc_data["limit"] = acc_data["limit"] - use
acc_data["used"] = acc_data["used"] + use
acc_data["cancash"] = acc_data["cancash"] - use
user_data["account_data"] = acc_data
accounts.dump(acc_data)
msg = "消费成功"
print(" 33[31;1m %s,消费金额%.2f,消费手续费%.2f 33[0m" %(msg,pay, use - pay))
else:
msg = "额度不足"
print("%s")%msg
info = "%s消费:%s" % (user_data["account_data"]["account"], msg)
info1 = "%s账户消费%.2f,手续费%.2f" % (
user_data["account_data"]["account"], pay, use - pay)
logger.write_logger(settings.logfile1, info)
logger.write_logger(settings.logfile, info1)