视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python如何编写购物车程序的示例代码分享
2020-11-27 14:23:27 责编:小采
文档


要求

1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

4、可随时退出,退出时,打印已购买商品和余额

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

7、允许查询之前的消费记录


1)编写思路

编写思路参考下面GitHub链接中的流程图

2)具体实现

# -*- coding:utf-8 -*-

# Author:Chuixin Zeng

# 导入JSON模块
import json
# 导入日期时间模块
import datetime
# 导入系统OS模块
import os

# 自定义欢迎信息
info = '''
1. 按"A"注册
2. 按"B"登录
3. 按"Q"退出
'''
# 自定义错误提示信息
_error_info = '输入有误,请检查后重新输入!'

# 定义一个_save_account函数
# 用于将购物相关信息保存到JSON文件,比如购物时间,购物历史,购物列表,账户余额,创建的新用户和现有已存在用户信息
def _save_account(database, filename='DataBase.json'):
 # 打开并可写文件,若文件已存在,则以前的内容将被清除
 # 使用with as语句的效率更高,不需要单独设置如何读文件之后再如何关闭文件,一个with as搞定所有读写关闭操作
 with open(filename,'w') as f: # f相当于一个变量,把打开并修改文件的操作赋予f
 json.dump(database,f) # json.dump是将一个Python数据类型列表进行json格式的编码解析

# 定义一个_load_database函数,用于从json文件中读取信息,默认加载的数据库是database.json文件
def _load_database(filename='DataBase.json'):
 with open(filename) as f:
 database = json.load(f) # 解码JSON数据,将一个JSON编码的字符串转换回一个Python数据结构
 return database # 返回解码后的数据

# 定义一个函数_set_shopping_time,设置并记录购物的时间,函数里面定义了一个参数account,用于保存账户信息
def _set_shopping_time(account):
 database = _load_database() # 设定要记录到哪个数据库,这里使用的是前面定义好的函数_load_database定义的database.json
 d1 = datetime.datetime.now() # 设置购物时间为当前时间
 d2 = d1.strftime('%Y-%m-%d %H:%M:%S') # 将当前时间进行格式转换
 database[account]['shopping_time'] = d2 # 将转换好的时间记录到字典里面的shopping_time键上
 _save_account(database) # 保存购物时间到数据库中,这里的数据库是指database.json文件

# 定义一个函数,用于获取已经保存过的购物时间
def _get_datetime(account):
 database = _load_database()
 data = database[account]['shopping_time']
 # 返回变量data的值,变量data保存的就是account键对应的购物时间值,这个值是从json里面解码出来后到字典里
 # 由json到Python可识别的字典数据的解码过程由_load_database函数完成
 return data

# 定义一个函数_get_shopping_history,用于查询购物历史记录
def _get_shopping_history(account):
 database = _load_database()
 history = database[account]['shopping_list']
 # 增加一个空列表,配合下边for循环将购物清单中的重复项合并
 aa = []
 for i in history:
 # 将购物车里面的shopping list和aa空列表进行对比,如果列表里面没有,就添加到列表
 # 也就意味着,如果列表已经有了就不添加了,达到了购物车去重的功能
 if i not in aa:
 aa.append(i)
 # 然后循环遍历aa列表里面的购物清单
 for j in aa:
 # 统计购买的每件商品的数量,也就是aa列表里面每件商品的数量,数量从history原始列表里面取(未去重的列表)
 count = history.count(j)
 # 统计购买商品的日期,日期就是account字典对应的商品的日期
 date = _get_datetime(account)
 # 打印购买的商品的数量、日期和商品名称
 print('您于%s购买了%s件%s' %(date,count,j))

# 定义一个函数login,用于登录系统
def _login():
 database = _load_database() # 加载数据库,使用的是前面定义好的加载数据库的函数
 blacklist = _load_database('BlackList.json') # 设置用户的黑名单列表,在列表中的用户将不允许登录到购物系统
 print('欢迎登录购物系统!') # 打印欢迎信息
 # 第一个死循环
 while True:
 account = input("请输入您的账号登录系统(按q退出):")
 if account in blacklist:
 # 如果账户在黑名单里面,则退出登录
 print("您的账号已经被锁定,请联系管理员处理!")
 _logout() # 直接调用下面定义好的_logout()函数
 # 判断如果用户输入的是q,就退出购物系统
 elif account == 'q':
 _logout()
 # 判断如果用户在数据库里面,则继续判断用户输入的密码是否正确
 # 这里使用while循环和count计数器,如果输入错误密码大于3次,则锁定账户
 elif account in database:
 count = 0
 while count < 3:
 pwd = input('请输入密码:')
 # 如果用户输入的密码和数据库保存的密码匹配
 if pwd == database[account]['pwd']:
 # 进入到死循环
 while True:
 # 首先登录成功后,先获取用户账户的余额,告诉用户还剩多少钱,余额通过_get_balance函数得到
 account_balance = _get_balance(account)
 # 高亮打印账户的余额信息
 print('您的账户余额是