数据结构:
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]
功能要求:
基础要求:
1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
扩展需求:
1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
2、许查询之前的消费记录

代码实现:
import copy

# 从文件读取用户信息,数据结构为:# id_info=dict(key:用户名,values['密码',余额,历史消费记录[{商品名:价格:数量:},{}],锁定标志位:0未锁定,1锁定])f = open("id_info.txt", 'r', encoding="GBK")id_info = eval(f.read())f.close()

#  -----------------------------------------------用户登陆模块-------------------------------------------#  新用户登录,输入两遍密码确认;老用户登录则从用户信息表读取帐密校验;同一帐号连续输入三次则锁定,退出程序count = 0user_name = Noneis_same_user = Truelast_login_user = Noneis_login = False

while count < 3:    user_name = input("请输入用户名:").strip()    user_pwd = input("请输入密码:").strip()

    if last_login_user is None:  # 首次登陆        last_login_user = user_name

    if user_name != last_login_user:  # 判断是否连续登陆        is_same_user = False

    if user_name in id_info:        if id_info[user_name][3] == 0:  # 判断帐号是否锁定            if user_pwd == id_info[user_name][0]:                print("尊敬的\033[1;31;40m%s\033[0m,欢迎登陆路飞商城!" % user_name)                is_login = True                break            else:                print("密码错误,请重输!")        else:            print("用户帐号已冻结,请联系管理员解锁。")    else:        print("该用户帐号不存在,请联系管理员分配帐号!")    count += 1else:    print("密码输入错误超过3次!")    if is_same_user is True:  # 锁定帐号,写入文件保存        id_info[user_name][3] = 1        f = open("id_info.txt", 'w', encoding="GBK")        f.write(str(id_info))        f.close()

# ---------------------------------------------用户选购商品模块-------------------------------------------#  支持保存和查询全部历史消费记录,当天购物车清单,同时对展示的同类商品进行了数量合并goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20},         {"name": "美女", "price": 998}, ]

cart_history = id_info[user_name][2]  # 读取文件传给id_info的历史购物记录

# 初始化本次购物车商品列表,用于按q打印时输出cart = []j = 0while j < len(goods):    cart.append({})    j += 1

#  定义打印菜单所需的字符串s = "商品列表"s_c = "本次购物车清单"s_h = "历史消费记录"

if is_login:    while True:        if id_info[user_name][1] is None:  # 未输入工资的用户,首次运行程序输入,以后登陆不再输入工资            user_salary = input("请输入工资:").strip()            if user_salary.isdigit():                id_info[user_name][1] = int(user_salary)                break            else:                print("工资输入的不是数字,请重输!")        else:            break

    # 用户往购物车循环添加商品,加入的商品需同时保存到历史记录,退出时写入文件保存    while True:        #  打印商品列表和高亮显示余额        print(s.center(30, '-'))        for index, i in enumerate(goods):            print("%s. %s   单价:%s元".center(30) % (index, i['name'], i['price']))        print("您账户余额为: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])

        choice = input("请输入商品数字编号加入购物车,\n查询历史消费记录按h,退出请按q:")        if choice.isdigit():            choice_num = int(choice)            if 0 <= choice_num < len(goods):                if id_info[user_name][1] >= goods[choice_num]['price']:  # 余额足够                    #  本次购物车无同种商品,则增加关键字num统计同种商品的购买数量                    if cart[choice_num].get('num') is None:                        cart[choice_num] = goods[choice_num]                        cart[choice_num].setdefault('num', 1)                        id_info[user_name][1] -= goods[choice_num]['price']                    else:                        cart[choice_num]['num'] += 1  # 如购物车已有同名商品则已购数量加1                        id_info[user_name][1] -= goods[choice_num]['price']

                    #  历史购物记录同时加入本次购物记录                    if cart_history[choice_num].get('num') is None:                        cart_history[choice_num] = copy.deepcopy(goods[choice_num])                        cart_history[choice_num].setdefault('num', 1)                    else:                        cart_history[choice_num]['num'] += 1  # 如历史记录已有同名商品则已购数量加1                    print("\033[1;31;40m商品 %s 已加入购物车!\033[0m" % goods[choice_num]['name'])                else:                    print("对不起,您账户中\033[1;31;40m余额不足\033[0m,不能购买本件商品!")  # 余额不足            else:                print("您输入的商品数字编号有误,请重新输入:")

        #  用户输入h,打印全部历史消费清单和余额,含当天已消费的商品        elif choice.casefold() == 'h':            empty_num = 4            print(s_h.center(30, '-'))            for index, i in enumerate(cart_history):                if i != {}:                    empty_num -= 1                    print("%s. %s   单价:%d元  数量:%d" % (index, i['name'], i['price'], i['num']))            if empty_num == 4:                print("您还没有任何历史消费记录,欢迎拨打客服\n电话反馈您的商品需求,谢谢!")            print("您账户余额为: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])

        #  用户输入q,打印本次购物车清单和余额,退出程序        elif choice.casefold() == 'q':            empty_num = 4            print(s_c.center(30, '-'))            for index, i in enumerate(cart):                if i != {}:                    empty_num -= 1                    print("%s. %s   单价:%d元  数量:%d" % (index, i['name'], i['price'], i['num']))            if empty_num == 4:                print("今天您还没有购买商品,购物车是空的。")            print("您账户余额为: \033[1;31;40m%d\033[0m 元".center(38, '-') % id_info[user_name][1])

            #  退出前将历史消费记录和余额保存到文件中            id_info[user_name][2] = copy.deepcopy(cart_history)            f = open("id_info.txt", 'w', encoding="GBK")            f.write(str(id_info))            f.close()            break        else:            print("您输入的不是数字编号!")

转载于:https://www.cnblogs.com/eric99/p/10000136.html

python写的购物车程序相关推荐

  1. python打开word后再关闭再打开出错_用Python写了个程序调用word,运行完后再手动打开word文档就变慢了,这是为啥?...

    公司归档文件比较麻烦,于是用Python写了个程序自动归档,运行无错误.但是运行完后问题就来了,自己手动打开word文档时速度变得奇慢,打开一个文档需要1~2min,请各位同仁帮我看看.下为源代码 # ...

  2. python实现抽奖软件(一)_详解用python写一个抽奖程序

    第一次使用python写程序,确实比C/C++之类方便许多.既然这个抽奖的数据不大,对效率要求并不高,所以采用python写,更加简洁.清晰.方便. 1.用到的模块 生成随机数的模块random 用来 ...

  3. python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...

  4. python写出的程序如何给别人使用-python如何写出表白程序

    用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下:from tkinter import * from tkinter imp ...

  5. python写一个表白程序_用Python写一个能算出自己年龄的小程序

    用Python写一个能算出自己年龄的小程序. 其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理 ...

  6. python编写ftp客户端_用Python写FTP客户端程序

    0 前言: ftp客户端相信大家都用过,那么我们为什么还要用Python写ftp客户端呢? 我想有两个原因: 一是写出更好的ftp客户端应用程序,方便大家使用: 二是定制一些特殊服务,例如每天定时下载 ...

  7. python开发的gui界面,python写gui应用程序

    python 编写gui界面有哪些 安装wxPython下面是wxPython特别基础的使用方法,将以一个小程序为例来说明,它的功能是在一个文本框中输入文件名,点击open按钮,会在另一个文本框中显示 ...

  8. 学完python写不出程序_我又不当程序员,为什么要学Python编程?

    记得刚毕业时,所受的第一场职场教育便是: 职场如战场,战场上只论功劳,不论苦劳. 回想起那时,无数个夜晚披星戴月加班加点,却常常被狠批在做无用功,迷茫与崩溃说来就来,甚至会觉得 " 越努力越 ...

  9. 用python写一个小程序,解决买水果的问题?

    问题: 商店总共有三种水果,香蕉/苹果/葡萄,单价分别为3.5/5.0/3.0元/500克. 写一个小程序实现: 1.输出一个菜单:打印每种水果的价格: 2.寻问客户欲购买水果? 3.客户想购买的克数 ...

最新文章

  1. char与varchar的区别
  2. 理性教育~值得借鉴~
  3. 全球及中国液氦低温恒温器行业竞争调查分析及前景预测报告2021-2027年版
  4. oracle 物理表,【查询Oracle表实际物理使用大小】
  5. 块元素与行内元素转化(display属性)
  6. Matlab里evalin和assignin的用法
  7. 计算机四级必背知识点,2019年6月计算机四级数据库工程师必备考点
  8. Repeater嵌套Repeater获取父级绑定项
  9. Linux系统编程——vfork() 函数详解
  10. db2数据库基础知识
  11. STM32串口printf调试输出(SSCOM V5.13.1)
  12. 防范勒索病毒及关闭相关端口
  13. PS给人物添加阴影和高光
  14. 极客日报:腾讯《王者荣耀》禁止未满12周岁用户充值;B站发布16款新品游戏;华为注册姚安娜商标被驳回
  15. QT 读写CSV文件
  16. java入门考点_java入门基础知识点总结
  17. 苹果签名市场变天,频繁封杀到底是什么原因?
  18. 商业堡垒机是什么意思?有免费版的商业堡垒机吗?
  19. Simulink —— 三相交流控制系统中的坐标变换
  20. 删除 git 本地仓库

热门文章

  1. FTP服务器搭建下的主动模式和被动模式
  2. Android Shell命令dumpsys
  3. lamp/lnmp实例
  4. IOS 4.0 以上版本 home键退出 后台执行代码
  5. 《Effective C#》Item 17:减少装箱(Boxing)和拆箱(Unboxing)操作
  6. SAP和ABAP内存的区别
  7. 人类大脑每日24小时工作节奏表
  8. android 如何完全卸载Android Studio
  9. android 内核态
  10. 06- 本地方法接口