day2编写购物商城(1)
作业:购物商城
商品展示,价格
买,加入购物车
付款,钱不够
具体实现了如下功能:
1、可购买的商品信息显示
2、显示购物车内的商品信息、数量、总金额
3、购物车内的商品数量进行增加、减少和商品的删除
4、用户余额的充值
5、用户购买完成进行结账,将最终余额回写到用户文件中。
一、用户文件说明:
kevin
sky
mobi
其中第一列为用户名,第二列为密码,第三列为帐户余额。
二、流程图如下:
import sys,os,getpass,time def input_handle(s):
'''用户输入字符数字转化为数字'''
if s.isdigit(): #判断用户输入是否是字符数字
s = int(s) #是的话就进行转换
return s def framework(user="",init_money='',now_money='',recharge_money='',value=''):
'''架构函数,展示用户的基本信息'''
os.system("clear")
init_money = int(init_money)
now_money = int(now_money)
recharge_money = int(recharge_money)
message = '''
******************************************************************************* \[;1m欢迎来到小猪猪购物商城\[0m *******************************************************************************
会员:%s\t金额:%d\t当前余额:%d\t充值金额:%d\t购物车:%d
''' %(user,init_money,now_money,recharge_money,value)
print(message) def goods_list_show(my_dict):
'''商品展示模块,用于展示商品'''
local_dict = {}
'''对商品列表进行遍历并加上数字编号'''
i =
print("商品列表:")
print("=================================================================================================")
print("%-5s %-15s %-10s %-10s %-10s" %("编号","商品名称","商品价格(元)","商品总数量(个)","商品剩余数量(个)"))
for k in my_dict.keys():
v = my_dict[k]
if type(v) == dict:
print("%-5s %-20s %-15d %-18d %-10d" %(i,k,v['price'],v['num'],v['sum']))
local_dict[i] = [k,v["price"],v['num'],v['sum']]
i +=
print("=================================================================================================")
return local_dict def cart_goods_show(show_dict):
'''显示购物车商品,并加上数字编号'''
show_all_sum =
show_all_num =
'''对商品列表进行遍历并加上数字编号'''
message = ('编号',"商品名称","商品价格(元)","商品总数量(个)","购买数量(个)","购买金额(元)")
print("%-5s \t %-20s \t %-10s \t %-10s \t %-10s \t %-10s" %message)
for k in show_dict:
v = show_dict[k]
if type(v) is dict:
print("%-5s \t %-10s \t %-10d \t %-10d \t %-10d \t %-10d" %(k,v[],v[],v[],v[],v[]))
show_all_num += v[]
show_all_num +=
print("请确认你购买的商品,总金额:%d元"%(show_all_sum))
return (show_all_sum,show_all_num) def cart_goods_modify(modify_dict,modify_goods_dict):
'''购物车商品修改列表'''
a_flag =
while a_flag:
index = input("请输入商品编号|完成修改(q):" %modify_dict[index][])
if len(index) != :
index = input_handle(index)
if index == "q":
break
elif index in modify_dict:
b_flag =
name = modify_dict[index][]
while b_flag:
num = input("请输入新的商品数量(最大值为%d)|完成修改(q):" %modify_dict[index][])
if len(num) != :
num = input_handle(num)
if num == 'q':
break
elif num == :
modify_goods_dict[name]['num'] = modify_dict[index][]
del modify_dict[index]
b_flag =
elif num > and num <= modify_dict[index][]:
modify_dict[index][] = num
modify_dict[index][] = modify_dict[index][] * num
modify_goods_dict[name]['num'] = modify_dict[index][] - num
b_flag =
else:
pass
else:
pass
return (modify_dict,modify_goods_dict) def shopping_cart_show(my_cart,my_goods_dict):
'''购物车展示'''
print("欢迎来到你的购物车".center(,"#"))
goods_all_sum =
goods_all_num =
if my_cart:
'''调用购物车商品列表函数,并返回商品总金额和总数量'''
(goods_all_sum,goods_all_num) = cart_goods_show(my_cart)
choice = input("请进行如下操作:修改记录(c)|继续购物(!c)")
if choice == "c":
(my_shop_cart,my_goods_dict) = cart_goods_modify(my_cart,my_goods_dict)
(goods_all_sum,goods_all_num) = cart_goods_show(my_cart)
else:
pass
else:
print("您当前的购物车为空".center(,"#")) time.sleep()
return (goods_all_sum,goods_all_num,my_goods_dict) def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money):
recharge_flag =
while recharge_flag:
recharge_num = input("请输入充值金额|返回(b)|退出(q):")
if len(recharge_num) != :
recharge_num = input_handle(recharge_num)
if recharge_num == "q":
sys.exit()
elif recharge_num == 'b':
break
elif type(recharge_flag) is int and recharge_num > :
recharge_init_balance += recharge_num
recharge_now_balance += recharge_num
recharge_money += recharge_num
recharge_flag =
print("充值成功,请查收".center(,"#"))
else:
pass
return (recharge_init_balance,recharge_now_balance,recharge_money) def user_billing(billing_list,my_cart,billing_balance):
'''结帐模块'''
print("欢迎来到结帐模块".center(,"#"))
if my_cart:
'''调用购物车商品列表函数'''
cart_goods_show(my_cart)
billing_flag = input("请确认是否商品结算(y|n):")
if billing_flag == "y":
billing_file = open("info.txt",'w')
for user_info in billing_list:
billing_file.writelines(user_info)
billing_file.close()
sys.exit("结帐成功,您当前余额:%d".center(,"#") %billing_balance)
else:
print("退出结算菜单,继续购物".center(,"#"))
time.sleep()
else:
print("您当前的购物车为空,无需结算!")
time.sleep() '''主程序开始'''
if __name__ == "__main__":
goods_list = {
'iphone6': {'price':,'num':,'sum':},
'ipad': {'price':,'num':,'sum':},
'mi4': {'price':,'num':,'sum':},
'huawei6_plus': {'price':,'num':,'sum':},
}
i =
while i < : #只要用户登录不超过3次就不断循环
username = input("请输入用户名:")
password = input("请输入密码:")
user_file = open("info.txt",'r')
user_list = user_file.readlines()
user_file.close() for user_line in user_list:
'''分别获取当前账号、密码和余额信息'''
user,passwd,init_balance = user_line.strip('\n').split()
init_balance = int(init_balance)
now_balance = init_balance
my_goods_sum = if user == username and password == passwd:
user_shopping_cart = {}
user_shopping_cart_count =
recharge_value =
line_num = user_list.index(user_line)
first_flag = while first_flag:
'''调用框架函数输出用户信息'''
framework(username,init_balance,now_balance,recharge_value,user_shopping_cart_count)
goods_output_dict = goods_list_show(goods_list) #输出商品信息
goods_index = input("请选择菜单:输入商品编号 | 购物车(c) | 余额充值(r) | 结账(b) | 退出(q) :") if len(goods_index) != :
goods_index = input_handle(goods_index) if goods_index == 'q':
sys.exit() elif goods_index == 'c':
'''调用购物车显示函数,并返回购物车商品总金额'''
(my_goods_sum,user_shopping_cart_count,goods_list) = shopping_cart_show(user_shopping_cart,goods_list)
now_balance = init_balance - my_goods_sum
if now_balance < :
print("您的余额不足,请及时充值!")
time.sleep() elif goods_index == 'r':
(init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value) elif goods_index == 'b':
'''更新用户的余额'''
user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n'
user_billing(user_list,user_shopping_cart,now_balance) elif goods_index in goods_output_dict:
'''取出goods_index商品列表信息并进行赋值和展示'''
(goods_name,goods_price,goods_num) = (goods_output_dict[goods_index][],goods_output_dict[goods_index][],goods_output_dict[goods_index][])
print('【 编号:%-5d \t 名称:%-15s \t 价格:%-5d(元) \t 数量:%-5d(个)】' % (goods_index, goods_name, goods_price, goods_num)) second_flag =
while second_flag:
buy_num = input('请输入购买商品个数(最大值为%d) | 返回(b) | 退出(q): ' % goods_num)
if len(buy_num) != :
buy_num = input_handle(buy_num) if buy_num == 'q':
sys.exit()
elif buy_num == 'b':
break elif type(buy_num) is int and buy_num > and buy_num <= goods_num:
my_goods_sum = goods_price * buy_num
if my_goods_sum <= now_balance:
print('购买商品 %s 总价格为 : %d' % (goods_name, my_goods_sum))
add_flag = input("请确认是否加入购物车(y | n):")
if add_flag == "y":
'''判断购物车不存在该商品'''
if goods_index not in user_shopping_cart:
user_shopping_cart_count +=
'''购物车商品数量加一'''
user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum]
else:
user_shopping_cart[goods_index][] += buy_num
user_shopping_cart[goods_index][] += my_goods_sum now_balance -= my_goods_sum goods_list[goods_name]['num'] -= buy_num
second_flag =
else:
break else:
print("您的余额不足,请充值或重新选择,谢谢!")
time.sleep() else:
pass
else:
pass
else:
if i != :
print('用户或密码错误,请重新输入,还有 %d 次机会' % ( - i))
i +=
else:
sys.exit('用户或密码输入错误超过三次,退出系统,欢迎下次光临')
上述代码不难,难的是思路,思路很重要,要知道如何一步一步去操作,用的也都是我们常用的知识,其实归根揭底我们写程序,大部分使用的都是字符串,字典,列表的功能。还有一些模块之类的。在写程序的过程中,思路显得尤为重要。知道了思路,就考虑如何使用代码去实现,上面程序中学到了如下知识点;
1、输出格式对其:print("%-5s %-15s %-10s %-10s %-10s" %("编号","商品名称","商品价格(元)","商品总数量(个)","商品剩余数量(个)")),上面代码能够实现对其格式的功能,让我们输出的字符串格式统一,比如上述代码中,编号左对齐5个字符,商品名称左对齐15个字符等等;
2、str.center()的使用,如print("欢迎来到你的购物车".center(80,"#"));
day2编写购物商城(1)的更多相关文章
- day2编写购物商城
作业:购物商城 商品展示,价格 买,加入购物车 付款,钱不够 流程图如下: 代码共有4个文件,如下: 用户文件: alex geng zhang lou zeng 商品文件: 小米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------------------------------------------------- ...
随机推荐
- 用Anaconda安装本地python包
Anaconda确实带来了很多方便,但是之前也过多的依赖了conda自带的一键下载python包的功能.这不,这几天突然要用FastFM这个包,无奈conda里没有,于是只能从github下载下来,实 ...
- org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session异常解决办法
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was alread ...
- spark-shell启动spark报错
前言 离线安装好CDH.Coudera Manager之后,通过Coudera Manager安装所有自带的应用,包括hdfs.hive.yarn.spark.hbase等应用,过程很是波折,此处就不 ...
- Java并发编程原理与实战二十六:闭锁 CountDownLatch
关于闭锁 CountDownLatch 之前在网上看到过一篇举例非常形象的例子,但不记得是出自哪里了,所以这里就当自己再重新写一篇吧: 例子如下: 我们每天起早贪黑的上班,父母每天也要上班,有一天定了 ...
- 数据库日志文件(databasename_log.ldf)太大 如何清除
在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式.方案一:完全命令模式USE[master] GO ALTER DATABASE DNName SET RECOVERY ...
- Spring MVC表单防重复提交
利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RU ...
- 有用的JavaScript开发小建议
这篇文章将向你分享一些不为人知的但很有用的JavaScript小建议,对那些刚涉及使用JavaScript编程语言的初级开发者应该有很大的帮助. 1. 用数组长度截取数组 我们都知道,对象都是通过使用 ...
- java基础学习:JavaWeb之Cookie和Session
一.会话概述 1.1.什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话其中不管浏览器发送多少请求,都视为一次会话,直到 ...
- SearchSploit
在我们的GitHub上的Exploit Database存储库中包含一个名为"searchsploit"的Exploit-DB的命令行搜索工具,该工具还允许您在任何地方随身携带一个 ...
- python 进程 线程 协程
并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的 ...