day2编写购物商城
作业:购物商城
商品展示,价格
买,加入购物车
付款,钱不够
流程图如下:
代码共有4个文件,如下:
用户文件:
alex
geng
zhang
lou
zeng
商品文件:
小米3
比亚迪宋
格力变频空调
TCL电视
联想001
跑步鸡
大众
马自达
购物车文件:
比亚迪宋 geng
跑步鸡 geng
马自达 geng
格力变频空调 geng
钱包文件:
geng
zeng
代码如下:
import sys def show():
'''商品展示模块'''
shop_lists = []
shoppings = []
print("商品编号: 商品名称: 商品价格: 商品库存:", end='')
print("\n*************************************************************************************")
with open("shoppings","r") as f:
for line in f:
(shopping_num,shopping_name,shopping_price,shopping_stock) = line.strip().split()
shop_lists.append(shopping_num)
shoppings.append([shopping_num,shopping_name,shopping_price,shopping_stock])
print(shopping_num +" \t",shopping_name+" \t",shopping_price+" \t",shopping_stock+" \t")
return (shop_lists,shoppings) def login(user):
'''登录模块,用户验证用户登录状态'''
users = {}
with open("users_file","r") as user_f:
for user_line in user_f:
username,password = user_line.strip().split()
users[username] = password
if user in users.keys():
while True:
pwd = input("请输入你的密码:")
if pwd == users[user]:
print("您好,欢迎%s,购物愉快!" %user)
active = False
return active
else:
print("对不起,您输入的密码不对,请重新输入!")
else:
print("对不起,您输入的账户不对,请核对后重新输入!")
return True def shopping_cart(stock,user,stock_list,shoppings):
'''购物车模块,向购物车中添加商品'''
shop_lists = []
if stock in stock_list:
while True:
num = input("请输入你要购买商品的数量:")
if int(num) <= int(shoppings[stock_list.index(stock)][]):
shop_lists.append([stock,shoppings[stock_list.index(stock)][],shoppings[stock_list.index(stock)][],num,user])
shoppings[stock_list.index(stock)][] = str(int(shoppings[stock_list.index(stock)][]) - int(num))
break
elif int(num) > int(shoppings[stock_list.index(stock)][]):
print("对不起,您输入的数量超过库存,请重新输入!")
else:
print("对不起,您输入的商品编号不存在,请核对后输入!")
with open("cart_file","a+") as append_f:
for shop_list in shop_lists:
user_line = " ".join(shop_list)
append_f.write(user_line + "\n")
return shoppings def balance(user):
#计算此次购物消费
costs = []
with open("cart_file","r") as balance_f:
for line in balance_f:
num,name,price,stock,username = line.strip().split()
if username == user:
costs.append(int(price)*int(stock))
price =
for cost in costs:
price += cost
return price def recharge(user):
'''充值模块'''
money = input("请输入你要充值的金额:")
user_wallets = []
with open("wallet_file","r") as charge_f:
for line in charge_f:
username,bal = line.strip().split()
if username == user:
bal = str(int(bal) + int(money))
user_wallets.append([username,bal])
else:
user_wallets.append([username,bal])
with open("wallet_file","w") as recharge_f:
for user_wallet in user_wallets:
recharge_f.write(" ".join(user_wallet) + "\n") def account(user,price):
#这里使用递归的方法来进行结算
user = user
price = price
wallets = []
with open("wallet_file","r") as obj_f:
for line in obj_f:
username,purse = line.strip().split()
if username == user:
if int(purse) >= int(price):
purse = str(int(purse) - int(price))
print("支付成功!")
wallets.append([username,str(purse)])
else:
print("对不起,你的余额不足,请充值")
recharge(user)
account(username,purse) #递归执行函数,知道金额大于为止
else:
wallets.append([username,str(purse)])
return wallets if __name__ == "__main__":
active = True
message = '''
******************************************************************************************* \[;1m欢迎来到小猪猪购物网站,祝你购物愉快!\[0m *******************************************************************************************
'''
print(message)
lists = show()
while active:
user = input("请输入你的用户名:")
active = login(user)
global ShoppingStock
global ShoppingLists
ShoppingStock = lists[] #定义全局变量,得到商品的编号,存在一个列表中,目的是获取商品的索引号
ShoppingLists = lists[] #定义全局变量,存放遍历商品的信息,目的是方便之后写会文件
#购物车添加商品了
while True:
shopping_index = input("请输入你要购买商品的编号(输入quit退出购物):")
if shopping_index == "quit": #当用户输入quit时候,退出选购
break
else:
ShoppingLists = shopping_cart(shopping_index,user,ShoppingStock,ShoppingLists)
with open("shoppings","w") as modify_f:
for shopping_list in ShoppingLists:
shopping_line = " ".join(shopping_list) + "\n"
modify_f.write(shopping_line)
price = balance(user)
wallets = account(user,price)
with open("wallet_file","w") as wallet_f:
for user_line in wallets:
wallet_f.write(" ".join(user_line) + "\n")
运行结果如下: ******************************************************************************************* 欢迎来到小猪猪购物网站,祝你购物愉快! *******************************************************************************************
商品编号: 商品名称: 商品价格: 商品库存:
*************************************************************************************
10001 小米3 2699 50
10002 比亚迪宋 100001 92
10003 格力变频空调 20000 5
10004 TCL电视 6000 98
10005 联想001 5600 992
10006 跑步鸡 250 664
10007 大众 58000 97
10008 马自达 68000 44
请输入你的用户名:geng
请输入你的密码:888
您好,欢迎geng,购物愉快!
请输入你要购买商品的编号(输入quit退出购物):10002
请输入你要购买商品的数量:1
请输入你要购买商品的编号(输入quit退出购物):10006
请输入你要购买商品的数量:1
请输入你要购买商品的编号(输入quit退出购物):10008
请输入你要购买商品的数量:1
请输入你要购买商品的编号(输入quit退出购物):10003
请输入你要购买商品的数量:1
请输入你要购买商品的编号(输入quit退出购物):quit
对不起,你的余额不足,请充值
请输入你要充值的金额:100000
支付成功!
上述代码运行流程如下:
(1)展示商品信息;
(2)用户登录验证;
(3)用户输入想购买产品及数量,输入quit退出购物;
(4)添加到购物车文件;
(5)结算,去购物车计算购物花费;
(6)调用用户钱包文件,看余额是否够支付;
(7)余额大于等于等次购物,支付成功;余额不够,用户充值;
(8)调用充值模块,进行充值;
(9)递归,判断知道用户充值后的余额大于等于本次购物花费,支付成功;
(10)结束程序。
掌握知识:
(1)列表遍历的方法,列表修改是要先读取到一个列表中,然后根据用户输入的信息来进行修改;
(2)文件的来回打开与关闭;
(3)应用到了递归,就是当用户的余额一直较少的时候,就递归,直到用户的余额大于购物的花费为止;
(4)循环的开始与终止(break),程序的开始与终止(sys.exit),函数的开始与终止(return);
(5)列表的关联与索引情况,读取文件的顺序的解决问题。
day2编写购物商城的更多相关文章
- day2编写购物商城(1)
作业:购物商城 商品展示,价格 买,加入购物车 付款,钱不够 具体实现了如下功能: 1.可购买的商品信息显示 2.显示购物车内的商品信息.数量.总金额 3.购物车内的商品数量进行增加.减少和商 ...
- day2、购物商城
作业:购物商城 商品展示,价格 买,加入购物车 付款,钱不够 代码如下: import codecs #登录接口,用户名密码都正确登录成功,否则失败 def login(your_name,your_ ...
- Day2作业:购物商城
ReadMe: 注意事项: 1.本程序需要提前安装prettytable模块,在商品展示时使用了prettytable 2.数据库使用json模块,有中文数据,在mac系统上编写,运行没有出现问题,在 ...
- day2 购物商城
购物商城 商品展示.价格 买,加入购物车 付款,钱不够.(减商品,充值)
- Python学习笔记-练习编写ATM+购物车(购物商城)
作业需求: 模拟实现一个ATM + 购物商城程序: 1.额度 15000或自定义 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.支持多账户登录 5.支持账户间 ...
- 微信小程序购物商城系统开发系列-目录结构
上一篇我们简单介绍了一下微信小程序的IDE(微信小程序购物商城系统开发系列-工具篇),相信大家都已经蠢蠢欲试建立一个自己的小程序,去完成一个独立的商城网站. 先别着急我们一步步来,先尝试下写一个自己的 ...
- python day19 : 购物商城作业,进程与多线程
目录 python day 19 1. 购物商城作业要求 2. 多进程 2.1 简述多进程 2.2 multiprocessing模块,创建多进程程序 2.3 if name=='main'的说明 2 ...
- Python开发程序:ATM+购物商城
一.程序要求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还 ...
- ThinkPHP 购物商城网站(数据库中增删改查的功能实现)——————重点——————
控制器 ---------------------GoodsController.class.php------------------------------------------------- ...
随机推荐
- 区间DP的思路(摘自NewErA)及自己的心得
以下为摘要 区间dp能解决的问题就是通过小区间更新大区间,最后得出指定区间的最优解 个人认为,想要用区间dp解决问题,首先要确定一个大问题能够剖分成几个相同较小问题,且小问题很容易组合成大问题,从而从 ...
- SQL2005函数大全
表达式:是常量.变量.列或函数等与运算符的任意组合.以下参数中表达式类型是指表达式经运算后返回的值的类型 字符串函数 函数名称 参数 示例 说明 ascii (字符串表达式) select ascii ...
- python3使用stmplib发送邮件
代码如下: import smtplib from email.mime.text import MIMEText from email.header import Header from email ...
- 《java语言程序设计》初步学习——各种小Demo
发现现在的天下几乎都是java的天下啊,虽然我个人对java没什么好感,但是迫于生活压力,还是学一下吧,我关注的应该主要还是web方面,所以应该学的是 java server page(JSP),所以 ...
- js 替换部分内容为星号
function formatPhone(phone) { return phone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); } 姓 ...
- Redis(Remote Dictionary Server)入门
说说特性 存储结构:键值对支持多种数据类型,包括字符串类型,散列类型,列表类型,集合类型,有序集合类型. 内存存储与持久化:支持将内存中的数据异步写入磁盘中. 丰富的功能:支持为每个键值对设置生存时间 ...
- Caffe的loss layer(转)
英文可查:地址 1.SoftmaxWithLoss 对一对多的分类任务计算多项逻辑斯蒂损失,并通过softmax传递预测值,来获得各类的概率分布.该层可以分解为SoftmaxLayer+Multino ...
- NameValuePair方式传参数
今天工作中联调外部的一个接口用post方式传输,我按照文档封装参数成Jason字符串传入,但是对方一直接受参数为空,折腾了半天也没找到问题.很苦恼,检查代码都没有错误,可是为什么对方接受参数为空呢?然 ...
- vuex的安装
可以启动vue ui 手动添加vuex. 或使用 cnpm install vuex 2.使用,import vuex from “vuex” vue.use(vuex) 3.安装插件, 首先键入谷歌 ...
- linux源码安装nginx
任务目标:源码安装nginx,作为web服务修改配置文件,让配置生效,验证配置 首先要去官网nginx.org下载一个tar包: tar xvf 解包 进入到解包出来的目录,对configure进行配 ...