zoukankan      html  css  js  c++  java
  • 文件处理实战之购物车系统

    一、文件处理实战之购物车系统

    1. 用户名和密码存放于文件中,格式为:nick|nick123

    2. 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序

    3. 允许用户根据商品编号购买商品

    4. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

    5. 可随时退出,退出时,打印已购买商品和余额

    import os
    
    product_list = [
        ['Iphone7', 5800],
        ['Coffee', 30],
        ['疙瘩汤', 10],
        ['Python Book', 99],
        ['Bike', 199],
        ['ViVo X9', 2499],
    ]
    
    shopping_cart = {}
    current_userinfo = []
    
    db_file = r'db.txt'
    
    while True:
        print('''
    登陆
    注册
    购物
        ''')
    
        choice = input('>>: ').strip()
    
        if choice == '1':
            #1、登陆
            tag = True
            count = 0
            while tag:
                if count == 3:
                    print('尝试次数过多,退出。。。')
                    break
                uname = input('用户名:').strip()
                pwd = input('密码:').strip()
    
                with open(db_file, 'r', encoding='utf-8') as f:
                    for line in f:
                        line = line.strip('
    ')
                        user_info = line.split(',')
    
                        uname_of_db = user_info[0]
                        pwd_of_db = user_info[1]
                        balance_of_db = int(user_info[2])
    
                        if uname == uname_of_db and pwd == pwd_of_db:
                            print('登陆成功')
    
                            # 登陆成功则将用户名和余额添加到列表
                            current_userinfo = [uname_of_db, balance_of_db]
                            print('用户信息为:', current_userinfo)
                            tag = False
                            break
                    else:
                        print('用户名或密码错误')
                        count += 1
    
        elif choice == '2':
            uname = input('请输入用户名:').strip()
            while True:
                pwd1 = input('请输入密码:').strip()
                pwd2 = input('再次确认密码:').strip()
                if pwd2 == pwd1:
                    break
                else:
                    print('两次输入密码不一致,请重新输入!!!')
    
            balance = input('请输入充值金额:').strip()
    
            with open(db_file, 'a', encoding='utf-8') as f:
                f.write('%s,%s,%s
    ' % (uname, pwd1, balance))
    
        elif choice == '3':
            if len(current_userinfo) == 0:
                print('请先登陆...')
            else:
                #登陆成功后,开始购物
                uname_of_db = current_userinfo[0]
                balance_of_db = current_userinfo[1]
    
                print('尊敬的用户[%s] 您的余额为[%s],祝您购物愉快' % (uname_of_db, balance_of_db))
    
                tag = True
                while tag:
                    for index, product in enumerate(product_list):
                        print(index, product)
                    choice = input('输入商品编号购物,输入q退出>>: ').strip()
                    if choice.isdigit():
                        choice = int(choice)
                        if choice < 0 or choice >= len(product_list): continue
    
                        pname = product_list[choice][0]
                        pprice = product_list[choice][1]
                        if balance_of_db > pprice:
                            if pname in shopping_cart:  # 原来已经购买过
                                shopping_cart[pname]['count'] += 1
                            else:
                                shopping_cart[pname] = {
                                    'pprice': pprice,
                                    'count': 1
                                }
    
                            balance_of_db -= pprice  # 扣钱
                            current_userinfo[1] = balance_of_db  # 更新用户余额
                            print(
                                "Added product " + pname +
                                " into shopping cart,[42;1myour current balance "
                                + str(balance_of_db))
    
                        else:
                            print("买不起,穷逼! 产品价格是{price},你还差{lack_price}".format(
                                price=pprice, lack_price=(pprice - balance_of_db)))
                        print(shopping_cart)
                    elif choice == 'q':
                        print("""
                        ---------------------------------已购买商品列表---------------------------------
                        id          商品                   数量             单价               总价
                        """)
    
                        total_cost = 0
                        for i, key in enumerate(shopping_cart):
                            print('%22s%18s%18s%18s%18s' %
                                  (i, key, shopping_cart[key]['count'],
                                   shopping_cart[key]['pprice'],
                                   shopping_cart[key]['pprice'] *
                                   shopping_cart[key]['count']))
                            total_cost += shopping_cart[key][
                                'pprice'] * shopping_cart[key]['count']
    
                        print("""
                        您的总花费为: %s
                        您的余额为: %s
                        ---------------------------------end---------------------------------
                        """ % (total_cost, balance_of_db))
    
                        while tag:
                            inp = input('确认购买(yes/no?)>>: ').strip()
                            if inp not in ['Y', 'N', 'y', 'n', 'yes', 'no']:
                                continue
                            if inp in ['Y', 'y', 'yes']:
                                # 将余额写入文件
    
                                src_file = db_file
                                dst_file = r'%s.swap' % db_file
                                with open(src_file,'r',encoding='utf-8') as read_f,
                                    open(dst_file,'w',encoding='utf-8') as write_f:
                                    for line in read_f:
                                        if line.startswith(uname_of_db):
                                            l = line.strip('
    ').split(',')
                                            l[-1] = str(balance_of_db)
                                            line = ','.join(l) + '
    '
    
                                        write_f.write(line)
                                os.remove(src_file)
                                os.rename(dst_file, src_file)
    
                                print('购买成功,请耐心等待发货')
    
                            shopping_cart = {}
                            current_userinfo = []
                            tag = False
    
                    else:
                        print('输入非法')
        elif choice == 'q':
            break
    
        else:
            print('非法操作')
    
    登陆
    注册
    购物
        
    >>: 2
    请输入用户名:nick
    请输入密码:123
    再次确认密码:123
    请输入充值金额:10000
    
    登陆
    注册
    购物
        
    >>: 1
    用户名:nick
    密码:123
    登陆成功
    用户信息为: ['nick', 10000]
    
    登陆
    注册
    购物
        
    >>: 3
    尊敬的用户[nick] 您的余额为[10000],祝您购物愉快
    0 ['Iphone7', 5800]
    1 ['Coffee', 30]
    2 ['疙瘩汤', 10]
    3 ['Python Book', 99]
    4 ['Bike', 199]
    5 ['ViVo X9', 2499]
    输入商品编号购物,输入q退出>>: 0
    Added product Iphone7 into shopping cart,[42;1myour current balance 4200
    {'Iphone7': {'pprice': 5800, 'count': 1}}
    0 ['Iphone7', 5800]
    1 ['Coffee', 30]
    2 ['疙瘩汤', 10]
    3 ['Python Book', 99]
    4 ['Bike', 199]
    5 ['ViVo X9', 2499]
    输入商品编号购物,输入q退出>>: 1
    Added product Coffee into shopping cart,[42;1myour current balance 4170
    {'Iphone7': {'pprice': 5800, 'count': 1}, 'Coffee': {'pprice': 30, 'count': 1}}
    0 ['Iphone7', 5800]
    1 ['Coffee', 30]
    2 ['疙瘩汤', 10]
    3 ['Python Book', 99]
    4 ['Bike', 199]
    5 ['ViVo X9', 2499]
    输入商品编号购物,输入q退出>>: q
    
                        ---------------------------------已购买商品列表---------------------------------
                        id          商品                   数量             单价               总价
                        
                         0           Iphone7                 1              5800              5800
                         1            Coffee                 1                30                30
    
                        您的总花费为: 5830
                        您的余额为: 4170
                        ---------------------------------end---------------------------------
                        
    确认购买(yes/no?)>>: yes
    购买成功,请耐心等待发货
    
    登陆
    注册
    购物
        
    >>: q
  • 相关阅读:
    I-Cache和D-cache
    socat使用
    反射
    属性方法
    getitem
    文件打开编辑和函数参数
    python3编码问题个人理解
    正文内容 python3编码问题
    进度条制作
    集合关系
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11070005.html
Copyright © 2011-2022 走看看