ATM机(高阶函数版)

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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值