#-*- coding:utf-8 -*-

'''******************************************************'

购物车

1. 商品信息- 数量、单价、名称

2. 用户信息- 帐号、密码、余额

3. 用户可充值

4. 购物历史信息

5. 允许用户多次购买,每次可购买多件

6. 余额不足时进行提醒

7. 用户退出时 ,输出档次购物信息

8. 用户下次登陆时可查看购物历史

9. 商品列表分级

'******************************************************'''

importos,getpassimportsys

dinfo={}def recharge(name,money): #可给自己充值或者别人充值

#取出金额:

if dinfo.get(name) !=None:

dinfo[name][1] = float(dinfo[name][1]) +moneyprint("%s,您好,恭喜您充值成功,金额为:%d"%(name,dinfo[name][1]))else:print("您好,用户不存在,请重新输入")defbalance_reminder(name):print("您好,您当前余额为%.2f"%float(dinfo[name][1]))defpurchased_goods(name):print("您好,您购买的信息如下")for goods,value in dinfo[name][3].items:print(str(goods).center(20,'*')+value[0].center(20,'*'),value[1].center(20,'*'))#数量、单价、名称

dshop ={"apple":[50,5.00],"durian":[100,130],"grape":[1000,20],"iphone 6s":[50,6000],"Mate9":[1000,3900],"Melon seeds":[100,10],"potato chips":[1000,19]

}

lTmp= [] #保存的是选择序列之后对应的商品

defshowgoods(uname):

i=0

sTitl= "商品信息".center(60,'-')

s_end= "-".center(64,'-')

stemp= "序号\t商品\t数量\t金额\n"

for key,value indshop.items():

i= i + 1stemp+= str(i)+'\t' +key+ '\t'+str(value[0])+'\t'+str(value[1])+'\n'lTmp.append(key)#顺序就是打印的顺序 选择之后知道商品去字典里取伤心

print(sTitl+'\n'+stemp.expandtabs(20)+s_end)

lTmp1=[]def print_dic(): #打印列表 or 是写入文件 历史购物信息

i =0

sTitl= "购物信息".center(60, '-')

s_end= "-".center(64, '-')

stemp= "序号\t商品\t数量\t金额\n"

for key, value in dinfo[suser][3].items():

i= i + 1stemp+= str(i) + '\t' + key + '\t' + str(value[0]) + '\t' + str(value[1]) + '\n'

if key not inlTmp1:

lTmp1.append(key)#顺序就是打印的顺序 选择之后知道商品去字典里取伤心

print(lTmp1)print(sTitl + '\n' + stemp.expandtabs(20) +s_end)def show_oldgoods(): #打印列表 or 是写入文件 历史购物信息

i =0

sTitl= "历史购物信息".center(60, '-')

s_end= "-".center(64, '-')

stemp= "序号\t商品\t数量\t金额\n"

if dinfo[suser][4] =={}:print(sTitl+'\n')else:for key, value in dinfo[suser][4].items():

i= i + 1stemp+= str(i) + '\t' + key + '\t' + str(value[0]) + '\t' + str(value[1]) + '\n'

print(sTitl + '\n' + stemp.expandtabs(20) +s_end)def updatedic(suser,lT=[]): #不存在时

dic ={}

dic[lT[0]]= [lT[1],lT[2]]#更新数量,更新总共消费金额, 结账的时候 再写入文件 #商品 个数 商品个数金额

if lT[0] not in dinfo[suser][3].keys(): #不存在

dinfo[suser][3].update(dic)else:

iTmp= dinfo[suser][3][lT[0]] #取得已有商品的个数和价格的列表

iSum_num = int(iTmp[0]) + int(lT[1])

iSum_price= float(iTmp[1]) + float(lT[2])

dinfo[suser][3][lT[0]] = [iSum_num,iSum_price] #更新数据

print(iTmp,iSum_num,iSum_price,float(lT[1]),float(lT[2]))

dinfo[suser][2] = float(dinfo[suser][2]) + float(lT[2]) #原来的+刚加进来的商品

print(dinfo)

print_dic()defupdatetoold():

dic1= dinfo[suser][3]

dic2= dinfo[suser][4]print(dic1,dic2,dic2=={})if dic2 =={}:print('=-----------')

dic2.update(dic1)else:for key,value indic1.items():if key indic2.keys():

dic2[key]= [int(dic1[key][0])+int(dic2[key][0])] + [float(dic1[key][1])+float(dic2[key][1])]else:

dic2[key]=value

dic1.clear()#现购买数据清空

def rfile(path, mode = 'w+'):

file= open(path, mode=mode, encoding="utf-8")

lines=file.readlines()for line inlines:

dinfo.update(eval(line))#一個數據

file.close()def wfile(path,dic = {}, mode = 'w+'):

file= open(path, mode=mode, encoding='utf-8')

content=str(dic)

file.write(content+ '\n')

file.close()def jiezhang():# for key,values in dinfo.items(): #总金额减少了,并且在[4],历史记录中加入当前购买的这些商品 选择的商品为lTm

dinfo[key][1] -= dinfo[key][2]

updatetoold()

lTmp1.clear()#选择的商品清0

#商品打印

swelcom= "欢迎使用老男孩购物商城".center(30,"*")print(swelcom)

bFlag= True #是否返回首界面

whileTrue:

suser= ''rfile("user.txt")ifbFlag:

schoice= input("1.注册 2.登陆 q.退出 : 请选择 >>>")if schoice == '1':

lvalue=[]

con_amount= 0.0flag=True

dic={}whileTrue:

suser= input("input username:") #注册 是 否注册过

if suser indinfo.keys():print("用户已注册")

flag=False

bFlag=Truebreak

elifsuser.isspace():print("用户名不能为空,请重新输入")elif len(suser)<6:print("用户名需超过6个字符")elif suser.isdigit() orsuser.isalpha():print("用户名过于简单")else:

dinfo[suser]={}break

ifflag:whileTrue:

spwd= input("请输入你的密码:>>>")ifspwd.isspace():print("密码不能为空,请重新输入")elif len(spwd)<6:print("密码需超过6个字符")else:

Y= input("密码过于简单,确定?(Y/N)")if Y.lower() == 'y':break

whileTrue:

sbalance= input("请输入你的余额:>>>")if sbalance.isspace() or sbalance == '':print("金额,请重新输入")print("--%s--"%sbalance)continuessba=float(sbalance)if ssba <0:print("金额需大于0")else:breaklvalue.extend([spwd,ssba,con_amount,{},{}])#append区别开

dinfo[suser] =lvalue

wfile("user.txt",dinfo)

bFlag=Falseelif schoice == '2': #重新优化

i = 3

whilei:

suser= input("请输入用户名:")print(dinfo.keys())if suser indinfo.keys():

j= 3

whilej:

ipassword= input("请输入密码:")if ipassword ==dinfo[suser][0]:print("恭喜您%s,登陆成功!"%suser)

i=0

bFlag=False

show_oldgoods()break

else:

j-= 1

if j ==0:print("您的密码输入有误,很抱歉用户%s已被锁定"%suser)break

print("您的密码输入有误,您还有%d次机会!"%j)elif dinfo =={}:print("你还没注册过,请您先注册")

i=0else:

i-= 1

if i !=0:print("您的用户名不存在,您还有%d次机会"%i)else:print("您的用户名不存在,很抱歉用户%s已被锁定" %suser)elif schoice.lower() == 'q':

sys.exit(1)else:print("您的输入有误,请重新输入!")continueblog=Truewhile blog and bFlag ==False:

schoice= input("请选择您所需要的业务\n1.购物 2.查看当前购物车 3.查询余额 4.充值 5.结账 b.返回登陆 q.退出")if schoice =='1':

flag=True

showgoods(suser)whileflag:

btmpflag=True

bdelgoods=True

sschoice= input("1、购买商品 2、删除购买商品 3、返回")if sschoice == '1':#购买商品

whilebtmpflag:

sseq= input("请输入您要购买的商品序号")if sseq.isdigit() ==False:print("您的输入有误,请重新输入")continue

elif float(sseq) <0:print("您的输入有误,请重新输入")continue

elif int(sseq) >len(lTmp):print("您的商品不存在")continue

else:whilebtmpflag:print(lTmp1,int(sseq))

sgoods_name= lTmp[int(sseq)-1] #商品名

snum = input("请输入个数") #判断个数

lTmmp = dshop[sgoods_name] #通过商品的序号找到对应的商品的信息(剩余个数及单价)

price = lTmmp[1] #取得商品的单价

prices = price * float(snum) #取得所选择商品的总金额

if snum.isdigit() ==False:print("您的输入有误,请重新输入")elif float(snum) <0:print("您的输入有误,请重新输入")elif float(snum) >lTmmp[0]:print("很抱歉,商品%s只有%dge"%(sgoods_name,lTmmp[0]))elif prices > float(dinfo[suser][1]):

schoice= input("您的余额不足!是否进行充值?(Y/N)")if schoice == 'y':

bFlag=TruewhilebFlag:

ssp= input("请输入充值金额:") #序号

if ssp.isdigit() ==False:print("您的输入有误,请重新输入")continue

elif float(sseq) <0:print("您的输入有误,请重新输入")continue

else:

recharge(suser, float(ssp))

schoice= input("是否继续充值?(Y/N)")if schoice.upper() == 'N':

bFlag=Falseelse:#购买成功,需要做商品减少,个数添加

print("成功加入购物车: 商品:%s,购买个数:%d,金额:%.2f"%(sgoods_name,int(snum),prices))

dshop[sgoods_name][0]= int(dshop[sgoods_name][0]) - int(snum) # updatedic(suser,[sgoods_name,snum,prices]) #更新但是金额总金额暂时不改

showgoods(suser)

schoice= input("是否继续购买?(Y/N)")if schoice.upper() == 'N':

btmpflag=Falsebreak

elif sschoice == '2':

print_dic()#当前购买商品

whilebdelgoods:if dinfo[suser][3] =={}:print("购物车是空的!")

bdelgoods=Falseelse:

sseq= input("请输入您要删除的商品序号:") #序号

print(lTmp1)if sseq.isdigit() ==False:print("您的输入有误,请重新输入")continue

elif float(sseq) <=0:print("您的输入有误")continue

elif int(sseq) >len(lTmp1):print("您的商品不存在")continueiseq=int(sseq)

llTmp= dinfo[suser][3][lTmp1[iseq - 1]]

snum= input("请输入您要删除的商品的个数:") #删除的个数

if snum.isdigit() ==False:print("您的输入有误,请输入数字")continue

elif float(snum) <0:print("您的输入有误,数字必须大于0")continue

elif int(snum) != int(llTmp[0]): #取出剩余个数? #增加删除都用一个吧

print("您的输入有误,不能大于购物车商品个数")continue

else:

dshop[lTmp1[iseq- 1]][0] = int(dshop[lTmp1[iseq - 1]][0]) +int(snum)if int(llTmp[0])-int(snum) ==0:

dinfo[suser][3].pop(lTmp1[iseq - 1])else:

updatedic(suser,[lTmp1[iseq- 1],-int(snum),-(llTmp[1]/llTmp[1])*int(snum)])

showgoods(suser)

print_dic()

schoice= input("是否继续删除?(Y/N)")if schoice.upper() == 'N':

bdelgoods=Falsebreak

pass

else:

flag=Falseelif schoice =='2':

print_dic()pass

elif schoice =='3':

balance_reminder(suser)pass

elif schoice =='4':

bFlag=TruewhilebFlag:

sseq= input("请输入充值金额:") #序号

if sseq.isdigit() ==False:print("您的输入有误,请重新输入")continue

elif float(sseq) <0:print("您的输入有误,请重新输入")continue

else:

recharge(suser,float(sseq))

schoice= input("是否继续充值?(Y/N)")if schoice.upper() == 'N':

bFlag=Falseelif schoice =='b':

bFlag=Trueprint(swelcom)break

elif schoice == "5":if dinfo[suser][3] =={}:print("您购物车为空")else:

schoice= input("确定需要结账?(Y/N)")if schoice.upper() == 'Y':if dinfo[suser][3] =={}:print("您购物车为空")#结账总金额变少,写入文件

else:

jiezhang()

wfile("user.txt",dinfo)elif schoice =='q':

sys.exit(1)

python 购物车总额_python之购物车相关推荐

  1. python 购物车总额_python购物车进阶(函数)

    '''头发掉了不少'''import os'''用户注册'''def register(): username= input("请输入注册用户名:") password= inpu ...

  2. python购物车结算_python中购物车

    python的基础语法 python数据类型:(按特征划分) 数字类型: 1.整形:布尔形.长整型L.标准整形 2.非整形:双精度型.复数.decimal(不是内建类型) 序列类型: 1.字符串(st ...

  3. python 购物车分析_python 简易购物车程序解析

    购物车程序需求:用户信息为: {'wyf':{'password': '12', 'role': '2', 'money': '100000', 'carts': ['iphone6', 'mi5'] ...

  4. python实验报告内容实现购物车系统_Python 实践--购物车功能简单实现

    实验环境: operating system: Centos 6.3 Python version:Python 2.6.6 知识点: Python 基本数据类型的常用操作 #!/usr/bin/en ...

  5. 用Python基本语法实现一个购物车功能

    问题描述 用Python基本语法实现一个购物车,包括以下要求: 能够指定商品条目. 初始启动程序,让用户输入初始金额 用户可选择如下操作 0:退出 1:查看商品列表 2:加入购物车 3:结算购物车 4 ...

  6. python基础实战项目——ATM+购物车代码大全

    需求分析 1.实现用户的登录注册功能,并且用户分为普通用户和管理员用户,登录时需要先输入验证码 2.用户注册时会自动添加 20000 元的余额,与 0 元的银行卡信用余额 3.用户拥有–充值,提现,转 ...

  7. 阿语python美多商城-商品-购物车管理之第7.3节展示商品页面简单购物车

    展示商品页面简单购物车 需求:用户鼠标悬停在商品页面右上角购物车标签上,以下拉框形式展示当前购物车数据. 1. 简单购物车数据接口设计和定义 1.请求方式 选项 方案 请求方法 GET 请求地址 /c ...

  8. python计算入门_Python入门教程02-01(计算机核心基础)

    python入门课程第二章-计算机核心基础 Python入门教程01-01(ATM+购物车)学习过后,我们需要了解一下计算机的核心基础,目标就是为了让后面更好的理解python这门语言,更容易接受后续 ...

  9. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  10. jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果

    HTML 首先载入jQuery库文件和jquery.fly.min.js插件. 接着,将商品信息html结构布置好,本例中,我们用四个商品并排布置,每个商品box中包括有商品图片.价格.名称以及加入购 ...

最新文章

  1. c语言编的游戏怎么在安卓平台使用,谁知道怎么把c语言写的游戏安装到安卓手机上面玩??...
  2. python版本越高越好吗-python一般用什么版本
  3. 计算机组成原理 第四版 总线的主模块 总线的从模块,唐朔飞计算机组成原理课件3.ppt...
  4. 前端if else_应该记录的一些项目代码(前端)
  5. 浙江工业大学计算机应用基础,浙江工业大学期终考试命题稿-浙江大学人文学院.doc...
  6. 第四点没有重定义吧,第一个i的作用域就是那个循环,它出了这个域就被释放了。...
  7. 仿分词统计的MapReduce 程序。
  8. 程序员简历大曝光,让HR哭笑不得,网友:太老实了!
  9. centos6配置mysql5.7_CentOS 6.7 下 MYSQL 5.7 的安装与配置
  10. 推荐算法(一)电影推荐系统
  11. Flink简介与部署
  12. 手动档科目三考试过程
  13. Ozone数据探查服务Recon的启用
  14. 计算机诞生以来应用最早的,全国一级b考试练习题.doc
  15. tls协议 android 证书,Android TLS连接和自签名证书
  16. FastDFS 单机安装
  17. ARMV8体系结构简介:exclusive monitor
  18. 捷报 | 美格智能Cat.1模组SLM332中标中国电信定制版Cat.1模组产品招募
  19. 真正想做的人,什么都不说
  20. 200826-C语言打印文件中的文本内容

热门文章

  1. 软件概要设计与详细设计
  2. 小米路由r1c 刷番茄_充分利用番茄路由器的5条提示
  3. Tess4j的使用(识别中文)
  4. java txt 分段读取_Java 读取TXT文件的多种方式
  5. 中国大学生计算机设计大赛 历史作品博物馆
  6. html media设置自适应屏幕用法,css使用@media响应式适配各种屏幕的方法示例
  7. [优化算法] 拉丁超立方采样与基于优化的均匀采样
  8. ARM-Linux 交叉编译工具链安装
  9. json文件下载--防止chrome直接打开方案
  10. 计算机局域网中处理器可以共享么,局域网中怎么设置可共享主机的应用程序及CPU资源。...