程序功能描述如下:不同角色登录,普通用户可以查看商品购买商品、查看购物车和余额、退出;管理员可以充值,可以添加商品、退出

用户信息字典格式:

{
  'pp1': {'passwd': '', 'role': '', 'money': 97738.5, 'carts': ['MAC', 'MI', 'MAC', 'KKK', 'HHH', 'LLL', 'LLL', 'LLL', 'YYY', 'LLL']},
  'pp2': {'passwd': '', 'role': '', 'money': 14435.76, 'carts': ['vivo', 'vivo', 'MAC']}
}

商品信息字典格式:

{
  'MAC': {'id': '', 'price': 31233.22}, 'vivo': {'id': '', 'price': 1888.0},
  'MI': {'id': '', 'price': 2888.0}, 'HHH': {'id': '', 'price': 12312},
  'KKK': {'id': '', 'price': 123.22}, 'YYY': {'id': '', 'price': 254.22},
  'LLL': {'id': '', 'price': 231.2}, 'LOVONO': {'id': '', 'price': 12321.22}
}
#role是1的话,代表管理员,2代表普通用户
#普通用户:
#1、查看所有的商品
#2、输入商品名称购买商品,购买完了之后要加到自己的购物车里面,钱要减去
#3、可以查看自己购物车和余额,你已经买了xx东西,你还xxx钱
#4、退出
#管理员,1、添加商品,商品名称,商品价格
2、充值,输入用户名,给他加钱
3、退出 程序实现如下:
# 登录
def login(u_name, u_pass):
"用户登录"
u_name = str(u_name)
u_pass = str(u_pass)
if not u_name or not u_pass:
print("error,用户名或密码不能为空!")
else:
user_data = {} # 个人账户信息,用于登录成功后返回
with open('users.txt', 'r', encoding='utf-8') as fr:
fr.seek(0)
user_info = eval(fr.read())
fr.close()
if u_name not in user_info:
print("error,用户名不存在!")
elif u_pass != user_info[u_name]['passwd']:
print("error,输入密码错误!")
else:
user_data[u_name] = user_info[u_name]
print('success,登录成功,用户信息:', user_data)
return user_data # 查看所有商品
def get_goods():
"查询所有商品"
with open('goods.txt', 'r', encoding='utf-8') as fr:
fr.seek(0)
goods_info = eval(fr.read())
fr.close()
print('success,查询所有商品成功,商品信息:', goods_info)
return goods_info # 购买商品
def bug_goods(u_name, g_name):
"用户购买商品"
g_name = str(g_name)
u_name = str(u_name)
if not g_name or not u_name:
return 'error,用户名或商品名称不能为空'
goods_info = get_goods()
if g_name not in goods_info:
return 'error,商品%s不存在' % g_name
else:
with open('users.txt', 'a+', encoding='utf-8') as fa:
fa.seek(0)
user_info = eval(fa.read())
if user_info[u_name]['money'] - goods_info[g_name]['price'] < 0:
return 'error,用户余额不足'
u_pass = user_info[u_name]['passwd']
u_role = user_info[u_name]['role']
u_money = user_info[u_name]['money'] - goods_info[g_name]['price']
u_money = round(u_money, 2)
u_carts = user_info[u_name]['carts']
u_carts.append(g_name)
user_info[u_name] = {'passwd': u_pass, 'role': u_role, 'money': u_money, 'carts': u_carts}
fa.seek(0)
fa.truncate()
fa.flush()
fa.write(str(user_info))
fa.close()
return 'success,购买:{goods} 成功,购物车商品:{carts}'.format(goods=g_name, carts=u_carts) # 查询用户购物车和余额
def get_carts_money(u_name):
"查询用户购物车、余额"
u_name = str(u_name)
if not u_name:
return 'error,用户名不能为空'
else:
with open('users.txt', encoding='utf-8') as f:
f.seek(0)
user_info = eval(f.read())
f.close()
u_carts = user_info[u_name]['carts']
u_money = user_info[u_name]['money']
return 'success,查询用户购物车和余额成功,用户名:{name},购物车:{carts} ,账户余额:{money}元'.format(name=u_name, carts=u_carts, money= u_money) # 添加商品
def add_goods(g_name, g_price):
"添加商品"
import string, random
src_id = string.digits
g_id = ''.join(random.sample(src_id, 7))
g_name = str(g_name)
if not g_name:
return 'error,添加商品失败,商品名称必须输入'
try:
price = round(float(g_price), 2)
if price <= 0:
return 'error,添加商品失败,商品价格须大于0'
with open('goods.txt', 'a+', encoding='utf-8') as fa:
fa.seek(0)
goods_info = eval(fa.read())
goods_data = {g_name: {'id': g_id, 'price': price}}
goods_info.update(goods_data)
fa.seek(0)
fa.truncate()
fa.flush()
fa.write(str(goods_info))
fa.close()
return 'success,添加商品:{goods}成功'.format(goods=goods_data)
except ValueError:
return 'error,添加商品失败,商品价格输入格式错误' # 用户充值
def recharge(u_name, amount):
"输入用户名给用户充值"
u_name = str(u_name)
try:
u_amount = round(float(amount), 2)
if u_amount <= 0:
return 'error,充值金额须大于0'
with open ('users.txt', 'a+', encoding='utf-8') as f:
f.seek(0)
user_info = eval(f.read())
if u_name not in user_info:
return 'error,用户名不存在'
u_pass = user_info[u_name]['passwd']
u_role = user_info[u_name]['role']
u_money = user_info[u_name]['money']+u_amount
u_carts = user_info[u_name]['carts']
user_data = {u_name: {'passwd': u_pass, 'role': u_role, 'money': u_money, 'carts': u_carts}}
user_info.update(user_data)
f.seek(0)
f.truncate()
f.flush()
f.write(str(user_info))
f.close()
return 'success,给用户:{user}充值成功,账户余额:{amount}元'.format(user=u_name, amount=user_data[u_name]['money'])
except ValueError:
return 'error,充值金额输入格式错误' # 退出程序
def exit_sys():
exit('退出程序') # 普通用户
def user_role1(uName):
choice = input('请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出\n').strip()
if choice == '':
print(get_goods())
elif choice == '':
goods_name = input("请输入要购买商品名称:\n").strip()
print(bug_goods(uName, goods_name))
elif choice == '':
print(get_carts_money(uName))
elif choice == '':
exit_sys()
user_role1(uName) # 管理员用户
def user_role2():
choice = input('请输入你的选择:1:添加商品 2:给用户充值 3:退出\n').strip()
if choice == '':
goods_name = input("请输入你要添加的商品名称:\n").strip()
goods_price = input("请输入添加商品价格:\n").strip()
print(add_goods(goods_name, goods_price))
elif choice == '':
u_name = input("请输入你要充值的用户名:\n").strip()
amount = input("请输入充值金额:\n").strip()
print(recharge(u_name, amount))
elif choice == '':
exit_sys()
user_role2() # 主体部分
uName = input("请输入登录用户名:\n").strip()
uPass = input("请输入登录密码:\n").strip()
user = login(uName, uPass)
if user: # 用户登录成功
# 普通用户:
if user[uName]['role'] == '':
user_role1(uName)
# 管理员用户:
elif user[uName]['role'] == '':
user_role2()
else:
print("用户角色不存在")
else:
print("登录失败")
exit_sys()

上面的代码中,多次文件读写操作,代码重复太多,可以考虑把文件读写操作放在一个函数里面:

def open_file(file_name, content=None):
"文件读写"
f = open(file_name, 'a+', encoding='utf-8')
f.seek(0)
if content:
f.truncate()
f.write(str(content))
f.flush()
res = None
else:
res = eval(f.read())
f.close()
return res

这样优化以后的代码如下:

# 登录
def login(u_name, u_pass):
"用户登录"
u_name = str(u_name)
u_pass = str(u_pass)
if not u_name or not u_pass:
print("error,用户名或密码不能为空!")
else:
user_data = {} # 个人账户信息,用于登录成功后返回
user_info = open_file('users.txt')
if u_name not in user_info:
print("error,用户名不存在!")
elif u_pass != user_info[u_name]['passwd']:
print("error,输入密码错误!")
else:
user_data[u_name] = user_info[u_name]
print('success,登录成功,用户信息:', user_data)
return user_data # 查看所有商品
def get_goods():
"查询所有商品"
goods_info = open_file('goods.txt')
print('success,查询所有商品成功,商品信息:', goods_info)
return goods_info # 购买商品
def bug_goods(u_name, g_name):
"用户购买商品"
g_name = str(g_name)
u_name = str(u_name)
if not g_name or not u_name:
return 'error,用户名或商品名称不能为空'
goods_info = open_file('goods.txt')
if g_name not in goods_info:
return 'error,商品%s不存在' % g_name
else:
user_info = open_file('users.txt')
if user_info[u_name]['money'] - goods_info[g_name]['price'] < 0:
return 'error,用户余额不足'
u_pass = user_info[u_name]['passwd']
u_role = user_info[u_name]['role']
u_money = user_info[u_name]['money'] - goods_info[g_name]['price']
u_money = round(u_money, 2)
u_carts = user_info[u_name]['carts']
u_carts.append(g_name)
user_info[u_name] = {'passwd': u_pass, 'role': u_role, 'money': u_money, 'carts': u_carts}
open_file('users.txt',user_info)
return 'success,购买:{goods} 成功,购物车商品:{carts}'.format(goods=g_name, carts=u_carts) # 查询用户购物车和余额
def get_carts_money(u_name):
"查询用户购物车、余额"
u_name = str(u_name)
if not u_name:
return 'error,用户名不能为空'
else:
user_info = open_file('users.txt')
u_carts = user_info[u_name]['carts']
u_money = user_info[u_name]['money']
return 'success,查询用户购物车和余额成功,用户名:{name},购物车:{carts} ,账户余额:{money}元'.format(name=u_name, carts=u_carts, money= u_money) # 添加商品
def add_goods(g_name, g_price):
"添加商品"
import string, random
src_id = string.digits
g_id = ''.join(random.sample(src_id, 7))
g_name = str(g_name)
if not g_name:
return 'error,添加商品失败,商品名称必须输入'
try:
price = round(float(g_price), 2)
if price <= 0:
return 'error,添加商品失败,商品价格须大于0'
goods_info = open_file('goods.txt')
goods_data = {g_name: {'id': g_id, 'price': price}}
goods_info.update(goods_data)
open_file('goods.txt', goods_info) return 'success,添加商品:{goods}成功'.format(goods=goods_data)
except ValueError:
return 'error,添加商品失败,商品价格输入格式错误' # 用户充值
def recharge(u_name, amount):
"输入用户名给用户充值"
u_name = str(u_name)
try:
u_amount = round(float(amount), 2)
if u_amount <= 0:
return 'error,充值金额须大于0'
user_info = open_file('users.txt')
if u_name not in user_info:
return 'error,用户名不存在'
u_pass = user_info[u_name]['passwd']
u_role = user_info[u_name]['role']
u_money = user_info[u_name]['money']+u_amount
u_carts = user_info[u_name]['carts']
user_data = {u_name: {'passwd': u_pass, 'role': u_role, 'money': u_money, 'carts': u_carts}}
user_info.update(user_data)
open_file('users.txt',user_info)
return 'success,给用户:{user}充值成功,账户余额:{amount}元'.format(user=u_name, amount=user_data[u_name]['money'])
except ValueError:
return 'error,充值金额输入格式错误' # 退出程序
def exit_sys():
exit('退出程序') # 普通用户
def user_role1(uName):
choice = input('请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出\n').strip()
if choice == '':
print(get_goods())
elif choice == '':
goods_name = input("请输入要购买商品名称:\n").strip()
print(bug_goods(uName, goods_name))
elif choice == '':
print(get_carts_money(uName))
elif choice == '':
exit_sys()
user_role1(uName) # 管理员用户
def user_role2():
choice = input('请输入你的选择:1:添加商品 2:给用户充值 3:退出\n').strip()
if choice == '':
goods_name = input("请输入你要添加的商品名称:\n").strip()
goods_price = input("请输入添加商品价格:\n").strip()
print(add_goods(goods_name, goods_price))
elif choice == '':
u_name = input("请输入你要充值的用户名:\n").strip()
amount = input("请输入充值金额:\n").strip()
print(recharge(u_name, amount))
elif choice == '':
exit_sys()
user_role2() # 主体部分
uName = input("请输入登录用户名:\n").strip()
uPass = input("请输入登录密码:\n").strip()
user = login(uName, uPass)
if user: # 用户登录成功
# 普通用户:
if user[uName]['role'] == '':
user_role1(uName)
# 管理员用户:
elif user[uName]['role'] == '':
user_role2()
else:
print("用户角色不存在")
else:
print("登录失败")
exit_sys()

这样代码就精简了很多

运行结果如下:

普通用户:

请输入登录用户名:
pp1
请输入登录密码:
123
success,登录成功,用户信息: {'pp1': {'passwd': '', 'role': '', 'money': 96737.28, 'carts': ['MAC', 'MI', 'MAC', 'KKK', 'HHH', 'LLL', 'LLL', 'LLL', 'YYY']}}
请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出
asd
请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出
1
success,查询所有商品成功,商品信息: {'MAC': {'id': '', 'price': 31233.22}, 'vivo': {'id': '', 'price': 1888.0}, 'MI': {'id': '', 'price': 2888.0}, 'HHH': {'id': '', 'price': 12312}, 'KKK': {'id': '', 'price': 123.22}, 'YYY': {'id': '', 'price': 254.22}, 'LLL': {'id': '', 'price': 231.2}}
{'MAC': {'id': '', 'price': 31233.22}, 'vivo': {'id': '', 'price': 1888.0}, 'MI': {'id': '', 'price': 2888.0}, 'HHH': {'id': '', 'price': 12312}, 'KKK': {'id': '', 'price': 123.22}, 'YYY': {'id': '', 'price': 254.22}, 'LLL': {'id': '', 'price': 231.2}}
请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出
3
success,查询用户购物车和余额成功,用户名:pp1,购物车:['MAC', 'MI', 'MAC', 'KKK', 'HHH', 'LLL', 'LLL', 'LLL', 'YYY'] ,账户余额:96737.28元
请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出
2
请输入要购买商品名称:
LLL
success,查询所有商品成功,商品信息: {'MAC': {'id': '', 'price': 31233.22}, 'vivo': {'id': '', 'price': 1888.0}, 'MI': {'id': '', 'price': 2888.0}, 'HHH': {'id': '', 'price': 12312}, 'KKK': {'id': '', 'price': 123.22}, 'YYY': {'id': '', 'price': 254.22}, 'LLL': {'id': '', 'price': 231.2}}
success,购买:LLL 成功,购物车商品:['MAC', 'MI', 'MAC', 'KKK', 'HHH', 'LLL', 'LLL', 'LLL', 'YYY', 'LLL']
请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出
4
退出程序 Process finished with exit code 1

管理员用户:

请输入登录用户名:
pp2
请输入登录密码:
123
success,登录成功,用户信息: {'pp2': {'passwd': '', 'role': '', 'money': 14435.76, 'carts': ['vivo', 'vivo', 'MAC']}}
请输入你的选择:1:添加商品 2:给用户充值 3:退出
g
请输入你的选择:1:添加商品 2:给用户充值 3:退出
1
请输入你要添加的商品名称:
LOVONO
请输入添加商品价格:
12321.22
success,添加商品:{'LOVONO': {'id': '', 'price': 12321.22}}成功
请输入你的选择:1:添加商品 2:给用户充值 3:退出
2
请输入你要充值的用户名:
pp1
请输入充值金额:
321321。232
error,充值金额输入格式错误
请输入你的选择:1:添加商品 2:给用户充值 3:退出
2
请输入你要充值的用户名:
pp1
请输入充值金额:
1232.42
success,给用户:pp1充值成功,账户余额:97738.5元
请输入你的选择:1:添加商品 2:给用户充值 3:退出
3
退出程序 Process finished with exit code 1

python 模拟普通用户和管路员登录购物系统小程序的更多相关文章

  1. python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

    0.关键实现:程序窗口前置 python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过pyauto实现右键菜单和另存为操作 1.参考 aut ...

  2. 小程序登录 -41003: aes 小程序加密数据解密失败问题

    在微信小程的开发中,登录问题,一定要按照这样的顺序 1. 小程序请求login,拿到code 然后传给服务端:  2.服务端拿到code 到微信服务器拿到sessionKey :3.然后小程序调用ge ...

  3. 小程序登录及AppSecret(小程序密钥)

    在授权开发以后,需要提交小程序密钥,有小程序密钥第三方才有能力获取用户的一些信息,提供一些能力! 平台分别提供多种方式实现微信登录: 1. 调用wx.login接口,静默获取openid 适用场景:无 ...

  4. 微信小程序组件构建UI界面小练手 —— 表单登录注册微信小程序

    通过微信小程序中丰富的表单组件来完成登录界面.手机快速注册界面.企业用户注册界面的微信小程序设计. 将会用到view视图容器组件.button按钮组件.image图片组件.input输入框组件.che ...

  5. python 实现判断一个用户输入字符串是否是小数的小程序

    要判断一个字符串是否是小数:1先判断小数点的个数,即如果是小数,则必须有且仅有一个'.'号2再分别判断'.'号的左右两边是否是数字: 判断左边时,如果负数,则左边包含'-'号:必须以'-'号开头(校验 ...

  6. go语言实现一个简单的登录注册web小程序

    最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...

  7. 计算机毕业设计选题大合集,含ssm,springboot,小程序,php,python

    1基于springboot医院急诊系统 2基于springboot校园闲置物品租售系统 3基于springboot校园闲置物品交易网站 4基于springboot图书网站 5基于springboot外 ...

  8. 微信小程序中用户登录和登录态维护

    提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情.像微信这样的一个社交平台,如果做一个小程序应用,我们可能很少会去做一个完全脱离和舍弃连接用户信息的纯工具软件. 让用户 ...

  9. 微信小程序与微信公众号同一用户登录问题

    微信小程序与微信公众号同一用户登录问题 最近在做微信小程序与微信公众号登录合并的接口.整理相关资料以及个人认识的心得写了这篇文章与大家一起分享. 首先,简单说下我遇到的问题是我们的程序调用微信小程序得 ...

随机推荐

  1. Ubuntu Server17.10配置静态IP

    今天心血来潮,装个虚拟机Ubuntu打算学点东西,遇到了一些问题,同时借助百度的力量解决了,下面是配置的过程. 一. 安装virtualbox 不知道从哪个版本开始,安装虚拟盒子的时候没有了安装虚拟网 ...

  2. <script language = "javascript">, <script type = "text/javascript">和<script language = "application/javascript">(转)

          application/javascript是服务器端处理js文件的mime类型,text/javascript是浏览器处理js的mime类型,后者兼容性更好(虽然application/ ...

  3. avg(xxxxxx)什么时候能独自出现?

    avg(xxxxxx)是作为求一组数据的平均数,需要有这组数据的总数和个数,所以通常配合着group by来使用, 比如: SELECT ID, AVG(GRADE) AS 平均数 FROM TEST ...

  4. gcd,扩展欧几里得,中国剩余定理

    1.gcd: int gcd(int a,int b){ ?a:gcd(b,a%b); } 2.中国剩余定理: 题目:学生A依次给n个整数a[],学生B相应给n个正整数m[]且两两互素,老师提出问题: ...

  5. 快速排序C++实现

    #include<iostream> using namespace std;class quicksort{ public: int quicks(int *a,int low,int ...

  6. iOS 代码调试

    僵尸对象导致crash(Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)),需要给位release模式,debug模式不打印内存地址 https://blog. ...

  7. ecplise导入工程出现乱码的解决方案

    eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  8. silverlight的Datagrid控件列绑定属性笔记

    <data:DataGridTemplateColumn Header="给作者留言"> <data:DataGridTemplateColumn.CellTem ...

  9. SQL 将一个字段内用逗号分隔的内容分成多条记录

    转自:http://www.cnblogs.com/zfanlong1314/archive/2013/01/14/2859848.html --> 测试数据 if not object_id( ...

  10. 参看dll参数类型

    http://blog.csdn.net/chinabinlang/article/details/7698459 验证