7.11 练习6-简单实现购物系统(300行代码)
7.11 练习6-简单实现购物系统(300行代码)
实现功能:0:注册;1:登录;2:购物;3:购物车;4:结账;q:退出
user_info_dict=dict() #记录用户登录信息:用户名:name,密码:password,余额:15000,锁定状态:0
shopping_car_dict=dict() #购物车字典:{商品名称:[价格,购买数量]}
#以下为辅助函数
def input_username_pwd():
'''
输入用户名密码
:return:
'''
username = input("username>>").strip()
password = input("password>>").strip()
return username,password
def save_file_a(filename,content):
'''
a模式文件
:param filename: 文件名
:param content: 写入内容
:return:
'''
with open(filename, 'a', encoding='utf-8') as f_a:
f_a.write(content)
def save_file_w(filename,content):
'''
w模式保存文件
:return:
'''
with open(filename, 'w', encoding='utf-8') as f_w:
f_w.write(content)
return True
def read_file(filename):
'''
r模式读取文件
:return:
'''
with open(filename, 'r', encoding='utf-8') as f_r:
data_list=f_r.readlines()#每一行作为列表元素
return data_list
def total_price():
'''
打印购物车内商品清单,计算购物车内商品总金额
:return: 总金额
'''
goods_price_total = 0
print('您的购物车有如下产品')
# shopping_goods:产品名称,goods_price_num:(价格,购买数量)
for shopping_goods in shopping_car_dict:
print(f'{shopping_goods}数量为{shopping_car_dict[shopping_goods][1]}')
num = shopping_car_dict[shopping_goods][1]
price = shopping_car_dict[shopping_goods][0]
goods_price_total += num * price # 总价格
return goods_price_total
def login_deco(func):
def wrapper(*args, **kwargs):
if not user_info_dict:
login_res=login()
if login_res==True:
res=func(*args, **kwargs)
return res
else:
print('登录失败!!')
res=func(*args, **kwargs)
return res
return wrapper
#以下为主要功能函数
def register():
'''
注册
:return:
'''
print('\033[1;31;40m欢迎使用注册功能!!\033[0m'.center(50,'-'))
while True:
username, pwd = input_username_pwd()
# 判断用户名是否存在
user_info_data_list = read_file('7.11userinfo.txt')
for user_info in user_info_data_list:
user_list=user_info.strip().split(':')
username_file = user_list[0]
if username_file == username:
print('用户名已存在,请重新注册!!')
break
else:
save_file_a('7.11userinfo.txt', f'{username}:{pwd}:15000:0\n')
print('注册成功!!')
break
def login():
'''
登录三次不成功后退出
:return:
'''
print('\033[1;31;40m欢迎使用登录功能!!\033[0m'.center(50,'-'))
count=0
while count<3:
username, pwd = input_username_pwd()
user_info_data_list = read_file('7.11userinfo.txt')
for user_info in user_info_data_list:
#姓名,密码,余额,锁定状态
user_list = user_info.strip().split(':')
username_file = user_list[0]
pwd_file = user_list[1]
extra=int(user_list[2]) #余额
lock_num=user_list[3] #注意转换为整型判断
lock_num_int=int(lock_num)
if username_file == username and pwd_file == pwd:
if lock_num_int == 0:
print('登陆成功!')
user_info_dict['username']=username_file
user_info_dict['pwd']=pwd_file
user_info_dict['extra']=extra
user_info_dict['lock_num']=lock_num
return True
else:
print('账户已冻结!')
return False
else: #for 循环没有被break/return 时执行
count += 1
if count==3:
return False
print('账号密码错误,请重新输入')
@login_deco
def shopping():
'''
购物
:return:
'''
print('\033[1;31m欢迎使用购物功能!!\033[0m'.center(50,'-'))
goods_dict={
'0': ('book',100),
'1': ('cup', 1000),
'2': ('car', 100000),
'3': ('watch', 50000),
'4': ('iphone', 10),
'5': ('apple', 15),
'q': '退出'
}
while True:
print('商品清单如下:')
for ind,goods in goods_dict.items():
print(ind,goods)
#商品序号
goods_choice = input('请选择你要加购的商品序号(q退出)>>').strip()
if goods_choice == 'q': break
if goods_choice not in goods_dict:
print('输入错误,请重新输入!!')
continue
#goods_num_choice:商品数量
goods_num_choice=input(f'请输入你要加购商品的数量(q退出)>>').strip()
if goods_num_choice == 'q': break
if not goods_num_choice.isdigit():
print('数量输入错误,请重新输入')
continue
goods_num_choice_int=int(goods_num_choice)
#shopping_goods:购买的商品名称
shopping_goods=goods_dict[goods_choice][0]
print(f'你购买的{goods_num_choice_int}件{shopping_goods}已经加入购物车,请前往购物车查看。')
#记录购买商品和数量
if not shopping_car_dict.get(shopping_goods):
shopping_car_dict[shopping_goods]=[goods_dict[goods_choice][1],goods_num_choice_int]
else:
shopping_car_dict[shopping_goods][1]+=goods_num_choice_int
print(shopping_car_dict)
@login_deco
def shopping_car():
'''
购物车
:return:
'''
if len(shopping_car_dict)==0:
print('购物车为空,请去商城添加需要购买商品!!')
return
#记录已加入购物车商品名称列表,方便用户选择
# [('cup', 1000)]
shopping_goods_list = []
for goods in shopping_car_dict:
# goods:(商品名,价格)
shopping_goods_list.append(goods)
print('\033[1;34m欢迎使用购物车功能!!\033[0m'.center(50, '-'))
# 打印购物车信息,计算总价
while True:
goods_price_total = total_price()
if goods_price_total <= user_info_dict['extra']:
print('请前往结账功能买单!!')
break
if goods_price_total > user_info_dict['extra']:
print('余额不足,无法购买,平台无法充值,请修改购物数量。')
while True:
print('您的购物车有如下产品')
for ind, goods in enumerate(shopping_goods_list):
print(f'{ind}:{goods}-{shopping_car_dict[goods][1]}件')
modify_ind = input('请选择你要修改的产品编号(q退出)>>').strip()
if modify_ind == 'q': break
modify_ind = int(modify_ind)
modify_num = input('请选择你要修改的商品数量(q退出)').strip()
if modify_num == 'q': break
modify_num = int(modify_num)
shopping_car_dict[shopping_goods_list[modify_ind]][1] = modify_num
@login_deco
def chek():
'''
结账
:return:
'''
print('\033[1;32m欢迎使用结账功能!!\033[0m'.center(50,'-'))
shopping_goods_list = []
for goods in shopping_car_dict:
# goods:(商品名,价格)
shopping_goods_list.append(goods)
goods_price_total=total_price()
if goods_price_total<=user_info_dict['extra']:
print('结账中')
print(f'您的余额为{user_info_dict["extra"]},商品总价为{goods_price_total}')
Confirm=input('是否确认支付:y/n (n退出系统)>>')
if Confirm == 'y':
user_info_dict['extra'] -= goods_price_total
print(f'结账成功!!\n您的余额为{user_info_dict["extra"]}\n祝您购物愉快!!')
#清空购物车
shopping_car_dict.clear()
else:
print('您已取消支付!!')
return
#功能字典
func_dict={
0:register,
1:login,
2:shopping,
3:shopping_car,
4:chek,
'q':quit
}
func_msg='''
0:注册;1:登录;2:购物;3:购物车;4:结账;q:退出
'''
while True:
print(func_msg)
func_choice=input('请输入你想要使用的功能>>').strip()
#退出
if func_choice=='q':
print('您已退出系统')
break
#判断非法输入
if not func_choice.isdigit():
print('非法输入,请重新选择')
continue
func_choice_int=int(func_choice)
if func_choice_int not in func_dict:
print('非法输入,请重新选择')
continue
# 正常输入
func_dict[func_choice_int]()
浙公网安备 33010602011771号