# 1、作业:# 先让你登录   # {   # "nhy":{"passwd":123,'role':1,'money':10000,"carts":['mac']},   # "nhy2":{"passwd":123,'role':2,'money':10000,"carts":[]}   # }   # role是1的话,代表管理员,2代表普通用户   # 普通用户:      # 1、查看所有的商品 2、输入商品名称购买商品,购买完了之后要加到自己的购物车里面,钱要减去 3、可以查看自己购物车和余额,你已经买了xx东西,你还xxx钱 4、退出
   # 管理员:      #1、添加商品,商品名称,商品价格 2、充值,输入用户名,给他加钱 3、退出
# 需求分析# 1、存用户信息的这个文件、存商品信息的文件,都需要初始化# 2、登录# 3、登录成功之后判断角色展示不同的菜单

#普通用户:# 1、查看所有商品,打印字典 2、购买商品,字典的修改,修改完之后写文件 3、查看购物车和余额,打印字典 4、退出
#管理员:# 1、添加商品,字典的修改,修改完之后写文件 2、充值、输入用户名,字典的修改,修改完之后写文件 3、退出
# 公共的,就是读文件、写文件
USER_FILE = 'user.txt' # 用常量保存用户信息GOODS_FILE = 'goods.txt' # 用常量保存用户信息
def op_file(file_name,content = None): # content = None,如果content为真是写操作    f = open(file_name,'a+',encoding = 'utf8')    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 not_null(var): # 输入的内容不为空的函数    if len(var) > 0:        return True    return False
def is_price(s): # 合法的价格函数    s = str(s)    if s.count('.') == 1:        new_s = s.split('.')        left_num = new_s[0]        right_num = new_s[-1]        if right_num.isdigit():            if left_num.isdigit():                return True    elif s.isdigit() and int(s) > 0:        return True    return False
def add_products(): # 管理员添加商品    products = op_file(GOODS_FILE)    while True:        product_name = input('请输入你要添加的商品名称:').strip()        money = input('请输入你的商品价格:').strip()        if not_null(product_name) and not_null(money):            if product_name not in products:                if is_price(money):#价格合法的话                    products[product_name] = float(money)                    op_file(GOODS_FILE,products)                    print('商品添加成功!')                    return admin()                else:                    print('价格输入不合法!')            else:                print('商品已存在!')        else:            print('商品名称/价格不能为空!')
def recharge(): # 管理员充值    users = op_file(USER_FILE)    while True:        username = input('请输入你要充值的账号:').strip()        money = input('请输入你要充值的钱:').strip()        if not_null(username) and not_null(money):            if username in users:                if is_price(money):                    src_money = users[username]['money']                    users[username]['money'] = src_money + float(money)                    op_file(USER_FILE,users)                    print('充值成功!')                    return admin()                else:                    print('钱输入不合法!')            else:                print('用户不存在!')

        else:            print('账号/钱不能为空!')
def admin(): # 管理员菜单函数    choice = input('请输入你的选择:1、充值 2、添加商品 3、退出').strip()    menu = {             '1':recharge,             '2':add_products,             '3':exit           }    if choice in menu:        menu[choice]()    else:        print('请输入正确的选择!')        admin()
def show_products(user): # 普通用户查看商品    products = op_file(GOODS_FILE)    for k in products:        print('商品名称是%s,价格是%s' % (k,products[k]))    return buyer(user)
def buy(user): # 普通用户购买商品,要传入user    # 1、把原来的用户信息读出来    # 2、买完之后,再写进去    users = op_file(USER_FILE)    products = op_file(GOODS_FILE)    money = users[user]['money']    carts = users[user]['carts']    for k in products:        print('商品名称是%s,价格是%s' % (k,products[k]))    while True:        product_name = input('请输入你要购买的商品名称:').strip()        if not_null(product_name):            if product_name in products:                product_price = products[product_name]                if money >= product_price:                    carts.append(product_name)                    money -= product_price                    users[user]['carts'] = carts                    users[user]['money'] = money                    op_file(USER_FILE,users)                    print('商品购买成功!')                    return buyer(user)                else:                    print('对不起,你的余额不足,你的余额是 %s' % money)            else:                print('你输入的商品名称不存在!')        else:            print('商品名称不能为空!')
def user_info(user): # 把哪个用户的信息打印出来    users = op_file(USER_FILE)    money = users[user]['money']    carts = users[user]['carts']    print('你的余额是%s' % money)    print('你的购物车里有'% carts)    return buyer(user)
def buyer(user): # 普通用户菜单函数    choice = input('请输入你的选择:1、查看商品信息 2、购买商品 3、查看购物车 4、退出').strip()    menu = {        '1': show_products,        '2': buy,        '3': user_info,        '4': exit    }    if choice in menu:        menu[choice](user)    else:        print('请输入正确的选择!')        buyer(user)
def login(): # 登录函数读文件    users = op_file(USER_FILE)    for i in range(3):        username = input('请输入账号:').strip()        passwd = input('请输入密码:').strip()        if not_null(username) and not_null(passwd):#账号和密码都不为空            if username in users:                cur_user = users[username]  # 代表通过账号获取到的小字典                if cur_user['passwd'] == passwd:                    if cur_user['role'] == 1:                        print('欢迎管理员登录')                        admin()                    else:                        print('欢迎%s登录' % username)                        buyer(username)            else:                print('用户不存在!')        else:            print('账号/密码不能为空!')

login()

转载于:https://www.cnblogs.com/laosun0204/p/8515287.html

day4_shop程序相关推荐

  1. 编程精粹 --Microsoft编写优质无错C程序秘诀

    献给我的妻子Beth, 以及我的双亲Joseph和Julia Maguire ────为了他们的爱和支持 序 1986年,在为几家小公司咨询和工作了10年之后为了获得编写Macintosh应用程序的经 ...

  2. POCO C++库学习和分析 -- 序

    POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集.同一般的C++库相比,POCO的特点是提供了整一个应用框架.如果要做C++程序应用框架的快速开发,我觉得 ...

  3. 程序主动进行电话短信报警,自定义电话、短信、钉钉报警通知

    程序主动进行电话短信报警,自定义电话.短信.钉钉报警通知 一. 规则说明 这里我们要利用到阿里云的云监控的手段,有一个叫做事件监控的东西,可以通过自定义事件上传来进行监控报警. 流程: 程序发现错误 ...

  4. 终止js程序执行的方法

    js终止程序执行的方法共有三种 (一)在function里面(普通js方法) (1)return; (2)return false; (二)非function方法里面(如ajax方法) alert(& ...

  5. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  6. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  7. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  8. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

  9. 【golang程序包推荐分享】go-ini、viper、godoc

    [golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...

最新文章

  1. 年中盘点:2020年炙手可热的10家数据科学和机器学习初创公司
  2. 这个AI模型用最少的训练数据学习对象之间的关系
  3. jquery选择器的一些处理
  4. mysql3308_mysql 5.7.16多源复制
  5. http://blog.chinaunix.net/uid-20577907-id-3519578.html
  6. 使用前台方式启动Redis时,出现Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use报错
  7. 摄像头YUV2格式详解
  8. mysql sql dateadd_在SQL语句中DATEADD和DATEDIFF函数
  9. 试题7 算法训练 P0505(最右边的那个非0的数字)
  10. WinPmem:跨平台内存采集工具
  11. 2021研究生数学建模B题,空气质量检测
  12. win10无法正常弹出移动硬盘/U盘
  13. MySQL快速解决“is marked as crashed and should be repaired“故障
  14. G1调优实践日记--G1HeapWastePercent和InitiatingHeapOccupancyPercent的应用
  15. Kotlin的SAM转换
  16. 使用CM快速搭建CDH集群
  17. 数据结构与算法_01_复杂度分析
  18. excel 导入导出使用poi自定义注解
  19. 在Word文档中插入Excel表格时出现:“用于创建此对象的程序是Excel。您的计算机尚未安装此程序。”试试这个方法
  20. MySQL 5.7--------多实例部署最佳实战

热门文章

  1. M估计(稳健估计)的matlab实现
  2. 失业、五险一金和个税的二三事
  3. 修改数组相应位置元素——splice()
  4. egg导出excel功能
  5. RBM受限波兹曼机在特征学习上的使用
  6. 如何从电脑远程访问 iPhone?
  7. JAVA学习——函数总结
  8. word文档如何写字母和下标
  9. N级台阶,一次上1级或2级或3级或M级,总共有多少种走法
  10. 阿里云成为全球唯一完成德国C5云安全基础附加标准审计云服务商 数据安全获“最严谨”标准认可...