zoukankan      html  css  js  c++  java
  • 模拟实现一个ATM + 购物商城程序

    要求:

    1、额度 15000或自定义
    2、实现购物商城,买东西加入 购物车,调用信用卡接口结账
    3、可以提现,手续费5%
    4、支持多账户登录
    5、支持账户间转账
    6、记录每月日常消费流水
    7、提供还款接口
    8、ATM记录操作日志
    9、提供管理接口,包括添加账户、用户额度,冻结账户等。。。
    10、用户认证用装饰器

    流程图

    代码:

    优化代码,模块化

        leco@leco:~/PycharmProjects/luxffy/homework/atm$ tree .
        .
        ├── ATM+购物车.bmp                  # 流程图
        ├── bin                  
        │   ├── __init__.py          
        │   └── start.py                   # 启动文件
        ├── conf
        │   ├── __init__.py
        │   └── settings.py                # 全局配置文件
        ├── core
        │   ├── atm.py                     # 主文件
        │   ├── common.py                  # 公共文件
        │   ├── __init__.py 
        │   ├── slog.py                    # 日志文件
        │   └── sys_bill.py                # 流水账文件
        ├── log                            # 购物车,系统,atm,用户信息文件夹(默认不存在,运行时候初始化,相关文件)
        │   ├── atm.log                    # 根据时间记录atm操作
        │   ├── shopping_car.log           # 根据时间记录购物车操作
        │   ├── system.log                 # 根据时间记录系统运行状态
        │   └── user_info                  # 记录用户信息(账号,密码,额度,余额,锁定状态)
        └── readme                         # 程序说明文件
    文件代码目录结构
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import os
    import sys
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    # print(BASE_DIR)
    sys.path.append(BASE_DIR)  #/home/leco/PycharmProjects/luxffy/homework/atm
    
    from core import atm
    
    if __name__ == "__main__":
        atm.main()
    bin/start.py
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import os
    root_info = {
            "username": "root",
            "password": "root",
            "quota": 15000,
            "balance": 15000,
            "lock": False
        }
    
    # 商品清单列表
    product_list = [
        {"name": "电脑", "price": 5000},
        {"name": "鼠标", "price": 300},
        {"name": "电视", "price": 2000},
        {"name": "水果", "price": 800},
    ]
    log_type = {
        "atm": "atm.log",
        "shopping_car": "shopping_car.log",
        "system": "system.log"
    }
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # data_name = "data"
    data_name = "log"
    data_path = os.path.join(BASE_DIR,data_name)
    # data_path = BASE_DIR + "/data"
    # 数据文件夹
    # data_path = "data"
    account_file = "user_info"
    # 用户账户,密码,余额,额度,锁定状态文件
    # account = data_path + "/" + account_file
    account = os.path.join(data_path, account_file)
    
    # 收费手续费 5%
    ratio = 0.05
    conf/settings.py
    #!/usr/bin/env python
    
    import os
    import shelve
    import sys
    
    from conf import settings
    from core import shel_file
    from core import slog
    from core import common
    from core import sys_bill
    
    
    account = settings.account
    data_path = settings.data_path
    ratio = settings.ratio
    sys_login_status = False       # 用户登录了就把这个改成True
    sys_login_username = None      # 全部变量记录谁登陆系统
    shopping_car = {}
    
    
    def sys_login(func):
        """
        :param func: 系统三次登录装饰器
        :return:
        """
        def inner(*args, **kwargs):
            all_username_passwd = shel_file.get_all_username_passwd_info(account)
            global sys_login_status, sys_login_username  # 记录系统全局登陆状态和登陆用户
    
            for count in range(3):
                if not sys_login_status:
                    sys_login_username, input_password = common.login_input()
                    if not sys_login_username: continue
    
                    if sys_login_username in all_username_passwd:
                        lock_statu = shel_file.get_user_info(account, sys_login_username)["lock"]
                        if lock_statu:
                            print("抱歉该账户 %s 被锁定,请联系管理员" % sys_login_username)
                            sys_logger.error("抱歉该账户 %s 被锁定,请联系管理员" % sys_login_username)
                            break
                        if input_password == all_username_passwd[sys_login_username]:
                            sys_login_status = True
                        else:
                            print("抱歉,密码错误")
                            sys_logger.error("抱歉 %s,你输入的密码错误" % sys_login_username)
                    else:
                        print("抱歉,账号不存在")
                        sys_logger.warning("抱歉 %s,账号不存在" % sys_login_username)
            if sys_login_status:
                func(*args, **kwargs)
        return inner
    
    
    
    def add_user():
        """
        :return:  创建用户信息
        """
        common.screen_clear()
        username, password = common.login_input()
        all_users_dic = shel_file.get_all_username_passwd_info(account)
        if username in all_users_dic:
            print("抱歉,该用户已经存在")
            sys_logger.warning("抱歉,该用户已经存在")
        else:
            new_user_info = {
                "username": username,
                "password": password,
                "quota": 15000,
                "balance": 15000,
                "lock": False
            }
            shel_file.save_user_info(account, username, new_user_info)
            print("新增用户 %s 创建成功" % username)
            sys_logger.info("新增用户 %s 创建成功" % username)
            common.show_person_data(username)
    
    
    def del_user():
        count = 0
        all_username_passwd = shel_file.get_all_username_passwd_info(account)
        while True:
            common.screen_clear()
            print("------------------------- 删除用户操作  -------------------------")
            print("当前系统登录用户是: ", sys_login_username)
            count += 1
            username = input("请输入将要被删除的用户名: ").strip()
            if username == "root":
                print("抱歉,你不能删除自己,你是超级管理员啊")
                shopping_car_logger.warning("抱歉,你不能删除自己,你是超级管理员啊")
                break
            elif username in all_username_passwd:
                with shelve.open(account) as fd:
                    del fd[username]
                    print("用户 %s 已经被删除" % username)
                    shopping_car_logger.info("用户 %s 已经被删除" % username)
                break
            elif count == 3:
                print("抱歉,输入次数过多,请稍后再试")
                shopping_car_logger.warning("抱歉,输入次数过多,请稍后再试")
                break
            elif username.lower() == "b":
                break
            else:
                print("抱歉,用户 %s 不存在" % username)
                shopping_car_logger.error("抱歉,用户 %s 不存在" % username)
    
    
    def show_users():
        for username in shel_file.get_all_username_passwd_info(account):
            common.show_person_data(username)
    
    
    def modify_user_quota():
        while True:
            common.screen_clear()
            print("------------------------- 用户额度被修改  -------------------------")
            print("当前系统登录用户是:", sys_login_username)
            if sys_login_username == "root":
                name = input("请输入要修改的用户: ")
                if name not in shel_file.get_all_username_passwd_info(account):
                    print("抱歉,你输入的用户不存在")
                    shopping_car_logger.warning("抱歉,你输入的用户不存在")
                    break
            quota = input("请输入额度金额: ")
            if quota.isdigit():
                tmp_user_info = shel_file.get_user_info(account, name)
                tmp_user_info["quota"] = quota
                shel_file.save_user_info(account, name, tmp_user_info)
                break
            else:
                print("抱歉,额度必须是数字")
                shopping_car_logger.warning("抱歉,额度必须是数字")
    
    
    
    def add_lock(lock_name, lock=True):
        """
        :param lock_name:  锁定的账号名
        :param lock:      默认锁定账户
        :return:
        """
        user_info = shel_file.get_user_info(account, lock_name)
        user_info["lock"] = True if lock else False
        shel_file.save_user_info(account, lock_name, user_info)
    
    
    def lock_user():
        """
        通过当前系统账户
        :return:
        """
        all_users_dic = {}
        common.screen_clear()
        all_users_dic = shel_file.get_all_username_passwd_info(account)
        print("------------------------- 冻结账户 -------------------------")
        if sys_login_username != "root":
            user_info = shel_file.get_user_info(account, sys_login_username)
            user_info["lock"] = True
            shel_file.save_user_info(account, sys_login_username, user_info)
            print("用户 %s 已经被锁定,请联系管理员解冻账号" % sys_login_username)
            shopping_car_logger.info("用户 %s 已经被锁定,请联系管理员解冻账号" % sys_login_username)
        else:
            while True:
                lock_user = input("请输入需要被冻结的账号名<b|B 返回上一层>: ").strip()
                if lock_user == "root":
                    print("抱歉,你不能冻结你自己,你是超级管理员啊")
                    shopping_car_logger.warning("抱歉,你不能冻结你自己,你是超级管理员啊")
                    break
                if lock_user in all_users_dic:
                    add_lock(lock_user)
                    print("用户 %s 已经被锁定" % lock_user)
                    shopping_car_logger.info("用户 %s 已经被锁定" % lock_user)
                    break
                elif lock_user.lower() == "b":
                    break
                else:
                    print("抱歉,你要冻结的账号 %s 不存在" % lock_user)
                    shopping_car_logger.warning("抱歉,你要冻结的账号 %s 不存在" % lock_user)
    
    
    def unlock_user():
        while True:
            common.screen_clear()
            all_users_dic = shel_file.get_all_username_passwd_info(account)
            print("------------------------- 解冻账户 -------------------------")
            lock_user = input("请输入需要被解冻的账号名<b|B 返回上一层>: ").strip()
            if lock_user in all_users_dic:
                add_lock(lock_user, lock=False)
                print("亲爱的用户 %s 你的账号已经被解冻" % lock_user)
                shopping_car_logger.info("亲爱的用户 %s 你的账号已经被解冻" % lock_user)
                break
            elif lock_user.lower() == "b":
                break
            else:
                print("抱歉,你要冻结的账号 %s 不存在" % lock_user)
                shopping_car_logger.warning("抱歉,你要冻结的账号 %s 不存在" % lock_user)
    
    def account_balance():
        """
        通过用户名,打印其详细列表,包括余额
        :return: None
        """
        print("------------------------- 账户余额 -------------------------")
        user_info = shel_file.get_user_info(account, sys_login_username)
        msg = """
        ------------ %s 用户信息 ------------ 
            用户  名:   %s                             
            余    额:   %s
            """ % (user_info["username"], user_info["username"], user_info["balance"])
        print(msg)
    
    
    @sys_login
    def shopping():
        common.screen_clear()
        while True:
            product_list = settings.product_list
            user_info = shel_file.get_user_info(account, sys_login_username)
            balance, quota = user_info["balance"], user_info["quota"]  # 当前用户余额,和信用卡剩余额度
            print("
    ------------------------- 购物 -------------------------")
            print("亲爱的用户 %s你好,你当前的余额 = %s   信用卡额度 = %s" % (sys_login_username, balance, quota))
            for item, p in enumerate(product_list, 1):
                print("%s. %s    价格:  %s" % (item, p['name'], p['price']))
            select = input("请输入商品ID<b|B 返回>: ")
            if select.isdigit():
                if 0 < int(select) < len(product_list) + 1:
                    if int(balance) - product_list[int(select) - 1]["price"] > 0:  # 剩余钱充足,不调用信用卡付款
                        print("--> 商品 <%s> 已经被添加到购物车" % product_list[int(select) - 1]["name"])
                        remain_money = int(balance) - product_list[int(select) - 1]["price"]
                        print("亲爱的用户 %s你好,你当前的余额 = %s   信用卡额度 = %s" % (sys_login_username, remain_money, quota))
                        shopping_car_logger.info("--> 商品 <%s> 已经被添加到购物车" % product_list[int(select) - 1]["name"])
                        atm_logger.info("亲爱的用户 %s你好,你当前的余额 = %s   信用卡额度 = %s" % (sys_login_username, remain_money, quota))
                        user_info["balance"] = remain_money
                        shel_file.save_user_info(account, sys_login_username, user_info)
                        if product_list[int(select) - 1]["name"] in shopping_car:
                            number = shopping_car[product_list[int(select) - 1]["name"]]
                            shopping_car[product_list[int(select) - 1]["name"]] = (number + 1)
                        else:
                            shopping_car[product_list[int(select) - 1]["name"]] = 1
                    else:  # 余额不足
                        print("你的额度不足,请充值")
                        shopping_car_logger.warning("你的额度不足,请充值")
                else:
                    print("抱歉,你输入的商品ID不存在")
                    shopping_car_logger.warning("抱歉,你输入的商品ID不存在")
            elif select.lower() == "b":
                break
            else:
                print("抱歉,你输入的商品ID必须为整数")
                shopping_car_logger.warning("抱歉,你输入的商品ID必须为整数")
    
    @sys_login
    def recharge():
        """
         为账户充值
        :return: None
        """
        while True:
            common.screen_clear()
            print("------------------------- 充值 -------------------------")
            tmp_user_info = shel_file.get_user_info(account, sys_login_username)
            print("亲爱的用户 %s你好,充值前余额 = %s " % (sys_login_username, tmp_user_info["balance"]))
            recharge_money = input("请输入充值金额: ")
            if recharge_money.isdigit():
                tmp_user_info["balance"] += int(recharge_money)
                shel_file.save_user_info(account, sys_login_username, tmp_user_info)
                print("恭喜,%s 你账户已经成功充值 %s " % (sys_login_username, recharge_money))
                print("亲爱的用户 %s 你好,充值后余额 = %s " % (sys_login_username, tmp_user_info["balance"]))
                atm_logger.info("恭喜,用户 %s你好,你的账户已经成功充值 %s " % (sys_login_username, recharge_money))
                atm_logger.info("亲爱的用户 %s你好,充值后余额 = %s " % (sys_login_username, tmp_user_info["balance"]))
                break
            else:
                print("抱歉,充值金额必须是数字")
                atm_logger.warning("抱歉,充值金额必须是数字")
    
    
    @sys_login
    def shopping_car_manager():
        common.screen_clear()
        if len(shopping_car):
            print(" 购物车清单 ".center(60, "-"))
            for k, v in shopping_car.items():
                print("购买的商品: %s     购买数量: %s" % (k, v))
        else:
            print("购物车空空如也,抓紧去购物吧")
            shopping_car_logger.info("购物车空空如也,抓紧去购物吧")
    
    
    @sys_login
    def settlement():
    
        print("------------------------- 结算 -------------------------")
        print("功能暂时没开放")
        common.screen_clear()
    
    
    @sys_login
    def transfer_money():
        all_users_dic = shel_file.get_all_username_passwd_info(account)
        tmp_user_info = shel_file.get_user_info(account, sys_login_username)
        current_money = tmp_user_info["balance"]
        common.screen_clear()
        while True:
            print("------------------------- 转账 -------------------------")
            print("当前系统登录用户是: ", sys_login_username)
            print("亲爱的用户 %s你好,汇款前您的余额 = %s" % (sys_login_username, current_money))
            username = input("请输入收款人用户名<b|B 返回上一级>: ")
            if username in all_users_dic:
                if username == sys_login_username:
                    print("抱歉亲爱的用户%s 你不能转账给自己" % sys_login_username)
                    break
                money = input("请输入汇款金额<b|B 返回上一级>: ").strip()
                if money.isdigit():
                    if int(money) > current_money:
                        print("抱歉,你的余额不足")
                        atm_logger.warning("抱歉,你的余额不足")
                    else:  # 保存当前汇款方用户余额
                        tmp_user_info = shel_file.get_user_info(account, sys_login_username)
                        tmp_user_info["balance"] = int(current_money) - int(money)
                        shel_file.save_user_info(account, sys_login_username, tmp_user_info)
                        # 保存接受方余额
                        tmp_user_info = shel_file.get_user_info(account, username)
                        tmp_user_info["balance"] = int(money) + tmp_user_info["balance"]
                        shel_file.save_user_info(account, username, tmp_user_info)
                        print("亲爱的用户 %s你好,汇款后您的余额 = %s" % (sys_login_username, int(current_money) - int(money)))
                        atm_logger.info("汇款方 %s,收款方 %s,汇款金额 %s" % (sys_login_username,username,money))
                        break
                elif money.lower() == "b":
                    break
                else:
                    print("抱歉,输入汇款金额必须是整数")
                    atm_logger.warning("抱歉,输入汇款金额必须是整数")
            elif username.lower() == "b":
                break
            else:
                print("抱歉,收款人 %s 不存在" % username)
                atm_logger.warning("抱歉,收款人 %s 不存在" % username)
    
    
    @sys_login
    def cash_withdrawal():
        balance = shel_file.get_user_info(account, sys_login_username)["balance"]
        while True:
            common.screen_clear()
            print("------------------------- 取现 -------------------------")
            print("亲爱的用户 %s你好,你当前的余额 = %s ,取现的手续费比例 = %s" % (sys_login_username, balance, ratio))
            money = input("请输入取款金额<b|B 返回>: ").strip()
            if money.isdigit():
                remain_money = balance - (1 + ratio) * int(money)
                if remain_money > 0:
                    print("本次手续费是: %s ,取现后余额是: %s" % (int(money) * ratio, remain_money))
                    tmp_user_info = shel_file.get_user_info(account, sys_login_username)
                    tmp_user_info["balance"] = remain_money
                    shel_file.save_user_info(account, sys_login_username, tmp_user_info)
                    break
                else:
                    print("抱歉,你的余额不足,无法取现")
                    atm_logger.warning("抱歉,你的余额不足,无法取现")
                    break
    
            if money.lower() == "b":
                break
            else:
                print("抱歉,输入取款金额必须是整数")
                atm_logger.warning("抱歉,输入取款金额必须是整数")
    
    
    @sys_login
    def manage_user():
        msg_root_user = """------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        """
        msg_no_root_user = """------------------------- 管理用户操作说明 -------------------------
        5.  冻结账户
        6.  账户余额
        """
        while True:
            print(msg_root_user) if sys_login_username == "root" else print(msg_no_root_user)
            select = input("请选择模式<q|Q 退出> <b|B 返回上一层>: ").strip().lower()
            if select.isdigit():
                if sys_login_username == "root":
                    root_account_manage_select.get(select)() if select in root_account_manage_select else print("输入的序号不存在")
                else:
                    no_root_account_manage_select.get(select)() if select in no_root_account_manage_select else print("输入的序号不存在")
            elif select == "q":
                sys.exit()
            elif select == "b":
                break
            else:
                print("抱歉输入错误")
    
    
    @sys_login
    def user_bill():
        while True:
            msg_bill = """------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            """
            print(msg_bill)
            if sys_login_username != "root":
                print("抱歉,亲爱的用户 %s,你不是系统管理员你没有此权限,请使用管理员root用户登录查看"  % sys_login_username)
                break
            select = input("请选择模式<q|Q 退出> <b|B 返回上一层>: ").strip().lower()
            if select.isdigit():
                sys_bill.bill_select.get(select)() if select in sys_bill.bill_select else print("输入的序号不存在")
            elif select == "q":
                sys.exit()
            elif select == "b":
                break
            else:
                print("抱歉输入错误")
        common.screen_clear()
    
    
    user_select = {
        "1": shopping,              # 购物环节
        "2": recharge,              # 充值环节
        "3": shopping_car_manager,  # 购物车管理环节
        "4": settlement,            # 结算环节
        "5": transfer_money,        # 转账环节
        "6": cash_withdrawal,       # 取现环节
        "7": manage_user,           # 管理用户环节
        "8": user_bill,             # 账单环节
    }
    
    root_account_manage_select = {
        "1": add_user,              # 新增用户
        "2": del_user,              # 删除用户
        "3": show_users,            # 查看所有用户
        "4": modify_user_quota,     # 修改用户额度
        "5": lock_user,             # 冻结用户
        "6": account_balance,       # 账户余额
        "7": unlock_user,           # 解锁结用户
    }
    
    no_root_account_manage_select = {
        "4": modify_user_quota,     # 修改用户额度
        "5": lock_user,             # 冻结用户
        "6": account_balance,       # 账户余额
    }
    if not os.path.exists(settings.data_path):
        os.mkdir(settings.data_path)
    
    shopping_car_logger = slog.logger('shopping_car.log', "shopping_car")
    sys_logger = slog.logger('system.log', "system")
    atm_logger = slog.logger('atm.log', "atm")
    
    
    def main():                            # 主函数
        common.sys_login_info()            # 系统登录提示信息
        common.init_data()                 # 初始化超级管理员数据,并打印相关数据
    
        sys_logger.info("系统重新启动")
        while True:
            common.sys_operation_info()    # 操作提示
            select = input('请选择模式<q|Q 退出>: ').strip().lower()
            if select.isdigit():
                user_select.get(select)() if select in user_select else print("输入的序号不存在")
            elif select == "q":
                exit()
            else:
                print("请输入正确的序号")
                shopping_car_logger.warning("请输入正确的序号")
    
    
    if __name__ == "__main__":
    
        main()
    core/atm.py
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import os
    import sys
    from core import  shel_file
    from conf import settings
    
    def init_data():
        """
        初始化 超级管理员数据
        :return: None
        """
        msg = """--------------- 系统超级管理员账户初始化成功 ---------------
    1. 账户: root
    2. 密码: root
    3. 余额: 15000
    4. 额度: 15000
    请妥善保管好信息"""
        if not os.path.exists(settings.data_path):
            os.mkdir(settings.data_path)
        if not os.path.exists(settings.account):
            shel_file.save_user_info(settings.account, "root", settings.root_info)
            print(msg)
    
    
    # 登录系统显示样式
    def sys_login_info():
        print(''.center(60, '-'))
        print('|', ''.center(56, ' '), '|')
        print('|', '欢迎来到购物广场'.center(48, ' '), '|')
        print('|', ''.center(56, ' '), '|')
    
    
    def sys_operation_info():
        msg = """------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        """
        print(msg)
    
    def show_person_data(username):
        """
        格式化输出用户信息
        :param username: 用户名
        :return: None
        """
        user_info = shel_file.get_user_info(settings.account, username)
        msg = """
        ------------ %s 用户信息 ------------ 
        用户  名:   %s                             
        密    码:   %s
        余    额:   %s
        额    度:   %s
        锁定状态:  %s 
        """ % (user_info["username"], user_info["username"], user_info["password"],
               user_info["balance"], user_info["quota"], user_info["lock"])
        print(msg)
    
    def login_input():
        """
        获取用户输入的账号和密码
        :return:  None
        """
        user = input("请输入用户名: ").strip()
        passwd = input("请输入密码: ").strip()
        return user,  passwd
    
    
    def screen_clear():
        """
        清屏
        :return: None
        """
        os.system("clear") if sys.platform == "linux" else os.system("cls")
    core/common.py
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import shelve
    
    def get_user_info(account, username):
        """
        :param account:  存储用户账号,密码,额度,余额,锁定状态的文件
        :param username: 用户名
        :return: 返回字典内容为用户账号,密码,额度,余额,锁定状态
        """
        with shelve.open(account) as fd:
            ret = fd.get(username)
        return ret
    
    
    def get_all_username_passwd_info(account):
        """
        从存储用户账号,密码,额度,余额,锁定状态文件切出所有用户名和密码组成的键值对的字典
        :param account:
        :return: 字典(用户名和对应的密码组成的键值对)
        """
        all_users_dic = {}
        with shelve.open(account) as fd:
            all_users_list = list(fd.keys())
            for username in all_users_list:
                all_users_dic[username] = fd[username]["password"]
        return all_users_dic
    
    
    def save_user_info(account, username, user_info):
        """
        :param account: 存储用户账号文件
        :param username: 用户账号
        :param user_info: 账号相关(用户名,密码,余额,信用度,锁定状态)
        :return:
        """
        with shelve.open(account) as fd:
            fd[username] = user_info
    core/shel_file.py
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import logging
    
    from conf import settings
    
    # # 日志记录
    # def logger(logfilename, logfile):
    #     logger_fh = logging.FileHandler(settings.data_path + "/" + logfilename)
    #     logger_fh.setLevel(logging.INFO)
    #     # formatter
    #     formatter = logging.Formatter('%(asctime)s - %(name)s - %(filename)s - %(message)s')
    #     # bind formatter to ch
    #     logger_fh.setFormatter(formatter)
    #     logger = logging.getLogger(logfile)
    #     logger.setLevel(logging.DEBUG)
    #     logger.addHandler(logger_fh)
    #     return logger
    
    # 日志记录
    def logger(logfilename, logfile):
        logger_fh = logging.FileHandler(settings.data_path + "/" + logfilename)
        logger_fh.setLevel(logging.INFO)
        logger_ch = logging.StreamHandler()
        logger_ch.setLevel(logging.INFO)
        # formatter
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(filename)s - %(message)s')
        ch_formatter = logging.Formatter('%(message)s')
        # bind formatter to ch
        logger_fh.setFormatter(formatter)
        logger_ch.setFormatter(ch_formatter)
    
        logger = logging.getLogger(logfile)
        logger.setLevel(logging.DEBUG)
        logger.addHandler(logger_fh)
        # logger.addHandler(logger_ch)
        return logger
    core/slog.py
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import os
    import sys
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)  #/home/leco/PycharmProjects/luxffy/homework/atm
    
    from conf import settings
    
    def display_file(file):
        if not os.path.exists(file):
            print("%s log is not exist" % file)
        else:
            if os.path.getsize(file) > 0:  # 判断流水账单文件大小,若是0 就表示暂时还么有产生
                with open(file,"r") as fd:
                    for line in fd:
                        print(line,end="")
            else:
                print("抱歉,此账单还没有流水")
    
    def shopping_car_bill():
        display_file(os.path.join(settings.data_path, settings.log_type["shopping_car"]))
    
    
    def atm_bill():
        display_file(os.path.join(settings.data_path, settings.log_type["atm"]))
    
    
    def system_bill():
        display_file(os.path.join(settings.data_path,settings.log_type["system"]))
    
    
    bill_select = {
        "1": shopping_car_bill,     # 购物流水清单
        "2": atm_bill,              # atm流水清单
        "3": system_bill,           # 系统流水清单
    }
    
    
    if __name__ == "__main__":
        shopping_car_bill()
        atm_bill()
        system_bill()
    core/sys_bill.py

    终端测试

    [BEGIN] 2018/1/31 14:12:13
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ tree .
    .
    ├── ATM+购物车.bmp
    ├── bin
    │?? ├── __init__.py
    │?? └── start.py
    ├── conf
    │?? ├── __init__.py
    │?? ├── __pycache__
    │?? │?? ├── __init__.cpython-35.pyc
    │?? │?? └── settings.cpython-35.pyc
    │?? └── settings.py
    ├── core
    │?? ├── atm.py
    │?? ├── common.py
    │?? ├── __init__.py
    │?? ├── __pycache__
    │?? │?? ├── atm.cpython-35.pyc
    │?? │?? ├── common.cpython-35.pyc
    │?? │?? ├── __init__.cpython-35.pyc
    │?? │?? ├── shel_file.cpython-35.pyc
    │?? │?? ├── slog.cpython-35.pyc
    │?? │?? └── sys_bill.cpython-35.pyc
    │?? ├── shel_file.py
    │?? ├── slog.py
    │?? └── sys_bill.py
    └── readme.md
    
    5 directories, 20 files
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    --------------- 系统超级管理员账户初始化成功 ---------------
    1. 账户: root
    2. 密码: root
    3. 余额: 15000
    4. 额度: 15000
    请妥善保管好信息
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 1
    请输入用户名: root
    请输入密码: root
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 15000   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: 1
    --> 商品 <电脑> 已经被添加到购物车
    亲爱的用户 root你好,你当前的余额 = 10000   信用卡额度 = 15000
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 10000   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: 2
    --> 商品 <鼠标> 已经被添加到购物车
    亲爱的用户 root你好,你当前的余额 = 9700   信用卡额度 = 15000
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 9700   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: 3
    --> 商品 <电视> 已经被添加到购物车
    亲爱的用户 root你好,你当前的余额 = 7700   信用卡额度 = 15000
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 7700   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: 4
    --> 商品 <水果> 已经被添加到购物车
    亲爱的用户 root你好,你当前的余额 = 6900   信用卡额度 = 15000
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 6900   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: 5
    抱歉,你输入的商品ID不存在
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 6900   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: as
    抱歉,你输入的商品ID必须为整数
    
    ------------------------- 购物 -------------------------
    亲爱的用户 root你好,你当前的余额 = 6900   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 3
    -------------------------- 购物车清单 ---------------------------
    购买的商品: 电脑     购买数量: 1
    购买的商品: 电视     购买数量: 1
    购买的商品: 水果     购买数量: 1
    购买的商品: 鼠标     购买数量: 1
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 2
    ------------------------- 充值 -------------------------
    亲爱的用户 root你好,充值前余额 = 6900 
    请输入充值金额: 3100
    恭喜,root 你账户已经成功充值 3100 
    亲爱的用户 root 你好,充值后余额 = 10000 
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7    
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 1
    请输入用户名: cc
    请输入密码: cc
    新增用户 cc 创建成功
    
        ------------ cc 用户信息 ------------ 
        用户  名:   cc                             
        密    码:   cc
        余    额:   15000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 1  
    请输入用户名: cc
    请输入密码: cc
    抱歉,该用户已经存在
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 1
    请输入用户名: cmz
    请输入密码: cmz
    新增用户 cmz 创建成功
    
        ------------ cmz 用户信息 ------------ 
        用户  名:   cmz                             
        密    码:   cmz
        余    额:   15000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 2
    ------------------------- 删除用户操作  -------------------------
    当前系统登录用户是:  root
    请输入将要被删除的用户名: root
    抱歉,你不能删除自己,你是超级管理员啊
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 2
    ------------------------- 删除用户操作  -------------------------
    当前系统登录用户是:  root
    请输入将要被删除的用户名: cc
    用户 cc 已经被删除
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 3
    
        ------------ root 用户信息 ------------ 
        用户  名:   root                             
        密    码:   root
        余    额:   10000
        额    度:   15000
        锁定状态:  False 
        
    
        ------------ cmz 用户信息 ------------ 
        用户  名:   cmz                             
        密    码:   cmz
        余    额:   15000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 4
    ------------------------- 用户额度被修改  -------------------------
    当前系统登录用户是: root
    请输入要修改的用户: root
    请输入额度金额: 20000
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 3
    
        ------------ root 用户信息 ------------ 
        用户  名:   root                             
        密    码:   root
        余    额:   10000
        额    度:   20000
        锁定状态:  False 
        
    
        ------------ cmz 用户信息 ------------ 
        用户  名:   cmz                             
        密    码:   cmz
        余    额:   15000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 5
    ------------------------- 冻结账户 -------------------------
    请输入需要被冻结的账号名<b|B 返回上一层>: leco
    抱歉,你要冻结的账号 leco 不存在
    请输入需要被冻结的账号名<b|B 返回上一层>: cmz
    用户 cmz 已经被锁定
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 7
    ------------------------- 解冻账户 -------------------------
    请输入需要被解冻的账号名<b|B 返回上一层>: leco
    抱歉,你要冻结的账号 leco 不存在
    ------------------------- 解冻账户 -------------------------
    请输入需要被解冻的账号名<b|B 返回上一层>: cmz
    亲爱的用户 cmz 你的账号已经被解冻
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 6
    ------------------------- 账户余额 -------------------------
    
        ------------ root 用户信息 ------------ 
            用户  名:   root                             
            余    额:   10000
            
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 5
    ------------------------- 转账 -------------------------
    当前系统登录用户是:  root
    亲爱的用户 root你好,汇款前您的余额 = 10000
    请输入收款人用户名<b|B 返回上一级>: cc
    抱歉,收款人 cc 不存在
    ------------------------- 转账 -------------------------
    当前系统登录用户是:  root
    亲爱的用户 root你好,汇款前您的余额 = 10000
    请输入收款人用户名<b|B 返回上一级>: leco
    抱歉,收款人 leco 不存在
    ------------------------- 转账 -------------------------
    当前系统登录用户是:  root
    亲爱的用户 root你好,汇款前您的余额 = 10000
    请输入收款人用户名<b|B 返回上一级>: cmz
    请输入汇款金额<b|B 返回上一级>: 5000
    亲爱的用户 root你好,汇款后您的余额 = 5000
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 3
    
        ------------ root 用户信息 ------------ 
        用户  名:   root                             
        密    码:   root
        余    额:   5000
        额    度:   20000
        锁定状态:  False 
        
    
        ------------ cmz 用户信息 ------------ 
        用户  名:   cmz                             
        密    码:   cmz
        余    额:   20000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 7
    ------------------------- 解冻账户 -------------------------
    请输入需要被解冻的账号名<b|B 返回上一层>: cmz 
    亲爱的用户 cmz 你的账号已经被解冻
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: cmz
    请输入正确的序号
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 1
    请输入用户名: cmz
    请输入密码: cmz
    
    ------------------------- 购物 -------------------------
    亲爱的用户 cmz你好,你当前的余额 = 20000   信用卡额度 = 15000
    1. 电脑    价格:  5000
    2. 鼠标    价格:  300
    3. 电视    价格:  2000
    4. 水果    价格:  800
    请输入商品ID<b|B 返回>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7
    请输入用户名: root
    请输入密码: root
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 3
    
        ------------ root 用户信息 ------------ 
        用户  名:   root                             
        密    码:   root
        余    额:   5000
        额    度:   20000
        锁定状态:  False 
        
    
        ------------ cmz 用户信息 ------------ 
        用户  名:   cmz                             
        密    码:   cmz
        余    额:   20000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 6^Quit (core dumped)
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7
    请输入用户名: root
    请输入密码: root
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 5
    ------------------------- 冻结账户 -------------------------
    请输入需要被冻结的账号名<b|B 返回上一层>: cmz
    用户 cmz 已经被锁定
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 1
    请输入用户名: cmz
    请输入密码: cmz
    抱歉该账户 cmz 被锁定,请联系管理员
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 8
    请输入用户名: root
    请输入密码: root
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    请选择模式<q|Q 退出> <b|B 返回上一层>: 1
    2018-01-31 14:12:49,041 - shopping_car - atm.py - --> 商品 <电脑> 已经被添加到购物车
    2018-01-31 14:12:49,579 - shopping_car - atm.py - --> 商品 <鼠标> 已经被添加到购物车
    2018-01-31 14:12:50,088 - shopping_car - atm.py - --> 商品 <电视> 已经被添加到购物车
    2018-01-31 14:12:50,789 - shopping_car - atm.py - --> 商品 <水果> 已经被添加到购物车
    2018-01-31 14:12:51,418 - shopping_car - atm.py - 抱歉,你输入的商品ID不存在
    2018-01-31 14:12:52,436 - shopping_car - atm.py - 抱歉,你输入的商品ID必须为整数
    2018-01-31 14:13:33,720 - shopping_car - atm.py - 抱歉,你不能删除自己,你是超级管理员啊
    2018-01-31 14:13:37,323 - shopping_car - atm.py - 用户 cc 已经被删除
    2018-01-31 14:14:02,868 - shopping_car - atm.py - 抱歉,你要冻结的账号 leco 不存在
    2018-01-31 14:14:10,775 - shopping_car - atm.py - 用户 cmz 已经被锁定
    2018-01-31 14:14:17,144 - shopping_car - atm.py - 抱歉,你要冻结的账号 leco 不存在
    2018-01-31 14:14:18,208 - shopping_car - atm.py - 亲爱的用户 cmz 你的账号已经被解冻
    2018-01-31 14:15:27,865 - shopping_car - atm.py - 亲爱的用户 cmz 你的账号已经被解冻
    2018-01-31 14:15:33,096 - shopping_car - atm.py - 请输入正确的序号
    2018-01-31 14:16:21,409 - shopping_car - atm.py - 用户 cmz 已经被锁定
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    请选择模式<q|Q 退出> <b|B 返回上一层>: 2
    2018-01-31 14:12:49,041 - atm - atm.py - 亲爱的用户 root你好,你当前的余额 = 10000   信用卡额度 = 15000
    2018-01-31 14:12:49,579 - atm - atm.py - 亲爱的用户 root你好,你当前的余额 = 9700   信用卡额度 = 15000
    2018-01-31 14:12:50,089 - atm - atm.py - 亲爱的用户 root你好,你当前的余额 = 7700   信用卡额度 = 15000
    2018-01-31 14:12:50,790 - atm - atm.py - 亲爱的用户 root你好,你当前的余额 = 6900   信用卡额度 = 15000
    2018-01-31 14:13:03,436 - atm - atm.py - 恭喜,用户 root你好,你的账户已经成功充值 3100 
    2018-01-31 14:13:03,436 - atm - atm.py - 亲爱的用户 root你好,充值后余额 = 10000 
    2018-01-31 14:15:00,781 - atm - atm.py - 抱歉,收款人 cc 不存在
    2018-01-31 14:15:02,235 - atm - atm.py - 抱歉,收款人 leco 不存在
    2018-01-31 14:15:06,831 - atm - atm.py - 汇款方 root,收款方 cmz,汇款金额 5000
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    请选择模式<q|Q 退出> <b|B 返回上一层>: 3
    2018-01-31 14:12:40,802 - system - atm.py - 系统重新启动
    2018-01-31 14:13:17,703 - system - atm.py - 新增用户 cc 创建成功
    2018-01-31 14:13:22,467 - system - atm.py - 抱歉,该用户已经存在
    2018-01-31 14:13:28,041 - system - atm.py - 新增用户 cmz 创建成功
    2018-01-31 14:15:31,104 - system - atm.py - 系统重新启动
    2018-01-31 14:15:51,322 - system - atm.py - 系统重新启动
    2018-01-31 14:16:10,239 - system - atm.py - 系统重新启动
    2018-01-31 14:16:23,875 - system - atm.py - 系统重新启动
    2018-01-31 14:16:26,887 - system - atm.py - 抱歉该账户 cmz 被锁定,请联系管理员
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    请选择模式<q|Q 退出> <b|B 返回上一层>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 7
    ------------------------- 解冻账户 -------------------------
    请输入需要被解冻的账号名<b|B 返回上一层>: cmz
    亲爱的用户 cmz 你的账号已经被解冻
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7        
    请输入用户名: cmz 
    请输入密码: cmz
    ------------------------- 管理用户操作说明 -------------------------
        5.  冻结账户
        6.  账户余额
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 6
    ------------------------- 账户余额 -------------------------
    
        ------------ cmz 用户信息 ------------ 
            用户  名:   cmz                             
            余    额:   20000
            
    ------------------------- 管理用户操作说明 -------------------------
        5.  冻结账户
        6.  账户余额
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 5
    ------------------------- 冻结账户 -------------------------
    用户 cmz 已经被锁定,请联系管理员解冻账号
    ------------------------- 管理用户操作说明 -------------------------
        5.  冻结账户
        6.  账户余额
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 1       
    请输入用户名: cmz
    请输入密码: cmz
    抱歉该账户 cmz 被锁定,请联系管理员
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7
    请输入用户名: root
    请输入密码: root
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 7
    ------------------------- 解冻账户 -------------------------
    请输入需要被解冻的账号名<b|B 返回上一层>: cmz
    亲爱的用户 cmz 你的账号已经被解冻
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 8
    请输入用户名: cmz
    请输入密码: cmz
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    抱歉,亲爱的用户 cmz,你不是系统管理员你没有此权限,请使用管理员root用户登录查看
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 8  
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    抱歉,亲爱的用户 cmz,你不是系统管理员你没有此权限,请使用管理员root用户登录查看
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 8
    ------------------------- 查看流水账 -------------------------
            1.  购物流水清单          
            2.  atm流水清单          
            3.  系统流水清单
            
    抱歉,亲爱的用户 cmz,你不是系统管理员你没有此权限,请使用管理员root用户登录查看
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: q
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ 
    leco@leco:~/PycharmProjects/luxffy/homework/atm$ python3 bin/start.py 
    ------------------------------------------------------------
    |                                                          |
    |                     欢迎来到购物广场                     |
    |                                                          |
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 5
    请输入用户名: root
    请输入密码: root
    ------------------------- 转账 -------------------------
    当前系统登录用户是:  root
    亲爱的用户 root你好,汇款前您的余额 = 5000
    请输入收款人用户名<b|B 返回上一级>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: 7
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: 3
    
        ------------ root 用户信息 ------------ 
        用户  名:   root                             
        密    码:   root
        余    额:   5000
        额    度:   20000
        锁定状态:  False 
        
    
        ------------ cmz 用户信息 ------------ 
        用户  名:   cmz                             
        密    码:   cmz
        余    额:   20000
        额    度:   15000
        锁定状态:  False 
        
    ------------------------- 管理用户操作说明 -------------------------
        1.  新增用户          
        2.  删除用户          
        3.  查看所有用户
        4.  修改用户额度
        5.  冻结账户
        6.  账户余额
        7.  解锁账户
        
    请选择模式<q|Q 退出> <b|B 返回上一层>: b
    ------------------------- 操作说明 -------------------------
        1.  购物              2.  充值
        3.  查看购物车         4.  保留
        5.  转账              6.  取现 
        7.  管理用户           8.  流水账
        
    请选择模式<q|Q 退出>: q
    代码在终端测试情况
  • 相关阅读:
    POJ 2253 Prim算法及测试数据
    使用getopt_long解析程序长选项参数
    把Javascript对象序列化后作为参数传输
    JSP工程中的读配置文件方法
    C base64 编码文件
    log的记录
    加权
    项目管理流程和工程管理流程
    从全局眼光看log,异常处理的记录
    证书信任和用户认证
  • 原文地址:https://www.cnblogs.com/caimengzhi/p/8378448.html
Copyright © 2011-2022 走看看