js ATM机对象版

const readline = require("readline-sync");

let accountO = [
    { name: "zhang3", pwd: 123456, money: 4650 },
    { name: "li4", pwd: 456789, money: 9870 },
    { name: "1", pwd: 1, money: 0 },
];



function savemoney(account) {   //存钱函数
    console.log("\n输入存储的金额:");
    let money = readline.question() - 0;

    accountO[account].money += money; //账户余额增加
    console.log("存储成功。");
}

function takemoney(account) {   //取钱函数
    console.log("\n输入取出的金额:");
    let money = readline.question() - 0;

    if (accountO[account].money < money) {    //查看余额是否充足
        console.log("余额不足。");
    }
    else {
        accountO[account].money -= money; //扣钱
        console.log("取钱成功。");
    }

}


function check_account(account) {   //查看账户是否存在
    //是否有正在查找的账户。有返回下标,无返回-1

    return accountO.findIndex(istem=>{return istem.name == account;});

}


function transfer(account) {    //转账
    console.log("\n输入你要转账的账户:");
    let tranAccount = readline.question();

    if (check_account(tranAccount)!=-1) {   //要转账的账户是否存在?
        if (accountO[account].name != tranAccount) { //要转账的账户和本账户是否相同?
            console.log("输入转账金额:");
            let money = readline.question() - 0;

            if (accountO[account].money < money) {    //余额是否充足?
                console.log("余额不足。");
            }
            else {
                accountO[account].money -= money; //扣钱
                //获取要转账的账户在数组中的下标。check_account第二个参数为0
                accountO[check_account(tranAccount)].money += money;  //加钱。
                console.log("转账成功。");
            }
        }
        else {
            console.log("不能转账给自己。");
        }
    }
    else {
        console.log("输入的账户不存在。");
    }
}

function changeaccount(account) {   //切换账户

    //告诉login函数,是切换账户操作
    let check = loginchoise(account, 1);
    if (check == -1)    //返回值为-1,账户重复
    {
        console.log("已经是当前账户。");
        return false;
    }
    if (check == true)
        return true;


}

function changepwd(account) {   //修改密码
    let count = 3;  //修改密码的次数。
    console.log(`\t修改密码系统`);

    while (count > 0) {
        console.log("\n请输入原密码:");
        count--;    //开始输入,次数减一。
        let inputpwd = readline.question() - 0;

        if (accountO[account].pwd == inputpwd) {
            console.log("请输入修改的密码:");
            let newpwd = readline.question() - 0;
            if (pwd(newpwd)) {
                accountO[account].pwd = newpwd; //修改数组中的值
                console.log("修改成功。");
                return true;
            }
            else {
                if (count != 0) {
                    console.log(`还有${count}次机会`);
                }
            }
        }
        else {
            if (count != 0) {
                console.log(`原密码输入错误。还有${count}次机会`);
            }
            else
                console.log(`原密码输入错误。`);
        }
    }
    return 0;

}


function loginchoise(account = null, changeflag = 0) {    //选择注册or登录
    console.log(`\n\t1.注册\n\t2.登录已有账号\n\t0.退出`);
    let chioce = readline.question() - 0;
    switchbreak: switch (chioce) {
        case 1:
            if (register());    //注册成功后,跳转case1到登录
            else {
                loginchoise(account, changeflag);//注册失败退出程序 
                break switchbreak;
            }
        case 2:
            if (login(account, changeflag) == -1) {
                return -1;
            }
            return true;
        case 0:
            return 0;   //0退出所有程序
        default:
            console.log("输入不规范");
            loginchoise(account, changeflag);
    }
}


function register() {   //注册
    console.log(`\n\t注册系统`);
    console.log("输入要创建的账户名:");
    let newaccount = readline.question();
    if (newaccount != '') {
        if (check_account(newaccount)!=-1) {    //是否有该账户名
            console.log("账户已存在。");
            return register();  //重新运行本函数,重新创建
        }
        else {
            console.log("输入账户数字密码:");
            let newpwd = readline.question() - 0;
            if (pwd(newpwd)) {
                console.log("确认账户密码:");
                let newpwd2 = readline.question() - 0;
                if (newpwd != newpwd2) {
                    console.log("两次输入不一致");      //密码不一致,退出本函数
                }
                else {
                    let newO = {};
                    newO.name = newaccount;
                    newO.pwd = newpwd;
                    newO.money = 0;
                    accountO.push(newO);

                    console.log("注册成功。");
                    return 1;
                }
            }
        }
    }
    else {
        console.log("输入不规范。");
    }
    return 0;

}


function pwd(newpwd) {  //输入的密码是否为数字形式,1是0否并提示错误
    if (!isNaN(newpwd)) {
        return 1;
    }
    else {
        console.log("密码形式错误,请输入纯数字密码。");
        return 0;
    }
}


function login(changeaccount, changeA = 0) {    //登录,参数:转换账户时当前账户的下标、转换账户标志(默认0,即无
    let countlogin = 3; //登录次数
    console.log(`\n\t登录系统`);
    while (countlogin) {    //次数为零退出循环
        console.log("输入账户名:");
        let account = readline.question();
        countlogin--;   //开始输入,次数递减

        let indexAccount=check_account(account);

        if (indexAccount!=-1) {   //检查账户是否存在

            if (changeA) {  //是否带转换账户的标记,1运行
                if (account == accountO[changeaccount].name)     //原账户是否与要转换的账户一致
                {
                    return -1;       //给转换账户函数传参,代表与原账户一致
                }
            }

            console.log("输入密码:");
            let pwd = readline.question() - 0;

            //验证密码
            //获取当前账户在数组中的下标check_account第二个参数为0
            if (accountO[indexAccount].pwd == pwd) {
                console.log("登录成功");
                option(indexAccount);       //传参,当前账户名的下标.跳到选项主程序
                return true;
            }
            else {
                console.log("密码错误");
                countlogin == 0 ? '' : console.log(`你还有${countlogin}次机会`);
            }
        }
        else {
            console.log("账户不存在。");
            countlogin == 0 ? '' : console.log(`你还有${countlogin}次机会`);
        }
    }
    return 0;
}


function option(account) {    //选项主程序  account当前账户
    let flag = 1;   //跳出循环标记
    while (flag) {
        console.log(`\n你好,${accountO[account].name}\n请输入需要的程序:
    0.退出
    1.显示余额
    2.存钱
    3.取钱
    4.转账
    5.切换账户
    6.修改密码`);

        let chioce = readline.question() - 0;
        switch (chioce) {
            case 0: //退出
                console.log("再见。");
                flag = 0;
                break;
            case 1: //显示余额
                console.log(`当前账户余额:¥${accountO[account].money}`);
                break;
            case 2: //存钱
                savemoney(account);
                break;
            case 3: //取钱
                takemoney(account);
                break;
            case 4: //转账
                transfer(account)
                break;
            case 6: //修改密码
                if (changepwd(account)) {
                    return atm();   //修改成功后跳转到登录或注册页面
                }
                break;  //修改失败不变账户继续选择
            case 5: //切换账户
                if (changeaccount(account)) {
                    return true;    //切换的账户退出后回到此处直接return退出
                }
                break;
            default:
                console.log("输入不规范");
                break;
        }
    }
}


function atm() {    //atm程序入口
    loginchoise();  //选择注册或者登录
}


atm();



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值