ATM的转账
【 1 】明确我们要实现的功能
# ===================用户功能菜单=====================
# 1.注册
# 2.登陆
# 3.取款
# 4.转账
# 5.充值余额
# 6.查看流水
# 7.查看银行信息(查看自己的卡号、余额、流水等信息)
# ======================欢迎使用=======================
【 2 】注册
我们可以用文件操作里面学到的直用文本读写我们要的信息
def enroll(username, password, age, gender, bankcard, withdraw_password, balance):with open('5.txt', 'a', encoding='utf-8') as f:f.write(f'{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n')
首先我们先定义一个enroll函数来定再用文件里的模式里的“a”追加功能
f.write(f'{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n') #这个就是换行并且用:分隔
如果你要单独实现的话就是这样:
if xuan == 1:new_username = input('请输入你的用户名:')new_password = input('请输入你的密码:')new_age = input('请输入你的年龄:')new_gender = input('请输入你的性别:')new_bankcard = input('请输入你的银行卡号:')new_withdraw_password = input('请输入你的提现密码:')new_balance = input('请输入你的余额: ')enroll(new_username, new_password, new_age, new_gender, new_bankcard, new_withdraw_password, new_balance)print('恭喜你注册成功')
elif xuan == 0:print('退出程序')
else:print('无效的选择')print('-------------------------------------------')
【 3 】登录
我们肯定要从文件里把数据读取出来才能进行下一步操作:
def login(username, password):# 打开文件以读取用户名和密码with open("5.txt", "r", encoding='utf-8') as file:for line in file:#遍历values = line.strip().split(':')# 如果5.txt里面的文件字符不超过7就会触发if len(values) < 7:print(f'文件格式错误,第{line}数据不完整')continue# 会先去除行末的换行符和空白符,然后按逗号分隔返回一个包含用户名、密码、性别和年龄的字符串列表。new_username, new_password, age, gender, bankcard, withdraw_password, balance = valuesif username == new_username and password == new_password:print("登录成功!")print(f'用户名:{new_username}')print(f'性别:{gender}')print(f'年龄:{age}')print(f'银行卡:{bankcard}')print(f'银行卡密码:{withdraw_password}')print(f'余额:{balance}')return Trueprint("用户名或密码错误,请重新登录。")return False
【 4 】取款
def withdraw(username, password, amount):# 打开文件读取文本信息with open('5.txt', 'r', encoding='utf-8') as file:# 读取每一行的信息lines = file.readlines()# 遍历文件中的每一行,并将每一行的内容赋值给line,同时获取每一行的索引赋值给ifor i, line in enumerate(lines):# 这行代码将行文本按逗号分割后的部分存储在values变量中,以便后续处理或使用。values = line.strip().split(':')if len(values) < 7:# print('文件格式错误,里面数据不完整')continue# 获取用户信息save_username, save_password, age, gender, bankcard, withdraw_password, balance = valuesif username == save_username and save_password == password:# 把余额转化成小数类型balance = float(balance)if amount <= float(balance):# 余额总数减去要取的值balance = float(balance) - float(amount) # balance -= amountlines[i] = f"{save_username}:{save_password}:{age}:{gender}: {bankcard}:{withdraw_password}:{balance}\n"with open('5.txt', 'w', encoding='utf-8') as file:file.writelines(lines)print(f'请取走{amount} 元, 当钱余额为{balance} 元')else:print('穷逼还来取钱')return Trueprint('用户名或密码错误')return False
【 5 】转账
def transfer(second_username, second_password, jieshuo_username, amount):with open("5.txt", "r", encoding='utf-8') as file:# 读取所有行的信息lines = file.readlines()# 遍历文件的每一行for i, line in enumerate(lines):# 分割每一行的值values = line.strip().split(':')if len(values) < 7:continueusername, password, age, gender, bankcard, withdraw_password, balance = valuesif username == second_username and password == second_password:balance = float(balance)if balance >= float(amount):balance -= float(amount)lines[i] = f"{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n"breakelse:print("余额不足,无法完成转账。")return# 重新打开文件并写入更新后的信息with open('5.txt', 'w', encoding='utf-8') as f:f.writelines(lines)# 增加接收者的余额with open('5.txt', 'r+', encoding='utf-8') as f:lines = f.readlines()# 其中enumerate() 函数用于同时获取每一行的内容和行号,方便后续操作。line.split(':')则使用冒号分隔符将每行的数据分割成一个列表。for i, line in enumerate(lines):values = line.strip().split(':')# 读取文件中的每一行,并将其解析成一个列表,如果列表长度小于7,则跳过这一行,不进行处理。if len(values) < 7:continueusername, password, age, gender, bankcard, withdraw_password, balance = valuesif username == jieshuo_username:balance = float(balance)balance += float(amount)# 更新用户信息lines[i] = f"{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n"break# 最后将更新的信息写回文件with open('5.txt', 'w', encoding='utf-8') as f:f.writelines(lines)print(f'转账成功!{amount} 元 用户{second_username} 账户转到{jieshuo_username}中')
【 6 】充值金额
def chongqian(username,password,amount):with open("5.txt", "r", encoding='utf-8') as file:# 读取所有行的信息lines = file.readlines()# 遍历文件的每一行for i, line in enumerate(lines):# 分割每一行的值values = line.strip().split(':')if len(values) < 7:continuesecond_username, second_password, age, gender, bankcard, withdraw_password, balance = valuesif username == second_username and password == second_password:balance = float(balance)if float(amount) <= 0:print('充值金额不能是负数:')return False# 更新余额信息balance += float(amount)new_lines = f"{second_username}:{second_password}:{age}:{gender}: {bankcard}:{withdraw_password}:{balance}\n"lines[i] = new_lines# 将更新后的用户信息写回文件中with open('5.txt', 'w', encoding='utf-8') as f:f.writelines(lines)print(f'充值成功!当前余额为{balance}人民币')return Trueprint('用户名或密码错误')return False
【 7】 查看流水
from _datetime import datetime# 读取保存用户信息的文件,逐行读取每个用户的信息。
# 对于每个用户,提取其操作记录(例如转账、取款等)。
# 将操作记录写入一个新的文件中,并输出到控制台。
def chalook_water():# 打开文件并读出所用行with open('5.txt', 'r', encoding='utf-8') as flie:lines = flie.readlines()# 遍历每一行并打印出来,并添加时间for line in lines:timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 获取当前时间print(f"{timestamp} {line.strip()}")# 使用文本的a的追加将流水时间写入文件with open('5.log', 'a', encoding='utf-8') as f:f.write(f'{timestamp} {line.strip()}')print(timestamp,line.strip())
【 8 】查看银行信息
def chalook_bankard(username, password, timestamp):with open('5.txt', 'r', encoding='utf-8') as f:for line in f:values = line.strip().split(":")if len(values) < 7:# print('文件格式错误,里面数据不完整')continuecha_username, cha_password, age, gender, bankcard, withdraw_password, balance = valuesif username == cha_username and password == cha_password:print(f'银行卡卡号:{bankcard}')print(f'余额{balance}')with open('5.log', 'a', encoding='utf-8') as f:timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 生成当前时间戳,并使用f.write()向文件中写入一行文本,文本内容包括时间戳、银行卡号和余额信息。f.write(f'{timestamp} 银行卡卡号:{bankcard} 余额:{balance}\n')return Trueprint("账户或密码错误:")return False
【 9 】 主界面
flag = True
while True:print(''''双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务''')xuan = int(input('请选择你想要的程序:'))if xuan == 1:username = input('请输入你用户名:')password = input('请输入你密码:')age = input('请输入你年龄:')gender = input('请输入你性别:')bankcard = input('请输入你的银行卡卡号:')withdraw_password = input('请输入你的银行卡密码:')balance = input('请输入你余额·:')enroll(username, password, age, gender, bankcard, withdraw_password, balance)if username is not None:print('恭喜你注册成功')elif xuan == 2:username = input('请输入你用户名:')password = input('请输入你密码:')login(username, password)elif xuan == 3:username = input('请输入用户名:')password = input('请输入密码:')amount = int(input('请输入取款金额:'))withdraw(username, password, amount)elif xuan == 4:flag = Falseprint('欢迎光临')breakelif xuan == 5:second_username = input('请输入你用户:')second_password = input(('请输入你的用户密码:'))jieshuo_username = input('请输入你的接收用户账户: ')amount = input('请输入你要转账的金额: ')transfer(second_username, second_password, jieshuo_username, amount)elif xuan == 6:chalook_water()elif xuan == 7:username = input('请输入用户名: ')password = input('请输入密码:')timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")chalook_bankard(username, password, timestamp)elif xuan == 8:username = input('请输入你要充值的用户: ')password = input('请输入你要充值的用户的密码: ')amount = input('请输入你要充值的金额: ')chongqian(username,password,amount)else:print('无效的选项')
结果:
双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:1
请输入你用户名:mao
请输入你密码:123
请输入你年龄:16
请输入你性别:nan
请输入你的银行卡卡号:6666
请输入你的银行卡密码:1111
请输入你余额·:500000
---------------------------------
恭喜你注册成功
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:1
请输入你用户名:tian
请输入你密码:123
请输入你年龄:19
请输入你性别:nv
请输入你的银行卡卡号:5555
请输入你的银行卡密码:1111
请输入你余额·:50000000
---------------------------------
恭喜你注册成功
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:1
请输入你用户名:tian
请输入你密码:123
请输入你年龄:18
请输入你性别:nan
请输入你的银行卡卡号:7777
请输入你的银行卡密码:1111
请输入你余额·:50000
---------------------------------
恭喜你注册成功
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:3
请输入用户名:tian
请输入密码:123
请输入取款金额:2000
请取走2000 元, 当钱余额为108211.2 元
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:5
请输入你用户:mao
请输入你的用户密码:123
请输入你的接收用户账户: tian
请输入你要转账的金额: 1000
转账成功!1000 元 用户mao 账户转到tian中
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:7
请输入用户名: mao
请输入密码:123
银行卡卡号: 3333
余额147888.7
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:8
请输入你要充值的用户: mao
请输入你要充值的用户的密码: 123
请输入你要充值的金额: 600000
充值成功!当前余额为747888.7人民币
'双面龟的日常生活1.注册2.登陆3.取款4.退出5.转账6.查看流水7.查看银行信息8.充值业务请选择你想要的程序:4
欢迎光临
相关文章:
ATM的转账
【 1 】明确我们要实现的功能 # 用户功能菜单 # 1.注册 # 2.登陆 # 3.取款 # 4.转账 # 5.充值余额 # 6.查看流水 # 7.查看银行信息(查看自己…...
在Windows 10或11中,复制和粘贴不起作用,不一定是键盘的问题
以下建议将帮助你解决复制和粘贴无法正常工作的问题。 以下提示主要适用于Windows 10和Windows 11,但也可能解决旧版本Windows上的复制和粘贴问题。 为什么我的复制粘贴不起作用 复制和粘贴不起作用的问题可能以以下方式之一出现。 其他正在运行的应用程序或进程可能会使用…...

git 使用记录
远程仓库为空初始化 初始化本地仓库 git init 在本地仓库书写代码(这里可以编辑一个文本文件做测试,如hello.txt) 5)执行:git add 要让git管理的文件(git add hello.txt)>执行完此操作将我…...

支持大模型训练的计算机系统
摘要: 训练数据决定了基础大模型可用的理论信息,模型架构和训练目标决定了可以提取多少信息,计算机系统决定了实际可实现的内容。在数据和模型大小方面,系统是扩展的关键瓶颈,这两者似乎都可以可靠地跟踪能力的改进。在…...
SAP ABAP-AVL-OO方法中的ALV的如何自己添加按钮及其响应
ABAP-AVL-OO方法中的ALV的如何自己添加按钮及其响应 SAP在做报表开发中,不同公司对报表的风格往往各异,为此经常在使用OO方法做ALV报表中需要去掉自带的工具栏而自行添加一些工具按钮,下面将简单介绍一下添加按钮及如何响应的实现方法&#…...

uniapp移动端悬浮按钮(吸附边缘)
Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下: html: <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…...

【成功】Linux安装Mysql8并设置远程连接
今天在新搞来的阿里云的服务器里安装MySQL8,记录一下过程: 这是MySQL的官网和下载地址:MySQL :: Download MySQL Community Server (Archived Versions) 1. 先进入安装目录 cd /usr/local 2. 安装 wget https://downloads.mysql.com/arch…...

高效纯化树脂A-2313 CPR
在化工、制药等行业中,对colorful chemicals的纯化一直是挑战。本文将为您介绍一款具有卓越性能的强碱性阴离子交换树脂——Tulsion A-2313 CPR。通过分析其特性和应用,展示其在colorful chemicals纯化领域的优势。 一、Tulsion A-2313 CPR离子交换树脂的…...

uni-app实现安卓原生态调用身份证阅读器读卡库读身份证和社保卡、银行卡、IC卡等功能
DONSEE系列多功能读写器Android Uniapp API接口规范V1.0.0 本项目Uniapp调用了身份证读卡器的库文件:DonseeDeviceLib-debug.aar,该库放到nativeplugins\donsee-card\android,然后会自动加载。SDK会自动检查是否拥有USB设备权限,…...

【QT】QComboBox和QPlainTextEdit基本介绍和应用示例
目录 1.QComboBox 1.1 QComboBox概述 1.2 QComboBox信号 1.3 QComboBox常用功能 1.4 QComboBox添加简单项 1.6 QComboBox列表项的访问 2.QPlainTextEdit 2.1 QPlainTextEdit概述 2.2 QPlainTextEdit的基本属性 2.3 QPlainTextEdit的公共函数 2.4 QPlainTextEdit的公…...

Path的使用-path绘制折线的时候带上圆角
场景: 使用antv-g6 自定义边的时候,绘制折线,此时都是直角,需要加圆角,没找到属性,自己绘制: 最后使用了A(elliptical Arc)弧形 A命令用于画弧形。 A rx ry x-axis-r…...
Go Fyne 入门
Fyne是一个用于创建原生应用程序的UI工具包,它简单易用,并且支持跨平台。以下是一个简单的Fyne教程,帮助你入门: 1. 安装Fyne 首先,确保你已经安装了Go语言。然后,在终端中运行以下命令来安装Fyne&#x…...

如何为游戏角色3D模型设置纹理贴图
在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格…...

2024 年 SEO 现状
搜索引擎优化(SEO)一直以来都是网络知名度和成功的基石。随着我们踏上 2024 年的征程,SEO领域正在经历重大变革,有些变革已经开始,这对企业、创作者和营销人员来说既是挑战也是机遇。 语音搜索 语音搜索曾是一个未来…...

Mac虚拟机CrossOver23破解版下载和许可证下载
CrossOver Mac Mac 和 Windows 系统之间的兼容工具。使 Mac 操作系统的用户可以运行 Windows 系统的应用,从办公软件、实用工具、游戏到设计软件, 您都可以在 Mac 程序和 Windows 程序之间随意切换。 系统要求 运行macOS的基于Intel或Apple Silicon 的…...

宝藏级实用工具,制作电子书轻而易举
电子书是一种数字化的书籍形式,可以通过互联网进行传播和分享。相比于传统的纸质书籍,电子书具有便携、环保、易于分享等优点。如今,越来越多的人开始选择阅读电子书,它已经成为了一种流行的阅读方式。 那么,如何制作电…...
虚拟局域网(VLAN)解析(Virtual Local Area Network)(用于在不受物理位置限制的情况下将设备划分到同一网络或不同网络)
文章目录 虚拟局域网(VLAN)解析1. VLAN简介2. VLAN工作原理3. VLAN类型1. 静态VLAN2. 动态VLAN 4. VLAN优点提高安全性降低网络拥堵更简单的管理 5. 如何配置VLAN1. 进入全局配置模式2. 创建VLAN并命名3. 将端口分配给VLAN4. 验证VLAN配置 6. 常见问题与…...

uni-app 微信小程序之好看的ui登录页面(四)
文章目录 1. 页面效果2. 页面样式代码 更多登录ui页面 uni-app 微信小程序之好看的ui登录页面(一) uni-app 微信小程序之好看的ui登录页面(二) uni-app 微信小程序之好看的ui登录页面(三) uni-app 微信小程…...

解决火狐浏览器拖拽事件打开新页面的问题
产生原因及解决方案 我们在进行拖拽事件的编写时会发现,在火狐浏览器上会发生打开新窗口的问题,这是火狐浏览器的一个特性。 这是因为在 Firefox 中 ondrop 事件会触发 Firefox 自带的拖拽搜索功能,在 ondrop 事件触发执行时触发的函数中加…...
以为回调函数是同步的(js的问题)
回调函数可以用来处理 JavaScript 的异步操作,但是选用 Promise、async/await 更好,因为多重回调函数会导致回调地狱。 回调函数不是**同步的**,它是延时操作执行完毕后会被调用的一个函数。 比如全局方法 "setTimeout" …...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...