项目2:购物车

目录:

1、程序功能

2、程序流程图

3、程序思路

4、程序源代码(含github地址)

5、程序不足


1、程序功能

1.1 用户接口
    功能1:用户输入帐号密码登录,若是新用户,可进行注册并在注册成功后自动登录,并查看自己当前余额,可进行充值(充值功能
    以文字描述模拟)
    功能2:用户可以查看商品列表(商品名称、价格、余量)
    功能3:用户可以把喜欢的商品加入购物车,若余额不足则无法加入购物车
    功能4:用户可以随时退出,若购物车不为空,则提示是否结账,若不结账则直接退出,若用户选择结账则购买成功
1.2 商家接口
    功能1:修改商品余量与价格
    功能2:商家可以上架新商品或者下架旧商品,支持批量操作

2、程序流程图


3、程序思路

    1、本程序有三个代码文件,一个启动文件shoppingcar.py文件,一个写了商家接口的business文件,一个写了客户接口
    的customer文件;本程序有两个txt文件,一个userdata.txt用于存储用户信息,一个goods_list.txt用于存储商品信息
    2、主要是用 if  elif  else 三个关键词配合构造出多条选择分支

    3、用户登录、注册相关的函数请参见本人博客:

      项目1:登录接口 

    4、用列表嵌套列表的数据形式来存储商品列表与用户的购物车信息
    5、本项目主要是熟悉列表的使用,写入文件与读取文件的方法,自定义函数的导入(分模块的书写方法)

4、程序源代码

1、shoppingcar文件代码

import myfile.customer
import myfile.business


# 注册函数
def sign_up():
    userdata = open("userdata.txt",'a+')
    username = input("请设定您的用户名:")
    password = input("请设定您的密码:")
    userdata.writelines(username+','+password+',0\n')       # 这里的0就是用户余额
    userdata.close()
    print(username,password)
    print("恭喜你完成了注册!\n")
    return username


# 登录函数
def sign_in(name, password):
    userdata = []
    f = open("userdata.txt",'r')
    readlines = f.readlines()
    for userline in readlines:
        userdata = userline.split(",")
        username = userdata[0]
        userpassword = userdata[1]
        balance = int(userdata[2].strip("\n"))
        if name == username:
            if password == userpassword:              # 情况1:登录成功
                return [1,username,balance]
            elif password != userpassword:            # 情况2:密码输入错误
                return [2,0,0]
    else:                                             # 情况3:找不到该用户
        return [0,0,0]
    f.close()


while True:
    choice1 = input("您好,请选择:1、商家登录  2、客户登录  3、客户注册 4、退出程序: ")
    if choice1 == "1":
        b_password = '123456'
        word = input("请输入商家登录密码:")
        if word == '123456':
            myfile.business.business()
        else:
            print('密码错误')
    elif choice1 == "2":
        username = input("请输入用户名:")
        password = input("请输入密码:")
        flag = 2
        while flag != 1:
            flag, user, balance = sign_in(username, password)
            if flag == "2":
                print("密码错误,请重新输入")
            elif flag == '3':
                print("找不到该用户")
            else:
                myfile.customer.customer(user, balance)
    elif choice1 == "3":
        user = sign_up()
        balance = 0
        myfile.customer.customer(user, balance)
    elif choice1 == "4":
        exit()
    else:
        print("输入错误,请重新输入")
2、customer文件代码
# 从商品文件中读出商品列表,并做初步处理
def get_list():
    f = open('goods_list.txt','r')
    lines = f.readlines()
    f.close()
    for i in lines:
        line = i.split(",")
        line[2] = line[-1].strip("\n")
        lines[lines.index(i)] = line
    return lines


# 把商品文件更新
def write_list(good_list):
    f = open('goods_list.txt','w')
    for i in good_list:
        f.writelines(i[0]+','+i[1]+','+str(i[2])+'\n')
    f.close()


# 把用户余额更新
def write_user(username,balance):
    f0 = open('userdata.txt', 'r')
    lines = f0.readlines()
    f0.close()
    f1 = open('userdata.txt', 'w')
    n = 0  # 索引变量
    for line in lines:  # 查找出对应的用户名在lines列表中的索引
        userline = line.split(",")
        if username == userline[0]:
            n = lines.index(line)
            break
    name = userline[0]
    password = userline[1]
    u_balance = balance
    new = name + "," + password + "," + str(u_balance) + "\n"
    lines[n] = new  # 把该元素更新
    for i in lines:
        f1.writelines(i)  # 把lines列表重新写入userdata.txt文件中
    f1.close()


# 购物函数
def shopping(goods_list,shopping_list,balance):          # 参数:商品列表、购物车列表、余额
    if len(goods_list) == 0:
        goods_list = get_list()                          # 从文件读出商品列表
    while True:
        print('%-8s%-8s%-8s%-8s'%('序号','商品名','价格','余量'))
        for i in goods_list:                             # 这个循环列出商品信息
            num = goods_list.index(i)+1
            print('%-10d%-10s%-10d%-10d' % (num, i[0], int(i[1]), int(i[2])))
        goods = int(input('请输入0退出购物,输入-1查看当前购物车,或输入欲购买的商品序号:'))
        if goods != 0 and goods != -1:
            if goods <= num:                              # 判断是否超过商品列表最大序号
                number = int(input('请输入0取消购买,或者输入欲购买的商品数量:'))
                if number != 0 :
                    if number > int(goods_list[goods-1][2]):     # 判断购买数量是否超过商品余量,若超过则按最大余量
                        number = int(goods_list[goods-1][2])
                    if balance > int(goods_list[goods-1][1]) * number:   # 判断余额是否足够
                        buy = [goods_list[goods-1][0],number]
                        shopping_list.append(buy)
                        goods_list[goods - 1][2] = int(goods_list[goods-1][2]) - number
                        balance = balance - int(goods_list[goods-1][1]) * number
                    else :
                        print("余额不足,无法加入购物车")
            else:
                print('输入错误,请重新输入')
        elif goods == -1:
            if len(shopping_list):
                for i in shopping_list:
                    print(i[0] + ',' + '数量:' + str(i[1]) + '\n')
            else: print('当前购物车为空')
        else: break
    return (goods_list,shopping_list,balance)


# 充值函数
def recharge(user,balance):
    money = int(input("请输入充值金额:"))
    if money >= 0:
        balance += money
    print("恭喜你充值成功,现在余额为:"+ str(balance))
    write_user(user,balance)
    return balance


# 客户接口
def customer(user, balance):
    print('欢迎' + user + ',' + '您的当前余额为:' + str(balance))
    shopping_list = []
    goods_list = []
    while True:
        print('/----------------------------------\欢迎光临XXX商城\------------------------------------/')
        c_choice1 = input('请选择:1、购物  2、充值  3、退出:')
        if c_choice1 == '1':
            goods_list,shopping_list,balance = shopping(goods_list,shopping_list,balance)
        elif c_choice1 == '2':
            balance = recharge(user,balance)
        elif c_choice1 == '3':
            if len(shopping_list):                   #判断购物车是否有东西
                print('当前购物车:\n')
                for i in shopping_list:
                    print(i[0] + ',' + '数量:' + str(i[1]) + '\n')
                flag = input("购物车不为空,请问是否结账退出:1、结账 2、不结账直接退出:")
                if flag == '1':
                    print("恭喜您,已购买商品:")
                    for i in shopping_list:
                        print(i[0] + ',' + '数量:' + str(i[1])+'\n')
                    print('当前余额:'+ str(balance))
                    write_list(goods_list)               # 变更文件
                    write_user(user,balance)
                    exit()
            else:
                exit()
        else :
            print("输入错误,请重新输入")
3、business文件代码
import copy

# 从商品文件中读出商品列表,并做初步处理
def get_list():
    f = open('goods_list.txt','r')
    lines = f.readlines()
    f.close()
    for i in lines:
        line = i.split(",")
        line[2] = line[-1].strip("\n")
        lines[lines.index(i)] = line
    return lines


# 打印当前库存的商品信息
def showlist(goods_list):
    print('%-8s%-8s%-8s%-8s'%('序号','商品名','价格','余量'))
    for i in goods_list:                             # 这个循环列出商品信息
        num = goods_list.index(i)+1
        print('%-10d%-10s%-10d%-10d' % (num, i[0], int(i[1]), int(i[2])))


# 更新商品信息文件
def write_list(new_list):
    f = open('goods_list.txt', 'w')
    for i in new_list:
        newline = i[0]+','+i[1]+','+i[2]+'\n'
        f.writelines(newline)
    f.close()


def change():
    goods_list = get_list()
    change_list = copy.deepcopy(goods_list)
    while True:
        showlist(change_list)
        chioce1 = int(input('请选择:0、返回上一级  1、单个商品修改  2、批量修改'))
        if chioce1 == 0:
            break
        elif chioce1 == 1:
            c1 = int(input('请输入想修改的商品序号:'))
            c2 = 1
            while c2 != 0:
                c2 = int(input('请输入0完成修改,或者选择修改项目:1、商品名称  2、商品单价  3、余量 '))
                if c2 == 1:
                    change_list[c1-1][c2-1] = input('请输入新的商品名称:')
                elif c2 == 2:
                    change_list[c1 - 1][c2 - 1] = input('请输入新的商品单价:')
                elif c2 == 3:
                    change_list[c1 - 1][c2 - 1] = input('请输入新的商品余量:')
        elif chioce1 == 2:
            p1 = input('请输入想修改的商品序号,并在各序号之间用逗号隔开(请使用英文输入法的逗号):')
            num = p1.split(',')
            p2 = 1
            while p2 != 0:
                p2 = int(input('请输入0完成修改,或者输入想批量修改的项:1、商品单价  2、商品余量'))
                if p2 == 1:
                    new1 = input('请输入新的商品单价:')
                    for i in num:
                        i = int(i)
                        change_list[i-1][p2] = new1
                if p2 == 2:
                    new2 = input('请输入新的商品余量:')
                    for i in num:
                        i = int(i)
                        change_list[i - 1][p2] = new2
        else: print('输入错误')
    if goods_list != change_list:
        print('/----------------------------------\***************\------------------------------------/')
        print('修改前:')
        showlist(goods_list)
        print('修改后:')
        showlist(change_list)
        chioce2 = input('是否保存此次修改? 1、保存修改   2、不保存修改:')
        if chioce2 == '1':
            write_list(change_list)
            print('保存成功!')


def add_goods():
    goods_list = get_list()
    change_list = copy.deepcopy(goods_list)
    add_list = []
    while True:
        showlist(change_list)
        chioce1 = input('请选择:0、返回上一级  1、上架商品 ')
        if chioce1 == '0':
            break
        elif chioce1 == '1':
            c1 = input('请输入0取消上架商品,或者输入上架商品名称:')
            if c1 != '0':
                c2 = input('请输入0取消上架商品,或者输入上架商品单价:')
                if c2 != '0':
                    c3 = input('请输入0取消上架商品,或者输入上架商品余量:')
                    if c3 != '0':
                        new = [c1,c2,c3]
                        add_list.append(new)
                        change_list.append(new)
    if goods_list != change_list:
        print('/----------------------------------\***************\------------------------------------/')
        print('此次上架商品列表如下:')
        showlist(add_list)
        chioce2 = input('是否保存此次修改? 1、保存修改   2、不保存修改:')
        if chioce2 == '1':
            write_list(change_list)
            print('保存成功!')


def del_goods():
    goods_list = get_list()
    change_list = copy.deepcopy(goods_list)
    del_list = []
    while True:
        showlist(change_list)
        chioce1 = input('请选择:0、返回上一级  1、下架商品 ')
        if chioce1 == '0':
            break
        elif chioce1 == '1':
            c1 = int(input('请输入想要下架的商品序号:'))
            print('即将下架此项商品:')
            print('商品名称:%s  商品单价:%s  商品余量:%s'%(change_list[c1-1][0],change_list[c1-1][1],change_list[c1-1][2]))
            c2 = input('请问是否确定:1、确定下架  2、取消下架')
            if c2 == '1':
                del_list.append(change_list[c1-1])
                del change_list[c1-1]
    if goods_list != change_list:
        print('/----------------------------------\***************\------------------------------------/')
        print('此次将下架以下商品:')
        showlist(del_list)
        chioce2 = input('是否保存此次修改? 1、保存修改   2、不保存修改:')
        if chioce2 == '1':
            write_list(change_list)
            print('保存成功!')


def business():
    print('恭喜你登录成功')
    while True:
        print('/----------------------------------\欢迎光临XXX商城\------------------------------------/')
        chioce = input('请选择:0、退出程序 1、修改商品信息(包括余量与单价)  2、上架货物  3、下架货物:')
        if chioce == '1':
            change()
        elif chioce == '2':
            add_goods()
        elif chioce == '3':
            del_goods()
        elif chioce == '0':
            exit()
        else:
            print('输入错误,请重新输入')

4、github:https://github.com/better-king/shoppingcar

5、程序不足

    1、用了太多if语句,使得函数显得臃肿,而且容易混乱
    2、缺少GUI
    3、用户余额不足时不能加入购物车与大多数现实情况不符,有点奇怪
    4、购物车只能在当次程序退出时选择结账或者不结账,购物车不能保存在文件中,下次再读取
    5、没有给用户保存购物记录

猜你喜欢

转载自blog.csdn.net/a971956955/article/details/80340429
今日推荐