ATM机(高阶函数版)
运用函数实现了ATM机的登陆,注册,存钱,取钱,查看余额,转账,切换账户,改密码,退出。
ATM(函数版)
//老师版ATM机
const re = require('readline-sync');
let arr = [
'z1', '1', 100,
'z2', '2', 200,
'z3', '3', 300
];
//主程序
function atm() {
let count = 3; //登录次数
let state = true; //主程序状态
while (state) {
console.log("欢迎来到新天银行");
console.log(`请选择:1:登录,2:注册,0:退出`);
let num = re.question() - 0;
switch (num) {
case 1:
state = login(count, state); //第三层循环退出当前账户
break;
case 2:
register();
// return 0;
break;
case 0:
console.log("欢迎下次光临2");
state = false;
break;
default:
console.log("输入的格式有误");
}
}
}
//判断账户是否存在
function saveacoount(name) {
return arr.indexOf(name); //存在返回数组下标
}
//登录
function login(count, state) {
while (state) {
console.log(`请输入账户`);
let inputName = re.question();
//获取账户的下标
let index = saveacoount(inputName);
if (index != -1 && index % 3 == 0) {
while (count) {
console.log(`请输入密码`);
let inputPwd = re.question();
if (inputPwd == arr[index + 1]) {
console.log(`${inputName}用户登陆成功`);
return option(state, index); //第二层循环退出选项
// option(state, index);
// return false;
} else {
count--;
if (count == 0) {
console.log(`多次输入错误请联系客服`);
state = false;
} else {
console.log(`你还有${count}次机会`);
}
}
}
} else {
console.log(`${inputName}用户不存在`);
}
}
}
//选项
function option(state, index) {
while (state) {
console.log(`${arr[index]}用户,请选择操作:1:存钱,2:取钱,3:查询余额,4:改密码,5:转账,6:切换账户,0:退出`);
let num = re.question() - 0;
switch (num) {
case 1:
saveMoney(index); //存钱
break;
case 2:
drawMoney(index); //取钱
break;
case 3:
balance(index); //余额
break;
case 4:
if (changepwd(index)) {//改密码
return true;
}
break;
case 5:
transaccount(index); //转账
break;
case 6:
let transIndex = switchaccount(index);
if (transIndex || transIndex == 0) {
//把切换成功的下标复制给option的index
//即修改当前下标
index = transIndex;
}
break;
case 0:
console.log("欢迎下次光临1");
return false; //第一层循环退出函数
// state = false;
// break;
default:
console.log('你输入的数字不是查询业务,请重新输入!!');
}
}
}
//存钱
function saveMoney(index) {
console.log('请输入存钱金额:');
let jin = re.question() - 0;
arr[index + 2] += jin;
console.log(`存钱成功`);
}
//取钱
function drawMoney(index) {
console.log('请输入取钱金额:');
let save = re.question() - 0;
if (save <= arr[index + 2]) {
arr[index + 2] -= save;
console.log(`取钱成功`);
} else {
console.log(`余额不足`);
}
}
//余额
function balance(index) {
console.log(`余额为:${arr[index + 2]}`);
}
//改密码
function changepwd(index) {
let state = true;
console.log("请输入旧密码:");
let originalpassword = re.question(); // originalpassword 原密码的输入
if (originalpassword == arr[index + 1]) { //判断输入的旧密码是否正确
console.log("旧密码正确,请输入新密码");
let chpwd = re.question();
//判断密码是否一致
while (state) { //用来循环输入新密码
console.log(`请确认密码`);
let rePwd = re.question();
if (rePwd === chpwd) { //密码两次验证正确就跳出
arr[index + 1] = chpwd;
console.log(`修改密码成功`);
return true;
} else {
console.log(`两次输入的密码不一致`);
// state = false;
}
}
}
else {
console.log(`输入的旧密码错误`);
}
}
//转账
function transaccount(index) {
console.log("请输入你要转账的账户");
let newaccount = re.question(); //获取转账的账户
let newacc = saveacoount(newaccount); //获取转账帐号的下标
if (newacc != -1 && newacc % 3 == 0) { //判断是否给自己转账
if (newacc != index) { //判断是否为同一账户
console.log(`账户存在${arr[newacc]}请输入要转账的金额:`);
let newmoney = re.question() - 0; //转账的金额
if (!isNaN(newmoney)) { //判断是否为非数
if (newmoney <= arr[index + 2]) { //判断转账的金额是否小于本地账户的余额
arr[index + 2] -= newmoney;
arr[newacc + 2] += newmoney;
console.log("转账成功,余额为");
// option(true, index);
} else {
console.log("余额不足");
// option(true, index);
}
} else {
console.log(`输入的格式不正确`);
}
} else {
console.log(`无法给自己转账`);
// option(true, index);
}
} else {
console.log("你输入的账户不存在");
// option(true,index);
}
}
//切换账户
function switchaccount(index) {
console.log("请输入你要切换的账户");
let newaccount = re.question();//切换的账户的用户名
// for(acc = 0;acc<arr.length;acc++){
if (newaccount != arr[index]) { //判断是否在当前账户
let transIndex = saveacoount(newaccount); //获取切换账户的下标
if (transIndex != -1 && transIndex % 3 == 0) {
console.log(`输入的账户${newaccount}存在,请输入密码:`);
let newpwd = re.question();
if (newpwd == arr[transIndex + 1]) {
// return transIndex;
console.log(`输入正确,请选择是否跳转1:确定,2:取消`);
let move = re.question() - 0;
switch (move) {
case 1:
return transIndex;
case 2:
break;
default:
break;
}
} else {
console.log(`密码错误`);
return undefined;
}
}
} else {
console.log(`已在当前账户下了`);
}
}
//注册
function register() {
console.log(`请输入注册的账户`);
let newName = re.question();
let state = true;
//判断账户是否存在
if (saveacoount(newName) == -1) {
console.log(`请输入密码`);
let newPwd = re.question();
//判断密码是否一致
while (state) {
console.log(`请确认密码`);
let rePwd = re.question();
if (rePwd == newPwd) {
arr.push(newName, newPwd, 0);
state = false;
} else {
console.log(`两次输入的密码不一致`);
// state = false;
}
}
} else {
console.log(`${newName}账户已存在,请重新选择`);
}
}
atm();