python 购物车优化

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-31 20:54   63   0

要求:
1.个人账户(存在文件里面)。里面有用户名 密码 重复登录次数(3次登录失败锁定) 余额。
2.显示商品列表,让用户根据序号选择商品,加入购物车
3.商品列表也是个文件,商品如果特别多要进行分页。
4.购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
5.查看个人购物记录。
6.个人购物记录支持模糊匹配
7.具有充值功能

文件:

shopping

mk|显示器|电脑
ii|桌子

goods (存放商品)

电脑|1999
鼠标|10
游艇|20
美女|998
手机|5000
mac|6000
钱包|300
书|60
杯子|50
被子|100
显示器|600
桌子|300
 

db (存放用户名,密码,余额,登陆次数)

mk|1|49999933|0
1|1|0|0
kk|1|0|0
ii|1|4660|0
    
#!/usr/bin/python
# -*- coding:utf-8 -*-

######打开文件######
f1 = open('db', 'r')
f2 = f1.read()
f1.close()
g1 = open('goods', 'r', encoding='utf-8')
s1 = open('shopping','r',encoding='utf-8')
g2 = g1.read()
s2 = s1.read()
g1.close()
s1.close()

user_goods = []
user_dict = {}
gwc = []
u_list = []
shopping = {}
user = input("请输入用户名:")


######将打开的文件转换为list,dict等格式######
for i in f2.split("\n"):
    b = i.split("|")
    #print(b)
    v = {
        #    'name':b[0],
        'passwd':b[1],
        'ye': b[2],
        'times': b[3]
    }
    # print(v)
    user_dict[b[0]] = v
#print('user_dict',user_dict)

for ii in g2.split("\n"):
    bb = ii.split("|")
    #   print(b)
    vv = {
          'name':bb[0],
        'price': bb[1],
    }
    # print(vv)
    user_goods.append(vv)
#print(user_goods)

for ii in s2.split("\n"):
    cc = ii.split("|")
    ac = []
    for j in range(1,len(cc)):
        vvv = [
            cc[j],
        ]
        ac.append(vvv)
        cf = []
        for i in range(len(ac)):
            b = "".join(str(ac[i][0]))
            cf.append(b)
        #print('cf',cf)
        shopping[cc[0]] = cf
    #print('sp',shopping)
    if user in shopping:
        pass
    else:
        shopping[user] = []
    #print(shopping)


################定义相关函数####################


#定义输出商品序号和商品名的函数
def Choose():
    if choose == 'x':
        pages = len(user_goods) // 10 + 1
        n = input("商品共有%s页,请输入选择的页码:" % pages)
        start = (int(n) - 1) * 10
        end = int(n) * 10
        for i, j in enumerate(user_goods[start:end], start+1):
            print(i, j["name"], j["price"])


#添加购物车
def sp():
    Choose()
    while True:
        n = input("请选择你的物品或输入q返回:")
        if 'q' == n:
            gw()
        else:
           # print(user_goods)
            gwc.append(user_goods[int(n)-1]["name"])
            print('%s您好!%s已加入购物车!' % (user,gwc))


#定义删除商品后输出购物车列表的函数
def rm_i():
    for i, j in enumerate(gwc,1):
        print(i, j)


#定义删除商品的函数
def rm():
    rm_i()
    while True:
        r = input("请输入您要删除商品的编号或输入q返回:")
        if r == 'q':
            gw()
        else:
            del gwc[int(r)-1]
            rm_i()
            continue

#查看余额或充值
def top():
    top_up = input("您的余额为:%s,输入yes充值,输入任意键返回:" % user_dict[user]["ye"])
    if top_up == 'yes':
        money = input("请输入充值的金额:")
        user_dict[user]["ye"] = int(user_dict[user]["ye"]) + int(money)
        yuan = int(user_dict[user]["ye"]) - int(money)
        print('您原余额为%s,充值成功后余额为%s元!' % (yuan,user_dict[user]["ye"]))
        gw()
    else:
        gw()


#########结算############
def js():
    print('您的购物车>>>%s' % gwc)
    jg = []
    for i in gwc:
        for ii, j in enumerate(user_goods):
            if i == j["name"]:
                jg.append(j["price"])
    num = 0
    for i in jg:
        num = num + int(i)
        #    print(num)
    user_dict[user]["ye"] = int(user_dict[user]["ye"]) - int(num)
    if user_dict[user]["ye"] >= 0:
        print('您的余额为%s' % user_dict[user]["ye"])
       # print('ppp',shopping)
        for uu in gwc:
            shopping[user].append(uu)

        xr()
        shw()
        exit()
    else:
        print('您的余额不足!!!余额为%s' % user_dict[user]["ye"])
        gw()

#定义写入文件db和shopping的函数
def xr():
    for i, j in user_dict.items():
        b_xr = '|'.join(map(str, [i, j["passwd"], j["ye"], j["times"]]))
        u_list.append(b_xr)
    cxr = "\n".join(u_list)
    gg1 = open("db",'w',encoding='utf-8')
    gg2 = gg1.write(cxr)
    gg1.close()


def shw():
    lol=[]
    for i,j in shopping.items():
        a = i + "|" + '|'.join(shopping[i])
        lol.append(a)
    gg = '\n'.join(map(str,lol))
    #print(gg)
    ss = open('shopping','w',encoding='utf-8')
    ss2 = ss.write(gg)
    ss.close()



############查看个人购物纪录###########
def shop():
    print('%s您好!!!\n您之前的购物纪录为:%s \n当前的购物车为:%s' % (user,shopping[user],gwc))
    spg = int(input('继续购物:1,结算:2,通过关键词查询纪录:3:'))
    if spg == 1:
        gw()
    elif spg ==2:
        js()
    elif spg == 3:
        y = input('输入您要查询的关键词:')
        for i in shopping[user]:
            pass
            if y in i:
                print(i)
                print('%s您购买过%s,%s次' % (user,i,shopping[user].count(i)))
                print(b)
                shop()


####################购物######################
def gw():
    global choose
    choose = input('''
    添加购物车:x
    删除购物成商品:r
    查看余额或充值:c
    结账并退出:j
    查看购物纪录:p
    直接退出:q
    请输入:''')
    if choose == 'x':
        sp()
    elif choose =='r':
        rm()
    elif choose == 'c':
        top()
    elif choose == 'q':
        exit()
    elif choose == 'p':
        shop()
    elif choose == 'j':
        js()

#################用户登陆,新用户注册#################
if user in user_dict.keys():
    if user_dict[user]["times"] == '3':
        print('您的用户已被锁定,请联系管理员:')
    else:
        i = 0
        while i < 3:
            passwd = input("输入您的密码:")
            if user_dict[user]["passwd"] == passwd:
                print('登陆成功')
                gw()
            i = i + 1
        else:
            user_dict[user]["times"] = 3
            print("您的密码被锁")

else:
    print('没有注册')
    user = input("请输入注册姓名")
    passwd = input("请输入密码")
    password = input("再次输入密码")
    if passwd == password:
        print("注册成功")
        price = input("您是新用户,余额为0,充值输入yes,否为no:")
        if price == 'yes':
            jine = input("请输入充值金额:")
            u_x ={
                "passwd":password,
                "ye":jine,
                "times":0
            }
            user_dict[user]=u_x
#            print(user_dict)
        else:
            u_x = {
                "passwd": password,
                "ye":0,
                "times": 0
            }
            user_dict[user] = u_x
        gw()
    else:
        print("您输入的密码与上次不一致")

#print(user_dict)

转载于:https://www.cnblogs.com/ma-ke/p/6894786.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP