USER_FILE = 'users.txt'GOODS_FILE= 'goods.txt'
def rw_file(filename, content=0): #读和写文件
if content: #若content不为空,则判定为写文件
with open(filename,'w') as f:
f.write(str(content))else: #若content为空,则判定为读文件
with open(filename,'r') as f:
f=eval(f.read())returnfdefbuyer(username):
menu={'1': find,'2': buy,'3': get,'4': exit
}whileTrue:
choice= input("请输入你想执行的操作(输入【1】查看所有商品,输入【2】添加商品,输入【3】查询购物车和余额,输入【4】退出):")if choice not inmenu:print('输入错误,请重新输入')else:
menu[choice](username)defadmin():
menu={'1': addgoods,'2': recharge,'3': exit
}#role为1时,为管理员
whileTrue:
choice= input('请输入你想执行的操作(输入【1】添加商品,输入【2】充值,输入【3】退出):')if choice not inmenu:print('输入错误,请重新输入')else:
menu[choice]()def login(): #定义用户登录函数,根据用户角色提供指定操作
users =rw_file(USER_FILE)for i in range(3):
username= input("请输入账号:")
passwd= input("请输入密码:")if username in users and passwd == users[username]['passwd'] :if users[username]['role'] == '2': #如果role为2,则为普通用户
print('欢迎光临')
buyer(username)else:print('您已管理员身份登录')
admin( )else:print('账号或密码错误,还能尝试%d次'%(2-i))
i+= 1
def find(*args): #普通查看所有商品
with open('goods.txt') as f:print('所有商品和价格列表:', f.read())def buy(username): #普通用户添加商品到购物车
users =rw_file(USER_FILE)
goods_all=rw_file(GOODS_FILE)
goods= input('请输入你要添加的商品:')if goods ingoods_all:if goods not in users[username]['carts']:if users[username]['money'] >=goods_all[goods]:
users[username]['carts'].append(goods)
users[username]['money'] =float('%.2f'%(users[username]['money'] -goods_all[goods]))
with open('users.txt','w') as f2:
f2.write(str(users))print('商品已成功添加到购物车')else:print('您的余额不足,请充值')else:print('购物车中已添加该商品,无需重复添加')else:print('您输入的商品不存在')def get(username): #普通用户查询购物车中的商品和余额
users =rw_file(USER_FILE)if len(users[username]['carts']) >0:print('您的购物车中已有商品:{goods}'.format(goods = users[username]['carts']))else:print('您还未添加任何商品')print('您的余额:{money}'.format(money=users[username]['money']))def addgoods( ): #管理员添加商品
goods_all =rw_file(GOODS_FILE)
goods_name= input('请输入商品名称:')
goods_price= input('请输入商品价格:')if len(goods_name.strip()) !=0:if goods_name not ingoods_all:ifisprice(goods_price):
goods_all[goods_name]= float('%.2f'%float(goods_price))
rw_file(GOODS_FILE,goods_all)print('商品添加成功')else:print('商品价格必须是正数,请重新输入')else:print('该商品已存在,无需重复添加')else:print('商品名称不能为空,请重新输入')def recharge(): #管理员给指定账号充值
users =rw_file(USER_FILE)
username= input('请输入要充值的账号:')
money= input('请输入要添加的金额:')if username in users andisprice(money):
users[username]['money'] = float('%.2f'%(users[username]['money'] +float(money)))
rw_file(USER_FILE, users)print('操作成功')else:print('输入账号或金额有误,请重新输入')def isprice(price): #判断金额是否有效
if price.count('.') == 1 and price.split('.')[0].isdigit() and price.split('.')[1].isdigit():returnTrueelif price.count('.') == 0 andprice.isdigit():returnTrueelse:returnFalse
login()