目录:
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、用户登录、注册相关的函数请参见本人博客:
4、用列表嵌套列表的数据形式来存储商品列表与用户的购物车信息5、本项目主要是熟悉列表的使用,写入文件与读取文件的方法,自定义函数的导入(分模块的书写方法)
4、程序源代码
1、shoppingcar文件代码
扫描二维码关注公众号,回复:
887615 查看本文章
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、没有给用户保存购物记录