栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 模拟购物车的实例讲解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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%+20sn" % ('商品', '价格'))
 f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消费记录']).center(40,'-'))  #写入消费时间信息方便后续查询
 f.write('n')
 for product in shopping_list:
   f.write("%-5s%+20sn"%(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%+20sn"%(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)0:
    print("本次购买商品清单".center(50,'-'))
    for product in shopping_list:
      print("%-5s%+20s"%(product[0],str(product[1])))
    print("".center(50, '-'))
    print("您的余额:33[31;1m%s元33[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 模拟购物车的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/32330.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号