码迷,mamicode.com
首页 > 其他好文 > 详细

购物车程序

时间:2017-12-19 01:18:25      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:存储   显示   log   float   post   返回   高亮   转换   img   

作业需求:

  • 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表
  • 允许用户根据商品编号购买商品
  • 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
  • 可随时退出,退出时,打印已购买商品和余额
  • 在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
  • 用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
  • 允许查询之前的消费记录

 

购物车用户信息:

{‘test1‘: {‘123‘: ‘19969.0‘}, ‘cx‘: {‘123‘: ‘725.0‘}, ‘lou‘: {‘123‘: ‘200.0‘}, ‘even‘: {‘qw‘: ‘1560‘}, ‘cv1‘: {‘1‘: 100.5}, ‘name‘: {‘password‘: ‘20000.0‘}, ‘test‘: {‘guaishou‘: ‘10169.0‘}, ‘test2‘: {‘123‘: ‘293338.0‘}}
以字典形式存储用户名,密码,余额

历史购物信息:

{‘test1‘: [[‘Coffee‘, 31]], ‘cx‘: [[‘iphone‘, 5800], [‘apple‘, 5], [‘apple‘, 5], [‘book‘, 75]], ‘lou‘: [[‘bike‘, 800]], ‘name‘: [[‘iphone‘, 5800], [‘bike‘, 800]], ‘test‘: [[‘Bike‘, 800], [‘Coffee‘, 31], [‘Coffee‘, 31], [‘Mac Pro‘, 9800], [‘Coffee‘, 31]], ‘test2‘: [[‘Bike‘, 800], [‘Coffee‘, 31], [‘Iphone‘, 5800], [‘Coffee‘, 31]]}
以字典形式,对应用户名和历史购物记录

流程图:

 技术分享图片

代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Lou


set = False    # 设置set 当输入为q就可以退出
file = open(shopping_cart_userinfo.txt,r+,encoding=utf-8)    # 读取购物车用户信息文件
f = str(file.read())    # 将文件内容转化成字符串
for line in f:    # 逐行读取
    file_str = str(f)
data= eval(file_str)    # 将字符串转换为字典data
name = input("请输入姓名:")    # 提示输入用户名
password = input("请输入密码:")    # 提示输入密码
while True:
    if name in data:    # 用户名在字典data
        if password in data[name]:    # 密码如果能对应用户名,就欢迎登录
            salay = float(data[name][password])
            print(‘‘‘\033[32;1m欢迎登录,当前余额为%s\033[0m‘‘‘%salay)
            break
        else:    # 否则密码输入错误,提示重新输入
            password = input("密码输入错误,请重新输入:")
            continue
    else:    # 否则判断为首次登录,将用户名,密码,工资存到用户信息文件中
        salay_str = input("欢迎首次登录,请输入你的工资:")    # 输入工资数
        salay = float(salay_str)    # 将输入的字符串转换为数字
        data[name]={password:salay} # 将密码-工资对对应到用户名
        file.seek(0)    # 文件的读取移到开头
        file.write(str(data))    # 写入新的字典信息
        file.tell()    # 返回当前位置
        break


list = [    # 购物清单
    [Iphone,5800],
    [Mac Pro,9800],
    [Bike,800],
    [Watch,10600],
    [Coffee,31],
    [Alex Python,120]
]

file_list_r = open(shopping_cart_purchase_history.txt,r+,encoding=utf-8)    # 读取历史购买记录文件
f_list_r = str(file_list_r.read())
for line in f_list_r:    # 逐行读取
    file_str_h = str(f_list_r)
shoppinglist_dict = eval(file_str_h)    # 将历史记录信息转换为字典
if name not in shoppinglist_dict:    # 如果首次登录,会没有历史记录
    shoppinglist_dict[name] = []    # 首次登录历史记录留空
shoppinglist = shoppinglist_dict[name]    # 不是首次登录,将之前历史记录赋值到变量
shoppinglist_now = []    # 本次购物记录留空
choose = input("\n是否需要查询历史购物记录(y/n):")    # 询问是否需要查询历史记录
if choose == y:    # 选y,输出历史购物记录
    print("\n\n-----------历史购物记录------------")
    print(shoppinglist)
    print("--------------结束---------------\n\n")

while not set:    # 购物车开始
    print(-----------商品清单------------)    # 输出商品清单
    for index,item in enumerate(list,1):
        print(index,item)
    print("-------------结束--------------")
    number = input("请输入想购买的商品编号:")    # 输入商品编号
    if number == "q":    # 当输入为q,退出,打印本次购物清单
        set = True
        data[name][password] = str(salay)    # 将字符串的工资给到对应用户名下的密码-工资对中
        file.seek(0)
        file.write(str(data))    # 将用户信息写入购物车用户信息存档中
        file.tell()
        print("------------购物清单------------")    # 打印购物清单,提示余额
        print(shoppinglist_now)
        print("您的余额为:",salay)
        print("-------------结束--------------")
        shoppinglist.extend(shoppinglist_now)    # 将本次购物记录追加到购物记录列表中
        shoppinglist_dict[name] = shoppinglist    # 购物列表与用户名做对应
        file_list_r.seek(0)
        file_list_r.write(str(shoppinglist_dict))    # 写入字符串的购物历史记录
        file_list_r.tell()
    elif number.isdigit() == False:    # 校验输入是否为整数
        print("\033[31;1m输入不是编号内容,请重新输入\033[0m")
    elif int(number)>int(len(list)) or int(number)<= 0:    # 如果输入值不在清单中,提示报错
        print("\033[31;1m您所购买的商品不在清单中\033[0m")
    else:
        number_buy = int(number)-1
        if list[number_buy][1]<(salay):    # 如果余额够,提示成功购买,显示余额
            salay = salay - int(list[number_buy][1])
            msg = ‘‘‘
                            \033[32;1m您已将%s加入购物车中
                            余额为%d\033[0m
                            ‘‘‘ % (list[number_buy][0],salay)
            print(msg)
            shoppinglist_now.append(list[number_buy])    # 本次购物信息加到本次购买记录中
        else:
            print("\033[31;1m您已没有余额可以购买\033[0m")    # 否则提示余额不足

file.close()
file_list_r.close()

 

购物车程序

标签:存储   显示   log   float   post   返回   高亮   转换   img   

原文地址:http://www.cnblogs.com/guaishou813/p/8059932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!