代码1 - 购物车
题目: 购物车程序
业需求:
数据结构:
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]
功能要求:
基础要求:
1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
扩展需求:
1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
2、允许查询之前的消费记录
流程图
话不多,上代码:
#!/usr/bin/env python # _*_ coding: utf-8 _*_ """ @author: caimengzhi @license: (C) Copyright 2013-2017. @contact: 610658552@qq.com @software: pycharm 2017.02 @project: luffy @file: shopping_car.py @time: 2018/1/17 13:50 @desc: 数据结构: goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ...... ] 功能要求: 基础要求: 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 扩展需求: 1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 2、允许查询之前的消费记录 """ goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 100}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] # 高亮显示字体颜色 red = '\033[1;31;40m' # 红色 green = '\033[1;32;40m' # 绿色 blue = '\033[1;34;40m' # 蓝色 end = '\033[0m' # 无色 # 高亮闪烁显示字体颜色 red_twinkle = '\033[5;31;40m' # 红色,闪烁 green_twinkle = '\033[1;32;40m' # 绿色,闪烁 blue_twinkle = '\033[1;34;40m' # 蓝色,闪烁 # 预设账号和密码 USER_INFO = {"cmz": "cmz"} # 标题头 SYSTEM_AUTH_TITLE_MSG = " 购物车用户认证 ".center(50, "-") SYSTEM_GOODS_TITLE_MSG = "商品列表".center(40, '-') SYSTEM_SHOPPING_TITLE_MSG = "编号".ljust(4, " ") + "商品名称".ljust(8, " ") + "单价" # 用户,密码类错误 ERROR_INPUT_NULL = red + "抱歉,输入不能为空" + end ERROR_INPUT_ILLEGAL = red + '抱歉,输入必须是q/c或者商品编号' + end ERROR_GOODS_ID = "抱歉,该商品" + red + "编号不存在" + end ERROR_USER = red + "该账号不存在" + end ERROR_USER_NULL = red + "密码不能为空" + end ERROR_PWD_NULL = red + "密码不能为空" + end ERROR_PWD = red + "密码错误" + end # 工资类错误 ERROR_SALARY_NULL = red + "工资不能为空" + end ERROR_SALARY = "抱歉你输入的" + red + "工资" + end + "错误。请输入正确工资。" ERROR_SALARY_ZERO = red + "工资不能为零" + end # 通知类消息 INFO_INPUT_NAME = "请输入姓名:" INFO_INPUT_PWD = "请输入密码:" INFO_INPUT_SALARY = "请输入工资: " INFO_SHOPPING_CAR_NULL = "购物车空空的,抓紧去购物吧" INFO_SHOPPING_LIST = " 购物车列表 ".center(40, '-') INFO_INPUT_Q_C = "q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: " # 退出标志位 exit_flag = False exit_salary_flag = False exit_auth_flag = False buy_product_flag = False # 上次剩余的钱,上次购物车清单,本次购物车清单,初始化默认为0 shop_car = [] last_balance = 0 last_product = [] this_product = [] # 读取工资输入状态信息 with open("./data/system_salary_status.txt") as fd: for line in fd: exit_salary_flag = line # 读取上次购物情况 if exit_salary_flag: # 读取上次购物后的结余 with open("./data/account_balance.txt") as fd: for line in fd: last_balance = line salary = int(last_balance) # 读取上次购物车的清单 with open("./data/purchased_product.txt") as fd: for item in fd: last_product.append(eval(item)) for index in range(len(last_product)): last_product_dict = last_product[index] # 上次购物车商品导入到本次购物车 shop_car = last_product while not exit_flag: # 1. 身份认证环境(用户名和密码)环节 if not exit_auth_flag: print(SYSTEM_AUTH_TITLE_MSG) user_name = input(INFO_INPUT_NAME).strip() if user_name in USER_INFO: user_pwd = input(INFO_INPUT_PWD).strip() if not user_pwd: print(ERROR_PWD_NULL) elif user_pwd == USER_INFO[user_name]: # 用户名,密码验证成功 exit_auth_flag = True else: print(ERROR_PWD) elif not user_name: print(ERROR_USER_NULL) else: print(ERROR_USER) # 2. 身份认证成功后进入验证输入工资环境 if exit_auth_flag and not exit_salary_flag: salary = input(INFO_INPUT_SALARY).strip() if not salary: print(ERROR_SALARY_NULL) continue elif salary.isdigit(): salary = int(salary) if salary == 0: print(ERROR_SALARY_ZERO) else: exit_salary_flag = True else: print(ERROR_SALARY) # 3. 身份认证环节和工资输入环节都认证成功后进入购物环节 if exit_auth_flag and exit_salary_flag: if len(this_product) > 0 or len(last_product) > 0 or exit_salary_flag: print(SYSTEM_GOODS_TITLE_MSG) print(SYSTEM_SHOPPING_TITLE_MSG) for item, p in enumerate(goods, 1): print(" %s. %s %s" % (item, p["name"], p["price"])) user_choice = input(INFO_INPUT_Q_C).strip() # 3.1 购物详情计算 if user_choice.isdigit(): user_choice = int(user_choice) - 1 if user_choice < len(goods): # 输入的商品序号要在范围之内 p_item = goods[user_choice] # 选择的商品 if p_item["price"] <= salary: # 买得起环节 this_product.append(p_item) # 本次选择的商品放在本次购物车中 salary -= p_item["price"] # 减钱 buy_product_flag = True # 记录购买行为 print("商品" + blue + "%s" % p_item["name"] + end + "已经被添加到购物车了") print("当前你的余额: " + blue + "%s" % salary + end) else: # 买不起环节 print("当前你的余额: " + red + "%s" % salary + ",余额不足,无法购买该商品!" + end) else: print(ERROR_GOODS_ID) # 3.2 结束购物计算,(显示余额,购物车清单,存数据) elif user_choice == 'q' or user_choice == 'quit': print(INFO_SHOPPING_LIST) if len(this_product) == 0 and len(last_product) == 0: # 只要上次和本次都没有商品,就显示购物车为空 print(INFO_SHOPPING_CAR_NULL) else: shop_car = this_product + last_product # 购物车为上次和本次之和 print(SYSTEM_SHOPPING_TITLE_MSG) for item in range(len(shop_car)): print(" %s. %s %s" % (item + 1, shop_car[item]["name"], shop_car[item]["price"])) print("当前你的余额: " + blue + "%s" % salary + end) if buy_product_flag: # 要是本次购买了物品就存入 with open("./data/purchased_product.txt", "a+") as fd: # 购买的商品写入文件 for purchased_product in this_product: fd.write(str(purchased_product)) fd.write("\n") with open("./data/account_balance.txt", "w") as fd: # 余额写入文件 fd.write(str(salary)) with open("./data/system_salary_status.txt", "w") as fd: # 输入工资状态写入文件 fd.write(str(exit_salary_flag)) buy_product_flag = False exit_flag = True # 3.3 检查购物车清单(显示购物车清单,余额) elif user_choice == 'c' or user_choice == 'check': # 检查购物车情况 if len(this_product) == 0 and len(last_product) == 0: print(INFO_SHOPPING_CAR_NULL) else: shop_car = this_product + last_product # 购物车列表等于上次+本次 print(SYSTEM_GOODS_TITLE_MSG) print(SYSTEM_SHOPPING_TITLE_MSG) for item in range(len(shop_car)): print(" %s. %s %s" % (item + 1, shop_car[item]["name"], shop_car[item]["price"])) print("当前你的余额: " + blue + "%s" % salary + end) elif not user_choice: print(ERROR_INPUT_NULL) else: print(ERROR_INPUT_ILLEGAL)
项目文件目录介绍
本程序使用python3.5,使用pycharm IDE,亿图(流程图)
leco@leco:~/luffy/module_1/shopping_car$ tree .
.
├── data
│ ├── account_balance.txt # 存放余额
│ ├── purchased_product.txt # 存放上次购物车商品清单
│ └── system_salary_status.txt # 存放工资是否输入过的状态
├── README.txt # 重要文件(读我)
├── shopping_car.py # 主程序
└── 购物车流程图.bmp # 购物车流程图
以下是执行过程
# 第一次登录
leco@leco:~/luffy/module_1/shopping_car$ python3 shopping_car.py
---------------------- 系统认证 ----------------------
请输入姓名:cmz
请输入密码:cmz
请输入工资: 3000
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: c
购物车空空的,抓紧去购物吧
当前你的余额: 3000
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: 1
商品电脑已经被添加到购物车了
当前你的余额: 1001
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: c
-----------------购物车清单------------------
编号 商品名称 单价
1. 电脑 1999
当前你的余额: 1001
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: 2
商品鼠标已经被添加到购物车了
当前你的余额: 901
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: c
-----------------购物车清单------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
当前你的余额: 901
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: q
---------------- 购物车列表 -----------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
当前你的余额: 901
# 第二次登录
leco@leco:~/luffy/module_1/shopping_car$ python3 shopping_car.py
---------------------- 系统认证 ----------------------
请输入姓名:cmz
请输入密码:cm
密码错误
---------------------- 系统认证 ----------------------
请输入姓名:cm
该账号不存在
---------------------- 系统认证 ----------------------
请输入姓名:cmz
请输入密码:
密码不能为空
---------------------- 系统认证 ----------------------
请输入姓名:cmz
请输入密码:cmz
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: c
-----------------购物车清单------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
当前你的余额: 901
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: 3
商品游艇已经被添加到购物车了
当前你的余额: 881
------------------商品列表------------------
编号 商品名称 单价
1. 电脑 1999
2. 鼠标 100
3. 游艇 20
4. 美女 998
q[退出]/c[检查购物车],是否想购物?,是请输入商品编号: q
---------------- 购物车列表 -----------------
编号 商品名称 单价
1. 游艇 20
2. 电脑 1999
3. 鼠标 100
当前你的余额: 881