python基础(三)作业题

'''
作业:用函数完成登录注册以及购物车的功能。
    1,启动程序,用户可选择四个选项:登录,注册,购物,退出。
    2,用户注册,用户名不能重复,注册成功之后,用户名密码记录到文件中。
    3,用户登录,用户名密码从文件中读取,进行三次验证,验证不成功则退出整个程序。
    4,用户登录成功之后才能选择购物功能进行购物,购物功能(就是将购物车封装到购物的函数中)。
    5,退出则是退出整个程序。

'''

flag_login = 0
def register():  # 定义注册函数
    while 1:
        global flag_login
        flag_login = 0  # 将登录状态重置为退出状态
        register_name = input('请输入注册用户名:')
        register_password = input('请输入注册密码:')
        f1 = open('name_password', encoding='utf-8', mode='r+')
        content = f1.read()
        f1.write(register_name + '|' + register_password + '\n')
        f1.close()
        # for i in range(len(content)):
        if register_name in content:
            print('用户名已被注册,请重新输入')
            continue
        else:
            print('恭喜你注册成功。')
            break
def sign_in():    # 定义登录函数
    while 1:
        n = 0
        sign_in_name = input('请输入登录用户名:')
        sign_in_password = input('请输入密码:')
        f1 = open('name_password', encoding='utf-8', mode='r')
        
        for line in f1:
            content = line.strip().split('|')
            if sign_in_name == content[0] and sign_in_password == content[1]:
                print('恭喜你登录成功。')
                global flag_login  # 在局部将flag_login定义为一个全局变量
                flag_login = 1 # 标识登录状态,0-表示未登录状态,1-表示登录状态
                break
            else:
                n = n + 1
                if n > 3:  # 进行3次验证
                    print('用户名或者密码错误。')
                    break
        f1.close()
        break
def shopping():  #定义购物车函数
    if flag_login == 0:
        print('未登录系统,无法进行购物。')
    if flag_login == 1:
        goods = {
            1: {'name': '电脑', 'price': 1999},
            2: {'name': '鼠标', 'price': 10},
            3: {'name': '键盘', 'price': 50},
            4: {'name': '显示器', 'price': 1000},
        }
        
        # 定义我的账户
        my = {
            'account_balance': 0,  # 账户余额默认为0
            'shopping_cart': {},  # 购物车默认为空
            'order': {}  # 订单默认为空
        }
        
        # 按照商品序号存储购买数量
        dic1 = {
            1: {'name': '电脑', 'price': 1999, 'num': ''},
            2: {'name': '鼠标', 'price': 10, 'num': ''},
            3: {'name': '键盘', 'price': 50, 'num': ''},
            4: {'name': '显示器', 'price': 1000, 'num': ''},
        }
        # 用户进行充值
        while True:
            charge = input('账户余额为0 ,请您充值:')  # 首先进行账户充值
            if charge.strip().replace('.', '', 1).isdigit():
                my['account balance'] = charge
                charge = int(charge)
                print('恭喜您,充值成功' + '' + '账户余额为' + my['account balance'])
                break
            else:
                print('您的充值失败,请您重新充值')
                continue
        
        # 商品页面显示
        for k, v in goods.items():
            print(k, v['name'], v['price'])
        
        count = 0
        balance = 0
        while True:
            goods_serial_number = input('请选择您购买的商品序号:').upper()
            
            #  用户输入Q或者q退出购买程序
            if goods_serial_number == 'Q':
                if my['shopping_cart'] == '':
                    print('账户余额:' + str(balance))
                    print('总共花费金额:' + str(charge - balance))
                elif my['shopping_cart'] != '':
                    for k, v in dic1.items():
                        if k in my['shopping_cart'].items():
                            dic1[k]['name'] = my['shopping_cart'][k]
                            print(v['name'], v['price'], v['num'])
                    print('总共花费金额:' + str(charge - balance))
                    print('账户余额:' + str(balance))
                    break
                    
                    # 用户输入n进行购物车结算
            elif goods_serial_number == 'N':
                for i in dic1.keys():
                    if i in my['shopping_cart'].keys():
                        dic1[i]['num'] = my['shopping_cart'][i]
                for l in dic1.keys():  # 依次显示用户购物车里面的商品,数量及单价
                    if l in my['shopping_cart'].keys():
                        msg = '''
                        ---------------------购买信息------------------
                        商品名称:%(name)s  商品数量:%(num)s  商品单价:%(price)s
                        --------------------end---------------------
                        ''' % dic1[l]
                        print(msg)
                    else:
                        pass
                
                # 计算各个商品的总价
                
                for k in dic1:
                    if k in my['shopping_cart']:
                        count = dic1[k]['num'] * dic1[k]['price'] + count  # 计算花费金额
                        balance = charge - count  # 计算账户余额
                if balance >= 0:
                    print('恭喜您,购买成功!')
                elif balance < 0:
                    print('余额不足,请删除部分商品。')
                    while balance < 0:
                        del_goods_serial_number = input('请输入删除物品的序号:').upper()
                        if (del_goods_serial_number == 'Q') or (del_goods_serial_number == 'N'):
                            break
                        elif del_goods_serial_number.isdigit():
                            if int(del_goods_serial_number) in my['shopping_cart']:
                                if my['shopping_cart'][int(del_goods_serial_number)] >= 1:
                                    my['shopping_cart'][int(del_goods_serial_number)] = my['shopping_cart'][int(
                                        del_goods_serial_number)] - 1
                                    print(my['shopping_cart'])
                                    balance = balance + dic1[int(del_goods_serial_number)]['num'] * \
                                                        dic1[int(del_goods_serial_number)]['price']
                                else:
                                    print('购物车中已经无该商品,请重新选择')
                        else:
                            print('购物车中无该商品,请重新选择')
                            continue
                    else:
                        print('恭喜你,购买成功')
            
            elif goods_serial_number.isdigit() == False:
                print("商品序号输入有误,请重新输入!")
                continue
            elif int(goods_serial_number) in goods:
                goods_serial_number = int(goods_serial_number)
                if goods_serial_number in my['shopping_cart']:
                    my['shopping_cart'][goods_serial_number] = int(my['shopping_cart'][goods_serial_number]) + 1
                else:
                    my['shopping_cart'].setdefault(goods_serial_number)
                    my['shopping_cart'][goods_serial_number] = 1
                print(my['shopping_cart'])

def sign_out(): # 定义退出函数
    print('退出整个程序')
    quit()

dic = {
    1: sign_in,
    2: register,
    3: shopping,
    4: sign_out,
}

flag_login = 0
while 1:
    
    choice = input('请输入数字1/2/3/4(1-登录/2-注册/3-购物/4-退出):')
    if choice.isdigit():
        choice = int(choice)
        dic[choice]()
    else:
        pass

猜你喜欢

转载自www.cnblogs.com/mayugang/p/9886256.html