示例#1
0
文件: main.py 项目: hexuyong/Python_2
def run(user_data):
    '''
    程序主函数入口,根据用户的输入,调用不同的功能函数
    :param user_data:
    :return: none
    '''
    if user_data["is_authenticated"]:
        flag = False
        while not flag:
            print("-".center(70, "-"))
            print("欢迎光临ATM电子银行".center(60, " "))
            print("-".center(70, "-"))
            print("【1】进入商城\t【2】用户管理\t【3】信用卡管理\t 【4】退出程序")
            choice_func = {
                "1": shoping,
                "2": user_manage,
                "3": credit_manage,
                "4": "e"
            }
            choice = input("请选择功能>>>")
            if choice.isdigit():
                if 0 < int(choice) < len(choice_func):
                    choice_func.get(choice)(user_data)
                elif int(choice) == 4:
                    exit()
                else:
                    print("输入的数字有误,请重新输入")
                    log_sys.write_log("输入的数字有误,请重新输入", "error")
            else:
                print("输入需为数字,请重新输入")
                log_sys.write_log("输入需为数字,请重新输入", "error")
示例#2
0
def add(user_data, credit_dic, credit_info):
    '''
    用户添加自己的信用卡函数
    :param user_data: 用户状态信息
    :param credit_dic: 信用卡信息
    :param credit_info: 用户信用卡信息
    :return: none
    '''
    account = user_data["account_id"]
    add_dict = {}
    print("\033[1;31m信用卡默认额度为15000\033[0m")
    tag = False
    while not tag:
        credit_number = input("请输入你要添加的信用卡卡号>>>")
        if credit_number.isdigit():
            pay_psd = input("请输入信用卡支付密码>>>")
            add_dict = {
                "credit_total": 15000,
                "balance": 15000,
                "owner": account,
                "pay_password": pay_psd,
                "frozenstatus": 0
            }
            credit_dic[credit_number] = add_dict
            data_parse.credit_writen(credit_dic)  #将用户添加的信用卡写入文件
            print("\033[1;35m信用卡添加成功\033[0m")
            log_sys.write_log("信用卡添加成功", "info")
            tag = True
        else:
            print("\033[1;35m信用卡号需为数字\033[0m")
            log_sys.write_log("输入端哦信用卡需为数字", "warning")
示例#3
0
def transaction(user_data,credit_info,tran_type,amount,*args):
    '''
    处理用户转账,还款的余额加减判断及计算函数
    :param user_data: 用户状态信息
    :param credit_info: 用户信用卡信息
    :param tran_type: 交易类型
    :param amount: 交易额度
    :param args: 其他
    :return: new_balance,交易成功后的余额
    '''
    amount = float(amount)
    if tran_type in setting.TRANSACTION_TYPE:
        old_balance = credit_info["balance"]   #将用户可以额度赋值给old_balance
        interest = amount * setting.TRANSACTION_TYPE[tran_type]["interest"]
        if setting.TRANSACTION_TYPE[tran_type]["action"] == "plus":
            new_balance = old_balance + amount +interest
        elif setting.TRANSACTION_TYPE[tran_type]["action"] == "minus":
            new_balance = old_balance - amount - interest
            if new_balance < 0 :
                print("您的信用卡可用额度为%s,不能完成此次交易"%old_balance)
                log_sys.write_log("信用卡可用额度不足", "info")
        return new_balance
    else:
        print("错误的交易类型")
        log_sys.write_log("错误的交易类型", "error")
示例#4
0
def credit_manage(user_data):
    '''
    信用卡管理主函数
    :param user_data: 用户状态函数
    :return: none
    '''
    credit_dic = data_parse.credit_info_parse()
    account = user_data["account_id"]
    credit_id = user_data["account_data"]["bindcard"]
    credit_info = credit_dic[credit_id]
    tag = False
    while not tag:
        print("-".center(60, "-"))
        print("信用卡管理中心".center(50, " "))
        print("卡号:%s"%credit_id)
        print("-".center(60, "-"))
        print("【1】查询\t【2】提款\t【3】还款\t【4】转账\t【5】返回")
        choice_func = {"1":check,"2":withdraw,"3":repay,"4":transfer,"5":"back"}
        choice = input("请选择功能>>>")
        if choice.isdigit():
            if 0 < int(choice) < len(choice_func):
                choice_func.get(choice)(user_data,credit_dic,credit_info)    #根据用户的选择调用不同的函数
            elif choice == "5":
                tag = True
            else:
                print("输入的数字有误,请重新输入")
                log_sys.write_log("输入的数字有误", "error")
        else:
            print("输入需为数字,请重新输入")
            log_sys.write_log("输需为数字", "error")
示例#5
0
文件: main.py 项目: hexuyong/Python_2
 def is_login(user_data):  #实现用户未登录的情况下,先登录
     while True:
         if not user_data["is_authenticated"]:  #未登录状态
             print("\033[1;37m您尚未登陆,请先登陆系统\033[0m")
             time.sleep(0.5)
             try:
                 sign = user_login(user_data)  #调用登录函数,登录成功,返回True
                 if sign:
                     user_data["is_authenticated"] = True
                     break
             except UnboundLocalError as e:
                 print("【%s】,用户名输入错误" % e)  #如果用户用户名输入错误,系统会报错,先抓取这个错误,提醒用户
                 log_sys.write_log("用户名输入错误", "error")
     run(user_data)
示例#6
0
def shoping(user_data):
    '''
    商城函数,为用户提供购买,结账等功能
    :param user_data:
    :return:
    '''
    buy_list = []  #定义购买列表
    user_balance = user_data["account_data"]["balance"]  #信用卡可用额度
    goods_dict = data_parse.shop_parse()  #商品列表
    account = user_data["account_id"]  #用户名
    credit_dic = data_parse.credit_info_parse()  #信用卡文件内容信息
    credit_id = user_data["account_data"]["bindcard"]  #信用卡id
    credit_info = credit_dic[credit_id]  #用户信用卡信息
    while True:
        print("您的账户可以余额:\033[33;1m%s\033[0m" % user_balance)
        print("编号[商品,价格]".center(50, "-"))
        for key, value in goods_dict.items():
            print("%s号商品%s的价格为:\033[33;1m%s\033[0m" %
                  (key, value[0], value[1]))
            #print(key,value)
        number = input("请输入您要购买的商品编号(b返回)>>>")
        if number.isdigit():  #判断用户输入的商品编号是否是数字
            buy_number = int(number)
            if buy_number in goods_dict:  #判断用户输入的商品编号是否存在
                if user_balance >= goods_dict[buy_number][1]:  #用户的工资够买商品
                    user_balance -= goods_dict[buy_number][1]
                    buy_list.append(goods_dict[buy_number][0])
                    print(
                        "您购买了\033[32;1m %s \033[0m,余额 \033[33;1m %s \033[0m" %
                        (goods_dict[buy_number][0], user_balance))
                    log_sys.write_log("购买商品成功", "info")
                else:
                    print("\033[1;31m余额不足\033[0m")  #用户工资不够买
                    log_sys.write_log("余额不足,购买商品失败", "info")
                    print(
                        "您购买了\033[32;1m %s \033[0m,余额 \033[33;1m %s \033[0m" %
                        (buy_list, user_balance))
                    user_data["account_data"]["balance"] = user_balance
                    credit_info["balance"] = user_balance
                    data_parse.user_writen(
                        account, user_data["account_data"])  #将可用余额写入用户文件
                    data_parse.bill_parse(buy_list)  #将已购商品写入文件
                    data_parse.credit_writen(credit_dic)  #将可用余额写入信用卡文件
                    break
            else:
                print("\033[1;31m暂时没有这个商品\033[0m")
                log_sys.write_log("输入的商品编号错误", "error")
        elif number == 'b':
            print("您购买了\033[32;1m %s \033[0m,余额 \033[33;1m %s \033[0m" %
                  (buy_list, user_balance))
            user_data["account_data"]["balance"] = user_balance
            data_parse.user_writen(account,
                                   user_data["account_data"])  # 将余额写入文件
            credit_info["balance"] = user_balance  #将可用余额写入用户文件
            data_parse.bill_parse(buy_list)  #将已购商品写入文件
            data_parse.credit_writen(credit_dic)  #将可用余额写入信用卡文件
            break
        else:
            print("\033[1;31m错误的商品编号\033[0m")
            log_sys.write_log("输入的商品编号错误", "error")
示例#7
0
def check(user_data, credit_dic, credit_info):
    '''
    查询用户信息函数
    :param user_data: 用户状态信息
    :param credit_dic: 信用卡信息
    :param credit_info: 用户信用卡信息
    :return: none
    '''
    status = credit_info["frozenstatus"]
    user_info = '''-----------用户信息-----------
    信用卡号:  \033[1;31m%s\033[0m
    注册日期:  \033[1;31m%s\033[0m
    信用卡额度:\033[1;31m%s\033[0m
    信用卡状态:\033[1;31m%s\033[0m\033[1;37m(0:正常,1:冻结)\033[0m
    ''' % (user_data["account_data"]["bindcard"],
           user_data["account_data"]["enroll_date"],
           credit_info["credit_total"], status)
    print(user_info)
    log_sys.write_log("用户信息查询成功", "info")
    time.sleep(1)
示例#8
0
def alter(user_data, credit_dic, credit_info):
    '''
    修改用户登陆密码函数
    :param user_data: 用户状态信息
    :param credit_dic: 信用卡信息
    :param credit_info: 用户信息卡信息
    :return: none
    '''
    account = user_data["account_id"]  #当前登陆用户用户名
    while True:
        old_psd = input("请输入原始密码>>>")
        if old_psd == user_data["account_data"]["password"]:
            new_psd1 = input("请输入新密码>>>")
            new_psd2 = input("请再输入新密码>>>")
            if new_psd1 == new_psd2:
                user_data["account_data"]["password"] = new_psd1
                data_parse.user_writen(account,
                                       user_data["account_data"])  #将修改后的密码存入文件
                print("\033[1;35m密码修改成功\033[0m")
                log_sys.write_log("用户密码修改成功", "info")
                break
            else:
                print("\033[1;35m两次密码输入的不一样\033[0m")
                log_sys.write_log("用户密码修改失败", "info")
        elif old_psd == "b":
            break
        else:
            print("\033[1;35m密码输入错误\033[0m")
            log_sys.write_log("密码输入错误", "error")
示例#9
0
def repay(user_data,credit_dic,credit_info):
    '''
    实现还款函数
    :param user_data: 用户状态信息
    :param credit_dic: 信用卡信息
    :param credit_info: 用户信用卡信息
    :return: none
    '''
    account_info = '''------------------------
        信用额度:\033[1;31m%s\033[0m
        可用额度:\033[1;31m%s\033[0m
        ''' % (credit_info["credit_total"],credit_info["balance"])
    print(account_info)
    if credit_info["frozenstatus"] == 0:            #判断信用卡是否在冻结状态
        back_flag = False
        while not back_flag:
            repay_amount = input("\033[33;1m请输入金额(输入b返回)>>>\033[0m").strip()
            if len(repay_amount) > 0 and repay_amount.isdigit():
                new_balance = transaction(user_data,credit_info,"repay", repay_amount)
                if new_balance:
                    credit_info["balance"] = new_balance
                    data_parse.credit_writen(credit_dic)     #将还款后的余额写入文件
                    print("目前可用额度: \033[1;31m%s\033[0m" % new_balance)
                    time.sleep(1)
                    log_sys.write_log("还款成功", "info")
                    break
                else:
                    print("\033[33;1m[%s]\033[0m输入无效,只接受整数"%repay_amount)
                    log_sys.write_log("还款失败", "info")
            if repay_amount == "b":
                    back_flag = True
    else:
        print("\033[33;1m您的信用卡已被冻结\033[33;1m")
        log_sys.write_log("信用卡被冻结", "info")
示例#10
0
def user_login(user_data):
    '''
    用户登录函数
    :param user_data:
    :return: tag(True or False)
    '''
    tag = False
    while True:
        account = input("请输入你的\033[1;31m账户名>>>\033[0m")
        password = input("请输入你的\033[1;31m密码>>>\033[0m")
        signal, user_dict = data_parse.data_parse(account, password)
        if signal:
            print("登陆成功")
            log_sys.write_log("登陆成功", "info")
            tag = True
            user_data["account_id"] = account
            user_data["account_data"] = user_dict
            break
        else:
            print("登陆失败,请重新输入")
            log_sys.write_log("登陆失败", "error")
    return tag
示例#11
0
def user_manage(user_data):
    '''
    用户管理功能主函数
    :param user_data: 用户状态信息
    :return: none
    '''
    credit_dic = data_parse.credit_info_parse()  #信用卡信息字典
    account = user_data["account_id"]  #当前登录用户名
    credit_id = user_data["account_data"]["bindcard"]  #当前用户信用卡卡号
    credit_info = credit_dic[credit_id]  #当前用户信用卡信息字典
    flag = False
    while not flag:
        print("-".center(70, "-"))
        print("用户管理中心".center(50, " "))
        print("用户名:%s" % account)
        print("-".center(70, "-"))
        print("【1】查询\t【2】修改密码\t【3】添加信用卡\t【4】冻结信用卡\t【5】返回")
        choice_func = {
            "1": check,
            "2": alter,
            "3": add,
            "4": freeze,
            "5": "back"
        }
        choice = input("请选择功能>>>")
        if choice.isdigit():
            if 0 < int(choice) < len(choice_func):
                choice_func.get(choice)(user_data, credit_dic,
                                        credit_info)  #根据用户的选择,调用不同的功能函数
            elif choice == "5":
                flag = True
            else:
                print("输入的数字有误,请重新输入")
                log_sys.write_log("输入错误", "error")
        else:
            print("输入需为数字,请重新输入")
            log_sys.write_log("输入错误", "error")
示例#12
0
def freeze(user_data, credit_dic, credit_info):
    '''
    冻结用户信用卡函数
    :param user_data: 用户状态信息
    :param credit_dic: 信用卡信息
    :param credit_info: 用户信用卡信息
    :return: none
    '''
    credit_id = user_data["account_data"]["bindcard"]
    credit_count = '''---------您持有的信用卡---------
    01:%s
    ''' % credit_id
    print(credit_count)
    while True:
        choice = input("请选择您要冻结的信用卡>>>")
        if choice == "01" or choice == user_data["account_data"]["bindcard"]:
            print("\033[1;35m冻结成功\033[0m")
            log_sys.write_log("冻结信用卡成功", "info")
            credit_dic[credit_id]["frozenstatus"] = "1"
            data_parse.credit_writen(credit_dic)
            break
        else:
            print("\033[1;35m输入错误,请重新输入\033[0m")
            log_sys.write_log("冻结信用卡失败", "error")
示例#13
0
def transfer(user_data,credit_dic,credit_info):
    '''
    实现转账函数
    :param user_data: 用户状态信息
    :param credit_dic: 信用卡信息
    :param credit_info: 用户信用卡信息
    :return: none
    '''
    if credit_info["frozenstatus"] == 0:  #判断信用卡是否冻结
        back_flag = False
        while not back_flag:
            print("示例:2016010202")
            card_id = input("请输入您要转入的银行卡账号(输入b返回)>>>")
            if card_id == "b":
                back_flag = True
            elif card_id.isdigit() and card_id in credit_dic:
                if card_id != user_data["account_data"]["bindcard"]:
                    card_info = '''--------对方信用卡信息--------
                    所有人:   \033[1;31m%s\033[0m
                    可用额度: \033[1;31m%s\033[0m
                    '''%(credit_dic[card_id]["owner"], credit_dic[card_id]["balance"])
                    print("您卡上的可以余额:\033[1;31m%s\033[0m"%credit_info["balance"])
                    transfer_amount = input("请输入您要转入的金额>>>")
                    if 0 < int(transfer_amount) < int(credit_info["balance"]):
                        print(card_info)
                        sign = input("是否转账Y/N>>>")
                        if sign == "y":
                            print("\033[33;1m交易成功\033[0m")
                            log_sys.write_log("转账成功", "info")
                            self_balance = transaction(user_data,credit_info,"withdraw",transfer_amount)
                            credit_info["balance"] = self_balance
                            print("您的可用额度:\033[1;31m%s\033[0m"%credit_info["balance"])
                            other_balance = transaction(user_data,credit_info,"repay",transfer_amount)
                            credit_dic[card_id]["balance"] = other_balance
                            data_parse.credit_writen(credit_dic)            #缺将转账后的金额写入文件
                            print("对方的可以余额:\033[1;31m%s\033[0m"%credit_dic[card_id]["balance"])
                            time.sleep(1)
                            break
                        else:
                            print("\033[33;1m交易取消\033[0m")
                            log_sys.write_log("转账失败", "info")
                            time.sleep(1)
                            back_flag = True
                    else:
                        print("\033[33;1m您输入的卡号有误,请重新输入\033[0m")
                        log_sys.write_log("输入的信用卡号有误", "error")
                else:
                    print("\033[33;1m输入错误,请重新输入\033[0m")
                    log_sys.write_log("输入的信用卡号有误", "error")
            else:
                print("\033[33;1m输入错误,请重新输入\033[0m")
                log_sys.write_log("输入的信用卡号有误", "error")
    elif credit_info["frozenstatus"] == 1 :
        print("\033[33;1m您的信用卡已被冻结\033[33;1m")
        log_sys.write_log("信用卡被冻结", "info")