# coding=utf-8
import os, pickle class color:
def echo_error(self, red):
print(f"\033[31;1m {red}\033[0m".strip()) def echo_ok(self, green):
print(f"\033[32;1m {green}\033[0m".strip()) def echo_warn(self, warning):
print(f"\033[33;1m {warning}\033[0m".strip()) color = color() def file_open(file, mode, *args):
if mode == "wb":
data = args[0]
with open(file, mode) as f:
pickle.dump(data, f)
elif mode == "rb":
with open(file, mode) as f:
user_dict = pickle.load(f)
return user_dict
elif mode == "clear":
with open(file, mode) as f:
data = args[0]
pickle.dump(data, f) def user(user, pwd, mode):
file = user + ".db"
if mode == "regist":
if not os.path.isfile(file):
user_dict = {"name": user, "pwd": pwd, "stat": 0}
file_open(file, "wb", user_dict)
color.echo_ok("注册成功!")
else:
color.echo_error("用户已注册") elif mode == "login":
if os.path.isfile(file):
user_dict = file_open(file, "rb")
if user_dict["name"] == user and user_dict["pwd"] == pwd:
color.echo_ok("登录成功")
return user_dict
else:
color.echo_error("登录失败,用户名或密码错误")
else:
color.echo_error("不存在此用户,请先注册")
return None
else:
color.echo_error("错误") def shopping(user_dict, list_goods):
if user_dict["shopping_car"]:
list_shopping = user_dict["shopping_car"]
else:
list_shopping = [] while True:
color.echo_ok("商品列表如下:\n"
"##########################\n"
"序号 商品名称 商品价格")
for i, k in enumerate(list_goods):
print(i, k["name"], k["price"])
chooice = input("请输入购买商品序号 [t 查看购物车 q 退出]")
if not chooice: continue if chooice.isdigit() and 0 <= int(chooice) < len(list_goods):
num = input("请输入要购买的数量")
if num.isdigit():
num = int(num)
else:
color.echo_error("数量必须是正整数")
goods = {"name": list_goods[int(chooice)]["name"], "num": num,
"total_price": list_goods[int(chooice)]["price"] * num} list_shopping.append(goods)
color.echo_ok("购物成功!")
elif chooice == "t":
color.echo_ok("#########购物清单##########")
print("商品名 数量 价格")
if len(list_shopping) == 0:
color.echo_warn("您没有购买任何东西..")
any = input("输入任意字符继续..")
if any: continue
continue
price = 0
for i in list_shopping:
print(i["name"], i["num"], i["total_price"])
price += i["total_price"]
chooice = input("总价格:%s,是否购买(yes/no),[e 查看余额 c 清空购物车]:" % price)
if chooice == "c":
list_shopping = []
user_dict["shopping_car"] = list_shopping
color.echo_ok("购物车清空成功")
file_open(user_dict["name"] + ".db", "wb", user_dict, "clear")
elif chooice == "e":
color.echo_ok("您的余额为 %s" % user_dict["money"])
elif chooice == "yes":
if user_dict["money"] > price:
res_money = user_dict["money"] - price
color.echo_ok(f"购买成功,您的余额为 {res_money}")
list_shopping = []
user_dict["shopping_car"] = list_shopping
user_dict["money"] = res_money
file_open(user_dict["name"] + ".db", "wb", user_dict, "clear")
any = input("输入任意字符继续..")
if any: continue
else:
color.echo_error("您的余额不够买这些东西,挣点钱再来吧。")
elif chooice == "no":
color.echo_warn("您取消购买")
any = input("输入任意字符继续..")
if any: continue elif chooice == "q":
color.echo_warn("退出程序")
break def start(list_goods):
while True:
print('''
1. 注册
2. 登录并购物
3. 登出
''')
chooce = input(">>>").strip()
if chooce == "1":
username = input("请输入你的用户名:").strip()
pwd = input("请输入你的密码:").strip()
user(username, pwd, "regist")
elif chooce == "2":
username = input("请输入你的用户名:").strip()
pwd = input("请输入你的密码:").strip()
user_dict = user(username, pwd, "login")
if user_dict == None: continue
if user_dict["stat"] == 0:
money = int(input("请输入你的首冲金额:"))
user_dict["stat"] += 1
user_dict["money"] = money
user_dict["shopping_car"] = []
color.echo_ok("恭喜,充值成功!,可以尽情购物了~")
file_open(user_dict["name"] + ".db", "wb", user_dict)
shopping(user_dict, list_goods)
else:
shopping(user_dict, list_goods) elif chooce == "3":
break
else:
color.echo_error("非法操作,请重输入") if __name__ == "__main__":
list_goods = [
{"name": "苹果", "price": 10},
{"name": "芒果", "price": 20},
{"name": "提子", "price": 30},
{"name": "香蕉", "price": 40},
] start(list_goods)

Python-购物车系统的更多相关文章

  1. python购物车系统

    购物车系统模拟:product_list = [ ('java',100), ('python',200), ('键盘',500), ('电脑',4000), ('mac Book',7000),]S ...

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

    #!Anaconda/anaconda/python #coding: utf-8 #列表练习,实现简单购物车系统 product_lists = [('iphone',5000), ('comput ...

  3. ATM系统和购物车系统 不需要文件支撑

    目录 ATM系统 购物车系统 ATM系统 #coding=utf8 #Version:python 3.6.4 #Tools:Python 2019.9.7 _data_ = '2019/9/7/01 ...

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

    目录 1 问题描述  2 解决方案  2.1  实现功能  2.2  最终运行效果图  2.3  系统功能框架示意图  2.4  有关MongoDB简介及系统环境配置  2.5  核心功能代码讲解  ...

  5. Java课设-购物车系统

    1.团队课程设计博客链接 /[博客链接]http://www.cnblogs.com/yayaya/p/7062197.html 2.个人负责模板或任务说明 1.建立Action类 2.购物车的属性 ...

  6. Java课程设计 购物车系统(个人博客)

    1. 团队课程设计博客链接 课程设计 2. 个人负责模块或任务说明 编写ShoppingCart类,连接数据库 编写updateCart类,从数据库中获取商品信息,获取指定编号的商品信息 编写User ...

  7. java 课程设计 购物车系统 个人

    Q1.团队课程设计博客链接 团队博客 Q2.个人负责模块或任务说明 我主要负责main函数的编写和系统中瞎看功能代码的编写. Q3.自己的代码提交记录截图 main函数代码如下: public sta ...

  8. Python云端系统开发入门——框架基础

    Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...

  9. python 保障系统(一)

    python  保障系统 from django.shortcuts import render,redirect,HttpResponse from app01 import models from ...

  10. python 报障系统(完)

    python 报障系统(完) 一.报障系统原理: 原理: 1. 简单管理 2. 角色多管理(权限) a. 登录 session放置用户信息(检测是否已经登录) session放置权限信息(检测是否有权 ...

随机推荐

  1. response.text与content的区别

    在某些情况下来说,response.text 与 response.content 都是来获取response中的数据信息,效果看起来差不多.那么response.text 和 response.co ...

  2. mysql查询语句对于为null和为空字符串给出特定值处理

    SELECT if(IFNULL(filedName,"指定字符串")="","指定字符串",filedName) '重命名的字符名' FR ...

  3. C++利用动态数组实现顺序表(不限数据类型)

    通过类模板实现顺序表时,若进行比较和遍历操作,模板元素可以通过STL中的equal_to仿函数实现,或者通过回调函数实现.若进行复制操作,可以采用STL的算法函数,也可以通过操作地址实现.关于回调函数 ...

  4. C++Builder常用函数

    BCB函数集 1.内存分配     函数名称 AllocMem 函数说明 在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下: void * __fastcall AllocM ...

  5. [NOI2007]生成树计数环形版

    NOI2007这道题人类进化更完全之后出现了新的做法 毕姥爷题解: 于是毕姥爷出了一道环形版的这题(test0814),让我们写这个做法 环形的情况下,k=5的时候是162阶递推. 求这个递推可以用B ...

  6. 资源-Android:Android

    ylbtech-资源-Android:Android 1.返回顶部 1. https://developer.android.google.cn/studio 2. 2.返回顶部 1. 1.1 1.2 ...

  7. java.sql.SQLSyntaxErrorException: ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY

    2019-07-24 17:24:35 下午 [Thread: http-8080-4][ Class:net.sf.ehcache.store.disk.Segment Method: net.sf ...

  8. 51nod-1130-N的阶乘的长度V2(斯特林近似)-套斯特林公式

    输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. 输入 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 1000) 第2 - T + 1行:每 ...

  9. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  10. spark2.0在IDE运行的问题

    spark2.0搭建到服务器跑很方便,但是本地跑和之前1.6还是有点区别,鼓捣了一点到半夜2点多总算能跑了.. 遇到的问题 1.idea千万要用file---setting-----plugins的s ...