我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一个简单的购物商城,记录一下。

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一个简单的购物商城,记录一下。

  1 #!/usr/bin/env python3
  2 Menu = {
  3     '电器':{
  4         '电视':{'索尼':'¥2999','康佳':'¥3999','飞利浦':'¥4999','购物车':'购物车','返回':'返回','退出':'退出'},
  5         '洗衣机':{'美的':'¥999','海尔':'¥1099','奥克斯':'¥1599','购物车':'购物车','返回':'返回','退出':'退出'},
  6         '中央空调':{'格力':'¥5699','日立':'¥18999','海信':'¥28999','购物车':'购物车','返回':'返回','退出':'退出'},
  7         '购物车':'购物车',
  8         '返回':'返回',
  9         '退出':'退出'
 10         },
 11     '数码产品':{
 12         '手机':{'苹果':'¥12999','小米':'¥3299','华为':'4299','购物车':'购物车','返回':'返回','退出':'退出'},
 13         '电脑':{'联想':'¥6999','戴尔':'¥8999','惠普':'¥7999','购物车':'购物车','返回':'返回','退出':'退出'},
 14         '摄影机':{'索尼相机':'¥19999','佳能':'¥1999','尼康':'¥6999','购物车':'购物车','返回':'返回','退出':'退出'},
 15         '购物车': '购物车',
 16         '返回':'返回',
 17         '退出':'退出'
 18         },
 19     '服装':{
 20         '鞋子':{'阿迪':'¥699','耐克':'¥599','李宁':'¥499','购物车':'购物车','返回':'返回','退出':'退出'},
 21         '衣服':{'七匹狼':'¥689','花花公子':'¥109','美特斯邦威':'¥209','购物车':'购物车','返回':'返回','退出':'退出'},
 22         '裤子':{'森马':'¥119','班尼路':'¥229','佐丹奴':'¥339','购物车':'购物车','返回':'返回','退出':'退出'},
 23         '购物车': '购物车',
 24         '返回':'返回',
 25         '退出':'退出'
 26         },
 27     '购物车':'购物车',
 28     '退出':'退出',
 29     }
 30 import time                                                                         #时间模块
 31 local_time = time.strftime('%Y{y}%m{m}%d{d} %H:%M:%S').format(y='年',m='月',d='日')    #定义一个时间格式
 32 
 33 
 34 def black_list():                                              #打开文件写入黑名单函数
 35     with open("black_list", "a") as black:
 36         black.write('\n'+user_input.strip())                  #将变量user_input写到文件中,\n为换行
 37 
 38 def lis():                                                          #显示购物车空函数
 39     print('您的购物车里什么都没有哦,快去选购吧!\n'
 40           '请输入%s或%s' % (previous, sign_out))
 41     for i in enumerate(lis_previous_sign_out, 1):                   #循环将列表中元素前加序号,从1开始
 42         print(i[0], i[1])                                           #打印元祖i的第一个和第二个元素
 43         dic_previous_sign_out[str(i[0])] = i[1]                     #循环将i的第一个元素加为字典中keys,第二个元素为values
 44 
 45 def exit():                                                         #结算退出函数
 46     ye = float(balance.strip('¥')) - float(sum(js_list))            #浮点计算,float为浮点,这里strip用来去掉字符串的符号,
 47     # sum()求和函数,这里用来计算列表js_list中所有元素的总和,js_list中为每个商品购买的总价
 48     if ye >= 0:                                                 #余额大于等于0
 49         while True:
 50             shopping = input('继续购物y或者结算退出商城n,输入y or n:').strip()
 51             if len(shopping) == 0:
 52                 print('输入不能为空,请重新输入!')
 53                 continue
 54             if shopping == 'y':
 55                 return False                                #返回False
 56             if shopping == 'n':
 57                 print('本次购物总计消费¥%s元,余额:¥%s元' % (float(sum(js_list)), ye))
 58                 print('欢迎下次购买,'
 59                       '用户%s退出商城!'
 60                       '%s' % (user_input, local_time))
 61                 return True
 62             else:
 63                 print('输入有误,请重新输入!')
 64                 continue
 65     else:
 66         print('余额不足请充值')
 67         return True
 68 
 69 def js_Settlement():                                        #结算函数
 70     while True:
 71         settlement = input('继续购物y或者结算n,输入%s/%s:' % ('y', 'n')).strip()
 72         if settlement == 'y':
 73             continue_flag = True
 74             break
 75         elif len(settlement) == 0:
 76             print('输入不能为空')
 77             continue
 78         elif settlement == 'n':
 79             for i in enumerate(Shopping_Cart.items(), 1):
 80                 # print(i)  i = (1:(索尼:{¥2999:[1,]}))
 81                 sp = i[1][0]                                        #i[1]=(索尼:{¥2999:[1,]}) i[1][0]=索尼
 82                 dj = list(i[1][1])[0]                               #i[1][1]={¥2999:[1,]},list(i[1][1])=(¥2999:[1,]),
 83                 # list(i[1][1])[0]=¥2999
 84                 sl = i[1][1][list(i[1][1])[0]].count(1) #i[1][1]={¥2999:[1,]},list(i[1][1])[0]=¥2999,
 85                 # i[1][1][list(i[1][1])[0]]=字典{¥2999:[1,]}取keys¥2999得到values[1],count(1)列表计算方法,统计列表中元素1有多少个
 86                 zj = int(dj.strip('¥')) * sl    #¥2999用strip去掉符号¥,乘以sl
 87                 js_list.append(zj)              #将zj用append方法追加到列表js_list中
 88                 print('%s 商品:%s 单价:%s 数量:%s 总价:%s' % (i[0], sp, dj, sl, zj))
 89             while True:
 90                 settlement = input('确认结算,确认y或者退出商城n,输入y or n:')
 91                 ye = float(balance.strip('¥')) - float(sum(js_list)) #浮点计算,sum(js_list)为列表js_list所有元素总和
 92                 print('本次购物总计消费¥%s元' % (float(sum(js_list))))
 93                 if settlement == 'y':
 94                     if exit():                              #判断函数exit()返回True
 95                         return True
 96                     else:
 97                         return False
 98                 if settlement == 'n':
 99                     return False
100             # if break_flag == True:
101             #     break
102         else:
103             print('输入有误,请输入y/n')
104             continue
105 
106 def shopping_cart():
107     if Shopping_Cart:
108         js_Settlement()
109     else:
110         while True:
111             lis()  # 调用函数lis()
112             user_choice = input('输入编号:').strip()
113             if user_choice == list(dic_previous_sign_out)[0]:
114                 return True
115             elif user_choice == list(dic_previous_sign_out)[1]:
116                 return False
117             elif len(user_choice) == 0:
118                 print('输入不能为空!!!')
119                 continue
120             else:
121                 print('输入有误,请重新输入!!!')
122                 continue
123 
124 with open('user_passwd', 'r') as f:                             #打开用户密码文件
125     user = dict(line.strip().split(":") for line in f if line)#将文件内容转换为字典
126 
127 passwd_error = []                                             #创建密码错误列表,密码错误一次将用户写入列表
128 user_does_not_exist = []                                      #创建不存在用户列表,不存在用户写入列表
129 Shopping_Cart = {}                                             #购物车空字典
130 dic_menu = {}                                                   #商品展示第一级空字典
131 dic_class = {}                                                  #商品展示第二级空字典
132 dic_commodity = {}
133 lis_previous_sign_out = ['返回商城','退出商城']                           #购物车中列表
134 dic_previous_sign_out = {}                                       #购物车中空字典
135 balance = '¥100000.00'
136 break_flag = False                                            #默认设置为False,用来退出多层循环
137 continue_flag = False                                          #默认设置为False,用来退出当前循环
138 previous = '返回商城'
139 sign_out = '退出商城'
140 js_list = []                                            #每个商品的总价写入这个列表,商品*数量
141 
142 for i in range(10):                                             #循环10次
143     user_input = input("Name:").strip()                         #输入账号,strip去除两侧空格
144     user_passwd = input("Passwd:").strip()                      #输入密码,strip去除两侧空格
145     with open("black_list","r") as black:                       #打开黑名单文件
146         for line in black:
147             if user_input == line.strip():                         #判断用户是否在黑名单中
148                 Tips = '账户%s被锁定,请与管理员联系!'%user_input      #定义字符串,将用户输入变量带入字符串,%s代替用户输入
149                 print(Tips.center(30,'*'))                          #字符串center方法,字符串居中,30为总长度,空白处用*代替
150                 break_flag = True                                   #将break_flag的值重新定义
151                 break                                               #退出循环
152         if break_flag == True:                                      #判断break_flag的值是否为True
153             break
154         if len(user_input) == 0 or len(user_passwd) == 0:      #判断用户输入是否为空格
155             Tips = '用户名或密码不能为空!'
156             print(Tips.center(30,'*'))
157             continue                                         #退出本次循环
158     if user_input in user and user[user_input] == user_passwd:#判断用户名和密码是否一致
159         Tips = '''
160         %s 欢迎用户%s登录商城'''%(local_time,user_input)
161         print(Tips.strip())                     #格式化输出%s来代替变量
162         msg = '''
163         用户:%s   账户余额:%s
164         '''%(user_input,balance)
165         print(msg.strip())
166         while True:
167             for i in enumerate(Menu, 1):                                #将字典第一级的kyes打印出来并加上序号,从1开始
168                 print(i[0],i[1])                                        #i为元祖,这里循环打印元祖的第一个元素和第二个元素
169                 dic_menu[str(i[0])] = i[1]                              #循环将i的第一个元素写到字典dic_menu中为keys,
170                 # 第二个元素写到字典中为vlaues。
171             user_choice_1 = input('请选择商品分类或退出:').strip()
172             if user_choice_1 == list(dic_menu)[-1]:
173                 break
174             elif user_choice_1 == list(dic_menu)[-2]:
175                 if shopping_cart():
176                     continue
177                 else:
178                     break_flag = True
179                     break
180             elif len(user_choice_1) == 0:
181                 print('输入不能为空!!!')
182                 continue
183             elif user_choice_1 in list(dic_menu)[0:3]:              #判断用户输入是否在列表的0-3,0包含0,3为小于3
184                 while True:
185                     for i in enumerate((Menu[dic_menu[user_choice_1]]), 1):
186                         print(i[0], i[1])
187                         dic_class[str(i[0])] = i[1]
188                     user_choice_2 = input('请选择商品:').strip()
189                     if user_choice_2 == list(dic_class)[-1]:
190                         break_flag = True
191                         break
192                     elif user_choice_2 == list(dic_class)[-2]:
193                         continue_flag = True
194                         break
195                     elif user_choice_2 == list(dic_class)[-3]:
196                         if shopping_cart():             #注意:判断函数返回值会执行函数,这里不需要单独在执行函数,否则会重复执行
197                             continue
198                         else:
199                             break_flag = True
200                             break
201                     elif len(user_choice_2) == 0:
202                         print('输入不能为空!!!')
203                         continue
204                     elif user_choice_2 in list(dic_class)[0:3]:         #判断用户输入是否在列表的0-3,0包含0,3为小于3
205                         commodity = Menu[dic_menu[user_choice_1]][dic_class[user_choice_2]]
206                         while True:
207                             for i in enumerate(commodity.items(),1):
208                                 if i[0] < 4:                            #enumerate方法为字典前添加序号,添加后为元祖:(1,(索尼:¥2999))
209                                     # 循环元祖,取元祖第一个元素比较,小于4输出
210                                     print(i[0], i[1][0], ':', i[1][1])#格式化输出,例:(1,(索尼:¥2999))为i,i[0]为1,i[1]为(索尼:¥2999),
211                                     # i[1][0]为索尼,i[1][1]为¥2999
212                                 elif i[0] >= 4:
213                                     print(i[0], i[1][0])
214                                 dic_commodity[str(i[0])] = i[1][0]
215                             user_choice_3 = input('请选择购买商品编号:').strip()
216                             if user_choice_3 == list(dic_commodity)[-1]:   #判断用户输入是否和列表最后一个元素相等,-1代表最后一个
217                                 break_flag = True
218                                 break
219                             elif user_choice_3 == list(dic_commodity)[-2]:
220                                 continue_flag = True
221                                 break
222                             elif user_choice_3 == list(dic_commodity)[-3]:
223                                 if shopping_cart():
224                                     continue
225                                 else:
226                                     break_flag = True
227                                     break
228                             elif len(user_choice_3) == 0:
229                                 print('输入不能为空!!!')
230                                 continue
231                             elif user_choice_3 in list(dic_commodity)[0:3]:
232                                 print('%s:%s已经加入购物车' % (dic_commodity[user_choice_3], commodity[dic_commodity[user_choice_3]]))
233                                 k = dic_commodity[user_choice_3]
234                                 v = commodity[dic_commodity[user_choice_3]] #commodity = Menu[dic_menu[user_choice_1]][dic_class[user_choice_2]]
235                                 if Shopping_Cart:                               #判断字典Shopping_Cart是否为空,这里非空
236                                     if k in Shopping_Cart and v == list(Shopping_Cart[k])[0]:
237                                         Shopping_Cart[k][v].append(1)           #Shopping_Cart[k][v]取出列表用append方法追加1进去
238                                     if k not in Shopping_Cart:
239                                         Shopping_Cart[k] = {v: [1, ]}
240                                 else:
241                                     Shopping_Cart[k] = {v:[1,]}
242                                 if js_Settlement():         #判断函数的返回值,为True
243                                     break_flag = True
244                                     break
245                                 else:                       #函数返回值False
246                                     continue
247                                 # if break_flag == True:
248                                 #     break
249                                 # if continue_flag == True:
250                                 #     continue
251                             else:
252                                 print('输入有误,请重新输入!!!')
253                                 continue
254                         if break_flag == True:
255                             break
256                         if continue_flag == True:
257                             continue
258                     else:
259                         print('输入有误,请重新输入!!!')
260                         continue
261                 if break_flag == True:
262                      break
263                 if continue_flag == True:
264                     continue
265 
266             else:
267                 print('输入有误,请重新输入!!!')
268                 continue
269         if break_flag == True:
270             break
271         if continue_flag == True:
272             continue
273     elif user_input not in user:                            #判断用户是都存在
274         Tips = '用户%s不存在,请重试!'%user_input
275         print(Tips.center(30,'*'))
276         user_does_not_exist.append(user_input)              #用户不存在就写入用户不存在列表中
277         if user_does_not_exist.count(user_input) == 5:      #统计用户不在列表中不存在的用户次数,超过5次锁定
278             Tips = '尝试次数过多,账户%s锁定!'%user_input
279             print(Tips.center(30,'*'))
280             black_list()                                    #调用函数black_list
281             break
282     else:
283         Tips = '密码错误!'
284         print(Tips.center(30,'*'))
285         passwd_error.append(user_input)                     #将密码错误用户写入密码错误列表中
286         if passwd_error.count(user_input) == 3:             #统计密码错误用户是否超过3次
287             Tips = '密码错误3次,账户%s锁定,请联系管理员!'%user_input
288             print(Tips.center(30,'*'))
289             black_list()                                    #调用函数black_list
290             break
291         else:
292             continue                                       #退出当前循环
293 else:
294     Tips = '尝试次数过多!'
295     print(Tips.center(30,'*'))

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一个简单的购物商城,记录一下。

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一个简单的购物商城,记录一下。

1 #!/usr/bin/env python3 2 Menu = { 3 '电器':{ 4 '电视':{'索尼':'¥2999','康佳':'¥3999','飞利浦':'¥4999','购物车':'购物车',
2023-01-31

使用python简单创建一个用户和商城小

整体思路:1.用户功能:购买、显示余额、列表清单、输入2.商家功能:修改和添加商品创建两个接口:用户:#Author: Gordon#读取文档,生成goodsf = open('goods.txt',mode='r+',encoding='
2023-01-30

如何使用C++编写一个简单的网上商城系统?

如何使用C++编写一个简单的网上商城系统?随着互联网的发展,电子商务已经成为人们购物的主要方式之一。为了满足用户的购物需求,开发一个简单实用的网上商城系统是非常有必要的。本文将介绍如何使用C++编写一个简单的网上商城系统。一、需求分析在开始
如何使用C++编写一个简单的网上商城系统?
2023-11-02

Android——一个简单的记账本APP

一个简单的记账本APP 视频效果预览添加账目记录效果预览添加账目记录实现简述实现获取日期字符串时间戳转DateDate转星期 获取时间Switch控制显示和隐藏更改Switch样式事件监听 保存至SQLite数据
2023-08-23

如何利用MySQL和Java开发一个简单的在线商城系统

如何利用MySQL和Java开发一个简单的在线商城系统随着互联网的发展,电子商务成为了人们购物的主要方式之一。而在线商城系统作为电子商务的核心组成部分,对于商家和消费者来说都具有重要的意义。本文将介绍如何利用MySQL和Java开发一个简单
2023-10-22

如何利用MySQL和Java开发一个简单的在线购物系统

如何利用MySQL和Java开发一个简单的在线购物系统在当今的数字时代,电子商务已经成为了商业活动的主流形式之一。根据统计数据,全球电子商务市场的规模正在日益扩大,因此,开发一个在线购物系统成为了许多企业和个人的追求目标。本文将介绍如何利用
2023-10-22

如何利用MySQL和Go语言开发一个简单的购物车功能

要利用MySQL和Go语言开发一个简单的购物车功能,可以按照以下步骤进行:1. 创建数据库表格:在MySQL数据库中创建两个表格,一个是商品表格(包含商品ID、名称、描述、价格等字段),另一个是购物车表格(包含购物车ID、用户ID、商品ID
2023-10-20

oracle性能优化(项目中的一个sql优化的简单记录)

在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性。其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了。本文主要记录在实际项目中,一个需要查询很慢的sql的优化过程,如果有更好的方案,请在下面留
oracle性能优化(项目中的一个sql优化的简单记录)
2015-11-21

如何使用PHP开发一个简易的购物车功能

简介:随着电子商务的快速发展,购物车功能在网上商城中是必不可少的一部分。本文将介绍如何使用PHP语言开发一个简易的购物车功能,帮助读者了解购物车的基本原理,并且提供具体的代码示例,以便读者可以更好地理解和实践。一、购物车基本原理在开始开发购
2023-10-21

如何使用MongoDB开发一个简单的物联网系统

如何使用MongoDB开发一个简单的物联网系统摘要:物联网系统是当前技术领域的热门话题,它将物理设备与互联网连接起来,使得设备之间可以实现数据的交互与共享。本文将介绍如何使用MongoDB开发一个简单的物联网系统,并提供代码示例供读者参考。
2023-10-22

如何使用C++编写一个简单的物流管理系统?

如何使用C++编写一个简单的物流管理系统?简介:物流管理系统是现代物流业中非常重要的一环,它能够帮助企业高效地管理运输、仓储、配送等物流环节。本文将介绍如何使用C++编写一个简单的物流管理系统,帮助读者了解C++的基本语法和面向对象的编程思
如何使用C++编写一个简单的物流管理系统?
2023-11-04

怎么使用JavaScript实现一个简单的通讯录

这篇文章主要介绍“怎么使用JavaScript实现一个简单的通讯录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用JavaScript实现一个简单的通讯录”文章能帮助大家解决问题。1.创建通讯
2023-07-06

如何用Go语言开发一个简单的物流管理系统

如何用Go语言开发一个简单的物流管理系统随着电子商务的兴起,物流行业发展迅速。为了提高物流运输效率、优化配送流程和减少成本,许多物流公司开始使用信息技术来进行管理和操作。在这篇文章中,我们将介绍如何使用Go语言开发一个简单的物流管理系统。一
如何用Go语言开发一个简单的物流管理系统
2023-11-20

第一次使用webstrom简单创建vue项目的一些报错实战记录

在使用webstorm新建vue项目时常会遇到一些报错,特别是新手第一次运行项目,这篇文章主要给大家介绍了关于第一次使用webstrom简单创建vue项目的一些报错实战记录,需要的朋友可以参考下
2023-02-13

Django的下载安装以及实现一个简单示

一.Django下载安装  Django下载链接  1. 下载Django:    pip3 install django==1.11.9    (大的版本1.11不要错)  2.创建一个django project    输入命令: dj
2023-01-30

如何利用MySQL和Python开发一个简单的电商平台

如何利用MySQL和Python开发电商平台本文介绍利用MySQL和Python创建一个简单的电商平台。文章详细阐述了数据库设计、Python代码(包括Flask应用程序、数据库连接和路由)、部署和优化建议。该平台包含产品、订单和用户表,并提供获取、创建和删除数据的API路由。通过优化技巧,您可以提高性能,确保安全性,并扩展平台以满足更大规模的需求。
如何利用MySQL和Python开发一个简单的电商平台
2024-04-09

如何使用MongoDB开发一个简单的电子商务网站

如何使用MongoDB开发一个简单的电子商务网站作为一种流行的非关系型数据库,MongoDB在电子商务网站的开发中具有很大的优势。它的可伸缩性和灵活性使得它成为构建强大而且易于扩展的电子商务网站的理想选择。本文将向您介绍如何使用MongoD
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录