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 ...
随机推荐
- winrar 弹窗处理
https://www.rarlab.com/ 1.下载英文版 2.把下面这段code文本复制到一个新建的记事本txt文档中,然后另存为rarreg.key文件,注意后缀名.txt改为.key才行. ...
- 获取某商家当前每个月销量sql语句。
用两个mysql函数 FROM_UNIXTIME( ordertime )将日期格式转换成时间戳 month( FROM_UNIXTIME( ordertime ) ) 获取当前日期的月 select ...
- log4j与logback包冲突原因及解决,不可忽视的Warning
场景 一个简单的spring-boot程序,需要用kafka做消息队列,于是在maven中引入kafka依赖,一切看似没问题,在启动时,打印出Warning信息: SLF4J: Class path ...
- 高性能MySQL--创建高性能的索引
关于MySQL的优化,相信很多人都听过这一条:避免使用select *来查找字段,而是要在select后面写上具体的字段. 那么这么做的原因相信大家都应该知道:减少数据量的传输. 但我要讲的是另外一个 ...
- 使用tp3.2和mbUploadify.js上传图片的代码,记录一下
HTML: <div class="form-group"> <label class="col-sm-1 control-label no-paddi ...
- Hadoop系列-HDFS基础
基本原理 HDFS(Hadoop Distributed File System)是Hadoop的一个基础的分布式文件系统,这个分布式的概念主要体现在两个地方: 数据分块存储在多台主机 数据块采取冗余 ...
- 嵌入式C语言自我修养 13:C语言习题测试
13.1 总结 前面12节的课程,主要针对 Linux 内核中 GNU C 扩展的一些常用 C 语言语法进行了分析.GNU C 的这些扩展语法,主要用来完善 C 语言标准和编译优化.而通过 C 标准的 ...
- keil编译运行错误,缺少error:#5:#include "core_cm3.h"
用Keil vision5编译时出现以下错误:error: #5: cannot open source input file "core_cm3.h": No such fi ...
- kubernetes常用基础命令
创建资源对象 创建名为nginx-deploy的控制器资源对象 [root@master ~]# kubectl run nginx-deploy --image=nginx:1.12 --repli ...
- C语言之数组和函数
数组 一维数组 定义:类型符 数组名 [常量表达式] int a[]={1,2,3,4,5,}; #include<stdio.h> #define NUM 6 void main() ...