老男孩Day2作业:购物车程序
作业需求:
用户入口:
1.商品信息存在文件里
2.已购商品,余额记录。第一次启动程序时需要记录工资,第二次启动程序时谈出上次余额
3.允许用户根据商品编号购买商品
4.用户选择商品后,检测是否够,够就直接扣款,不够就提醒
5.可随时退出,退出时,打印移购买商品和余额
商家入口:
1.可以添加商品,修改商品价格1. 运行程序输出第一级菜单
1)编写思路
编写思路参考下面GitHub链接中的流程图
2)具体实现
买家入口
#-*- Coding:utf-8 -*-
# Author: D.Gray
'''
购物车需求
用户入口:
1.商品信息存在文件里
2.已购商品,余额记录。第一次启动程序时需要记录工资,第二次启动程序时谈出上次余额
3.允许用户根据商品编号购买商品
4.用户选择商品后,检测是否够,够就直接扣款,不够就提醒
5.可随时退出,退出时,打印移购买商品和余额
商家入口:
1.可以添加商品,修改商品价格
'''
import os,sys def user_shoping(): #定义一个用户购买商品操作函数
while True:
user_salary = input('请输入您的充值金额>>>:')
if user_salary.isdigit(): #判断充值金额是否为数字
user_salary = int(user_salary)
user_shop_file.write(login_name + '\t')
user_shop_file.write(str(user_salary) + '\n')
for item in porduct_lists: #循环遍历商品列表
print(porduct_lists.index(item), item) #使用index方法打印列表序号,item为列表元素
p_index = porduct_lists.index(item) #定义p_index方法存储列表序号
while True:
user_choises = input('请选择您所需购买的商品编号>>>:退出请按:Q:')
if user_choises.isdigit(): #判断用户输入的商品编号是否为数字
user_choises = int(user_choises)
if user_choises <= p_index and user_choises >= 0: #用户输入编号小于列表序号
p_item = porduct_lists[user_choises] #定义p_item方法获取用户选择的商品
p_item[1] = int(p_item[1]) #将商品金额强制转换为int类型
if user_salary >= p_item[1]: #判断用户金额是否买得起商品
shop_lists.append(p_item) #将已购买的商品信息存储到shop_lists列表中
user_salary -= p_item[1] #扣除商品金额=还剩余额
user_shop_file.write(login_name + '\t')
user_shop_file.write(str(user_salary) + '\n') #将用户信息和余额信息写入user_shop文本中
print("商品 \033[32;1m%s\033[0m 已加入购物车...您还剩\033[32;1m%s\033[0m余额" % (p_item[0], user_salary))
else:
print('\033[31;1m对不起您的金额不足,请去充值!\033[0m')
print('已购商品清单'.center(30, '*'))
print(shop_lists)
sys.exit()
else:
print('\033[31;1m请输入范围内商品编号\033[0m')
elif user_choises == 'q' or user_choises == 'Q':
print('已购商品清单'.center(30, '*'))
print(shop_lists)
sys.exit()
else:
print('\033[31;1m请输入有效商品编号\033[0m')
else:
print('\033[31;1m请输入有效充值金额\033[0m')
def user_top(): #定义一个用户充值操作函数
while True:
user_salary = input('请输入您的充值金额>>>:')
if user_salary.isdigit():
user_salary = int(user_salary)
user_salary += int(shop[-1]) #用户现有余额=充值金额+上次还剩余额
user_shop_file.write(shop[0] + '\t')
user_shop_file.write(str(user_salary)+'\n') #将用户名和现有余额(充值完成后还剩余额)写入user_shop文本中
print('您当前余额为:\033[32;1m%s\033[0m'%user_salary)
for item in porduct_lists:
print(porduct_lists.index(item), item)
p_index = porduct_lists.index(item)
while True:
user_choises = input('请选择您所需购买的商品编号>>>:退出请按:Q:')
if user_choises.isdigit():
user_choises = int(user_choises)
if user_choises <= p_index and user_choises >= 0:
p_item = porduct_lists[user_choises]
if user_salary >= int(p_item[1]):
shop_lists.append(p_item)
user_salary -= int(p_item[1])
user_shop_file.write(shop[0] + '\t')
user_shop_file.write(str(user_salary) + '\n')
print("商品 \033[32;1m%s\033[0m 已加入购物车...您还剩\033[32;1m%s\033[0m余额" % (p_item[0], user_salary))
else:
print('\033[31;1m对不起您的金额不足,请去充值!\033[0m')
print('已购商品清单'.center(30, '*'))
print(shop_lists)
sys.exit()
else:
print('\033[31;1m请输入范围内商品编号\033[0m')
elif user_choises == 'q' or user_choises == 'Q':
print('已购商品清单'.center(30, '*'))
print(shop_lists)
sys.exit()
else:
print('\033[31;1m请输入有效商品编号\033[0m')
else:
print('\033[31;1m请输入有效充值金额\033[0m')
def porduct_shop(): #定义一个读取porduct_shop(商品信息文本)函数
user_porduct_file = open('porduct_shop', 'r+', encoding='utf-8')
user_porduct_lists = user_porduct_file.readlines() #以列表形式读取porduct_shop商品信息文本内容
for user_porduct_list in user_porduct_lists: #循环遍历user_porduct_lists列表
porduct_lists.append(user_porduct_list.split()) #将读取内容存储到porduct_lists商品列表中 login_name = ''
shop_lists = []
porduct_lists = [] porduct_shop() #调用porduct_shop(读取卖家商品信息)操作函数 user_shop_file = open('user_shop','r+')
user_shop_lists = user_shop_file.readlines()
for user_shop_list in user_shop_lists: #循环遍历user_shop(用户信息及余额)文本内容
shop = user_shop_list.split()
if len(user_shop_lists) == 0: #判断user_shop文本信息内容是否为空
login_name = input('请输入用户名>>>:') #如果为空,则判断为首次登陆,需要填写用户名和密码
user_info_file = open('user_info','r+')
user_info_lists = user_info_file.readlines()
for user_info_list in user_info_lists: #循环遍历user_info(用户信息:用户名和密码)文本内容
user = user_info_list.split()
if login_name in user: #判断输入的用户名是否存在
while True:
login_pwd = input('请输入密码>>>:') #判断用户输入密码是否正确
if login_pwd == user[1]:
print('欢迎 \033[33;1m%s\033[0m 登录英雄联盟收银台' % login_name) #登陆成功
user_shoping() #调用user_shopping用户购买商品操作函数
else:
print('\033[31;1m密码错误请重新输入密码\033[0m')
else:
sys.exit('\033[31;1m用户名不存在\033[31;1m')
else: #用户不是首次登陆操作
print('欢迎 \033[33;1m%s\033[0m 登录英雄联盟收银台,您的余额还剩\033[32;1m%s\033[0m元' % (shop[0], shop[-1]))
user_top() #调用 user_top(用户第二次登陆和充值操作)函数
卖家入口
# -*- coding:utf-8 -*-
# Author:D.Gray seller_shop = open('porduct_shop','a',encoding='utf-8')
seller_shop.write('小学生皮肤'+'\t') #卖家添加商品名称
seller_shop.write('' + '\n') #卖家添加商品价格信息
seller_shop.flush()
3)Github笔记
第二周的笔记的地址是:
4)Readme.md文档
老男孩Day2作业:购物车程序的更多相关文章
- 老男孩python作业4-ATM程序开发
实现一个ATM + 购物商城程序: 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款 ...
- Python培训12期-day2作业-购物车
#!/usr/bin/env python import sys import os import getpass 商品={ '图书': { "<Puppet实战>": ...
- python基础day2作业:购物车
#功能:1.可注册账号2.登录买家账号3.可查询编辑购物车里商品4.可以余额充值5.可提示余额不足6.购物车结算 #使用:1.第一次使用先注册账号填写账号金额2.账号金额信息保存在buyer_acco ...
- Python初学者第十二天 购物车程序小作业
12day 作业题目: 购物车程序 作业需求: 数据结构: goods = [ {"name": "电脑", "price": 1999}, ...
- 老男孩python作业2-购物车程序
购物车程序要求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 ...
- python3.x Day2 购物车程序练习
购物车程序: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4. ...
- python第七天-作业[购物车]
作业要示: 购物车程序:启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出 ...
- Python学习-购物车程序
程序:购物车程序 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 ...
- 利用JSP编程技术实现一个简单的购物车程序
实验二 JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...
随机推荐
- AngularJS:依赖注入
ylbtech-AngularJS:依赖注入 1.返回顶部 1. AngularJS 依赖注入 什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一 ...
- 2015.9.28 不能将多个项传入“Microsoft.Build.Framework.ITaskItem”类型的参数 问题解决
方法是:项目->属性->安全性->启用ClickOnce安全设置, 把这个复选框前面的勾去掉就可以了.
- ghld data format
%CTF: 1.00%FileType: PROF strp "VelocityProfile"%PROFSpec: 1.00 2006 00 00%Manufacturer: C ...
- JavaScript语言基础-包装对象
- MongoDB中的查询
MongoDB中文文档:http://docs.mongoing.com/manual-zh/contents.html 这里以集合名称为test为例,数据库通过for循环插入一些测试数据,键分别为: ...
- struts2学习笔记(2)action多个方法的动态调用
①在struts.xml中的action添加method <action name="addhelloworld" method="add" class= ...
- 【总结整理】地理信息系统GIS的基础坐标知识
关于辰青2018.03.31 1.地理坐标系和投影坐标系的区别 答案: 1.地理坐标系统是一种球面坐标,而投影坐标系统是平面坐标 2.投影坐标系统在二维平面上有恒定的长度.角度和面积 3.投影坐标系统 ...
- ROS Learning-027 (提高篇-005 A Mobile Base-03) 控制移动平台 --- Twist 消息
ROS 提高篇 之 A Mobile Base-03 - 控制移动平台 - Twist 消息 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- python的argparse模块
一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行参数,例如python parseTes ...
- R: 自动计算代码运行时间
################################################### 问题:代码运行时间 18.4.25 怎么计算代码的运行时间? 解决方案: ptm = pro ...