python购物车优化
一.需求分析
- 拥有用户接口和商家接口
- 用户能够进行消费记录查询,充值,购物等功能,消费记录存储于数据库
- 商家可以进行商品的增删改等操作
二.程序流程图
程序大致流程图如下:
三.代码实现
本程序分成两部分,生成两个py函数,分别是DataAccess_txt.py和ShoopingCar.py,DataAccess_txt.py函数主要是用于编写一些数据库的操作接口,比如增删改操作,用户数据查询存储等操作。ShoopingCar.py用户主函数的编辑与处理,话不多说上代码:
DataAccess_txt.py程序代码如下:
import time#导入模块方法,用于系统时间获取 #查询数据库中的数据
def search_data_access():
goods=[]
fp = open('goods_info.txt','r')#打开商品信息表
lines = fp.readlines()
for line in lines:
goods.append(line.rstrip('\n').split(' '))#清楚格式转换成列表
for i in range(len(goods)):
print('%s 价格 :%s 库存 :%s'%(goods[i][0],goods[i][1],goods[i][2])) #删除商品操作
def delet_goods_opt(GoodName):
goods=[]
fp = open('goods_info.txt','r')
lines = fp.readlines()
for line in lines:
goods.append(line.rstrip('\n').split(' '))#清楚格式转换成列表
# for i in range(len(goods)):
# print('%s 价格 :%s 库存 :%s'%(goods[i][0],goods[i][1],goods[i][2]))
for i in range(len(lines)):
if GoodName == goods[i][0]:
print("删除商品%s成功!"%goods[i][0])
goods.remove(goods[i])
fp.close()
fp = open('goods_info.txt', 'w')
for i in range(len(goods)):
fp.write(' '.join(goods[i]) + '\n')
fp.close()
return
print("没有此商品信息,删除失败!") #添加商品操作
#参数说明:goodname 商品名 prace 价格 Num 库存量
def add_goods_opt(GoodName,prace,Num):
goods = []
fp = open('goods_info.txt', 'r')
lines = fp.readlines()
for line in lines:
goods.append(line.rstrip('\n').split(' ')) # 清楚格式转换成列表
T = False
for i in range(len(goods)):
if goods[i][0] == GoodName:
T = True
print("商品已存在,添加失败!")
return
Info = GoodName+' '+str(prace)+' '+str(Num)+'\n'
fp.close()
fp = open('goods_info.txt', 'a')
fp.write(Info)
fp.close()
print("添加商品%s成功!" %GoodName ) #修改商品参数
#参数说明:goodname 商品名 prace 价格 Num 库存量
def Change_goods_info(GoodName,prace,Num):
goods = []
fp = open('goods_info.txt', 'r')
lines = fp.readlines()
for line in lines:
goods.append(line.rstrip('\n').split(' ')) # 清楚格式转换成列表
for i in range(len(goods)):
if goods[i][0] == GoodName:
goods[i][1] = str(prace)
goods[i][2] = str(Num)
fp.close()
fp = open('goods_info.txt', 'w')
for i in range(len(goods)):
fp.write(' '.join(goods[i]) + '\n')
fp.close()
print("商品%s参数修改成功!"%(GoodName))
return
print("数据库中没有此商品,修改失败!") #查余额
def user_printAccountBalance(GoodName):
user_info=[]
fp = open('users_value.txt', 'r')
lines = fp.readlines()
for line in lines:
user_info.append(line.rstrip('\n').split(' ')) # 清除格式转换成列表
for i in range(len(user_info)):
if user_info[i][0] == GoodName:
print("\033[32;1m%s\033[0m的账户余额 :\033[32;1m%s\033[0m"%(GoodName,user_info[i][1]))
return #充值
# UserName :用户名,充值金额 :新老用户标识 新用户为True老用户为False
def user_TopUp(UserName,Value):
user_info = []
fp = open('users_value.txt', 'r')
lines = fp.readlines()
for line in lines:
user_info.append(line.rstrip('\n').split(' ')) # 清除格式转换成列表
for i in range(len(user_info)):
if user_info[i][0] == UserName:
user_info[i][1]=str(int(user_info[i][1])+Value)
fp.close()
fp = open('users_value.txt', 'w')
for temp in range(len(user_info)):
fp.write(' '.join(user_info[temp]) + '\n')
fp.close()
print("充值成功\033[32;1m%s\033[0m当前的账户余额 :\033[32;1m%s\033[0m" % (UserName, user_info[i][1]))
return
user_info = UserName + ' ' + str(Value) + '\n' # +' '+ (str(time.ctime())).replace(' ','')+'\n'
fp = open('users_value.txt', 'a')
fp.write(user_info)
fp.close()
print("新用户充值成功\033[32;1m%s\033[0m当前的账户余额 :\033[32;1m%s\033[0m" % (UserName, Value)) #查询用户消费记录
def user_RecordsConsumption(GoodName):
user_info = []
fp = open('users_info.txt', 'r')
lines = fp.readlines()
fp.close()
for line in lines:
user_info.append(line.rstrip('\n').split(' ')) # 清除格式转换成列表
T = False
for i in range(len(user_info)):
if GoodName == user_info[i][0]:
T=True
print('用户 :\033[32;1m%s\033[0m 购物清单 :%s 消费 :%s 日期 :%s'%(user_info[i][0],user_info[i][1],user_info[i][2],user_info[i][3]))
if T==False:
print("用户\033[32;1m%s\033[0m无消费记录!"%GoodName) #购物车
def user_ShoopCar(Username):
goods_info = []
ShoopCar = [] # 创建购物车列表
expense=0
fp = open('goods_info.txt', 'r')
f = open('users_value.txt','r')
ValueAccess = f.readlines()
lines = fp.readlines()
f.close()
fp.close()
for line in ValueAccess:
if line.split(' ')[0] == Username:
Salary = int(line.split(' ')[1])
for line in lines:
goods_info.append(line.rstrip('\n').split(' ')) # 清除格式转换成列表
while True:
for i, index in enumerate(goods_info):
print(i, index)
getNum = input("请输入要购买的商品编号,结算输入q :")
if getNum.isdigit():
getNum=int(getNum)
if Salary >= int(goods_info[getNum][1]):
ShoopCar.append(goods_info[getNum][0])
Salary = Salary - int(goods_info[getNum][1])
expense += int(goods_info[getNum][1])
if int(goods_info[getNum][2]) > 0:
goods_info[getNum][2] = str(int(goods_info[getNum][2])-1)
print("当前余额为 :\033[31;1m%s\033[0m"%Salary)
else:
print("余额不足!")
elif getNum=='q':
f = open('users_info.txt', 'a')
f.write( Username + ' ' + ','.join(ShoopCar) +' '+ str(expense) +' '+(str(time.ctime())).replace(' ','')+'\n')
f.close()
f = open('goods_info.txt', 'w')
for i in range(len(goods_info)):
f.write(' '.join(goods_info[i]) + '\n')
f.close()
value_info=[]
f = open('users_value.txt', 'r')
lines = f.readlines()
for line in lines:
value_info.append(line.rstrip('\n').split(' ')) # 清除格式转换成列表
f.close()
for i in range(len(value_info)):
if value_info[i][0] == Username:
value_info[i][1] = str(Salary)
f = open('users_value.txt', 'w')
for i in range(len(value_info)):
f.write(' '.join(value_info[i]) + '\n')
f.close()
break
else:
pass
ShoopingCar.py程序代码如下:
import DataAccess_txt#要导入DataAccess_txt.py这个模块 while True:
Num=input("1.用户界面,2.商家界面,输入q退出 :")
if Num.isdigit():
Num = int(Num)
if Num == 1:
username = input("Please Input The Username :")
DataAccess_txt.user_printAccountBalance(username)
while True:
UserChoose = input("1.查询购物记录,2.购物,3.充值,输入q返回上级目录 :")
if UserChoose.isdigit():
UserChoose = int(UserChoose)
if UserChoose == 1:
DataAccess_txt.user_RecordsConsumption(username)#查询购物记录
elif UserChoose == 2:
DataAccess_txt.user_ShoopCar(username)#购物车
elif UserChoose == 3:
value = int(input("请输入充值金额 :"))
DataAccess_txt.user_TopUp(username,value)#充值
elif UserChoose=='q':
break
else:
pass elif Num == 2:#商家界面
DataAccess_txt.search_data_access()#打印商品信息和库存
while True:
UserChoose = input("1.添加商品,2.修改商品信息,3.删除商品,输入q返回上级目录 :")
if UserChoose.isdigit():
UserChoose = int(UserChoose)
if UserChoose==1:
goodsname=input("请输入商品名 :")
goodsvalue=int(input("请输入商品价格 :"))
goodnum = int(input("请输入商品数量 :"))
DataAccess_txt.add_goods_opt(goodsname,goodsvalue,goodnum)#商品添加操作
elif UserChoose==2:
goodsname = input("请输入要修改的商品名 :")
goodsvalue = int(input("请输入商品价格 :"))
goodnum = int(input("请输入商品数量 :"))
DataAccess_txt.Change_goods_info(goodsname, goodsvalue,goodnum)
elif UserChoose==3:
goodsname = input("请输入要删除的商品名 :")
DataAccess_txt.delet_goods_opt(goodsname)
elif UserChoose=='q':
break
else:
pass
else:
pass
elif Num == 'q':
break
else:
pass
要注意的是必须要记得导入模块,不然没有办法使用自己编写的数据操作接口,ShoopingCar.py的第一行代码就是模块的导入,调用DataAccess_txt.py的数据操作接口时,以delet_goods_opt()删除商品信息接口为例,调用方法是DataAccess_txt.delet_goods_opt()。
数据库文件截图如下:
users_vlaue.txt文件存储的第一个数据参数为用户名,第二个参数为用户余额,参数之间用空格隔开
users_info.txt文件存储的第一个数据参数为用户名,第二个参数为用户购物商品记录,第三个参数为消费总数,第四个参数为日期
goods_info.txt文件存储的第一个数据参数为商品名,第二个参数为商品价格,第三个参数为库存总数
python购物车优化的更多相关文章
- 简单的python购物车
这几天,一直在学python,跟着视频老师做了一个比较简单的python购物车,感觉不错,分享一下 products = [['Iphone8',6888],['MacPro ...
- python性能优化
注意:本文除非特殊指明,”python“都是代表CPython,即C语言实现的标准python,且本文所讨论的是版本为2.7的CPython. python为什么性能差: 当我们提到一门编程语言的 ...
- Python内存优化
实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...
- python 购物车小程序
python 购物车小程序 功能要求:1.启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. ...
- Python内存优化:Profile,slots,compact dict
实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...
- Python性能优化(转)
分成两部分:代码优化和工具优化 原文:http://my.oschina.net/xianggao/blog/102600 阅读 Zen of Python,在Python解析器中输入 import ...
- python的优化机制与垃圾回收与gc模块
python属于动态语言,我们可以随意的创建和销毁变量,如果频繁的创建和销毁则会浪费cpu,那么python内部是如何优化的呢? python和其他很多高级语言一样,都自带垃圾回收机制,不用我们去维护 ...
- python购物车小案例
python购物车小案例# 案列描述:有一个小型水果店里面有水果(苹果:¥8/kg,香蕉:¥5/kg,芒果:¥15/kg,葡萄:¥12/kg),客户带了100元钱进店选购水果.# 1.客户输入相应序号 ...
- Python性能优化方案
Python性能优化方案 从编码方面入手,代码算法优化,如多重条件判断有限判断先决条件(可看 <改进python的91个建议>) 使用Cython (核心算法, 对性能要求较大的建议使用C ...
随机推荐
- java中NULL与" "的区别
null是没有地址""是有地址但是里面的内容是空的 null和""的区别 问题一: null和""的区别 String s=null; st ...
- SpringMVC找不到对应的页面
确认springmvc配置文件视图解析器配置正确. <!-- 视图解析器 --> <bean class="org.springframework.web.servlet. ...
- PHP介绍(PHP入门1)
BS架构和CS架构 B:Browser:浏览器 S:Server:服务器 C:Client:客户端 BS 浏览器和服务器的关系,通过浏览器来访问服务器,比如:百度.新浪... 优点:只要有浏览器就能访 ...
- H5页面手机端禁止缩放的正确方式
H5页面禁止手机端缩放是个常见问题了 首先说meta方式 <meta content="width=device-width, initial-scale=1.0, maximum-s ...
- 实施erp的建议
纺织行业实施ERP建议 (一)企业各层面应提高对ERP的认识 ERP项目的实施范围横跨企业的每一个部门,在实施过程中需要调动各个部门的资源,这首先需要企业领导者高度重视,从实施的各个环节给予支持:其次 ...
- navicat mysql 存储过程
存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. 一.基本数据类型:略 二.变量: 自定义变量:DECLARE a INT ; SET a=100; 可用以 ...
- redis常用数据类型操作命令集锦
redis操作命令集锦 redis中五种数据类型 1) 字符串 String 特点: 存储所有的字符和字符串 应用场景: 做缓存使用 2) 哈希 hash 特点: 相当于java中hashMap集合 ...
- linux3.4.2之dma驱动
1. 分配源地址.目的地址 src_addr = dma_alloc_writecombine(NULL,BUFF_SIZE, &psrc_addr,GFP_KERNEL); dst_addr ...
- SOC中的DFT和BIST对比与比较-IC学习笔记(二)
ATE:ATE是Automatic Test Equipment的缩写,根据客户的测试要求.图纸及参考方案,采用MCU.PLC.PC基于VB.VC开发平台,利用TestStand&LabVIE ...
- Machine Learning——吴恩达机器学习笔记(酷
[1] ML Introduction a. supervised learning & unsupervised learning 监督学习:从给定的训练数据集中学习出一个函数(模型参数), ...