热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

购物车系统V0612:用户登录与购物实现

本文档详细介绍了购物车系统V0612版中的用户登录机制及购物功能实现方法。

在本版本的购物车系统中,用户的账户信息(用户名和密码)存储在一个文本文件中,格式为:用户名|密码。系统启动后,首先要求用户进行登录操作。如果登录成功,系统会请求用户输入其工资金额,随后显示商品列表供用户选购。若登录失败,则允许用户重新尝试登录,但超过三次失败后,系统将自动退出。

用户可以通过输入商品编号来选择购买商品。系统会检查用户的余额是否足以支付所选商品的价格,如果余额充足,则从用户账户中扣除相应金额;如果余额不足,系统会提示用户并要求重新选择。此外,用户可以在任何时候选择退出程序,此时系统会显示用户已购买的商品列表及其剩余余额。

以下是具体的功能实现代码示例:

# 用户名和密码存储于指定文件中,格式为:username|password
# 系统启动后,首先需要用户登录。登录成功后,用户需输入工资金额,之后系统显示商品列表。
# 若登录失败,允许用户重试,但连续三次失败后,系统将自动退出。
def login(file):
'''
实现用户登录功能,验证用户提供的用户名和密码。
参数:file - 存储用户信息的文件路径。
返回值:无
'''
attempts = 0
while attempts <3:
username = input('请输入用户名:')
password = input('请输入密码:')
with open(file, 'r', encoding='utf-8') as f:
for line in f:
user, pwd = line.strip().split('|')
if username == user and password == pwd:
print('登录成功!')
return True
print(f'登录失败,您还有{2 - attempts}次机会。')
attempts += 1
print('已达到最大登录尝试次数,程序即将退出。')
return False

# 商品列表
products = [
['iPhone 7', 5800],
['Apple', 20],
['Tesla', 1000000]
]

# 用户购物车
cart = []

# 处理用户购物逻辑
def shop():
'''
处理用户的购物逻辑,包括输入工资、选择商品、结算等。
返回值:无
'''
if login('users.txt'):
salary = int(input('请输入您的工资:'))
while True:
print('商品列表:')
for index, (product, price) in enumerate(products):
print(f'{index} [{product}:{price}]')
choice = input('请选择商品编号购买或输入q退出:').strip()
if choice.lower() == 'q':
print('感谢您的访问,再见!')
if cart:
total_cost = sum(item['price'] * item['count'] for item in cart)
print(f'您已购买的商品为:{cart},总花费为:{total_cost},剩余工资为:{salary}')
else:
print('您的购物车为空。')
break
elif not choice.isdigit():
print('无效输入,请输入有效数字。')
continue
choice = int(choice)
if choice <0 or choice >= len(products):
print('无效的商品编号。')
continue
quantity = int(input('请输入购买数量:'))
cost = products[choice][1] * quantity
if salary print('余额不足,请选择其他商品或减少购买数量。')
continue
for item in cart:
if item['name'] == products[choice][0]:
item['count'] += quantity
break
else:
cart.append({'name': products[choice][0], 'price': products[choice][1], 'count': quantity})
salary -= cost
print(f'成功购买{quantity}个{products[choice][0]},总价{cost}元,当前余额{salary}元。')
shop()
推荐阅读
  • 本文介绍了一种通过设置主题(Theme)来实现快速启动的Android引导页,并详细说明了如何避免因不同屏幕分辨率导致的图片拉伸问题。 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 5分钟快速筛选特定候选人的简历
    介绍一个新的系列,专注于提供能在5分钟内完成的简单实用案例。本文将以办公中常见的需求为例,展示如何快速从大量简历中筛选出特定候选人的简历。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 本文档介绍了如何使用ESP32开发板在STA模式下实现与TCP服务器的通信,包括环境搭建、代码解析及实验步骤。 ... [详细]
  • Python正则表达式(Python RegEx)
    Python正则表达式快速参考常用函数:re.match():从字符串的起始位置匹配一个正则表达式。re.search():扫描整个字符串并返回第一个成功的匹配。re.s ... [详细]
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
author-avatar
大家庭方不_402
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有