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

目录

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

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

  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('\033[45m尝试次数过多,退出。。。\033[0m')
                break
            uname = input('用户名:').strip()
            pwd = input('密码:').strip()

            with open(db_file, 'r', encoding='utf-8') as f:
                for line in f:
                    line = line.strip('\n')
                    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('\033[48m登陆成功\033[0m')

                        # 登陆成功则将用户名和余额添加到列表
                        current_userinfo = [uname_of_db, balance_of_db]
                        print('用户信息为:', current_userinfo)
                        tag = False
                        break
                else:
                    print('\033[47m用户名或密码错误\033[0m')
                    count += 1

    elif choice == '2':
        uname = input('请输入用户名:').strip()
        while True:
            pwd1 = input('请输入密码:').strip()
            pwd2 = input('再次确认密码:').strip()
            if pwd2 == pwd1:
                break
            else:
                print('\033[39m两次输入密码不一致,请重新输入!!!\033[0m')

        balance = input('请输入充值金额:').strip()

        with open(db_file, 'a', encoding='utf-8') as f:
            f.write('%s,%s,%s\n' % (uname, pwd1, balance))

    elif choice == '3':
        if len(current_userinfo) == 0:
            print('\033[49m请先登陆...\033[0m')
        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,\033[42;1myour current\033[0m 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('\n').split(',')
                                        l[-1] = str(balance_of_db)
                                        line = ','.join(l) + '\n'

                                    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('\033[33m非法操作\033[0m')
登陆
注册
购物

>>: 2
请输入用户名:nick
请输入密码:123
再次确认密码:123
请输入充值金额:100000

登陆
注册
购物

>>: 1
用户名:nick
密码:123
[48m登陆成功[0m
用户信息为: ['nick', 88370]

登陆
注册
购物

>>: 3
尊敬的用户[nick] 您的余额为[88370],祝您购物愉快
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[0m balance 82570
{'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[0m balance 82540
{'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
                    您的余额为: 82540
                    ---------------------------------end---------------------------------

确认购买(yes/no?)>>: yes
购买成功,请耐心等待发货

登陆
注册
购物

>>: q

原文地址:https://www.cnblogs.com/nickchen121/p/11070005.html

时间: 2024-11-20 03:08:26

文件处理实战之购物车系统的相关文章

NFS网络文件系统服务实战(六)

NFS网络文件系统服务实战: 一.按要求搭建配置NFS服务前准备 准备三个服务器或虚拟机A.B.C配置NFS服务器: 要求: 在NFS服务端A上共享/data/w_shared及/data/r_shared两个文件目录,允许从NFS客户端B,C上分别挂载共享目录后可实现从B,C上只读/data/r_shared,可写/data/w_shared NFS客户端B上的挂载点为/data/b_w(写),/data/b_r(读) NFS客户端C上的挂载点为/data/w_你的名字英文(写),/data/

Android快速开发之appBase——实战《购物车》

Android快速开发之appBase--实战<购物车> 最近将appBase实战于各种项目中,也发现了不少问题,并优化了很多功能.今天带给大家一个实战–<购物车>.购物车,在商城app中是必不可少的一部分,也是使用的比较多的,这里简单的做一个效果. 先来看看效果图 1.创建项目 第一种.引用appBase项目即可 第二种.将appBase的jar文件copy到libs下 我用的第二种,如上图所示. 2.代码生成 通过代码生成器生成Activity.Presenter.Adapte

使用MongoDB和JSP实现一个简单的购物车系统

1 问题描述 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来获取用户提交的登录信息并查询数据库,如果用户名为本小组成员的名字且密码为对应的学号时,采用JSP内置对象的方法跳转到订购页面(显示店中商品的种类和单价等目录信息):否则采用JSP动作提示用户重新登录(注:此页面上要包含前面的登录界面). (3)当顾客填好所需商品的数量并点击提交按钮时,将前面订购的商品放

实战证明LINUX系统下密钥对验证的安全性

实战证明LINUX系统下密钥对验证的安全性  密钥对验证:要求提供匹配的密钥信息才能通过验证,首先在客户端创建一对密钥文件(公钥.私钥),后把公钥文件放到需要远程连接的服务器中.远程登录时,系统将使用私钥加密身份信息提交给远程主机,远程主机使用对方提交的公钥来解密进行身份验证. 本次实验通过三部分来完成: 1.构建密钥对 2.验证私钥的可靠性 3.验证公钥的可靠性 一.构建密钥对验证SSH体系: (1)首先在PC1上创建密钥对(私钥文件:id_rsa   公钥文件:id_rsa.pub) (2)

Centos7 实战Kickstart 批量系统部署

1.kickstart 使用背景介绍大家想个问题,我们平时手动光盘安装一台linux系统的多久能完成?10分钟?半小时?1小时还是一上午?领导说小李明天到100台服务器你统一装成linux系统,周日交工.啊?100台?你是不是要哭了-- 于是乎,kickstart 自动化安装平台就诞生了,哇哈哈!2.kickstart 原理① PXE 客户端发送UDP广播请求 PXE 客户端从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络

福大软工1816 &#183; 团队现场编程实战(抽奖系统)

福大软工1816 · 团队现场编程实战(抽奖系统) 队员职责分工 团队成员 分工 张扬 预处理算法.抽奖算法.解决其他问题.本次博客撰写 韫月 "创建抽奖活动"页面的开发."已发布""已结束"等页面的动态生成 愈明 "创建抽奖活动"页面的开发.弹窗交互 文婧 "已发布"."已结束"页面的开发 地秀 "已发布"."已结束"页面的开发 全炯 各个页面的

项目的设计、购物车系统

一.项目设计 1.项目的生命周期: 1.需求分析 2.项目设计 3.分任务开发程序 4.项目测试 5.上线运行 6.维护更新 2.经典的三层结构 1.用户界面(用户功能)层 : 接收用户数据 ,或者展示数据给用户 2.业务逻辑(接口)层: 处理用户界面层得到的数据,进行判断 验证 3.数据访问(数据处理)层(持久层) : 帮助业务逻辑层 保存数据 或是读取数据 与程序处理数据的三步刚好是对应 一个应用程序的本质,就是在帮用户处理数据,一定分为三步 1.用户通过某种方式将数据交给程序 (手机APP

python实现简单购物车系统(练习)

#!Anaconda/anaconda/python #coding: utf-8 #列表练习,实现简单购物车系统 product_lists = [('iphone',5000), ('computer',6000), ('girl_friend',2000), ('boy_friend',3000)] shop_lists = [] for i,v in enumerate(product_lists): #python的内置函数,在字典上是枚举,列举的意思,可以同事获得索引和值 print

/etc/fstab文件出错,无法进入Linux系统

问题描述 今天复习Linux文件系统管理,在Linux系统上挂载了一块新硬盘之后,然后分区,格式化,一步步走下来,为了能够使该硬盘在系统启动时自动挂载,于是将之写入了/etc/fstab文件,然而在reboot之后,Linux系统无法正常启动,系统显示的情况与下图类似(因为当时急于处理该故障,因此并未未截图,后来在网上找了几张图片,大体记录下自己的处理思路) 根据系统提示,可以看出是系统不能启动的真正原因是 /etc/fstab给写错了,系统启动报告Checking filesystems 失败