python 用函数写的一个简单的购物车系统

goods = {'全脂牛奶':5,
         '可口可乐':3,
         '乐事薯片':15,
         '双肩背包':118,
         '小米手环':198,
         '华为手机':5998,
         'Mac-Pro':8698,
         'iphoneX':8998,
        }
import os
user_info_list=[]#用户信息
shopping_car=[]#购物车
commodity_count={}#商品数量
# print("编号:{}商品:{}价格:{}".format(format(i,'<2'),format(k,'<10'),format(goods[k],'>5')))
#新建一个空文本文件
with open('用户信息.txt', 'r+', encoding='utf-8') as f:
    if len(f.read()) == 0:
        f.write('%s \t%s \t%s\n' % ('用户名','密码','金额'))

def modify_money(loginer,balance):
    '''
    修改用户金额信息
    '''
    with open('用户信息.txt', 'r', encoding='utf-8') as read_f,\
        open('临时文件.txt','w',encoding='utf-8') as write_f:
        for line in read_f:
            data = line.strip().split(' \t')
            if loginer == data[0]:
                line = line.replace(data[2],balance)
            write_f.write(line)
    os.remove('用户信息.txt')
    os.rename('临时文件.txt','用户信息.txt')

def user_name_info():
    '''
           验证用户名是否已被注册
           '''
    while True:  # 验证用户名是否已被注册
        user_info = input('请输入用户名:').strip().lower()
        with open('用户信息.txt', 'r', encoding='utf-8') as f:
            for lines in f:
                name = lines.strip().split(' ')
                if user_info == name[0]:
                    print('用户已存在')
                    break
            else:
                print('用户名可使用')
                return user_info

def user_pwd_info():
    '''
               验证密码是否一致
               '''
    while True:  # 验证密码是否一致
        user_pwd = input('请输入密码:').strip()
        user_pwd_again = input('请确认密码:').strip()
        if user_pwd == user_pwd_again:
            print('注册成功')
            return user_pwd
        print('密码不一致')

def write_user_info(newuser_name,newuser_pwd):#newuser_name,newuser_pwd 是形参接受实参
    '''
    将新用户的用户名,密码,初始购物卡金额写入文件
    :return:
    '''
    with open('用户信息.txt', 'a', encoding='utf-8') as f:
        f.write('%s \t%s \t%d\n' % (newuser_name,newuser_pwd, 0))  # 将刚注册的用户的名字和初始的购物卡余额(0)写入文件
        return

def read_user_info(login_user,login_pwd):
    '''
    验证用户输入的账户及密码
    '''
    while  True:
        if len(user_info_list) > 2:
            print('非法操作')
            return
        with open('用户信息.txt', 'r', encoding='utf-8') as f:
            for line in f:
                data = line.strip().split(' \t')
                if login_user == data[0] and login_pwd == data[1]:
                    print('登陆成功!')
                    return login_user,login_pwd
            print('用户名或密码错误')
            return '错误信息'

def user_money_info(user_balance):
    '''
    获取用于余额添加到列表
    '''
    with open('用户信息.txt', 'r', encoding='utf-8') as f:
        for line in f:
            data = line.strip().split(' \t')
            if user_balance == data[0]:
                return data[2]

def log_in():
    '''
    注册
    '''
    new_name = user_name_info()#检查新用户注册的名字是否可以使用
    new_pwd = user_pwd_info()#检查用户注册的密码是否一致
    write_user_info(new_name,new_pwd)#将新用户的用户名,密码,初始购物卡金额写入文件
    return

def auth():
    '''
    登陆
    '''
    count = 0
    while True:
        if count == 3:
            print('错误次数过多...')
            exit()
        user = input('请输入账户名:').strip().lower()
        pwd = input('请输入登陆密码:').strip()
        res1 = read_user_info(user,pwd)
        if res1 == '错误信息':
            count+=1
        else:
            user_info_list.append(user)#将用户名加入列表
            user_info_list.append(pwd)#将用户密码加入列表
            res2 = user_money_info(user)#获取用户的余额
            user_info_list.append(res2)#将用户余额添加到列表
            return res1

def buy():
    while True:

        if len(user_info_list)==0:
            print('请先登陆...')
            return
        else:
            print('用户名:%s 余额:%s '%(user_info_list[0],user_info_list[2]))
            print('如果结束购买请输入"q"...')
            oof = int(user_info_list[2])#将字符串转成整型
        while True:
            for k in goods:
                print('商品名称:%s 价格:%s'%(k,goods[k]))
            commodity_list = list(goods.keys())#将商品添加到列表
            choice2 = input('请输入商品名称:').strip()
            if oof == 0:
                print('你的余额为0,请先充值再进行购买')
                return
            if choice2 in commodity_list:
                # shopping_car.append(choice2)
                if choice2 in commodity_count:
                    commodity_count[choice2]+=1
                else:
                    commodity_count[choice2]=1
                print('商品已成功添加到购物车')

            elif choice2 == 'q':
                while True:
                    if len(commodity_count) == 0:
                        return
                    choice3 = input('请确认是否购买Y/N:').strip().upper()
                    if choice3 == 'Y':
                        price = 0
                        # for i in shopping_car:
                        for i in commodity_count:
                            price+=goods[i]
                        if price >oof:#如果商品的价格大于用户余额
                            print('你的余额不足,请先充值或购买其他商品')
                            return
                        else:
                            oof = oof-price
                            print(''.center(50,'-'))
                            print('%-30s %s'%('商品','价格(元)'))
                            for i in commodity_count:
                                print('%-30s %s'%(i,goods[i]))
                            print(''.center(50,'-'))

                            print('购买商品成功,马上发货...')

                            str_oof = str(oof)
                            modify_money(user_info_list[0],str_oof)
                            return str_oof
            else:
                print('抱歉,没有此类商品')

def recharge():
    if len(user_info_list) == 0:
        print('请先登陆...')
        return
    else:
        pay = int(input('请输入充值金额:').strip())
        money = int(user_info_list[2])
        money +=pay
        user_info_list[2]=str(money)
        modify_money(user_info_list[0],str(money))
        print('充值成功')
def quit():
    print('欢迎下次再来!')
    exit()
#主体代码
dic={
    '1':log_in,
    '2':auth,
    '3':buy,
    '4':recharge,
    '5':quit
    }
def register():
    while True:
        print('''
        1.注册
        2.登陆
        3.购买
        4.充值
        5.退出   
        ''')
        choice1 = input('---->').strip()
        if choice1 in dic:
            dic[choice1]()
        else:
            print('非法输入')
register()

之前写的购物车有好多BUG....

这次用函数写一下

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/81266156