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();
js ATM机对象版
最新推荐文章于 2022-09-15 14:00:28 发布