目录:
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文件代码
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、没有给用户保存购物记录