zoukankan      html  css  js  c++  java
  • 第一个 购物车程序

    import json
    import os
    import re
    # 数据结构:
    goods = [
    {"name": "电脑", "price": 1999},
    {"name": "鼠标", "price": 10},
    {"name": "游艇", "price": 20},
    {"name": "美女", "price": 998},
    ]


    # 功能要求:
    # 基础要求:
    # 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
    # 2、允许用户根据商品编号购买商品
    # 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    # 4、可随时退出,退出时,打印已购买商品和余额
    # 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显.

    # 扩展需求:
    # 1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
    # # 2、允许查询之前的消费记录

    #查询
    def query(name,pwd,shopping_list=None,balance=None):
    with open("user_name", "r", encoding='utf_8') as read_f:
    name_list = []
    for readline in read_f:
    load_list = json.loads(readline)
    user_name_str = load_list[0]['name']
    user_pwd_str = load_list[0]['pwd']
    if name == user_name_str and pwd == user_pwd_str:
    return load_list, []
    if name != user_name_str or pwd != user_pwd_str:
    name_list.append(user_name_str)
    return [{}], name_list

    # 用来向文件 添加用户
    def add(name, pwd):
    with open('user_name', 'a', encoding='utf_8') as add_f:
    # initial_list = [{"flag": "true"}, {"balance": 0}, {"con_record": []}]
    initial_list = [0, {"flag": "true"}, {"balance": 0}, {"con_record": []}]
    add_dic = {'name': name, 'pwd': pwd}
    initial_list[0] = add_dic
    add_f.write(json.dumps(initial_list))
    add_f.write(' ')

    # 这个是注册用户的函数
    def reg_user_name(args):
    print('该账户不存在 是否注册')
    tag = False
    while not tag:
    choice = input('Y是N否:').upper()
    if choice == 'Y':
    reg_username = input('请输入您的用户名(只能用字母或者数字):')
    reg_pwd = input('请输入您的密码(只能用字母或者数字):')
    if reg_username in args:
    print('该用户已存在,请重新输入')
    continue
    if reg_username.isalnum() and reg_pwd.isalnum(): #
    add(reg_username, reg_pwd)
    print('注册成功')
    break
    else:
    print('输入的可能有非法字符,是否重新输入')
    continue
    if choice == 'N': # 不注册就直接退出
    return

    # 这个是购物车函数
    def shopping(balance):
    shopping_cart = [] #定义购物车列表
    exit_flag = False
    while not exit_flag:
    print('--------商品列表--------')
    for index, i in enumerate(goods):
    print(index, i['name'], i['price'])
    choice = input('请输入想要购买的商品编号(Q退出):').upper()
    if choice != 'Q' and not choice.isdigit():
    print('输入错误')
    if choice.isdigit():
    if 0 <= int(choice) < len(goods): #判断输入的数字是否商品编号范围内
    if balance - goods[int(choice)]['price'] >= 0: #判断是否买的起
    balance -= goods[int(choice)]['price'] #买的起自动结算
    shopping_cart.append(goods[int(choice)])
    print('33[1;32;40m已经将%s加入购物车,余额还有%d33[0m' % (goods[int(choice)]['name'],balance))
    if balance - goods[int(choice)]['price'] < 0:
    print('33[1;31;40m您现在有 %d 元,还差 %d 元,余额不足33[0m:'%(balance,abs(balance - goods[int(choice)]['price'])))
    break
    if int(choice) >= len(goods) or int(choice) < 0:
    print('暂时没有这个商品')
    if choice == 'Q':
    for index, i in enumerate(shopping_cart):
    print('33[1;33;40m您已经加入购物车的商品有 %s 价格为 $%s33[0m' % (i['name'], i['price']))
    exit_flag = True
    return shopping_cart

    #单单用来更改用户余额。
    def change_balance(name):
    new_balance = 0 #将更改之后的 金额返回出去
    while True:
    money = input('请输入充值金额:')
    if money.isdecimal():
    with open('user_name', 'r', encoding='utf_8') as read_f, open('user_name_new', 'w', encoding='utf_8') as write_f:
    for readline in read_f:
    user_info = json.loads(readline)
    use_name = user_info[0]['name'] # 用户名
    new_balance = int(user_info[2]['balance']) + int(money) #金额 每次都在 上一次的基础上相加
    if name == use_name:
    user_info[2]['balance'] = new_balance
    write_f.write(json.dumps(user_info))
    write_f.write(' ')
    else:
    print('请不要输入,除数字以外的乱七八糟')
    continue
    os.rename('user_name', 'user_name.bak')
    os.rename('user_name_new', 'user_name')
    os.remove('user_name.bak')
    return new_balance

    # 这个是更改文件购物车和余额的函数
    def change(name,shopping_list):
    total_cost = 0
    total_dict = {} #{'电脑': ['Number', 2], '鼠标': ['Number', 2]}
    for i in shopping_list:
    total_cost += i['price'] #把所有商品的价格 总和一下
    if i['name'] in total_dict: # 判断购买的商品是否在购物车里
    total_dict[i['name']][1] += 1 # 在购物车里,则商品对应的数量+1
    else:
    total_dict[i['name']] = ['Number',1] #不在购物车里,则将商品信息数量加入购物车内
    # print(total_cost,total_dict)
    with open('user_name','r',encoding='utf_8') as read_f,open('user_name_new','w',encoding='utf_8') as write_f:
    for readline in read_f:
    user_info1 = json.loads(readline)
    curbalance = user_info1[2]['balance']
    if name == user_info1[0]['name']:
    money = curbalance - total_cost
    user_info1[2]['balance'] = money
    user_info1[3]['shopping_card'].append(total_dict)
    write_f.write(json.dumps(user_info1))
    write_f.write(' ')
    os.rename('user_name', 'user_name.bak')
    os.rename('user_name_new', 'user_name')
    os.remove('user_name.bak')



    if __name__ == '__main__':
    msg = '''
    1:购买商品
    2:查询账户余额
    3:历史查询消费记录
    4:退出'''
    name = None
    pwd = None
    user_info = []
    # [{"name": "qichen", "pwd": "456"}, {"flag": "true"}, {"balance": 0}, {"shopping_card": []}] []
    while True:
    name = input('请重新输入用户名:').strip()
    pwd = input('请输入密码:').strip()
    user_info = query(name, pwd)
    if not user_info[0][0]:
    if name in user_info[1]:
    print('账户名或密码错误,重新输入')
    continue
    else:
    reg_user_name(user_info[1])
    exit('请重新登陆')
    cur_balance = user_info[0][2]['balance'] # 当前余额
    if user_info[0][0] and user_info[0][0]['name'] == name and user_info[0][0]['pwd'] == pwd:
    choice = input('33[1;35;40m您的当前余额为 %d元 是否充值,Y是N否33[0m:'%cur_balance).upper()
    if choice == "Y":
    cur_balance = change_balance(name)
    print('33[1;34;40m您的当前余额为 %d元33[0m'%cur_balance)
    break
    else:
    break
    # user_info = query(name, pwd)
    while True:
    print(msg)
    cur_balance = user_info[0][2]['balance'] # 当前余额
    choice_num = input('请选择您要做的事情:').strip()
    if choice_num.isdecimal():
    if choice_num == '1':
    shop_info = shopping(cur_balance)
    # print(shop_info)
    change(name,shop_info)
    if choice_num == '2':
    balance_info = query(name,pwd)
    print('33[1;32;40m当前余额:%s33[0m'%balance_info[0][2]['balance'])
    if choice_num == '3':
    new_user_info = query(name,pwd)
    print(new_user_info[0][3]['shopping_card'])
    if choice_num == '4':
    exit('谢谢使用')


    [{"name": "qichen", "pwd": "456"}, {"flag": "true"}, {"balance": 0}, {"shopping_card": []}]
    [{"name": "yuanhao", "pwd": "789"}, {"flag": "true"}, {"balance": 0}, {"shopping_card": []}]
    [{"name": "peiqi", "pwd": "789"}, {"flag": "true"}, {"balance": 0}, {"shopping_card": []}]
    [{"name": "xiaoya", "pwd": "789"}, {"flag": "true"}, {"balance": 0}, {"shopping_card": []}]
    [{"name": "alex", "pwd": "123"}, {"flag": "false"}, {"balance": 40}, {"shopping_card": [{"u9f20u6807": ["Number", 2]}]}]


    学业不精!加倍努力!


  • 相关阅读:
    Flask:flask-script;多app应用;wtforms
    Flask:Locla;偏函数;请求上下文;蓝图;g对象;信号;flask-session
    Flask:闪现; 请求扩展;自定义中间件
    Flask:cookie和session
    Flask:请求与响应
    Flask:重定向;模板语法,
    Flask:路由系统;CBV的代码案例
    软件质量模型
    Selenium with Python 002
    Selenium with Python 001
  • 原文地址:https://www.cnblogs.com/chengege/p/10211873.html
Copyright © 2011-2022 走看看