python制作购物网站_python实现简单购物商城

news/2024/5/8 13:41:33/文章来源:https://blog.csdn.net/weixin_39658726/article/details/109941170

本文为大家分享了购物商城小程序,供大家参考,具体内容如下

软件版本:python3.x

功能:实现简单购物商城

1.允许用户选择购买多少件

2.允许多用户登录,下一次登录后,继续按上次的余额继续购买

3. 允许用户查看之前的购买记录(显示购买时间)

4. 商品列表分级展示

操作:

1.默认用户,pan,li,密码为123

2.登录后需正确输入用户名和密码

3.按提示选择充值的金额

4.选择购买的商品,按q退出,按c查看易购买记录,按s查看当前已购买商品

注:file_lock.txt,username_file.txt需事先创建

代码如下:

#!/usr/bin/env python

#coding:utf-8

#Auto:Panwenbin

#function:

import shelve

import time

shop_list={ #定义商品清单

'数码电器':{'电脑':'8000','照相机':'10000','手机':'3800','打印机':'3600'},

'服装百货':{'牛仔裤':'288','夹克':'300','王老吉':'6','方便面':'4'},

'汽车':{'特斯拉':'999999','宝马X5':'550000','帕沙特':'250000','奇瑞':'100000'},

'化妆品':{'欧莱雅':'888','欧诗漫':'666','韩束':'388','百雀羚':'259'},

}

count=0#定义一个计数器

jiage=[]

shop_list1={}

shop_name=list(shop_list.keys()) #将商品第一层清单数据类型转换为列表

lock_file=open('file_lock.txt','r+')

user_pass=open('username_file.txt','r+')

count=0

def show_list():#打印序列号与商品分类清单

for i,j in enumerate(shop_list):

print('%d:%s'%(i,j))

def show_menu(user_choise):#打印序列号与商品第二层清单

user_choise=int(user_choise)

a=shop_name[user_choise]

for index,key in enumerate(shop_list[a]): #打印序列号与商品第二层清单

print('%d:%s %s'%(index,key,shop_list[a][key]))

def show_menu2(user_choise,user_choise2):#调用用户第一次选择和第二次选择,进入对应的购物列表

user_choise=int(user_choise)

if user_choise2.isdigit() and int(user_choise2) < len(shop_list[shop_name[int(user_choise)]]):#判断用户输入的是否为数字,并小于商品序列号

user_choise2=int(user_choise2)

# if user_choise2==0:

jiage.clear()

for v,k in enumerate(shop_list[shop_name[user_choise]]): #获取用户进入第二层商品的清单

jiage.append(shop_list[shop_name[user_choise]][k])#将获取的商品清单存入列表中

jiage2=(int(jiage[user_choise2]))

global jiage2

def quit_time():#查询完成后退出

for i in [3,2,1]:

print('\033[32;1m查询完毕,正在返回主菜单.....\033[1m',i)

time.sleep(1)

def start():

while True:

if user_choise.isdigit() and int(user_choise)

show_menu(user_choise)#调用show_menu函数,

break

else:

print('\033[31;1m无效选项,请重新输入\033[1m')#用户重新输入

break

########################################################################################################################

while count <3:#只要重试不超过3次就不断循环

print('\033[31;1m默认用户名密码为:pan,123 li,123\033[1m')

username=input('\033[34;1m请输入您的用户名:\033[1m')

for i in lock_file.readlines(): #判断用户名是否在锁文件中

i=i.split()

if username in i[0]:

print('\033[31;1m对不起 %s 已锁定\033[1m'%username)

exit()

match = False

for j in user_pass.readlines():

user,password = j.strip('\n').split() #去掉每行多余的\n并把这一行按空格分成两列,分别赋值为user,passwd两个变量

if username == user: #判断输入的用户是否存在

passwd=input ('\033[30;1m请输入密码:')

if password == passwd:

match = True

break

elif password != passwd:#在用户名正确的前提下,判断输入的密码是否正确

for i in range(2):

passwd=input ('\033[31;1m密码错误,请重新输入密码:\033[1m')

if password == passwd:

match =True

break

else:

print('\033[31;1m密码和用户名不匹配,尝试超过三次,用户被锁定\033[1m')

lock_file.write('%s \n'%username)

lock_file.close()

user_pass.close()

exit()

if username != user:

print('\033[31;1m您输入用户名不存在,程序已退出\033[1m')

exit()

elif match==True:

break

########################################################################################################################

f=shelve.open('user.db','c+')

try:

if f[user] >0:

pay=f[user]

chong_zhi=input('\033[33;1m您的当前余额为%d,是否充值?充值请输入您要充值的金额,任意键进入下一步,退出程序请按q:\033[1m'%f[user])

if chong_zhi.isdigit() and int(chong_zhi) > 0:

pay=int(chong_zhi)+int(pay)

print('\033[35;1m充值后金额为\033[1m',pay)

except KeyError:

chong_zhi=input('\033[36;1m您的当前余额为0,是否充值?充值请输入您要充值的金额,退出程序请按q:\033[1m')

while True:

if chong_zhi.isdigit() and int(chong_zhi) > 0:

pay=int(chong_zhi)

print('\033[33;1m充值后金额为\033[1m',pay)

break

elif chong_zhi=='q':

print('\033[36;1m程序正在退出\033[1m')

exit()

else:

pass

# pay=input('您的当前余额为0,是否充值?充值请输入您要充值的金额,退出程序请按q:')

########################################################################################################################

while True:

show_list()#调用show_list函数,打印商品分类清单

user_choise=input('\033[32;1m选择购买商品的类型:\033[1m') #获取用户选择商品的分类

start()#调用start函数

user_choise2=input('\033[36;1m选择购买商品的类型。按q退出,按c查看易购买记录,按s查看当前已购买商品,任意键返回上一级菜单,:\033[0m')#获取用户选择的商品

# user_num=input('\033[35;1m请选择需要购买的件数,默认为1:\033[0m')#获取用户选择商品的数量

if user_choise2.isdigit() and int(user_choise2) < len(shop_list[shop_name[int(user_choise)]]):#判断用户输入的是否为数字,并小于商品序列号

user_num=input('\033[35;1m请选择需要购买的件数,默认为1:\033[1m')#获取用户选择商品的数量

show_menu2(user_choise,user_choise2)#调用show_menu2函数,获取用户选择商品的种类和数量,可用金额是否满足

if user_num.strip() =='':#如果用户输入为空,默认为1

user_num=int(1)

elif user_num.isdigit and int(user_num) > 1:#如果用户输入是数字切大于1,获得用户输入中

user_num=int(user_num)

else:

user_num=int(1)#其余情况下默认为一

pay=int(pay)

if pay > jiage2*user_num:#判断用户选择商品的价格*数量是否可以支付

pay=pay-jiage2*user_num

choise=list(shop_list[shop_name[int(user_choise)]].keys())#得到用户进入第二层商品列表

count+=1 #计数器值加一

goumai_jilu=shelve.open('goumai_jilu.txt','a+') #调用shelve打开一个数据文件

goumai_jilu[str(count)]=choise[int(user_choise2)],jiage2,user_num,time.ctime()#向数据文件中插入用户选择的商品,个数和购买时间

goumai_jilu.close()#关闭数据文件

a=choise[int(user_choise2)]#得到用户选择的商品,choise为用户选择第二层商品列表

if a in shop_list1: #如果用户选择的商品已购买

shop_list1[a][0]=int(shop_list1[a][0])+user_num #将购买数加一

shop_list1[a][1]=int(shop_list1[a][1])+int(shop_list1[a][1]*user_num) #将总额加

else:

shop_list1[a]=list([1,jiage2])

print('\033[32;1m您的余额为:\033[1m',pay)

else:

print('\033[32;1m您的余额不足,请重新选择:\033[0m')

elif user_choise2=='b':#返回商品分类清单

continue

elif user_choise2=='q':#退出程序

f=shelve.open('user.db','a+')

f[user]=pay

f.close()

exit()

elif user_choise2=='c':

goumai_jilu=shelve.open('goumai_jilu.txt','a+')

print('\033[32;1m您的当前购买记录为:\033[1m')

for i in goumai_jilu.items(): #获取购买记录中的数据

print('{} {}'.format(i[0],goumai_jilu[i[0]]))#打印购买记录

print('\033[32;1m################################################\033[0m')

quit_time()

elif user_choise2=='s':

print('\033[32;1mp_name num total_price\033[1m')

print('\033[32;1m%-10s%-10s%-10s\033[1m'%(a,shop_list1[a][0],shop_list1[a][1]))#打印当前购买的商品,个数以及总额

print('\033[32;1m################################################\033[0m')

quit_time()

else:

print('\033[41;33m无效选项,请重新选择:\033[0m')

continue

以上就是本文的全部内容,希望对大家学习Python程序设计有所帮助。

更多python实现简单购物商城相关文章请关注PHP中文网!

article_wechat2021.jpg?1111

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_781287.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java电商商品搜索_电商网站上的搜索功能是如何实现的?

今天是刘小爱自学Java的第159天。感谢你的观看&#xff0c;谢谢你。学习计划安排如下&#xff1a;索引库本质上和数据库类似&#xff0c;也是存储数据的&#xff0c;既然如此自然也会有增删改查。那么这个索引库到底有何特别应用呢&#xff1f;索引库的特别之处在于它的查询&am…

python爬虫爬取网站文章,python爬虫入门初级实践之爬取网站文章及阅读量-基于BeautifulSoup...

1.目标爬虫实现的目标&#xff1a;输入&#xff1a;测试窝主页链接输出&#xff1a;爬取该网站所有页面的测试相关前言资讯和技术文章的文章链接、标题及阅读量、点赞数&#xff0c;发表日期2.爬虫Beautifulsoup4使用总结Beautifulsoup预备知识Beautifulsoup4官方文档如下&…

高级项目经理推荐:19个超实用的自学网站

最近&#xff0c;有学员私信问&#xff1a;“能否推荐一些适合项目经理学习或交流的网站&#xff1f;”当然没有问题。 信息化时代&#xff0c;很多人都会通过学习网站来提升自己。但这么多网站&#xff0c;到底哪些才是最适合你呢&#xff1f;本篇文章为大家总结了&#xff0…

nicetool好工具_6个功能超多的在线工具网站,即开即用!建议都收藏

在我们的日常工作学习中&#xff0c;总会夹杂着一些小的需求&#xff0c;比如说媒体文件太大&#xff0c;需要压缩一下才能上传&#xff1b;下载工具不支持某种格式的链接&#xff0c;需要转换&#xff1b;看到B站或者抖音有个视频很喜欢&#xff0c;但是下载有水印。诸如此类的…

seo代码优化工具_seo关键词该如何筛选,网站优化如何更有技巧的去做好

seo关键词该如何筛选SEO关键词如何筛选关键词如何筛选我给大家分享了如何做好SEO&#xff0c; 同时也给大家拓展了常用的SEO术语&#xff0c;相信大家都有所收获吧&#xff0c;今天小编就给大家说说如何分析筛选出适合网站优化的关键词?根据之前文章的介绍&#xff0c;我们有了…

read.html5.qq.com,如何通过第三方QQ登录网站首页

QQ登录&#xff0c;就是我们所说的第三方登录&#xff0c;是指用户可以不在本项目中输入密码&#xff0c;而直接通过第三方的验证&#xff0c;成功登录本项目若想实现QQ登录&#xff0c;需要成为QQ互联的开发者&#xff0c;审核通过才可实现。注册方法参考链接http://wiki.conn…

网站服务器的10G内存,10G网站空间

10G网站空间 内容精选换一换云速建站各个版本对于流量都不做任何限制&#xff0c;可以无限使用。客户访问和上传下载文档图片都会产生流量&#xff0c;流量为上下行量的总和。云速建站架构包含缓存机制&#xff0c;只有第一次访问的时候&#xff0c;图片下载到本地才会占有流量…

ASP.NET MVC4网站搭建与发布【最新】

ASP.NET MVC4网站搭建与发布 一些往事 2015年&#xff0c;仅仅大二的我怀着一颗创业之心&#xff0c;加入了常熟派英特&#xff0c;成为阳光职场平台的创始之一&#xff0c;并肩负了公司技术部的大梁&#xff0c;当时阳光职场正在从线下服务向互联网化升级过渡。 距我离开自…

使用Github+Hexo搭建个人博客 - Hexo建站(一)

一、博客搭建 1.1.1 安装nodejs 官网: https://nodejs.org/en/ 下载好后, 打开一直下一步即可. 查看是否安装成功 $ node -v v12.10.01.1.2 安装Git Windows: 下载并安装 https://git-scm.com/download/win 1.1.2.1 git设置 配置推送的用户名和邮箱 $ git config --glob…

Github搭建的博客更改为自定义域名 - Hexo建站(二)

本文主要目的: 创建Githubs name.github.io网站后, 想改为自己的域名 更改为自定义域名 1.购买自己想要的域名 2.域名备案 3.域名解析 GitHub Page最新域名解析地址: https://help.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github…

NexT主题导航图标不显示或者导航链接404 - Hexo建站(三)

图标显示问号 修改主题配置文件: /themes/_config.yml menu:home: /|| homecategories: /categories/|| tharchives: /archives/|| archiveabout: /about/|| user#tags: /tags/ || tags#schedule: /schedule/ || calendar#sitemap: /sitemap.xml || sitemap#commonweal: /404…

添加验证网站之CNAME验证操作-百度搜索资源平台

为了让百度可以搜索到自己的网站内容来提高自己网站的曝光度, 需要下面操作完成. 本文针对通过GitPagesHexo搭建的博客, 来让百度搜索到, 因为前两种方法都是未知原因301, 所以只能使用CNAME验证来完成. 一、查看自己网站是否可以百度搜索到 百度搜索: site:完整域名,若是下图,…

github分支备份博客源文件 - Hexo建站(四)

Hexo建立的博客的所有文件, 刚开始是没有.git文件夹的. 首先进入.deploy_git目录下, 新建一个分支hexo git branch hexo然后将该目录下的.git文件夹复制到博客的根目录下, 也就是上一级目录.在git bash下操作, 切换到hexo分支. git checkout hexo将根目录下的文件先建立索引, …

侧栏中的posts打开的链接错误,修改链接 - Hexo建站(五)

当鼠标移到posts时, 访问的链接是域名/archives/%7C%7C%20archive/, 可见后面的多余了, 问题就是删除后面多余字符 解决多余字符 posts的class"site-state-item site-state-posts" 打开博客根目录/themes/next/layout/_macro/sidebar.swig, 搜索class的值, 快速定…

主页文章添加背景图片后给文章添加阴影效果 - Hexo建站(六)

博客地址预览: http://www.clearlight.com.cn 打开博客主目录文件 -> themes -> next -> source -> css -> _custom -> custom.styl 里面填上如下代码: .post-block {background: rgba(255, 255, 255, 0.84);padding: 25px; }// 主页文章添加阴影效果 .po…

NexT主题网站一直请求static.duoshuo.com,如何取消多说 - Hexo建站(七)

一、问题描述 如上图, 一直在请求, 打开浏览器控制台, 一段时间后, 可以看到响应500. 多说已经关闭, 所以放弃多说, 之前设置多说没成功, 也没管, 因此后面, 一直在请求多说, 很苦恼. 取消主题的配置文件中的duoshuo都设置为false, 还是在一直在请求 &#x1f626; 二、解决…

GitPage如何对自定义域名开启强制https - Hexo建站(九)

Github搭建的博客更改为自定义域名 - Hexo建站(二) 更改为自己域名后, 正常访问是: http://www.xxx.com 如何开启https进行访问网站? blog仓库的setting选项找到GitHub Pages的项目配置 勾选Enforce HTTPS选项即可开启, 但是如果之前已经开启了自定义域名, 该选项是无法勾选…

NexT主题分页的翻页箭头显示i class=fa fa-angle-right/i - Hexo建站(十)

看了这篇文章, 终于明白, 只能用魔法来战胜魔法 &#x1f603; 解决Hexo博客模板hexo-theme-next的翻页按钮不正常显示问题 显示为: 修改代码的位置: themes\next\layout\_partials\pagination.swig 原来为: {% if page.prev or page.next %}<nav class"pagination&…

hexo如何同时部署到github和coding? - Hexo建站(十一)

部署到github上, 访问的速度实在是太慢了. 所以可以部署到coding上, 两者并不冲突, 而且coding也可以自定义域名. 所以这个操作是很有必要的. 官网: https://coding.net/ 新建账户后, 把公钥加到coding的ssh公钥里面, 添加的时候, 你用你之前添加到github的公钥在添加到coding…

【分享】提取歌曲背景音乐在线网站和GitHub开源项目

提取歌曲背景音乐在线网站和GitHub开源项目前因&#xff1a; 今天一同学找我说希望能把Stewart mac唱的《I Love You》的歌词提取出来做婚礼的背景音乐。在网上没有搜到资源&#xff0c;本来想着用Adobe Audition cs6软件来处理&#xff0c;转念一想&#xff0c;或许可以使用深…