一、需求
1、登录
{
‘xxx1’:{'passwd':'123','role':1,'moeny':10000,"carts":['mac']},
'xxx1':{'passwd':'123','role':2,'moeny':10000,"carts":[]}
}
#role是1的话,代表管理员,2代表普通用户
2、普通用户:
#查看所有的商品
#输入商品名称添加到购物车,减去对应余额
#可以查看自己购物车和余额,你已经买了xx东西,你还xxx钱
#退出
3、管理员:
#添加商品,商品名称,商品价格
#充值,输入用户名,给他加钱
#退出
二、全局变量和函数定义
USER_FILE全局变量,保存用户信息
GOODS_FILE全局变量,保存商品信息
rw_file()读写文件
isprice()判断输入金额是否合法
login()用户登录:
buyer()普通用户登录:
find()查找所有商品
buy()购买商品
get()查询购物车和余额
exit()退出
admin()管理员登录:
addgoods()添加商品
recharge()充值
exit()退出
三、实现代码
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()) return f def buyer(username): menu = { '1': find, '2': buy, '3': get, '4': exit } while True: choice = input("请输入你想执行的操作(输入【1】查看所有商品,输入【2】添加商品,输入【3】查询购物车和余额,输入【4】退出): ") if choice not in menu: print('输入错误,请重新输入') else: menu[choice](username) def admin(): menu = { '1': addgoods, '2': recharge, '3': exit } # role为1时,为管理员 while True: choice = input('请输入你想执行的操作(输入【1】添加商品,输入【2】充值,输入【3】退出): ') if choice not in menu: 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 in goods_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 in goods_all: if isprice(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 and isprice(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(): return True elif price.count('.') == 0 and price.isdigit(): return True else: return False login()