1.功能简介

此程序模拟用户登陆商城后购买商品操作。可实现用户登陆、商品购买、历史消费记查询、余额和消费信息更新等功能。首次登陆输入初始账户资金,后续登陆则从文件获取上次消费后的余额,每次购买商品后会扣除相应金额并更新余额信息,退出时也会将余额和消费记录更新到文件以备后续查询。

2.实现方法

架构:

本程序采用python语言编写,将各项任务进行分解并定义对应的函数来处理,从而使程序结构清晰明了。主要编写了六个函数:

(1)login(name,password)

用户登陆函数,实现用户名和密码验证,登陆成功则返回登陆次数。

(2)get_balance(name)

获取用户余额数据。

(3)update_balance(name,balance)

更新用户余额数据,当用户按q键退出时数据会更新到文件。

(4)inquire_cost_record(name)

查询用户历史消费记录。

(5)update_cost_record(name,shopping_list)

更新用户消费记录,当用户按q键退出时本次消费记录会更新到文件。

(6)shopping_chart()

主函数,完成人机交互,函数调用,各项功能的有序实现。

主要操作:

(1)根据提示按数字键选择相应选项进行操作。

(2)任意时刻按q键退出退出登陆,退出前会完成用户消费和余额信息更新。

使用文件:

(1)userlist.txt

存放用户账户信息文件,包括用户名、密码、登陆次数和余额。每次用户登陆成功会更新该用户登陆次数,每次按q键退出时会更新余额信息。

(2)***_cost_record.txt

存放某用户***消费记录的文件,用户首次购买商品后创建,没有购买过商品的用户不会产生该文件。每次按q键退出时会将最新的消费记录更新到文件。

3.流程图

4.代码

# Author:Byron Li

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

'''----------------------------------------------使用文件说明----------------------------------------------------------

使用文件说明

userlist.txt 存放用户账户信息文件,包括用户名、密码、登陆次数和余额

***_cost_record.txt 存放某用户***消费记录的文件,用户首次购买商品后创建,没有购买过商品的用户不会产生该文件

---------------------------------------------------------------------------------------------------------------------'''

import os

import datetime

def login(name,password): #用户登陆,用户名和密码验证,登陆成功则返回登陆次数

with open('userlist.txt', 'r+',encoding='UTF-8') as f:

line = f.readline()

while(line):

pos=f.tell()

line=f.readline()

if [name,password] == line.split()[0:2]:

times=int(line.split()[2])

line=line.replace(str(times).center(5,' '),str(times+1).center(5,' '))

f.seek(pos)

f.write(line)

return times+1

return None

def get_balance(name): #获取用户余额数据

with open('userlist.txt', 'r',encoding='UTF-8') as f:

line = f.readline()

for line in f:

if name == line.split()[0]:

return line.split()[3]

print("用户%s不存在,无法获取其余额信息!"%name)

return False

def update_balance(name,balance): #更新用户余额数据

with open('userlist.txt', 'r+',encoding='UTF-8') as f:

line = f.readline()

while(line):

pos1=f.tell()

line=f.readline()

if name == line.split()[0]:

pos1=pos1+line.find(line.split()[2].center(5,' '))+5

pos2=f.tell()

f.seek(pos1)

f.write(str(balance).rjust(pos2-pos1-2,' '))

return True

print("用户%s不存在,无法更新其余额信息!" % name)

return False

def inquire_cost_record(name): #查询用户历史消费记录

if os.path.isfile(''.join([name,'_cost_record.txt'])):

with open(''.join([name,'_cost_record.txt']), 'r',encoding='UTF-8') as f:

print("历史消费记录".center(40, '='))

print(f.read())

print("".center(46, '='))

return True

else:

print("您还没有任何历史消费记录!")

return False

def update_cost_record(name,shopping_list): #更新用户消费记录

if len(shopping_list)>0:

if not os.path.isfile(''.join([name, '_cost_record.txt'])): #第一次创建时第一行标上“商品 价格”

with open(''.join([name, '_cost_record.txt']), 'a',encoding='UTF-8') as f:

f.write("%-5s%+20s\n" % ('商品', '价格'))

f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消费记录']).center(40,'-')) #写入消费时间信息方便后续查询

f.write('\n')

for product in shopping_list:

f.write("%-5s%+20s\n"%(product[0],str(product[1])))

else:

with open(''.join([name, '_cost_record.txt']), 'a',encoding='UTF-8') as f:

f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消费记录']).center(40, '-'))

f.write('\n')

for product in shopping_list:

f.write("%-5s%+20s\n"%(product[0],str(product[1])))

return True

else:

print("您本次没有购买商品,不更新消费记录!")

return False

def shopping_chart(): #主函数,用户交互,函数调用,结果输出

product_list=[

('Iphone',5000),

('自行车',600),

('联想电脑',7800),

('衬衫',350),

('洗衣机',1000),

('矿泉水',3),

('手表',12000)

] #商店商品列表

shopping_list=[] #用户本次购买商品列表

while(True):

username = input("请输入用户名:")

password = input("请输入密码:")

login_times=login(username,password) #查询输入用户名和密码是否正确,正确则返回登陆次数

if login_times:

print('欢迎%s第%d次登陆!'.center(50,'*')%(username,login_times))

if login_times==1:

balance = input("请输入工资:") #第一次登陆输入账户资金

while(True):

if balance.isdigit():

balance=int(balance)

break

else:

balance = input("输入工资有误,请重新输入:")

else:

balance=int(get_balance(username)) #非第一次登陆从文件获取账户余额

while(True):

print("请选择您要查询消费记录还是购买商品:")

print("[0] 查询消费记录")

print("[1] 购买商品")

choice=input(">>>")

if choice.isdigit():

if int(choice)==0: #查询历史消费记录

inquire_cost_record(username)

elif int(choice)==1: #购买商品

while (True):

for index,item in enumerate(product_list):

print(index,item)

choice=input("请输入商品编号购买商品:")

if choice.isdigit():

if int(choice)>=0 and int(choice)

if int(product_list[int(choice)][1])

shopping_list.append(product_list[int(choice)])

balance = balance - int(product_list[int(choice)][1])

print("\033[31;1m%s\033[0m已加入购物车中,您的当前余额是\033[31;1m%s元\033[0m" %(product_list[int(choice)][0],balance))

else:

print("\033[41;1m您的余额只剩%s元,无法购买%s!\033[0m" %(balance,product_list[int(choice)][0]))

else:

print("输入编号错误,请重新输入!")

elif choice=='q': #退出账号登陆,退出前打印本次购买清单和余额信息,并更新到文件

if len(shopping_list)>0:

print("本次购买商品清单".center(50,'-'))

for product in shopping_list:

print("%-5s%+20s"%(product[0],str(product[1])))

print("".center(50, '-'))

print("您的余额:\033[31;1m%s元\033[0m"%balance)

update_cost_record(username,shopping_list)

update_balance(username, balance)

print("退出登陆!".center(50, '*'))

exit()

else:

print("您本次没有消费记录,欢迎下次购买!")

print("退出登陆!".center(50, '*'))

exit()

else:

print("选项输入错误,请重新输入!")

else:

print("选项输入错误,请重新输入!")

elif choice=='q': #退出账号登陆

print("退出登陆!".center(50, '*'))

exit()

else:

print("选项输入错误,请重新输入!")

break

else:

print('用户名或密码错误,请重新输入!')

shopping_chart() #主程序运行

以上这篇Python 模拟购物车的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

python模拟购物车购物过程_Python 模拟购物车的实例讲解相关推荐

  1. python模拟购物车购物过程_python实现购物车+ATM机 第五天

    模拟实现一个ATM + 购物商城程序 1.额度 15000或自定义 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.每月22号出账单,每月10号为还款日,过期未 ...

  2. python随机种子怎么用_python设置随机种子实例讲解

    python设置随机种子实例讲解 对于原生的random模块 import random random.seed(1) 如果不设置,则python根据系统时间自己定一个. 也可以自己根据时间定一个随机 ...

  3. python雷达图详解_python绘制雷达图实例讲解

    在python中,有很多用于生成基于JS的百度开源的数据可视化图表 Echarts 的类库.设置的图样都非常漂亮,小编之前研究过很多图示,用python去抓取数据,然后进行画图,经历这么多得图样,最深 ...

  4. python模拟购物车购物过程_Python基于数列实现购物车程序过程详解

    要求 1.启动程序后让用户输入余额,并打印商品列表 2.用户通过输入编号购买商品 3.用户选择商品购买后,根据余额判断成功或者失败,给出对应提示 4.可以随时退出,退出后打印账号余额以及购买的商品列表 ...

  5. python 安卓模拟点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  6. python实现安卓点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  7. python模拟点击屏幕ios_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  8. python模拟银行存取款_python 模拟银行转账功能过程详解

    首先画出流程图,流程图与现实代码有出入,因为刚开始画流程图的时候,有些东西没考虑进去,后来写着写着就慢慢能想起来并实现了. 另有一点经验推荐给新手朋友,如果说碰到一个项目无从下手的话,就先慢慢去写,写 ...

  9. [转载] python实现堆排序用类的方法_python实现堆排序的实例讲解

    参考链接: 用Python进行堆排序heap sort 堆排序 堆是一种完全二叉树(是除了最后一层,其它每一层都被完全填充,保持所有节点都向左对齐),首先需要知道概念:最大堆问题,最大堆就是根节点比子 ...

最新文章

  1. 含有“外骨骼”的电影和游戏
  2. 【转】ASP.NET之 关于触发Global.asax Session_End事件的经验
  3. java lombok
  4. 【机器学习】在机器学习中处理大量数据!
  5. fcm 服务器接入 golang_Golang 写的即时通讯服务器 im(服务组件形式)
  6. Huawei LiteOS 开发指南
  7. 运维提效 60%,视野数科 SAE + Jenkins 打造云原生 DevOps
  8. 解决QSqlTableModel::setData()崩溃的问题
  9. xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用
  10. Web SQL本地数据库(SQLLite)
  11. WordPress二次元博客主题模板-Sakurairo v2.5.1.1
  12. 相机光学传递函数MTF
  13. Chrome浏览器翻译无法使用和ide谷歌翻译插件【更新 TKK 失败,请检查网络连接】解决办法
  14. 什么是SEO,新手SEO须知!
  15. 微信小程序跳转微信小程序实现免登录
  16. 【报告分享】2020中国教育培训移动应用发展研究报告-TalkingData(附下载)
  17. 2.css字体 文本属性
  18. Mysql 子查询 (查询语句中带查询语句)
  19. 俺常去(用)滴地方~
  20. 《微信公众平台开发最佳实践》——导读

热门文章

  1. python控制灯_Python 控制树莓派 GPIO 输出:控制 LED 灯
  2. linux网卡名称乱编,小斗CentOS7.x网卡名称错乱、及网卡启动失败。
  3. 【树莓派学习笔记】一、烧录系统、(无屏幕)配置Wifi和SSH服务
  4. Exynos4412 中断驱动开发(三)—— 设备树中中断节点的创建
  5. linux 文件中搜索字符串命令 grep
  6. VB2005.Net 环境下使用Jmail组件发送邮件
  7. 前端小知识点(1):undefined和null区别
  8. [html] title与h1的区别、b与strong的区别、i与em的区别?
  9. [vue] 第一次加载页面时会触发哪几个钩子?
  10. [css] 说说你对css盒子模型的理解