#功能:
1.可注册账号
2.登录买家账号
3.可查询编辑购物车里商品
4.可以余额充值
5.可提示余额不足
6.购物车结算

#使用:
1.第一次使用先注册账号填写账号金额
2.账号金额信息保存在buyer_account.txt (默认为空)
3.只针对帐号文件里的用户进行判断并锁定,针对用户和密码各有三次错误重试机会。

流程图:

代码:

#!/usr/bin/env python3#antuor:Alanfrom prettytable import PrettyTable
import sys,os
import getpass,time#用户注册函数#
def register():new_username = input('请输入注册用户名:')new_password = input('请输入新用户密码:')bank_money = 0while True:new_password_again = input('请再次确认新用户密码:')    ###再次确认密码if new_password_again != new_password:                    ###密码错误则循环continueelse:break                                         ###正确则跳出循环执行下一个循环while True:bank_money = input('请输入你要充值的金额:')          ###输入金额数字if bank_money.isdigit():                         ###判断金额是否为数字bank_money = int(bank_money)                  ###金额数字整数化breakelse:                                             ###如果金额非数字则不断循环print('请输入正确的金额')user_account = "%s %s %d" % (new_username,new_password,bank_money)# file = open('login_account.txt','a+')# save_file = file.write(user_account)# file.close()# print (("++++++++++恭喜你注册成功:%s++++++++++++") % (user_account))with open('login_account.txt','a+') as file:          ###把用户信息存入文档,a+为读写追加模式file.write(user_account+'\n')                     ###写入并换行print (("==============恭喜你注册成功:%s==============") % (user_account))print("================请重新登录你的账号======================")
############################################################################def digit_input(s):if str.isdigit(s):                                                     #对输入是否是数字进行判断s = int(s)                                                         #如果输出的是个数字,则转化为整数类型return s                                                               #返回输入字符#用户信息函数#
def shopping_func(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)                                   #充值金额数字化###########################通过prettytable模块将输出内容如表格方式整齐#########product_page = PrettyTable(['用户名','金额','当前余额','充值余额','购物车'])product_page.align['用户名'] = '1'                                      #对齐product_page.add_row([user,init_money,now_money,recharge_money,value])print(product_page)#商品页面展示函数#
def products_page(my_dict):items_dict = {}                                                        #定义函数内部字典############对商品列表进行遍历并加上数字编号###########################i = 1print('商品列表 : ')print(30*'===')print('%-5s \t %-20s     \t%s  \t%-10s    \t %s' % ('编号','商品名称','商品价格(元)','商品总数量(个)','商品剩余数量(个)'))for k in my_dict:v = my_dict[k]if type(v) is dict:print('%-5d  %-30s  %-10d  %-10d  %-40d' % (i,k,v['price'],v['sum'],v['num']))items_dict[i] = [k,v['price'],v['num'],v['sum']]               #将商品列表赋值到items_dicti += 1print(30*'===')return items_dict                                                      #返回格式化后的字典########################显示购物车商品列表函数#############################
def shopping_cart(show_dict):show_all_sum = 0                                                       #初始化购物车商品总价show_all_num = 0                                                       #初始化购物车商品数量############对商品列表进行遍历并加上数字编号###########################print('%s ,%s ,%-10s,%s,%s,%s' % ('编号','商品名称','商品价格(元)','商品总数量(个)','购买数量(个)','购买金额(元)'))for k in show_dict:v = show_dict[k]if type(v) is list:print('%-5s \t %-20s \t %-10d \t %-10d \t %-10d \t %-10d' % (k,v[0],v[1],v[2],v[3],v[4]))show_all_sum += v[4]                                           #商品总价累计show_all_num += 1                                              #商品个数累计print('请确认您购买商品,总金额:%d(元)'.center(84,'#') % show_all_sum)return (show_all_sum,show_all_num)                                     #返回商品总价和商品个数#编辑购物车商品函数#
def shopping_cart_edit(modify_dict,modify_goods_dict):a_flag = 1                                                             #初始化第一层编号循环标记while a_flag:index = input('请输入商品编号 | 完成修改(q) : ')if len(index) != 0:                                                #商品编号不为空进行字符转化index = digit_input(index)                                    #调用函数(自建)if index == 'q':                                                   #输入为q,即完成修改退出breakelif index in modify_dict:                                         #输入为正确编号###b_flag = 1                                                     #初始化第二层数量循环标记name = modify_dict[index][0]                                   #对name赋值商品名称while b_flag:num = input('请输入新的商品数量(最大值为%d) |  完成修改(q) : ' % modify_dict[index][2] )if len(num) != 0:                                          #商品数量不为空进行字符转化###num = digit_input(num)if num == 'q':                                             #输入为q,即完成修改退出###breakelif num == 0:                                             #输入为0,即删除字典中的这个条目modify_goods_dict[name]['num'] = modify_dict[index][2] #商品列表中的商品数量变为初始值del modify_dict[index]                                 #购物车删除这个商品b_flag = 0elif num > 0 and num <= modify_dict[index][2]:             #输入为要求数字,则进行数量和金额修改modify_dict[index][3] = nummodify_dict[index][4] = modify_dict[index][1] * nummodify_goods_dict[name]['num'] = modify_dict[index][2] - num    #更新商品列表中的商品数量b_flag = 0else:passelse:passreturn (modify_dict,modify_goods_dict)                                 ###返回修改后的购物车商品列表####购物车展示函数#
def shopping_cart_show(my_cart,my_goods_dict):print('欢迎来到您的购物车'.center(80,'#'))goods_all_sum = 0                                                      ###初始化购物车商品总金额###goods_all_num = 0                                                      ###初始化购物车商品总数量###if my_cart:                                                            ###购物车参数不为空##############调用购物车商品列表函数,并返回商品总金额和总数量#########(goods_all_sum,goods_all_num)  = shopping_cart(my_cart)choice = input('请进行如下操作 : 修改记录(c) | 继续购物(!c)')if choice == 'c':                                                  ###对购物车商品列表进行修改###(my_shop_cart,my_goods_dict) = shopping_cart_edit(my_cart,my_goods_dict)  ###调用商品修改函数,并返回新的商品列表###(goods_all_sum,goods_all_num) = shopping_cart(my_shop_cart)  ###购物车商品展示,并返回最新的商品总价###else:passelse:print('当前您的购物车为空'.center(80,' '))time.sleep(2)return (goods_all_sum,goods_all_num,my_goods_dict)                      #购物车中商品总价、数量和用户商品列表##余额充值函#
def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money):recharge_flag = 1                                                       #充值循环参数初始化###while recharge_flag:recharge_num = input('请输入充值金额 | 返回(b) | 退出(q):')if len(recharge_num) != 0:                                          #如果输入非空,对输入进行判断并转化类型recharge_num = digit_input(recharge_num)if recharge_num == 'q':                                             #如果输入为q,则退出程序sys.exit(0)elif recharge_num == 'b':                                           #如果输入为b,则返回第一层循环,重新选择商品编号breakelif type(recharge_num) is int and recharge_num > 0 :               #输入要求充值金额recharge_init_balance += recharge_num                           #初始金额增加recharge_now_balance += recharge_num                            #当前余额增加recharge_money += recharge_num                                  #充值金额增加recharge_flag = 0                                               #改变充值循环参数print('充值成功,请查收'.center(80,' '))                          #提示充值成功else:passreturn (recharge_init_balance,recharge_now_balance,recharge_money)      #返回初始、当前、充值金额#用户结帐函数#
def pending_order(billing_list,my_cart,billing_balance):print('欢迎来到结算菜单'.center(80,'#'))if my_cart:                                                             #购物车参数不为空#############调用购物车商品列表函数################################shopping_cart(my_cart)billing_flag = input('请确认是否商品结算(y | n):')if billing_flag == 'y':                                             #商品结算确认billing_file = open('buyer_account','w')                             #打开读写帐号文件for user_info in billing_list:billing_file.writelines(user_info)                          #回写用户列表信息billing_file.close()                                            #关闭帐号文件sys.exit('结帐成功,你当前余额 :%d'.center(80,' ') % billing_balance)else:print('退出结算菜单,继续购物'.center(80,' '))time.sleep(2)else:print('当前您的购物车为空,无需结算'.center(80,' '))time.sleep(2)################################主程序开始##################################################################商品列表####################################goods_list = {'iphone6s': {'price':6000,'num':10,'sum':10},     #num为当前库存,sum为商品总数量'ipad pro': {'price':3000,'num':20,'sum':20},'Bike': {'price':2000,'num':15,'sum':15},'DLS Camera': {'price':1999,'num':8,'sum':8},'macbook pro': {'price':14000,'num':5,'sum':5},'macbook air': {'price':7000,'num':10,'sum':10},'Fountain Pen':{'price':15,'num':50,'sum':50},}######用户注册,写入login_account.txt文件里######################ask_question = input('是否已经有账号? y|n:')                                 ###是否有账号,是则登录,不是则注册while True:if ask_question == 'y':breakelse:register()                                                         ###调用登录函数break##############################################################
i = 0
while i < 3:                                                                ###只要用户登录异常不超过3次就不断循环###username = input('请输入用户名:')                                      ###输入用户名###password = input('请输入密码:')                                        ###输入隐藏密码###user_file = open('login_account.txt','r')                              ###打开帐号文件####next(user_file)user_list = user_file.readlines()                                     ###用户列表信息###user_file.close()                                                     ###关闭帐号文件###for user_line in user_list:                                        #对帐号文件进行遍历,因为只有三个用户,所以只读前3行######################分别获取帐号、密码信息和当前余额##############(user,passwd,init_balance) = user_line.strip('\n').split()init_balance = int(init_balance)                                    ###对总金额进行数字化###now_balance = init_balance                                          ###对当前余额进行数字化###my_goods_sum = 0                                                    ###初始化购买商品总金额###if username == user and password == passwd:                         ###如用户名和密码正常匹配###user_shopping_cart = {}                                         ###初始化用户购物车字典###user_shopping_cart_count = 0                                    ###初始化用户购物车内商品的数量###recharge_value = 0                                              ###初始化充值金额###line_num = user_list.index(user_line)                           ###赋值匹配用户的下标###first_flag = 1                                                  ###定义第一层循环变量参数###while first_flag:########################调用框架函数输出用户信息############shopping_func(username,init_balance,now_balance,recharge_value,user_shopping_cart_count)goods_output_dict = products_page(goods_list)             ###调用商品列表展示函数输出商品信息###goods_index = input('请选择菜单 :输入商品编号 | 购物车(c) | 余额充值(r) | 结帐(b) | 退出(q) : ')if len(goods_index) != 0:                                   ###如果输入非空,对输入进行判断并转化类型###goods_index = digit_input(goods_index)if goods_index == 'q':                                      ###如果输入为q,则退出程序###sys.exit(0)elif goods_index == 'c':                                    ###如果输入为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 < 0:print('您的余额不足,请及时充值,谢谢')time.sleep(2)elif goods_index == 'r':                                    ###如果输入为r,则进行余额充值###(init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value)elif goods_index == 'b':                                    ###如果输入为b,则进入结账菜单#################更新用户文件中用户的余额##################user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n'pending_order(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][0], goods_output_dict[goods_index][1], goods_output_dict[goods_index][2])print('【 编号:%-5d \t 名称:%-15s \t 价格:%-5d(元) \t 数量:%-5d(个)】' % (goods_index,goods_name,goods_price,goods_num))second_flag = 1                                         ###定义第二层循环变量参数###while second_flag:buy_num = input('请输入购买商品个数(最大值为%d) | 返回(b) | 退出(q): ' % goods_num)if len(buy_num) != 0:                               ###如果输入非空,对输入进行判断并转化类型###buy_num = digit_input(buy_num)if buy_num == 'q':                                  ###如果输入为q,则退出程序###sys.exit(0)elif buy_num == 'b':                                ###如果输入为b,则返回第一层循环,重新选择商品编号###breakelif type(buy_num) is int and buy_num > 0 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 += 1       ###购物车里商品数量加1#######将该商品加入用户购物车字典中####user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum]####购物车已经存在该商品,则进行数量和金额累计计算############else:user_shopping_cart[goods_index][3] += buy_numuser_shopping_cart[goods_index][4] += my_goods_sumnow_balance -= my_goods_sum             ###计算出当前余额###goods_list[goods_name]['num'] -= buy_num   ###商品列表的商品数量更新###second_flag = 0                         ###设置第二层循环值为0,结束第二层循环####else:breakelse:print('您的余额不足,请充值或重新选择,谢谢')time.sleep(2)else:passelse:passelse:if i != 2:                                                         ###i=2时,最后一次机会,不在提示还剩余0次机会了##print('用户或密码错误,请重新输入,还有 %d 次机会' % (2 - i))i += 1                                                                 ###当用户输入错误时,循环值增加1###
else:sys.exit('用户或密码输入错误超过三次,退出系统,欢迎下次光临')          #三次错误后,异常退出###

转载于:https://www.cnblogs.com/alan-babyblog/p/5161883.html

python基础day2作业:购物车相关推荐

  1. python基础 实战作业 ---Excel基本读写与数据处理

    代码地址如下: http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完 ...

  2. Python基础day08 作业解析【7道 面向对象题目】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day08[面向对象(类.对象.属性).魔方方法(init.str.del.rep ...

  3. Python基础day07 作业解析【文件操作(文件读写、文件夹操作)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day07[文件读写.文件夹操作.面向对象(类.对象)] 目录 加强训练 题目1 ...

  4. Python基础day04 作业解析【3道 字典题】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day04[字典(介绍.定义与访问.操作数据.常见操作)] Python基础day ...

  5. Python基础day05 作业解析【10道 函数作业题】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day04[函数(定义与调用.文档说明.传参函数.全局变量.返回值.嵌套调用)] ...

  6. Python基础day03 作业解析【5道 字符串题、3道 列表题、2道 元组题】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day03[字符串(定义.输入输出.常用方法).列表(定义.基本使用.增删改查.嵌 ...

  7. Python基础day02 作业解析【6道 if 判断题、9道 循环题】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day02[if结构.if elif 结构.while循环.for循环.Break ...

  8. Day2 - Python基础2作业【文件操作--购物车程序(用户操作及商户操作)】

    1 # ----user.txt---- 2 3 {'已购商品': '', '消费记录': '', '余额': 0} 4 5 6 # ----commodity.txt---- 7 8 iPhone, ...

  9. Day2 - Python基础2作业【购物车程序】

    1 #/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 # Day2/shopping_cart.py 4 5 _author_ = 'hepidong' 6 ...

最新文章

  1. 给DataGrid添加确定删除的功能
  2. 查询用户所有信息后只需要两个字段的信息_Excel VBA+ADO+SQL入门教程023:OpenSchema获取表信息...
  3. HDU_1075 What Are You Talking About(Trie 树)
  4. java我们一起打雪仗_我们一起打雪仗作文
  5. SSM项目 Jquery实现From表单提交 json后台并接受
  6. 协方差矩阵, 相关系数矩阵
  7. svn的使用(Mac)
  8. 凯撒密码和栅栏密码 - 密码学01
  9. java redis订单_redis实现对账(集合比较)功能
  10. mysql存储过程 大小写_MySQL数据记录大小写敏感问题【转】
  11. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
  12. 理解景深(Depth of Field)
  13. 波波腾机器人_GitHub - bobowire/Wireboy.SDK.CQP: C# .net框架的酷Q机器人插件SDK
  14. 出生在商丘农村的80后的幸福童年
  15. 河北省计算机科学专业高校排名,河北省计算机类专业大学排名
  16. 前端处理blob文件流
  17. java常见单词汇总3(非常使用哦)
  18. 关于hibernate的见解
  19. python中的break、continue和pass
  20. gamess下载安装

热门文章

  1. ShowDoc 软件开发团队接口文档管理利器
  2. Git 上传文件到 码云 gitee
  3. 接口测试学习——jmeter分布式压测
  4. 6.C语言迷宫程序界面版
  5. [BZOJ4815][CQOI2017]小Q的表格 数论+分块
  6. mysql数据库备份及恢复命令mysqldump,source的用法
  7. Nvelocity 模板引擎 实例
  8. QT-子线程或自定义类操作访问主界面UI控件的几种方法
  9. sqlserver连接和操作数据库
  10. Swift5之网易云音乐页面搭建