(五)小案例银行家应用程序-实现转账

news/2024/9/23 1:59:06/

现在我们想实现用户之间相互转账的功能;

在这里插入图片描述

● 和之前一样我们还是要通过这个点击,页面元素一再写在变量里面了
在这里插入图片描述

javascript">btnTransfer.addEventListener('click', function (e) {e.preventDefault();const amount = Number(inputTransferAmount.value);const receiverAcc = accounts.find(acc => acc.username === inputTransferTo.value);console.log(amount, receiverAcc);
});

在这里插入图片描述

● 我们获取到用户输入钱的值和收款方之后,我们还要去判断用户输入值是否大于0,当前转帐房的余额是否大于用户输入值,用户输入的账户名是否存在,等等

javascript">btnTransfer.addEventListener('click', function (e) {e.preventDefault();const amount = Number(inputTransferAmount.value);const receiverAcc = accounts.find(acc => acc.username === inputTransferTo.value);console.log(amount, receiverAcc);if (amount > 0 &&receiverAcc &&currentAccount.balance >= amount &&receiverAcc?.username !== currentAccount.username) {console.log('Transfer valid');}
});

在这里插入图片描述
在这里插入图片描述

注:我们之前的余额代码是这样写的

javascript">const calcDisplayBalance = function (movements) {const balance = movements.reduce((acc, mov) => acc + mov, 0);labelBalance.textContent = `${balance} EUR`;
};

这样的话我们无法访问到余额,因为balance是在calcDisplayBalance函数内部声明的局部变量,它只在函数内部可见,外部无法访问。因此,在btnTransfer的事件监听器中,无法访问到balance,导致条件判断中的currentAccount.balance始终为undefined,从而影响了if条件的判断结果。所以我们要想去知道这个人的余额,但是代码中并没有地方去存储他,所有我们要稍微修改一下这个代码

javascript">const calcDisplayBalance = function (acc) {acc.balance = acc.movements.reduce((acc, mov) => acc + mov, 0);labelBalance.textContent = `${acc.balance}`;
};

修改后的代码balance是赋值给了账户对象(acc)的balance属性,而acc是calcDisplayBalance函数的参数,在函数外部定义的。这样一来,balance变量的作用域就延伸到了函数外部,可以在后续的代码中访问到。因为balance的作用域包含了整个函数外部;这样我们也不需要单独找个地方来存放用户的余额;
这个代码修改之后,在上一节用户登录的时候调用用户的余额,传参数的话只需要穿用户账号就可以了

● 下一步就是将转账人减少金额,收款人增加金额

javascript">if (amount > 0 &&receiverAcc &&currentAccount.balance >= amount &&receiverAcc?.username !== currentAccount.username) {currentAccount.balance.push(-amount);receiverAcc.balance.push(amount);}

然后就是继续更新UI,但是我们不可能复制上述代码,我们还是将更新UI的代码进行重构

javascript">const updateUI = function (acc) {displayMovements(acc.movements);calcDisplayBalance(acc);calcDisplaySummary(acc);
};

● 然后直接调用

javascript">  if (amount > 0 &&receiverAcc &&currentAccount.balance >= amount &&receiverAcc?.username !== currentAccount.username) {currentAccount.movements.push(-amount);receiverAcc.movements.push(amount);updateUI();}

在这里插入图片描述
在这里插入图片描述

● 和之前一样,我们在确认转账之后清空一下用户名和密码的输入

javascript"> inputTransferAmount.value = inputTransferTo.value = '';

在这里插入图片描述

这样我们转账的功能就完成了,一下是实现的全部代码;

javascript">btnTransfer.addEventListener('click', function (e) {e.preventDefault();const amount = Number(inputTransferAmount.value);const receiverAcc = accounts.find(acc => acc.username === inputTransferTo.value);inputTransferAmount.value = inputTransferTo.value = '';if (amount > 0 &&receiverAcc &&currentAccount.balance >= amount &&receiverAcc?.username !== currentAccount.username) {currentAccount.movements.push(-amount);receiverAcc.movements.push(amount);updateUI(currentAccount);}
});

http://www.ppmy.cn/news/1442717.html

相关文章

python_django农产品物流信息服务系统6m344

Python 中存在众多的 Web 开发框架:Flask、Django、Tornado、Webpy、Web2py、Bottle、Pyramid、Zope2 等。近几年较为流行的,大概也就是 Flask 和 Django 了 Flask 是一个轻量级的 Web 框架,使用 Python 语言编写,较其他同类型框…

民航电子数据库:报错merge sql error, dbType null, druid-1.1.9, sql : xxx

目录 一、场景二、SQL三、报错信息四、排查五、原因六、解决 一、场景 1、对接民航电子数据库 2、limit查询时报错 二、SQL SELECT openid,headimgurl,nickname FROM t_mb_weixinuser WHERE openid? AND vdnId ? LIMIT 1三、报错信息 merge sql error, dbType null, dru…

iOS - Runloop在实际开发中的应用

文章目录 iOS - Runloop在实际开发中的应用1. 控制线程生命周期(线程保活)2. 解决NSTimer在滑动时停止工作的问题2.1. 案例2.2 解决 3. 监控应用卡顿4. 性能优化 iOS - Runloop在实际开发中的应用 1. 控制线程生命周期(线程保活)…

MySQL--创建,删除,查找,案例

1.数据库的---创建,删除,查找,案例 create database 数据库名称; # 创建一个数据库,所有参数默认 create database 数据库名称 [default chasetutf8mb4] # 创建的同时指定了编码2.drop删除 drop database 数据库名称;3.进入数据库…

ubuntu22.04安装TensorRT(过程记录)

重要说明:此贴经过多次修改。第一次安装的的为trt8.6.1版本。第二次安装的10.0.0.6版本。有些地方可能没改过来,比如链接向导,我懒得改了,但是流程是对的。 cuda和cudnn版本对应关系 tensorRT历史发行版本 CUDA历史发行版本 cudn…

MySql 查询优化

MySQL查询优化涉及多个方面,包括索引优化、查询优化、服务器配置优化等。以下是一些基本的查询优化技巧: 1.使用索引 确保你的查询利用了适当的索引。 SELECT * FROM table_name WHERE column_name value; 2.避免SELECT * 只选择需要的列&#xff…

STM32与OLED显示屏通信(四针脚和七阵脚)

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 单片机调试 2. OLED简介 3. 接线 4. OLED驱动函数 4.1 四针脚版本 OLED.c OLED.h OLED_Font.h 4.2 七针脚版本 引脚连接 OLED.c OLED.h OLED_Font.h 5. 主函数 工程文件模板 1. 单片机…

回归预测 | Matlab实现ESN回声状态网络的多输入单输出回归预测

回归预测 | Matlab实现ESN回声状态网络的多输入单输出回归预测 目录 回归预测 | Matlab实现ESN回声状态网络的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现ESN回声状态网络的多输入单输出回归预测(完整源码和数据)&#x…