zoukankan      html  css  js  c++  java
  • 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文件存储的第一个数据参数为商品名,第二个参数为商品价格,第三个参数为库存总数

  • 相关阅读:
    C# 缓存介绍与演示(转)
    sql server 2005中表的数据与excel互相导入导出的方法
    java.exe,javac.exe,javaw.exe,jar,javadoc 区别
    C# 装箱和拆箱、理论概念(非原创)
    Maven概述(非原创)
    理解java String(非原创)
    JVM JRE JDK区别于联系(非原创)
    LINQ to SQL与LINQ to Entities场景之对照(非原创)
    J2EE系统开发环境配置
    ASP.NET MVC 拦截器(转)
  • 原文地址:https://www.cnblogs.com/wangxingwei/p/9353281.html
Copyright © 2011-2022 走看看