• 电子银行购物商城



     

    1、作业需求:
    模拟实现一个ATM + 购物商城程序
    额度 15000或自定义
    实现购物商城,买东西加入 购物车,调用信用卡接口结账
    可以提现,手续费5%
    支持多账户登录
    支持账户间转账
    记录每月日常消费流水
    提供还款接口
    ATM记录操作日志 
    提供管理接口,包括添加账户、用户额度,冻结账户等。。。 
    用户认证用装饰器

    2、流程图

    3、目录结构

    复制代码
    |——员工信息查询系统
    |——bin目录
    | |—— _init.py
    | |__ Stary.py(开始程序)
    |
    |——core目录
    | |—— __init__.py
    | |—— main.py(主模块程序)
    | |—— auth.py(登录认证程序)
    |
    |——db目录
    | |—— shop_car(购物车文件目录)
    | |——XXX.txt(购物车文件)
    | |__ user_info(用户数据)
    | |——XXX.json(用户信息数据)
    |——log目录
    | |—— card_log(信用卡日志目录)
    | |——XXX.log(信用卡日志文件)
    | |__ shop_log(购物日志目录)
    | |——XXX.log(购物日志文件)
    |——modules目录
    | |—— __init__.py
    | |—— admincenter.py(管理中心程序)
    | |—— creditcard.py(信用卡程序)
    | |—— shopping.py(购物商城程序)
    |__ __init.py__
    复制代码

    4、core目录

    auth.py(登录认证模块)

    复制代码
    #-*- Coding:utf-8 -*-
    # Author: D.Gray
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    def accse_login(user_data):
    '''
    定义一个用户登录装饰器
    :param user_data:
    :return:
    '''
    def out_wrapper(func): #func接收 admin_info,shop_info,admin_info函数的返回值
    def wrapper(*args,**kwargs):
    count = 0
    if not user_data['is_authenticated'] and count < 3:
    print("33[32;0m用户登录认证33[0m".center(40, "-"))
    while count < 3:
    user = input('33[32;1m请输入用户名>>>:33[0m')
    db_path = BASE_DIR + r'dbuser_info'
    db_path_user = db_path + '\%s.json' % user
    if os.path.isfile(db_path_user): #判断用户文件是否存在
    with open(db_path_user, 'r', encoding='utf-8') as fh:
    user_datas = eval(fh.read()) #将用户文件中内容转换为字典形式
    pwd = input('33[32;1m请输入用户密码>>>:33[0m')
    if pwd == user_datas['password']:
    user_data['account_id'] = user_datas["cardid"]
    user_data['is_authenticated'] = True
    user_data['account_data'] = user_datas
    break
    else:
    print('33[31;1m密码错误请重新输入33[0m')
    else:
    count += 1
    print('33[31;1m该用户不存在,请重新输入还剩 %s 次机会33[0m'% (3-count))
    func(*args,**kwargs)
    return func
    return wrapper
    return out_wrapper
    复制代码

    mian.py(主模块程序)

    复制代码
    #-*- Coding:utf-8 -*-
    # Author: D.Gray
    import sys,os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    from core import auth
    from modules import creditcard
    from modules import shopping
    from modules import admincenter
    #用户数据信息
    user_data = {
    'account_id':None, #帐号ID
    'is_authenticated':False, #是否认证
    'account_data':None #帐号数据
     }
    def run():
    '''
    定义一个主界面函数
    :return:
    '''
    while True:
    print('''33[35;1m ************欢迎来到ATM电子商务淫行************
    1.信用卡中心
    2.购物中心
    3.管理中心
    4.退出33[0m''')
    inputs = input('33[35;1m请选择操作方式>>>:33[0m').strip()
    dict = {
    '1':card_info,
    '2':shop_info,
    '3':admin_info
    }
    if inputs in dict.keys():
    dict[inputs]()
    elif inputs == '4':
    exit('程序退出 欢迎下次使用')
    else:
    print('33[31;1m请输入有效操作方式33[0m')
    def admin_info():
    '''
    定义一个管理员权限用户主函数
    :return:
    '''
    auth_user() #调用用户认证接口
    if user_data['account_data']['type'] == 1:
    while True:
    print('''33[35;1m ---------------欢迎 %s 来到信用卡管理中心---------------
    1. 发行信用卡
    2. 冻结信用卡
    3. 解冻信用卡
    4. 提升信用卡额度
    5. 返回主菜单
    6. 退出33[0m'''%user_data['account_data']["username"])
    inputs = input('33[35;1m请选择操作方式1>>>:33[0m').strip()
    menu_dic = {
    "1": admincenter.banks,
    "2": admincenter.freezing,
    "3": admincenter.defrosting,
    "4": admincenter.limit,
    }
    if inputs in menu_dic.keys():
    menu_dic[inputs](user_data['account_data'])
    elif inputs == '5':
    break
    elif inputs == '6':
    exit('程序退出 欢迎下次使用')
    else:
    print('33[31;1m请输入有效操作方式33[0m')
    else:
    exit('对不起您的账号权限不足无法登录该模块')
    def shop_info():
    '''
    定义一个用户购物的主函数
    :return:
    '''
    auth_user() #调用用户认证接口
    while True:
    print('''33[35;1m ---------------欢迎来到购物中心---------------
    1.购物商城
    2.查看购物车
    3.查看购物记录
    4.返回主菜单
    5.退出33[0m''')
    menu_dic = {
    '1':shopping.shopping,
    '2':shopping.shop_car,
    '3':shopping.center
    }
    inputs = input('33[35;1m请选择操作方式>>>:33[0m').strip()
    if inputs in menu_dic.keys():
    menu_dic[inputs](user_data['account_data'])
    elif inputs == '4':
    break
    elif inputs == '5':
    exit('程序退出 欢迎下次使用')
    else:
    print('33[31;1m请输入有效操作方式33[0m')
    def card_info():
    '''
    定义一个信用卡管理中心的主函数
    :return:
    '''
    auth_user() #调用用户认证接口
    while True:
    print('''33[35;1m ---------------欢迎 %s 来到信用卡中心---------------
    1. 账户信息
    2. 存款
    3. 提现
    4. 转账
    5. 账单
    6. 返回主菜单
    7. 退出
    33[0m'''%user_data['account_data']["username"])
    user_account = user_data['account_data']
    inputs = input('33[35;1m请选择操作方式1>>>:33[0m').strip()
    menu_dic = {
    "1": creditcard.account_info,
    "2": creditcard.repay,
    "3": creditcard.withdraw,
    "4": creditcard.transfer,
    "5": creditcard.paycheck,
    }
    if inputs in menu_dic.keys():
    menu_dic[inputs](user_account)
    elif inputs == '6':
    break
    elif inputs == '7':
    exit('程序退出 欢迎下次使用')
    else:
    print('33[31;1m请输入有效操作方式33[0m')
    @auth.accse_login(user_data) #装饰器认证
    def auth_user():
    '''
    调用 auth模块中的accse_login装饰器对用户进行登录认证
    :return:
    '''
    print('33[32;1m用户 %s 登录认证成功33[0m' % user_data['account_data']["username"])
    复制代码

    5、db(数据库)

    复制代码
    {
    "status":1,
    "expire_date": "2021-01-01",
    "credit":5500,
    "pay_day":22,
    "balance":9028,
    "enroll_date": "2016-01-02",
    "cardid":1112,
    "password": "123456",
    "username": "admin",
    "type":1,
    "cardname":"招商银行-星耀"
    }
    复制代码
    复制代码
    IPhone 1299
    IWatch 2999
    MacBo 1999
    IPad 2199
    Bicyc 999
    X-box 1199
    Letv 819
    Book 599
    复制代码

    6、log(日志目录)

    复制代码
    #-*- Coding:utf-8 -*-
    # Author: D.Gray
    import logging,sys,os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    def card_log(username,log):
    '''
    定义一个信用卡日志函数
    :return:
    '''
    log_path = BASE_DIR+r'logcard_log\%s_card.log'%username
    logger = logging.getLogger('Test_LOG')
    logger.setLevel(logging.INFO)
    fh = logging.FileHandler(log_path,encoding='utf-8') #将日志打印到log目录下的日志文件中
     fh.setLevel(logging.INFO)
    fh_format = logging.Formatter('%(asctime)s %(message)s',datefmt='%m/%d/%Y %H:%M:%S')
    fh.setFormatter(fh_format)
    logger.addHandler(fh)
    logger.info(log)
    logger.removeHandler(fh) #避免打印重复日志
    def shop_log(username,log):
    '''
    定义一个购物日志函数
    :param username:
    :param log:
    :return:
    '''
    log_path = BASE_DIR + r'logshop_log\%s_shop.log' % username
    logger = logging.getLogger('Test_LOG')
    logger.setLevel(logging.INFO)
    fh = logging.FileHandler(log_path,encoding='utf-8')
    fh.setLevel(logging.INFO)
    fh_format = logging.Formatter('%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S')
    fh.setFormatter(fh_format)
    logger.addHandler(fh)
    logger.info(log)
    logger.removeHandler(fh)
    复制代码

    7、modules(模块程序)

    admincenter.py

    复制代码
    #-*- Coding:utf-8 -*-
    # Author: D.Gray
    import os,sys,logging
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    db_path = BASE_DIR + r'dbuser_info'
    def banks(account):
    '''
    定义一个查询发行信用卡函数
    :param account:
    :return:
    '''
    print('33[33;1m尊敬的用户您的发行信用卡是 【%s】'
    '
    卡号为:%s 开户日期为:%s 信用卡有效期至:%s'
    '
    我们将会真挚的为您服务!!!'
    %(account['cardname'],account["cardid"],account["enroll_date"],account["expire_date"]))
    def freezing(account):
    '''
    定义一个冻结信用卡函数
    :return:
    '''
    db_path_user = db_path+'\%s.json'%account['username']
    with open(db_path_user,'r',encoding='utf-8') as fh:
    fr = fh.read()
    fd = eval(fr)
    if fd['status'] == 0:
    print('33[31;1m当前信用卡 【已冻结】33[0m')
    if fd['status'] == 1:
    free = input('33[33;1m当前信用卡 【未冻结】 按任意键选择冻结 按b返回>>>33[0m')
    if free != 'b':
    with open(db_path_user,'w',encoding='utf-8') as fw:
    res = fr.replace(str(fd["status"]),'0',1)
    fw.write(res)
    print('33[31;1m当前信用卡 【已冻结】33[0m')
    def defrosting(account):
    '''
    定义一个解冻函数
    :return:
    '''
    db_path_user = db_path + '\%s.json' % account['username']
    with open(db_path_user, 'r', encoding='utf-8') as fh:
    fr = fh.read()
    fd = eval(fr)
    if fd['status'] == 1:
    print('33[31;1m当前信用卡 【未冻结】33[0m')
    if fd['status'] == 0:
    free = input('33[33;1m当前信用卡 【已冻结】 按任意键选择解冻 按b返回>>>33[0m')
    if free != 'b':
    with open(db_path_user, 'w', encoding='utf-8') as fw:
    res = fr.replace(str(fd["status"]), '1', 1)
    fw.write(res)
    print('33[31;1m当前信用卡 【已解冻】33[0m')
    def limit(account):
    '''
    定义一个提升信用额度函数
    :return:
    '''
    db_path_user = db_path + '\%s.json' % account['username']
    with open(db_path_user, 'r', encoding='utf-8') as fh:
    fr = fh.read()
    fd = eval(fr)
    print('33[33;1m尊敬的用户您当前信用额度是 【%s元】'%account["credit"])
    limit = input('33[34;1m是否选择提升信用额度 按任意键确认提示 按Q取消提升>>>')
    if limit.capitalize() != 'Q':
    while True:
    lines = input('33[35;1m请输入提升信用额度>>>33[0m')
    if lines.isdigit():
    lines = int(lines)
    if lines <= 2000:
    limits = fd['credit'] + lines
    with open(db_path_user, 'w', encoding='utf-8') as fw:
    res = fr.replace(str(fd["credit"]), str(limits))
    fw.write(res)
    print('33[31;1m当前信用额度提升为: 【%s元】33[0m'%limits)
    break
    else:
    print('33[31;1m提升额度超出提升范围33[0m')
    else:
    print('33[31;1m请输入有效提升额度33[0m')
    复制代码

    creditcard.py

    复制代码
    #-*- Coding:utf-8 -*-
    # Author: D.Gray
    import os,sys,logging
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    db_path = BASE_DIR + r'dbuser_info'
    log_path = BASE_DIR+r'logcard_log\%s_card.log'
    from log import loggers
    def account_info(user_account):
    '''
    定义一个查看用户信息的函数
    :param user_account: user_account = user_data['account_data'] 接收用户字典信息
    :return:
    '''
    db_path_user = db_path + '\%s.json' % user_account["username"]
    with open(db_path_user, 'r',encoding='utf-8') as fh:
    fd = eval(fh.read())
    print("33[33;1m我的账户信息:
    持卡人:	【%s】
    卡号:	【%s】
    存款:	【¥%s】
    可提现额度:	【¥%s】33[0m"
    %(user_account["username"],user_account["cardid"],fd["balance"],fd["credit"]))
    inputs = input('33[33;1m按任意键返回上一级菜单>>>:33[0m')
    def repay(user_account):
    '''
    定义一个用户存款函数
    :param user_account:
    :return:
    '''
    db_path_user = db_path + '\%s.json' % user_account["username"]
    with open(db_path_user, 'r',encoding='utf-8') as fh:
    fr = fh.read()
    fd = eval(fr)
    print("33[33;1m您的当前存款为:【¥%s】"% fd["balance"])
    while True:
    repays = input('33[33;1m请输入存款金额并确认存款,按Q取消存款>>>33[0m')
    if repays.capitalize() == 'Q':
    break
    else:
    if repays.isdigit():
    repays = int(repays)
    user_balance = fd["balance"] + repays #当前存款=原存款+存款金额
    with open(db_path_user,'w',encoding='utf-8') as fh:
    res = fr.replace(str(fd["balance"]),str(user_balance)) #修改用户文件操作
     fh.write(res)
    print('33[33;1m尊敬的用户已为您成功存入 %s 元,您当前存款金额为 %s 元!33[0m'
    %(repays,user_balance))
    break
    else:
    print('33[31;1m请输入有效存款金额33[0m')
    log = ('33[31;1m尊敬的用户已为您成功存入: %s元,您当前存款金额: %s元!33[0m'
    % (repays, user_balance))
    loggers.card_log(user_account["username"], log)
    def withdraw(user_account):
    '''
    定义一个用户提现函数
    :param user_account:
    :return:
    '''
    db_path_user = db_path + '\%s.json' % user_account["username"]
    with open(db_path_user, 'r',encoding='utf-8') as fh:
    fr = fh.read()
    fd = eval(fr)
    print("33[33;1m您的当前存款为:【¥%s】" % fd["balance"])
    print("33[33;1m您可提现额度为:【¥%s】" % fd["credit"])
    while True:
    repays = input('33[33;1m请输入提现金额,按Q取消提现>>>33[0m')
    if repays.capitalize() == 'Q': #判断用户输入
    break
    else:
    if repays.isdigit():
    repays = int(repays)
    if repays > fd["credit"]: #判断用户输入的提现金额是否大于现有存款
    print('33[31;1m提现金额不得大于可提现额度33[0m')
    else:
    print('33[31;1m提现金额:【¥%s】 手续费:【¥%s】33[0m'%(repays,repays*0.05))
    user_balance = fd["balance"] - (repays + repays * 0.05) #提现后的用户余额
    inputs = input('33[33;1m请确认提现金额,按任意键提现>>>33[0m')
    if user_balance <= 0: #判断结算后存款是否为负数,如结算后存款为负给出提示不让提现
    print('33[31;1m当前存款不足以提现33[0m')
    else:
    user_credit = user_account["credit"] - repays #提现后的可提现额度
    print('33[31;1m尊敬的用户您已成功提现 %s 元!33[0m'% repays)
    print("33[33;1m您的当前存款为:【¥%s】" % user_balance)
    print("33[33;1m您可提现额度为:【¥%s】" % user_credit)
    with open(db_path_user, 'w',encoding='utf-8') as fh:
    res1 = fr.replace(str(fd["balance"]), str(user_balance)) #先扣除用户的余额
    res2 = res1.replace(str(fd["credit"]), str(user_credit)) #然后扣除用户的可提现额度
    fh.write(res2) #将变更后的余额和提现额度重新写入json文本中
    break
    else:
    print('33[31;1m请输入有效提现金额33[0m')
    log = ("33[31;1m尊敬的用户您已成功提现: %s元 所剩存款: %s元 可提现金额为: %s元!33[0m"
    % (repays, user_balance, user_credit)) #打印日志内容
    loggers.card_log(user_account["username"], log) #传递参数给card_log日志主函数
    def transfer(user_account):
    '''
    定义一个用户转账的函数
    :param user_account:
    :return:
    '''
    count = 0
    while count < 3:
    transfer = input('33[33;1m请输入需转账人用户名>>>33[0m')
    db_path_user1 = db_path + '\%s.json' % transfer #需被转账用户
    db_path_user2 = db_path + '\%s.json' % user_account["username"] #当前用户
    if transfer == user_account["username"]:
    print('33[31;1m转账人不能是自己33[0m')
    else:
    if os.path.isfile(db_path_user1): # 判断用户文件是否存在
    with open(db_path_user1, 'r',encoding='utf-8') as fh:
    frh = fh.read()
    fd = eval(frh) #需被转账用户
    with open(db_path_user2,'r',encoding='utf-8') as fw:
    frw = fw.read()
    fc = eval(frw) #当前用户
    print('33[33;1m转账用户信用卡号为:33[0m 33[32;1m %s 33[0m'%fd["cardid"])
    while True:
    money = input('33[33;1m请输入需转账金额:33[0m')
    if money.isdigit():
    money = int(money)
    if money > fc["balance"]: #判断转账金额是否大于存款
    print('33[31;1m对不起您的存款不足,无法转账33[0m')
    else:
    print('33[31;1m转账用户卡号:【%s】 转账金额:【¥%s】33[0m'
    % (fd["cardid"],money))
    inputs = input('33[33;1m请再次确认转账信息数据:按Q取消>>>33[0m')
    if inputs.capitalize() == 'Q':
    break
    else:
    user_balance1 = fc["balance"] - money #当前用户转账后余额
    with open(db_path_user2,'w',encoding='utf-8') as fw:
    res1 = frw.replace(str(fc["balance"]),str(user_balance1))
    fw.write(res1)
    print('33[33;1m您转账后存款为:【¥%s】'%user_balance1)
    user_balance2 = fd["balance"] + money #需被转账用户转账后余额
    with open(db_path_user1,'w',encoding='utf-8') as fh:
    res2 = frh.replace(str(fd["balance"]), str(user_balance2))
    fh.write(res2)
    log = ('33[31;1m您为卡号:%s 用户转账: %s元 您当前存款金额: %s元!33[0m'
    % (fd["cardid"], money, user_balance1))
    loggers.card_log(user_account["username"], log)
    break
    else:
    print('33[31;1m请输入有效转账金额33[0m')
    else:
    count += 1
    print('33[31;1m该用户不存在,请重新输入还剩 %s 次机会33[0m' % (3 - count))
    break
    def paycheck(user_account):
    if not os.path.isfile(log_path % user_account["username"]):
    print('33[31;1m当前用户无流水记录33[0m')
    else:
    with open(log_path % user_account["username"], 'r', encoding='utf-8') as fh:
    for line in fh:
    print(line)
    复制代码

    shopping.py

    复制代码
    #-*- Coding:utf-8 -*-
    # Author: D.Gray
    import os,sys,logging
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    shop_path = BASE_DIR+r'dbproduct_list'
    shop_car_path = BASE_DIR+r'dbshop_car'
    db_path = BASE_DIR + r'dbuser_info'
    log_path = BASE_DIR+r'logshop_log\%s_shop.log'
    from core import main
    from log import loggers
    def shopping(user_account):
    '''
    定义一个购物商城函数
    :param user_account:
    :return:
    '''
    shopcar_list,pro_list = [],[] #shopcar_list:购物车列表 pro_list:商品清单列表
    with open(shop_path,'r',encoding='utf-8') as fh:
    for item in fh:
    pro_list.append(item.strip('
    ').split())
    def shop_info():
    print("	编号			商品			价格")
    for index,item in enumerate(pro_list):
    print('	 %s			%s		%s'%(index,item[0],item[1]))
    while True:
    print(("33[32;0m目前商城在售的商品信息33[0m").center(40, "-"))
    shop_info()
    choice_id = input("
    33[34;0m选择要购买的商品编号 【购买 ID】/【返回 b】33[0m:")
    if choice_id.isdigit():
    choice_id = int(choice_id)
    if choice_id < len(pro_list) and choice_id >= 0: #判断用户选择商品编号是否大于商品清单列表最大值
    pro_item = pro_list[choice_id] #定义一个 pro_item 变量存储 用户选择的商品 信息和价格
    num = input('33[34;1m选择商品数量>>>33[0m')
    if num.isdigit():
    num = int(num)
    if num > 0:
    print("33[31;0m商品 %s 加入购物车 价格%s 数量%s33[0m" % (pro_item[0], pro_item[1],num))
    shopcar_list.append(pro_item)
    shop_car_paths = shop_car_path+'\%s_shopcar.txt'%user_account['username']
    with open(shop_car_paths,'a',encoding='utf-8') as fc:
    fc.write(str('%s	%s	%s')%(pro_item[0],pro_item[1],num) +'
    ')
    else:
    print('33[31;1m购买数量不得为033[0m')
    else:
    print('33[31;1m请输入有效购买数量33[0m')
    else:
    print("33[31;0m错误:没有相应的编号 请重新输入:33[0m
    ")
    elif choice_id == "b":
    main.shop_info()
    else:
    print("33[31;0m错误:没有相应的编号 请重新输入:33[0m
    ")
    #shopping()
    def shop_car(user_account):
    '''
    定义一个购物车函数
    :param user_account:
    :return:
    '''
    money_list,product_list= [],[]
    product_info = ''
    shop_car_paths = shop_car_path + '\%s_shopcar.txt' % user_account['username']
    if not os.path.isfile(shop_car_paths):
    print('33[31;1m您还未有购物记录,请先进入商城购物33[0m')
    shopping(user_account)
    else:
    with open(shop_car_paths,'r',encoding='utf-8')as fc:
    print(('33[32;1m购物车清单33[0m').center(32, '-'))
    print("编号		商品		价格		数量")
    lock_list = fc.readlines()
    for index ,lock_info in enumerate(lock_list):
    lock = lock_info.split()
    product_name = lock[0]
    money = lock[1]
    num = lock[2]
    print('%s		%s	%s		%s'%(index,product_name,money,num))
    moneys = int(money)*int(num) #定义moneys变量来计算 单个商品总金额 = 商品金额*数量
    product_info = '%s商品%s件'%(product_name,num) #定义打印商品名称及数量 字符串
    money_list.append(moneys) #将单个商品总金额 添加至 金额列表中
    product_list.append(product_info) #将product_info添加至 购物信息列表中
    if sum(money_list) == 0 : # sum(money_list) = 购物车所有商品总金额
    print('33[31;1m购物车空空如也33[0m')
    else:
    db_path_user = db_path + '\%s.json' % user_account["username"]
    with open(db_path_user, 'r',encoding='utf-8') as fh:
    fr = fh.read()
    fd = eval(fr)
    print('
    33[33;0m您当前余额为 %s 元 当前商品金额为 %s 元'%(fd['balance'],sum(money_list)))
    go_shop = input("
    33[34;0m是否选择购买 "
    "【任意键:购买】/【返回 b】33[0m:") #使用sum方法求出购物车商品总支付金额
    if go_shop == 'b':
    main.shop_info()
    else:
    if sum(money_list) < fd["balance"]: #判断用户余额买得起购物商品
    balance = fd["balance"] - sum(money_list) # 当前余额 = 原余额-商品总额
    log = ('33[31;1m尊敬的用户您已成功购物 %s ,购物总额为 %s 元,您购物后余额: %s元!33[0m'
    %(str(product_list),sum(money_list),balance))
    loggers.shop_log(user_account['username'],log) # 调用购物日志打印函数
    print("33[33;1m购物成功!!!您购物后余额为:【¥%s】33[0m" % balance)
    with open(db_path_user,'w',encoding='utf-8') as fh:
    res = fr.replace(str(fd["balance"]), str(balance)) # 修改用户文件操作
     fh.write(res)
    with open(shop_car_paths,'w',encoding='utf-8') as fc:
    fc.truncate() #购物支付完成后 购物车文件清空
    else:
    print("33[31;0m对不起您的余额不足无法购买:33[0m
    ")
    main.shop_info()
    def center(user_account):
    '''
    定义一个查看购物记录的函数
    :param user_account:
    :return:
    '''
    if not os.path.isfile(log_path % user_account["username"]):
    print('33[31;1m当前用户无流水记录33[0m')
    else:
    with open(log_path % user_account["username"], 'r', encoding='utf-8') as fh:
    for line in fh:
    print(line)
    main.shop_info()
    复制代码

    Github

    https://github.com/KongChan1988/51CTO-Treasure/tree/master/Python_Study/%E7%AC%AC%E4%BA%8C%E6%A8%A1%E5%9D%97%E5%AD%A6%E4%B9%A0/Day02/HomeWork/%E4%BF%A1%E7%94%A8%E5%8D%A1%E5%95%86%E5%9F%8E

     
     
     
  • 相关阅读:
    跟面试官聊.NET垃圾收集,直刺面试官G点
    基于.net开发chrome核心浏览器【五】
    HTTP和HTTPS的区别(转)
    Java多线程
    Java常用设计模式
    MVC详解(转)
    java的反射机制浅谈(转)
    进程、线程与处理器的调度(转)
    请简单介绍一下什么是Spring?
    面向对象三大特性概述[封装、继承、多态](转)
  • 原文地址:https://www.cnblogs.com/gaodi2345/p/11412798.html
Copyright © 2020-2023  润新知