zoukankan      html  css  js  c++  java
  • User_Login_Register_Shopping+装饰器 3.0

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time : 2018/5/27 0027 14:07
    # @Author : Anthony.Waa
    # @Site :
    # @File : User_Login_Register_Shopping 1.0.py
    # @Software: PyCharm

    # 购物车
    def shopping():
    '''
    :return:返回商品清单
    '''

    # 原始购物清单
    goods = [
    {"name": "红旗", "price": 1999},
    {"name": "巴厘岛", "price": 10},
    {"name": "模特", "price": 20},
    {"name": "迪拜", "price": 998},
    ]

    # 购物车
    shopping_car = {}
    # 购物车遍历
    shopping_car_list = []

    # 商品个数
    good_count = 1

    # 商品单价
    shopping_price = {}

    # 输入不合法是打印
    def return_error():
    print("33[1;31m 输入不合法,请重新输入 33[0m")

    # 打印购物车商品和剩余金额
    def end_shopping():
    # 获取原始列表中的名称和价格
    for list_goods_price in goods:
    shopping_price[list_goods_price['name']] = list_goods_price['price']
    with open('shopping_list.txt', 'w', encoding='utf-8') as shoppingf:
    # 获取购物车中的名称和个数,并从中找到与原始列表中名称所对应的价格
    for list_shopping_name, list_shopping_count in shopping_car.items():
    shoppingf.writelines('商品名称:{0},商品个数:{1}个,商品价格:{2}元 '.format(list_shopping_name, list_shopping_count,
    shopping_price[list_shopping_name]))

    for list_name in shopping_car:
    print('33[1;32m 商品名称:{0} 商品个数:{1} 33[0m'.format(list_name, shopping_car[list_name]))
    print("33[1;32m 剩余金额为:{0}33[0m".format(all_money))

    while True:
    # 用户输入总资产
    print('33[1;32m=33[0m' * 50, ' ')
    all_money = input("33[1;32m 请输入总资产: 33[0m").strip()
    if all_money.isdigit():
    all_money = int(all_money)
    while True:
    # 显示购物商品列表
    print('33[1;32m=33[0m' * 50, ' ')
    print(' 序号: 商品名: 单价:')
    for good_index, good in enumerate(goods, 1):
    print('33[1;32m {0} {1} {2} 33[0m'.format(good_index, good['name'],good['price']).center(20))
    print('33[1;32m 选择"q"退出 33[0m'.center(20))
    print('33[1;32m=33[0m' * 50, ' ')

    # 选择商品序号,或选择退出购物
    choice_count = input("33[1;32m 请输入商品序号: 33[0m").strip()
    if choice_count.isdigit():
    choice_count = int(choice_count)
    # 商品序号小于商品列表长度
    if choice_count > 0 and choice_count <= len(goods):
    good_price = goods[choice_count - 1]['price']
    # 用户资产大于商品价格,否则提示充值
    if all_money > good_price:
    good_name = goods[choice_count - 1]['name']
    all_money -= good_price
    # 商品是否存在购物车中
    if good_name not in shopping_car:
    shopping_car[good_name] = good_count
    else:
    for shopping_index, shopping_name in enumerate(shopping_car):
    if shopping_name == good_name:
    shopping_car[shopping_name] += 1

    end_shopping()


    else:
    print('33[1;31m 余额不足,请充值: 33[0m'.center(17))
    add_money = input("请输入总资产:").strip()
    if add_money.isdigit():
    add_money = int(add_money)
    all_money += add_money
    print('33[1;32m 充值成功,剩余金额为: 33[0m'.center(17), all_money)
    continue
    elif choice_count.lower() == 'q':
    print("33[1;32m 购物结束,欢迎下次光临 33[0m")
    end_shopping()
    return False
    return_error()


    def user_login():
    count = 0
    while True:
    print('-' * 55)
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    with open('register.txt', 'r', encoding='utf-8') as f1:
    for line in f1:
    line_list = line.strip().replace(',', ',').split(',')
    if username == line_list[0] and password == line_list[1]:
    print('登陆成功')
    status_dict['username'] = username
    status_dict['status'] = True
    return True
    else:
    print('输入错误')
    count += 1
    if count == 3:
    print('用户名或密码输入错误超过3次,已锁定.')
    exit()


    def user_regiter(*args, **kwargs):
    while True:
    print('-' * 55)
    print('提示:用户名任意填写,不能超过8位,密码为数字,字母,下划线,不能超过16位')
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    if len(username) > 8 and len(password) > 16:
    print('用户名或密码长度不符合规定,请重新输入...')
    continue
    else:
    with open('register.txt', 'r', encoding='utf-8') as f1:
    for line in f1:
    line_list = line.strip().replace(',', ',').split(',')
    if username == line_list[0] and password == line_list[1]:
    print('该用户已存在,请重新输入')
    break
    else:
    with open('register.txt', 'a+', encoding='utf-8') as f2:
    f2.writelines('{0},{1}{2}'.format(username, password, ' '))
    print('注册成功..')
    print('自动登录中...')
    status_dict['username'] = username
    status_dict['status'] = True
    print('登录成功,请选择...')
    return True


    def article():
    print('-' * 55)
    print('欢迎进入文章视图')


    def notebook():
    print('-' * 55)
    print('欢迎进入日记视图')


    def comment():
    print('-' * 55)
    print('欢迎进入评论视图')


    def collection():
    print('-' * 55)
    print('欢迎进入收藏视图')


    def cancellation():
    print('-' * 55)
    print('用户已注销')
    status_dict['status'] = False
    return False


    def sign_out():
    print('-' * 55)
    print('程序已退出')
    exit()


    choice_menus = {
    1: user_regiter,
    2: user_login,
    3: article,
    4: notebook,
    5: comment,
    6: collection,
    7: shopping,
    8: cancellation,
    9: sign_out,
    }
    print('-' * 55)

    show_menu = {
    1: '用户注册',
    2: '用户登录',
    3: '文章页面',
    4: '日记页面',
    5: '评论页面',
    6: '收藏页面',
    7: '商城',
    8: '注销',
    9: '退出程序',
    }

    # 全局用户登录状态
    status_dict = {
    'username': None,
    'status': False,
    }

    import time

    # 用户访问内容
    visit_website = []


    # 打印用户选项日志
    def outside(log):
    def into_log(*args, **kwargs):
    with open('loging.log', 'a+', encoding='utf-8') as log1:
    start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    log(*args, **kwargs)
    stop_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    log1.writelines(
    ' 用户:{0},登录时间:{1},退出时间:{2},使用函数:{3},欢迎{4}用户,访问{5}'.format(status_dict['username'], start_time,stop_time, choice_menus[choice_menu],status_dict['username'], visit_website[-1]))

    return into_log


    # 运行主体
    while True:
    # 打印主菜单
    print(' 欢迎登陆博客园')
    for menu_index, menu in enumerate(show_menu, 1):
    print(' {0}、{1}'.format(menu_index, show_menu[menu]))
    print('-' * 55)

    choice_menu = input('请输入以上任一选项:').strip()
    if choice_menu.isdigit():
    choice_menu = int(choice_menu)
    # 添加用户的访问内容至visit_website列表记录
    if choice_menus[choice_menu] not in visit_website:
    visit_website.append(show_menu[choice_menu])

    #装饰选项开始
    @outside
    def print_main():
    if choice_menu == 9:
    choice_menus[9]()
    else:
    if 0 < choice_menu <= len(choice_menus):
    # 判断用户若没有登录,只能输入选项为1、2
    if status_dict['status'] == False:
    print("33[1;32m提示:请登录后再尝试其他选项...33[0m")
    if 0 < choice_menu <= 2:
    choice_menus[choice_menu]()
    # 登录成功后,选择其他选项
    else:
    choice_menus[choice_menu]()
    else:
    print('选项不存在,请重新输入...')


    print_main()
    else:
    print('输入错误,请重新输入...')
  • 相关阅读:
    【BZOJ3518】点组计数 欧拉函数
    【BZOJ3677】[Apio2014]连珠线 换根DP
    【BZOJ3678】wangxz与OJ Splay
    【BZOJ3935】Rbtree 树形DP
    【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树
    (转)Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    string.Format出现异常"输入的字符串格式有误"的解决方法
    c# winForm使用Aspose.Cells读取CSV文件中文乱码问题
    PowerDesigner15.1给自定义架构表字段添加MS_Description出错
    MongoDB 多条件组合查询
  • 原文地址:https://www.cnblogs.com/ipyanthony/p/9112585.html
Copyright © 2011-2022 走看看