Esempio n. 1
0
def get_view(user_name, passwd):
    """
    :param user_name: <str> 用户名
    :param passwd: <str> 密码
    :return: <core.views.BaseView> view对象
    """
    # 初始化view
    view = None

    # 如果用户存在则获取用户角色对应的view
    if user_name in db.all_admin:
        user = db.all_admin.get(user_name)
        if check_pwd(user.password, passwd):
            view = ManageView(user)
    elif user_name in db.all_teachers:
        user = db.all_teachers.get(user_name)
        if check_pwd(user.password, passwd):
            view = TeacherView(user)
    elif user_name in db.all_students:
        user = db.all_students.get(user_name)
        if check_pwd(user.password, passwd):
            view = StudentView(user)
    else:
        print("用户不存在")
        return
    if not view:
        # 如果view为None则说明,没有获取到view,用户又存在 则原因是密码错误
        print("密码错误")
    access_log.info("%s登陆了系统!" % user)
    return view
Esempio n. 2
0
def commen_user_menu(user_data, user):
    """
    :param user_data:<list> 包含所有用户账号的列表
    :param user:<core.user.User object> 用户实例
    :return:None
    这个函数用来和普通用户交互,并分发功能。或者让管理员也可以使用这个系统
    """
    # 初始化一个交易中心实例
    tc = TradingCenter(user)
    print("当前余额为%s" % user.balances)
    while True:
        print("""
            请输入序号选择功能
            1. 购物
            2. 转账
            3. 提现
            4. 还款
            5. 查询流水
            6. 退出
            """)
        choice = input(">>>").strip()
        if choice == "1":
            # 用户输入的值为1时,初始化一个购物车实例,调用购物方法
            shopping = ShoppingCar(user.balances, tc)
            shopping.display_menu()

        elif choice == "2":
            # 用户输入的值为2时,判断用户是否存在,如果存在,调用交易中心的转账方法
            outer_user = input("请输入转入账户的账户名:")
            if outer_user in user_data:
                money = input_int("请输入转账金额:")
                tc.transfer(User(outer_user), money)
            else:
                # 不存在则提示用户
                print("账户不存在,请重新输入!")
        elif choice == "3":
            # 如果用户的输入值为3 ,调用交易中心的提现方法
            money = input_int("请输入提现金额:")
            tc.cash_out(money)

        elif choice == "4":
            # 如果用户的输入值为4,调用交易中心的还款方法
            money = input_int("还款金额")
            tc.reimbursement(money)

        elif choice == "5":
            # 调用交易中心的显示日志的方法
            tc.display_user()
        elif choice == "6":
            # 用户选择退出时,退出程序
            access_log.info("用户%s退出程序" % user.account)
            # 这里休眠0.1秒是为了 输出的日志消息 不会影响用户的输入
            sleep(0.1)
            exit()
        else:
            # 用户输入错误时提示用户
            print("输入的选项有误,请重新输入!")
Esempio n. 3
0
def authentication(user_account, user_password, count=0):
    """
    :param user_account:<str>用户账户
    :param user_password: <str>用户密码
    :param count: <int>判断当前输了几次密码
    :return: <core.user.User object> or <core.user.User object> 返回值是用户对象
    用来判段用户输入的账号和密码是否正确的函数,当用户输错密码次数太多时,退出程序
    """
    if count < 2:
        # 当前不是第三次输入密码
        count += 1
        if user_account in user_data:
            # 用户存在
            user = User(user_account)
            if user.state:
                # 用户未被锁定
                if user_password == user._password and user.role == 10:
                    #密码正确,而且是普通用户
                    access_log.info("%s登陆了系统" % user_account)
                    sleep(0.2)
                    return user
                elif user.role == 20 and user_password == user._password:
                    #密码正确而且是管理员
                    access_log.info("管理员%s登陆了系统。" % user_account)
                    sleep(0.2)
                    return Administrator(user_data, user_account)
                else:
                    # 密码错误
                    print("密码输入错误")
                    inner_password = input("请重新输入密码:")
                    return authentication(user_account, inner_password, count)
            else:
                # 用户已被冻结 退出程序
                print("该用户已被冻结")
                exit()
        else:
            # 用户不存在, 提示用户重新输入用户名和密码
            print("该用户不存在:")
            inner_account = input("请输入用户账户:")
            inner_password = input("请输入密码:")
            return authentication(inner_account, inner_password, count)
    else:
        # 用户输错了三次密码 退出程序
        access_log.warning("用户已经输错了三次密码:")
        exit()
Esempio n. 4
0
def admin_user_menu(user):
    """
    :param user: <core.user.Administrator object> 管路员实例
    :return:None
    这个函数用来和管理员用户交互,并分发功能。

    """

    print("""
        请输入序号选择功能
        1. 添加用户
        2. 冻结用户
        3. 解冻账户
        4. 以普通用户身份进入ATM系统
        5. 退出
        """)
    choice = input(">>>")
    if choice == "1":
        # 添加用户功能 可以自定义余额。
        username = input("请输入用户名:")
        password = input("请输入密码:")
        select = input("是否自定义余额?y/n")
        if select == "y":
            balances = input_int("请输入余额:")
        else:
            balances = 15000
        user.create_user(username, password, balances)
    elif choice == "2":
        # 冻结用户功能,调用管理员实例的方法冻结账户
        user_account = input("请输入要冻结的账户:")
        user.bind_user(user_account, False)
    elif choice == "4":
        # 进入普通用户的菜单
        commen_user_menu(user_data, user)
    elif choice == "3":
        # 冻结用户功能,调用管理员实例的方法解冻账户
        user_account = input("请输入要解冻的账户:")
        user.bind_user(user_account, True)
    elif choice == "5":
        access_log.info("用户%s退出程序" % user.account)
        # 退出程序
        return
    # 输入的选项错误 重新执行改函数
    return admin_user_menu(user)
Esempio n. 5
0
 def exit_program(user):
     """
     :param user: <core.user.User>用户对象
     """
     access_log.info("%s退出了系统" % user)
     exit()