一.需求分析

  1. 拥有用户接口和商家接口
  2. 用户能够进行消费记录查询,充值,购物等功能,消费记录存储于数据库
  3. 商家可以进行商品的增删改等操作

二.程序流程图

  程序大致流程图如下:

  

三.代码实现

  本程序分成两部分,生成两个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购物车优化的更多相关文章

  1. 简单的python购物车

                 这几天,一直在学python,跟着视频老师做了一个比较简单的python购物车,感觉不错,分享一下 products = [['Iphone8',6888],['MacPro ...

  2. python性能优化

      注意:本文除非特殊指明,”python“都是代表CPython,即C语言实现的标准python,且本文所讨论的是版本为2.7的CPython. python为什么性能差: 当我们提到一门编程语言的 ...

  3. Python内存优化

    实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...

  4. python 购物车小程序

    python 购物车小程序 功能要求:1.启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. ...

  5. Python内存优化:Profile,slots,compact dict

    实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...

  6. Python性能优化(转)

    分成两部分:代码优化和工具优化 原文:http://my.oschina.net/xianggao/blog/102600 阅读 Zen of Python,在Python解析器中输入 import ...

  7. python的优化机制与垃圾回收与gc模块

    python属于动态语言,我们可以随意的创建和销毁变量,如果频繁的创建和销毁则会浪费cpu,那么python内部是如何优化的呢? python和其他很多高级语言一样,都自带垃圾回收机制,不用我们去维护 ...

  8. python购物车小案例

    python购物车小案例# 案列描述:有一个小型水果店里面有水果(苹果:¥8/kg,香蕉:¥5/kg,芒果:¥15/kg,葡萄:¥12/kg),客户带了100元钱进店选购水果.# 1.客户输入相应序号 ...

  9. Python性能优化方案

    Python性能优化方案 从编码方面入手,代码算法优化,如多重条件判断有限判断先决条件(可看 <改进python的91个建议>) 使用Cython (核心算法, 对性能要求较大的建议使用C ...

随机推荐

  1. SpringMVC找不到对应的页面

    确认springmvc配置文件视图解析器配置正确. <!-- 视图解析器 --> <bean class="org.springframework.web.servlet. ...

  2. 11JavaScript事件

    JavaScript 事件 HTML 事件是发生在 HTML 元素上的事情. 当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件. 1.HTML 事件 HT ...

  3. Redis 之武林大会 - 哨兵(Sentinel)

    前言 Redis在出从复制的模式下,一旦主节点由于故障不能提供服务,需要人工降从节点晋升为主节点,同时还要通知应用方更新主节点的地址,在很多应用场景下,这样的故障处理方式是无法被接受的.不过幸运的是R ...

  4. STM32F4寄存器编写跑马灯例程

    最近由于在学习STM32看到别人用寄存器编程控制跑马灯,于是自己也想试一试.可是试了好久终究弄不出来.回头看了下库函数的调用关系才搞明白.首先通过查看GPIOA的设置函数发现设置如下: void GP ...

  5. PTA基础编程题目集6-5求自定类型元素的最大值 (函数题)

    原题目: 本题要求实现一个函数,求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Max( ElementType S[], ...

  6. python学习之路_字符编码

    字符编码及python中的转码问题,这篇博客讲的比较清楚,python 之路,致那些年,我们依然没搞明白的编码

  7. 并查集(模板&典型例题整理)

    参考:https://blog.csdn.net/oliver233/article/details/70162173 带路径压缩模板: #include<stdio.h> ]; int ...

  8. python2.7入门---多线程

        多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹 ...

  9. 20155307 2016-2017第三次《Java程序设计》课堂实践项目

    码云链接 我使用电脑端登录的云班课,截图已经放上去了,却忘了点提交.

  10. 20145310 《Java程序设计》第10周学习总结

    20145310 <Java程序设计>第10周学习总结 教材学习内容总结 网络概述 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置 ...