python购物车优化

一.需求分析

  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('
').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('
').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]) + '
')
            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('
').split(' '))  # 清楚格式转换成列表
    T = False
    for i in range(len(goods)):
        if goods[i][0] == GoodName:
            T = True
            print("商品已存在,添加失败!")
            return
    Info = GoodName+' '+str(prace)+' '+str(Num)+'
'
    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('
').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]) + '
')
            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('
').split(' '))  # 清除格式转换成列表
    for i in range(len(user_info)):
        if user_info[i][0] == GoodName:
            print("33[32;1m%s33[0m的账户余额 :33[32;1m%s33[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('
').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]) + '
')
            fp.close()
            print("充值成功33[32;1m%s33[0m当前的账户余额 :33[32;1m%s33[0m" % (UserName, user_info[i][1]))
            return
    user_info = UserName + ' ' + str(Value) + '
'  # +' '+ (str(time.ctime())).replace(' ','')+'
'
    fp = open('users_value.txt', 'a')
    fp.write(user_info)
    fp.close()
    print("新用户充值成功33[32;1m%s33[0m当前的账户余额 :33[32;1m%s33[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('
').split(' '))  # 清除格式转换成列表
    T = False
    for i in range(len(user_info)):
        if GoodName == user_info[i][0]:
            T=True
            print('用户 :33[32;1m%s33[0m 购物清单 :%s 消费 :%s 日期 :%s'%(user_info[i][0],user_info[i][1],user_info[i][2],user_info[i][3]))
    if T==False:
        print("用户33[32;1m%s33[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('
').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("当前余额为 :33[31;1m%s33[0m"%Salary)
            else:
                print("余额不足!")
        elif getNum=='q':
            f = open('users_info.txt', 'a')
            f.write( Username + ' ' + ','.join(ShoopCar) +' '+ str(expense) +' '+(str(time.ctime())).replace(' ','')+'
')
            f.close()
            f = open('goods_info.txt', 'w')
            for i in range(len(goods_info)):
                f.write(' '.join(goods_info[i]) + '
')
            f.close()
            value_info=[]
            f = open('users_value.txt', 'r')
            lines = f.readlines()
            for line in lines:
                value_info.append(line.rstrip('
').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]) + '
')
                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文件存储的第一个数据参数为商品名,第二个参数为商品价格,第三个参数为库存总数

原文地址:https://www.cnblogs.com/wangxingwei/p/9353281.html