python模拟购物车购物过程_Python 模拟购物车的实例讲解

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 模拟购物车的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

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

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

相关文章

西北大学计算机排行,世界排名领先,西北大学到底有多厉害?

原标题:世界排名领先,西北大学到底有多厉害?西北大学作为综排TOP9的美国名校,是许多留学生选择名校得最佳选择之一。那么作为世界排名领先的西北大学到底有多厉害?接下来立思辰留学云小编为你详细介绍。西北大学专业排…

Linux下的top命令

CSDN 阳光岛的文章: http://blog.csdn.net/sunboy_2050/article/details/6129177 最近使用了k命令杀死出bug的python进程(cpu占用100%,ubuntu10的bug)转载于:https://www.cnblogs.com/wolfsky/articles/2848702.html

是什么东西_隐形牙套附件是什么东西?

最近有一部分小宝贝收到牙套准备初佩戴啦!但是有些小宝贝有疑惑了:粘在牙齿上的小凸点是什么东西?为什么要在牙齿上粘这个东西?微微细细询问后,原来让围观群众和正在矫正的同学们一脸懵b的就是——附件。什么是附件&am…

PHP header的一些用法

<?php //PHP header()函数用法 /*** Function: PHP header() examples (PHP) */// fix 404 pages: header(HTTP/1.1 200 OK);// set 404 header: header(HTTP/1.1 404 Not Found);// set Moved Permanently header (good for redrictions) // use with location header hea…

手游服务器验证,手游登录流程

接入第三方渠道后的手游登录流程一、客户端登录渠道流程&#xff1a;1.玩家从客户端输入user_name和password2.登录成功后&#xff0c;返回一个token传入&#xff1a;app_id、app_key、user_name、password返回&#xff1a;token说明&#xff1a;app_id、app_key是由游戏制作方…

区块链是大数据生态圈技术之一_区块链技术再发力,携手智能制造构建产业生态圈...

原标题&#xff1a;区块链技术再发力&#xff0c;携手智能制造构建产业生态圈大数据时代的逐渐逼近&#xff0c;使得传统行业面临巨大的挑战。区块链技术是大数据时代备受关注的新星&#xff0c;在越来越多的领域进行试点应用&#xff0c;区块链技术也是大数据时代日益强盛的关…

Array 复制到ArrayList中

string[] array new string[]{" 1", "2"," 3", "4"," 5" }; ArrayList list new ArrayList();一&#xff1a;使用for循环&#xff0c;将array数组中的数据逐步加入到ArrayList的对象中&#xff1b; //1、for循环 …

OpenCV学习笔记(1)——显示图片

最近开始学习OpenCV了&#xff0c;也打算通过写博客来记录学习opencv的笔记吧。 第一个程序就是比较简单&#xff0c;也是入门级的程序--加载图片并显示出来。 代码如下&#xff1a; #include"highgui.h"int main() {//从文件中提取图像IplImage * imgcvLoadImage(&q…

和包支付的钱哪里来_2019年支付宝年度账单出炉,来看看你究竟花了多少钱

今天早上&#xff0c;打开支付宝付款时&#xff0c;看见搜索框出现2019年账单时&#xff0c;该来的还是要要来。随后&#xff0c;小盾打开支付宝年度帐单看了起来&#xff0c;顿时就心中就出现了这样的疑问&#xff0c;我哪来的这么多钱&#xff1f;我怎么花了这么多钱&#xf…

从RGB到Lab色彩空间的转换

最近一直在学习绘制RGB,HSV,Lab色彩空间的直方图&#xff0c;其中也涉及到互相转换的知识&#xff0c;这是网上看到的介绍的。 虽然若干年前就看过了关于色彩空间的介绍&#xff0c;但是直到今天才自己动手写代码做这件事情。虽然网络上已经有很多现成的例子&#xff0c;但是一…

强制将IE8设置为IE7兼容模式来解析网页(转)

英文原文&#xff1a;http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx 文件兼容性用于定义让IE如何编译你的网页。此文件解释文件兼容性&#xff0c;如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式。 前言 为了帮助确保你的网页在所有未来…

css中怎么把数字改成罗马数字,$\LaTeX$笔记:Section 编号方式(数字、字母、罗马)计数器计数形式修改...

$\LaTeX$系列根目录&#xff1a; Latex学习笔记-序IEEE模板中Section的编号是罗马数字&#xff0c;要是改投其他刊物的话可能得用阿拉伯数字&#xff0c;所以可以在导言部分做如下修改(放在导言区宏包调用之后)&#xff1a;\renewcommand\thesection{\arabic{section}}%arabic …

creo动画如何拖动主体_Animate如何制作动态遮罩文字动画

使用遮罩可以制作文字动画&#xff0c;让文字变形图片填充并变化的动画效果。FLASH如何制作变色文字效果-百度经验​jingyan.baidu.comFLASH如何制作高光扫过文字的效果-百度经验​jingyan.baidu.com适用软件&#xff1a;Animate CC2018及其它FLash软件制作步骤&#xff1a;1.打…

CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)

转载自http://blog.csdn.net/wuxiaoyao12/article/details/7305848 一、Mat类型&#xff1a;矩阵类型&#xff0c;Matrix。 在openCV中&#xff0c;Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 Mat有3个重要的方法&#xff1a; 1…

Android权限【大全】 .

1 android.permission.ACCESS_CHECKIN_PROPERTIES 2 //允许读写访问”properties”表在checkin数据库中&#xff0c;改值可以修改上传 3 4 android.permission.ACCESS_COARSE_LOCATION 5 //允许一个程序访问CellID或WiFi热点来获取粗略的位置 6 7 android.permission.ACCESS_FI…