一.作业需求:

1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

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

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

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

7、允许查询之前的消费记录

二.思路

1.涉及的内容有文件操作,还有字典、列表、元组、等操作

2.将用户,密码,商城余额,购物商品,商品数量存成字典,保存数据,写入模块可以使用json,pickle

3.可以将用户,密码,余额写在一个文件,将另一个文件存该用户的购物车列表,也可以写在一起(我这里写在了一起)

4.将商品写成列表中的元组,例如: P_list = [('Iphone','5700')]

5.商城余额减去商品价格做判断,用文件操作字典,不够可以充值并修改字典文件的value值

6.将购物的商品列表最后写入到文件的字典中,方便下次查询使用例如:user_list[user]['salary']

三.流程图

待更新:

四.初始化用户信息代码:

user_list = {
'test1': {
'username': 'test000',
'userpasswd': '',
'salary': '',
'shop_car': '',
'shop_car_list': ''
}
} f = open('shopping_db', 'wb')
pickle.dump(user_list, f)
f.close()

五.购物车代码

f = open('shopping_db', 'rb') #读取字典操作
user_list = pickle.load(f)
f.close() def wirte_logout(): #写入字典操作
f = open('shopping_db', 'wb')
pickle.dump(user_list, f)
f.close()
return
goods_list = [ #商品列表
('IPone', 5800),
('Mac Pro', 12000),
('MI盒子', 199),
('LG显示器23.6', 849)
]
def index_page():
page = '''
[0]老用户登录 [1]新用户登陆 [2]浏览商品 '''
welcome = ( '''\033[32;1m欢迎登陆购物车作业系统\033[0m''')
print(welcome,'\n',page)
return def login():
print('\n')
global user
count = 0
while True:
if count < 3:
user = input('用户名: ')
password = input('密 码: ')
if user in user_list.keys():
if user == user_list[user]['username'] and password == user_list[user]['userpasswd']:
print('\n''欢迎登录!你的余额是:\033[32;1m %s\033[0m' % user_list[user]['salary'],'\n')
break
else:
print('用户名或密码不正确,请重新登录!')
else:
user_choice = input('您不是老用户,是新用户的话按y写入系统按n重新登陆:(y/n)')
if user_choice == 'y':
add_user()
break
elif user_choice == 'n':
pass
count += 1
else:
sys.exit('超出登录次数!登录失败')
return def add_user():
global user
exit_flag = False
print('\n')
while not exit_flag:
username = input('请输入你的用户名:')
if username in user_list.keys():
print('\n用户名已存在,请输入其他名称\n')
else:
exit_flag = True
userpasswd = input('请输入你的密码')
user_list[username] = {}
user_list[username]['username'] = username
user_list[username]['userpasswd'] = userpasswd
user_list[username]['salary'] = ''
user_list[username]['shop_car'] = ''
user_list[username]['shop_car_list'] = ''
print('\n %s,欢迎首次登陆请选购商品' % username, '\n')
user = user_list[username]['username']
return def print_product_list():
print('\n产品列表:\n')
for item in enumerate(goods_list):
index = item[0]
p_name = item[1][0]
p_price = item[1][1]
print(index, ':', p_name, p_price)
return def printending():
print('之前购买的商品'.center(50, '-'))
for item in user_list[user]['shop_car']:
a = user_list[user]['shop_car'].index(item)
print('\033[32;1m 商品:%s 价格:%s 数量:%s \033[0m' % (
user_list[user]['shop_car'][a][0], user_list[user]['shop_car'][a][1], user_list[user]['shop_car_list'][a]))
print('End'.center(58, '-'))
print('\033[32;1m 余额是:%s\033[0m' % user_list[user]['salary'])
print('End'.center(58,'-'),'\n')
return exit_flag = False while not exit_flag:
index_page() index_user_choice = input('请输入您要进行的操作:') if index_user_choice == '':
login()
exit_flag = True
elif index_user_choice == '':
add_user()
exit_flag = True
elif index_user_choice == '':
print_product_list()
else:
print('输入操作无效!') print('Begin The Shopping'.center(80, '-'), '\n') exit_flag2 = False while not exit_flag2:
if not user_list[user]['salary']:
salary = input('你的余额为0,请输入金额: ')
if salary.isdigit():
salary = int(salary)
user_list[user]['salary'] = salary
else:
print('数据类型不正确,请输入一个正确的数字!')
continue
else:
salary = user_list[user]['salary']
if not user_list[user]['shop_car']:
shop_car = []
shop_car_list = []
else:
shop_car = user_list[user]['shop_car']
shop_car_list = user_list[user]['shop_car_list']
print_product_list()
print('''
[q=quit,c=check,l=logout,r=rechage]
''')
user_choice = input('请问你想购买什么?')
print (shop_car)
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice < len(goods_list):
p_item = goods_list[user_choice]
if p_item[1] <= salary:
if p_item not in shop_car:
shop_car.append(p_item)
shop_car_list.append(1)
user_list[user]['shop_car'] = shop_car
user_list[user]['shop_car_list'] = shop_car_list
salary -= p_item[1]
user_list[user]['salary'] = salary
print('\033[32;1m 添加了:%s,价格是:%s,余额:%s\033[0m' % (p_item[0], p_item[1], user_list[user]['salary']), '\n')
else:
item_num = shop_car_list[shop_car.index(p_item)] + 1
shop_car_list[shop_car.index(p_item)] = item_num
user_list[user]['shop_car_list'] = shop_car_list
salary -= p_item[1]
user_list[user]['salary'] = salary
print('\033[32;1m 在购物车上添加了:%s,价格是:%s,你的余额是:%s\033[0m' % (p_item[0], p_item[1], user_list[user]['salary']), '\n')
else:
print('\033[32;1m你的余额是: %s,余额不足购买!\033[0m' % user_list[user]['salary'], '\n')
else:
print('你选择的商品不存在!', '\n')
else:
if user_choice == 'q' or user_choice == 'quit':
printending()
print('Bye %s' % user)
wirte_logout()
exit_flag2 = True
elif user_choice == 'c' or user_choice == 'check':
printending()
elif user_choice == 'l' or user_choice == 'logout':
printending()
login()
elif user_choice == 'r' or user_choice == 'rechage':
salary_change = input('请输入充值金额:')
if salary_change.isdigit():
salary_change = int(salary_change)
salary += salary_change
user_list[user]['salary'] = salary
else:
print('数据类型不正确,请输入一个正确的数字!')
continue
else:
print('请输入合法字符!', '\n')

python作业购物车(第二周)的更多相关文章

  1. python学习笔记第二周

    目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...

  2. 【吴恩达课后编程作业】第二周作业 - Logistic回归-识别猫的图片

    1.问题描述 有209张图片作为训练集,50张图片作为测试集,图片中有的是猫的图片,有的不是.每张图片的像素大小为64*64 吴恩达并没有把原始的图片提供给我们 而是把这两个图片集转换成两个.h5文件 ...

  3. python刷题第二周

    1: 第3章-5 字符转换 (15 分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. ...

  4. python作业ATM(第五周)

    作业需求: 额度 15000或自定义. 实现购物商城,买东西加入 购物车,调用信用卡接口结账. 可以提现,手续费5%. 支持多账户登录. 支持账户间转账. 记录每月日常消费流水. 提供还款接口. AT ...

  5. Python学习之旅--第二周--元组、字符串、运算、字典

    一.元组 另一种有序列表叫元组:tuple.tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: # Author:Tim Gu tuple = (" ...

  6. python课程第二周重点记录

    python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...

  7. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  8. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  9. 2017-2018-1 Java演绎法 第二周 作业

    团队任务:讨论Android上的游戏软件 参考现代软件工程 第一章 [概论]练习与讨论: 软件有很多种,也有各种分类办法,本次团队任务是讨论选取Android上的一个游戏软件,考虑到每位组员接触的游戏 ...

随机推荐

  1. jquery validate 一个注册表单的应用

    先看页面 前端表单代码  register.html <form class="mui-input-group" id="regForm"> < ...

  2. mysql有索引和无索引的查询速度对比

    演示100万级数据有索引和无索引的情况下的查找速度:

  3. 【Quartz.NET】Quartz.NET 入门

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  4. 【uoj#175】新年的网警 结论题+Hash

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...

  5. 【bzoj3730】震波 动态点分治+线段树

    题目描述 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着时代的发展,城市 ...

  6. 2月24日考试——ZYYS

    LSGJ zyys 战队的 CYA 小垃圾,被各位神佬出的题目搞得心态爆炸.于是他模仿了蔡老师给了你两个整数 n 和 m .让你计算字母表大小为 m ,(即可用 m 个字母)长度为 n ,不存在长度至 ...

  7. 洛谷 P2057 善意的投票(网络流最小割)

    P2057 善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法 ...

  8. NHibernate常见错误

    Oracle 下必须用 Sequence [PrimaryKey(PrimaryKeyType.Sequence,"ID")] 1.提示 ORA-02289: 序列不存在 -- C ...

  9. [CQOI2011]动态逆序对 CDQ分治

    洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...

  10. 用一次FastDFS

    FastDFS c编写的分布式文件系统,用于搭建文件服务器集群提供文件的上传.下载 特点 冗余备份 负载均衡 线性扩容 高性能.高可用 FastDFS架构 Tracker server 负载均衡和调度 ...