js实现简单的ATM机
实现简单ATM机的核心功能
使用JavaScript实现ATM机需要模拟存款、取款、查询余额和转账等基本功能。以下是一个基于控制台的简单实现方案。
初始化账户数据
创建账户对象存储用户信息和余额:
const accounts = [
{ id: '123456', pin: '1234', balance: 1000 },
{ id: '654321', pin: '4321', balance: 2000 }
];
let currentAccount = null;
登录验证功能
实现PIN码验证逻辑:
function login(accountId, pin) {
const account = accounts.find(acc => acc.id === accountId && acc.pin === pin);
if (account) {
currentAccount = account;
return true;
}
return false;
}
存款功能
增加账户余额的实现:
function deposit(amount) {
if (amount > 0) {
currentAccount.balance += amount;
return currentAccount.balance;
}
throw new Error('存款金额必须大于零');
}
取款功能
处理余额检查的取款逻辑:
function withdraw(amount) {
if (amount <= 0) throw new Error('取款金额必须大于零');
if (amount > currentAccount.balance) throw new Error('余额不足');
currentAccount.balance -= amount;
return currentAccount.balance;
}
查询余额
直接返回当前余额:
function checkBalance() {
return currentAccount.balance;
}
转账功能
实现账户间资金转移:
function transfer(targetAccountId, amount) {
if (amount <= 0) throw new Error('转账金额必须大于零');
if (amount > currentAccount.balance) throw new Error('余额不足');
const targetAccount = accounts.find(acc => acc.id === targetAccountId);
if (!targetAccount) throw new Error('目标账户不存在');
currentAccount.balance -= amount;
targetAccount.balance += amount;
return currentAccount.balance;
}
用户界面交互
简单的控制台交互示例:
function startATM() {
const readline = require('readline-sync');
const accountId = readline.question('请输入账户ID: ');
const pin = readline.question('请输入PIN码: ');
if (!login(accountId, pin)) {
console.log('登录失败');
return;
}
while (true) {
console.log('\n1. 查询余额\n2. 存款\n3. 取款\n4. 转账\n5. 退出');
const choice = readline.question('请选择操作: ');
switch (choice) {
case '1':
console.log(`当前余额: ${checkBalance()}`);
break;
case '2':
const depositAmount = parseFloat(readline.question('输入存款金额: '));
console.log(`新余额: ${deposit(depositAmount)}`);
break;
case '3':
const withdrawAmount = parseFloat(readline.question('输入取款金额: '));
console.log(`新余额: ${withdraw(withdrawAmount)}`);
break;
case '4':
const targetId = readline.question('输入目标账户ID: ');
const transferAmount = parseFloat(readline.question('输入转账金额: '));
console.log(`新余额: ${transfer(targetId, transferAmount)}`);
break;
case '5':
currentAccount = null;
return;
default:
console.log('无效选择');
}
}
}
安全注意事项
实际应用中需要加强安全措施:
- 使用HTTPS加密通信
- 实现会话超时机制
- 记录交易日志
- 添加每日取款限额
- 使用更安全的认证方式如双因素认证
这个实现展示了ATM机的基本功能框架,可以根据需要扩展更多功能如交易历史记录、多币种支持或与真实数据库集成。







