'''
作业:用函数完成登录注册以及购物车的功能。
1,启动程序,用户可选择四个选项:登录,注册,购物,退出。
2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中。
3,用户登录,用户名密码从文件中读取,进行三次验证,验证不成功则退出整个程序。
4,用户登录成功之后才能选择购物功能进行购物,购物功能(就是将购物车封装到购物的函数中)。
5,退出则是退出整个程序。
'''
flag_login = 0
def register(): # 定义注册函数
while 1:
global flag_login
flag_login = 0 # 将登录状态重置为退出状态
register_name = input('请输入注册用户名:')
register_password = input('请输入注册密码:')
f1 = open('name_password', encoding='utf-8', mode='r+')
content = f1.read()
f1.write(register_name + '|' + register_password + '\n')
f1.close()
# for i in range(len(content)):
if register_name in content:
print('用户名已被注册,请重新输入')
continue
else:
print('恭喜你注册成功。')
break
def sign_in(): # 定义登录函数
while 1:
n = 0
sign_in_name = input('请输入登录用户名:')
sign_in_password = input('请输入密码:')
f1 = open('name_password', encoding='utf-8', mode='r')
for line in f1:
content = line.strip().split('|')
if sign_in_name == content[0] and sign_in_password == content[1]:
print('恭喜你登录成功。')
global flag_login # 在局部将flag_login定义为一个全局变量
flag_login = 1 # 标识登录状态,0-表示未登录状态,1-表示登录状态
break
else:
n = n + 1
if n > 3: # 进行3次验证
print('用户名或者密码错误。')
break
f1.close()
break
def shopping(): #定义购物车函数
if flag_login == 0:
print('未登录系统,无法进行购物。')
if flag_login == 1:
goods = {
1: {'name': '电脑', 'price': 1999},
2: {'name': '鼠标', 'price': 10},
3: {'name': '键盘', 'price': 50},
4: {'name': '显示器', 'price': 1000},
}
# 定义我的账户
my = {
'account_balance': 0, # 账户余额默认为0
'shopping_cart': {}, # 购物车默认为空
'order': {} # 订单默认为空
}
# 按照商品序号存储购买数量
dic1 = {
1: {'name': '电脑', 'price': 1999, 'num': ''},
2: {'name': '鼠标', 'price': 10, 'num': ''},
3: {'name': '键盘', 'price': 50, 'num': ''},
4: {'name': '显示器', 'price': 1000, 'num': ''},
}
# 用户进行充值
while True:
charge = input('账户余额为0 ,请您充值:') # 首先进行账户充值
if charge.strip().replace('.', '', 1).isdigit():
my['account balance'] = charge
charge = int(charge)
print('恭喜您,充值成功' + ',' + '账户余额为' + my['account balance'])
break
else:
print('您的充值失败,请您重新充值')
continue
# 商品页面显示
for k, v in goods.items():
print(k, v['name'], v['price'])
count = 0
balance = 0
while True:
goods_serial_number = input('请选择您购买的商品序号:').upper()
# 用户输入Q或者q退出购买程序
if goods_serial_number == 'Q':
if my['shopping_cart'] == '':
print('账户余额:' + str(balance))
print('总共花费金额:' + str(charge - balance))
elif my['shopping_cart'] != '':
for k, v in dic1.items():
if k in my['shopping_cart'].items():
dic1[k]['name'] = my['shopping_cart'][k]
print(v['name'], v['price'], v['num'])
print('总共花费金额:' + str(charge - balance))
print('账户余额:' + str(balance))
break
# 用户输入n进行购物车结算
elif goods_serial_number == 'N':
for i in dic1.keys():
if i in my['shopping_cart'].keys():
dic1[i]['num'] = my['shopping_cart'][i]
for l in dic1.keys(): # 依次显示用户购物车里面的商品,数量及单价
if l in my['shopping_cart'].keys():
msg = '''
---------------------购买信息------------------
商品名称:%(name)s 商品数量:%(num)s 商品单价:%(price)s
--------------------end---------------------
''' % dic1[l]
print(msg)
else:
pass
# 计算各个商品的总价
for k in dic1:
if k in my['shopping_cart']:
count = dic1[k]['num'] * dic1[k]['price'] + count # 计算花费金额
balance = charge - count # 计算账户余额
if balance >= 0:
print('恭喜您,购买成功!')
elif balance < 0:
print('余额不足,请删除部分商品。')
while balance < 0:
del_goods_serial_number = input('请输入删除物品的序号:').upper()
if (del_goods_serial_number == 'Q') or (del_goods_serial_number == 'N'):
break
elif del_goods_serial_number.isdigit():
if int(del_goods_serial_number) in my['shopping_cart']:
if my['shopping_cart'][int(del_goods_serial_number)] >= 1:
my['shopping_cart'][int(del_goods_serial_number)] = my['shopping_cart'][int(
del_goods_serial_number)] - 1
print(my['shopping_cart'])
balance = balance + dic1[int(del_goods_serial_number)]['num'] * \
dic1[int(del_goods_serial_number)]['price']
else:
print('购物车中已经无该商品,请重新选择')
else:
print('购物车中无该商品,请重新选择')
continue
else:
print('恭喜你,购买成功')
elif goods_serial_number.isdigit() == False:
print("商品序号输入有误,请重新输入!")
continue
elif int(goods_serial_number) in goods:
goods_serial_number = int(goods_serial_number)
if goods_serial_number in my['shopping_cart']:
my['shopping_cart'][goods_serial_number] = int(my['shopping_cart'][goods_serial_number]) + 1
else:
my['shopping_cart'].setdefault(goods_serial_number)
my['shopping_cart'][goods_serial_number] = 1
print(my['shopping_cart'])
def sign_out(): # 定义退出函数
print('退出整个程序')
quit()
dic = {
1: sign_in,
2: register,
3: shopping,
4: sign_out,
}
flag_login = 0
while 1:
choice = input('请输入数字1/2/3/4(1-登录/2-注册/3-购物/4-退出):')
if choice.isdigit():
choice = int(choice)
dic[choice]()
else:
pass