在1.0版本上,利用数组进行用户的创建,通过调用数组下标,进行密码、余额的使用。新增了切换账户、修改密码的功能

以下为数组版代码。

  1. 创建模拟账户

    个账户:

    let user = ["xiaohei", 1234, 500, "xiaobai", 4321, 1000];

     
     

    个变量:用户名、密码、余额,两个账户之间用不同的变量名分别

    多账户匹配问题,只需要清楚对应的下标,利用下标输出内容即可,例:用户名下标为 i ,则密码下标为 i+1,余额下标为i+2。

  2. 登录

    console.log(`>>>>请输入您的用户名:<<<<`);

    let inputName = rs.question();

    for (let i = 0; i < user.length && state; i++) {

    //判断输入的用户是否存在

    if (inputName == user[i]) {

     
     

    //用户存在,输入密码

    console.log(`>>>>请输入密码:<<<<`);

    let inputPWD = rs.question() - 0;

    //判断输入的密码是否正确

    if (inputPWD == user[i + 1]) {

    //密码正确

    console.log(`登录成功!`);

    state1 = true;

    ……

    要点在于判断输入的内容是否与创建的用户名、密码匹配,先判断用户名是否正确,再判断密码是否正确。

    若不正确则机会减少一次。

    ……接上

    else {

    //密码错误

    n--;

    if (n != 0) {

    console.log(`密码错误,你还有${n}次机会!`);

    } else {

    console.log(`密码错误,您的账户被冻结!`);

    }

    state = false;

    break;

    }

    } else {

    //用户不存在

    if (i == user.length - 1 && state) { //看是否所有都查找了

    n--;

    if (n != 0) {

    console.log(`用户名错误,你还有${n}次机会!`);

    } else {

    console.log(`用户名错误,您的账户被冻结!`);

    state = false;

    break;

    }

    } else { //没找完,继续找

    continue;

    }

    }

    若想登录第二个账户,系统在判断用户不存在后,有可能没有继续找下去,终端会输出用户名错误,然后也可以继续输密码,如下图:

    因此我们需要再判断是否所有数组下标都查找了。

    if (i == user.length - 1 && state){}

  3. 选择要进行的操作

    登录成功后进行需要的操作

    、查询 2、存钱 3、 取钱 4、转账 5、切换账户 6、修改密码 0、退出`);

    let choice = rs.question() - 0;

     
     

    使用switch循环,获取用户输入,进入对应的程序

    switch (choice) {

    case 0:

     
     

    case 1:

     
     

    case 2:

     
     

    case 3:

     
     

    case 4:

     
     

    default:

    console.log(`您操作有误,请重新选择`);

    state = false;

    // state1=false;

    break;

    }

    default为除以上选项外的操作,在此处是用户操作错误,没有输入正确的选项数字,因此系统会让用户重新选择。

  4. 、退出

    退出整个程序,结束所有循环,我的方法是在循环外let一个状态值

    case 0:

    console.log(`Thankyou For Your Welcome!`);

    state1 = false;

    state = false;

    break;

  5. 、查询余额

    case 1:

    console.log(`您当前账户余额为${user[i+2]}`);

    break;

    输出时使用字符串模板,方便语句中变量的输出

    利用数组下标进行输出。

  6. 、存钱

    case 2:

    console.log(`>>>>请输入您要存入的金额:<<<<`);

    let saveMoney = rs.question() - 0;

    user[i + 2] += saveMoney;

    console.log(`您当前账户余额为${user[i+2]}`);

    break;

  7. 、取钱

    要点是要判断取出的金额是否小于余额

    case 3:

    console.log(`>>>>请输入您要取出的金额:<<<<`);

    let drawMoney = rs.question() - 0;

    if (drawMoney <= user[i + 2] - 0) { //判断余额是否大于取出的金额

    user[i + 2] -= drawMoney;

    console.log(`您当前账户余额为${user[i+2]}`);

    } else {

    console.log(`您当前账户${inputName}余额不足!`)

    }

    break;

  8. 、转账

    首先判断要转账的账户是否存在,其次判断转账的金额是否小于余额

    case 4:

    console.log(`>>>>请输入您要转账的用户:<<<<`);

    let targetName = rs.question();

    //遍历数组,查找用户是否存在

    for (let j = 0; j < user.length; j++) {

    if (targetName == user[j] && targetName != inputName) { //转账用户存在,且不是原本账户

    console.log(`>>>>请输入转账金额:<<<<`)

    let targetMoney = rs.question() - 0;

    if (targetMoney <= user[i + 2] - 0) { //判断余额是否大于转出的金额

    user[j + 2] += targetMoney;

    user[i + 2] -= targetMoney;

    console.log(`转账成功!`);

    console.log(`您当前账户${inputName}余额为${user[i + 2]}`);

    console.log(`转账账户${targetName}余额为${user[j + 2]}`);

    } else {

    console.log(`您当前账户${inputName}余额不足!`)

    }

    break;

    } else {

    //转账用户不存在

    if (j == user.length - 1) {

    console.log(`用户名不存在,请查证后输入`);

    break;

    } else {

    //有数组项未被遍历

    continue;

    }

    }

    }

    break;

  9. 、切换用户

    判断切换的用户名是否存在,若存在则将切换的名字下标赋值给原账户的下标

    case 5:

    console.log(`>>>>请输入切换的账户:<<<<`);

    let changeName = rs.question();

    //遍历数组,查找用户是否存在

    for (let l = 0; l < user.length; l++) {

    if (changeName == user[l] && changeName != inputName) { //切换用户存在,且不是原本账户

    inputName = changeName;

    i = l;

    break;

    } else {

    //切换用户不存在

    if (l == user.length - 1) {

    console.log(`用户名不存在,请查证后输入`);

    break;

    } else {

    //有数组项未被遍历

    continue;

    }

    }

    }

    break;

    这里也要注意在判断用户是否正确时,是否将所有数组都遍历了。

  10. 、修改密码

    修改密码前,要让用户输入当前账号的密码,以防被盗用,增加用户体验感

    case 6:

    //判断当前账号是否为用户本人,即旧密码是否正确

    console.log(`>>>>请输入旧密码:<<<<`);

    let oldPWD = rs.question() - 0;

    if (oldPWD == user[i + 1] - 0) {

    //密码正确

    console.log(`>>>>请输入新密码:<<<<`);

    let newPWD = rs.question() - 0;

    user[i + 1] = newPWD;

    console.log(`修改成功,请重新登录!`);

    state1 = false;

    // state = false;

    // break;

    } else {

    //密码错误

    console.log(`密码错误!`);

    }

    break;

     
     

    以上为使用数组实现操作的代码。

JS基础——ATM机终端程序编写(2.0)的更多相关文章

  1. (初学JS)JS基础——ATM机终端程序编写<1.0>

    初步学习了JS基础,为了更好地将所学知识熟练运用,我进行了银行ATM存取款机的模拟程序编写,主要通过VScode终端实现系列操作. 我的ATM程序包括6个主要功能:1.查询余额 2.存钱 3. 取钱 ...

  2. JS基础——ATM机终端程序编写(3.0)

    利用函数进行代码实现,要点:将每一项操作单独写成一个函数,在需要时进行调用,弄清参数的传递. 创建模拟账户 使用数组创建账户 let user = ["xiaohei", 1234 ...

  3. 01、模拟ATM机界面程序

    一.概述 设计一个简单的模拟自动取款机ATM界面的程序,实现用户登录及取款等功能. 二.需求分析 (1)模拟自动取款机ATM界面,有常用功能. (2)主要功能包括;用户输入密码登录主界面.取款功能.取 ...

  4. ATM机小程序

    用规范化项目录的格式模拟一个ATM系统. 项目功能: 登录(可支持多个账户(非同时)登录) 注册 查看余额 存钱 转账(给其他用户转钱) 查看账户流水 退出 提供的思路:ATM直译就是取款机,但是咱们 ...

  5. 第一次尝试使用JAVA编写的ATM机程序

    package study; import java.util.Scanner; public class ATM { private static int[] users = { 111111, 2 ...

  6. JAVA - ATM机程序

    ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...

  7. 简单的小程序实现ATM机操作

    简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...

  8. 模拟ATM机银行系统

    淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...

  9. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

随机推荐

  1. lamda表达式和尾置返回类型

    基本lambda语法 基本形式如下: [capture](parameters) mutable ->return-type {body} [capture]:叫做捕获说明符,表示一个lambd ...

  2. 解读中兴通信在物联网行业如何践行DDD

    此前,在由 ThoughtWorks 举办的领域驱动设计峰会 DDD-China 2019 上,InfoQ 记者就开发团队为何需要 DDD.目前业界实践 DDD 的挑战等问题对中兴通讯资深软件架构师张 ...

  3. 抽象类(abstract class)和接口(interface)有什么区别?

    抽象类中可以有构造器.抽象方法.具体方法.静态方法.各种成员变量,有抽象方法的类一定要被声明为抽象类,而抽象类不一定要有抽象方法,一个类只能继承一个抽象类. 接口中不能有构造器.只能有public修饰 ...

  4. LOJ 北校门外的回忆 倍增+线段树

    正解:倍增+线段树 解题报告: 传送门! $umm$这题有个对正解毫无启发的部分分还有个正解,都挺神仙的所以我都写了趴$QAQ$ 先说部分分 可以考虑把$x$向$x+lowbit(x)$连边,然后当$ ...

  5. 「学习笔记」珂朵莉树 ODT

    珂朵莉树,也叫ODT(Old Driver Tree 老司机树) 从前有一天,珂朵莉出现了... 然后有一天,珂朵莉树出现了... 看看图片的地址 Codeforces可还行) 没错,珂朵莉树来自Co ...

  6. 解决mariadb字符级不是utf8问题

    解决方法:在my.cnf配置文件中添加如下几个指令 [client]  default-character-set=utf8 [mysqld] character-set-server=utf8 in ...

  7. 理解TCP/IP协议栈之HTTP2.0

    1 前言 前面写了10多篇关于Redis底层实现.工程架构.实际应用的文章,感兴趣的读者可以进行阅读,如有问题欢迎交流: 1.Redis面试热点之底层实现篇-12.Redis面试热点之底层实现篇-23 ...

  8. 解决RabbitMQ远程不能访问的问题

    刚刚安装的RabbitMQ-Server-3.3.5,并且也已经开启了Web管理功能,但是现在存在一个问题: 出于安全的考虑,guest这个默认的用户只能通过http://localhost:1567 ...

  9. Android Studio build不显示Generate signed apk问题

    如果是刚装的AS,那么新建一个项目,进入项目后,会发现build选项卡缺了一些选项,同时底部sync在转圈圈,其实是AS在自动下载gradle,也许还在下载build-tools,我等了11分钟才结束 ...

  10. echarts更改折线图区域颜色、折线颜色、折点颜色

    series : [ { name:'订单流入总数', type:'line', stack: '总量', areaStyle: { normal: { color: '#8cd5c2' //改变区域 ...