Python实现购物小程序

一、需求

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()

 

posted on 2017-10-22 10:30  乔~惜  阅读(1689)  评论(0编辑  收藏  举报