JS基础——ATM机终端程序编写(2.0)
在1.0版本上,利用数组进行用户的创建,通过调用数组下标,进行密码、余额的使用。新增了切换账户、修改密码的功能
以下为数组版代码。
- 创建模拟账户
个账户:
let user = ["xiaohei", 1234, 500, "xiaobai", 4321, 1000];
个变量:用户名、密码、余额,两个账户之间用不同的变量名分别
多账户匹配问题,只需要清楚对应的下标,利用下标输出内容即可,例:用户名下标为 i ,则密码下标为 i+1,余额下标为i+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){}
- 选择要进行的操作
登录成功后进行需要的操作
、查询 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为除以上选项外的操作,在此处是用户操作错误,没有输入正确的选项数字,因此系统会让用户重新选择。
- 、退出
退出整个程序,结束所有循环,我的方法是在循环外let一个状态值
case 0:
console.log(`Thankyou For Your Welcome!`);
state1 = false;
state = false;
break;
- 、查询余额
case 1:
console.log(`您当前账户余额为${user[i+2]}`);
break;
输出时使用字符串模板,方便语句中变量的输出
利用数组下标进行输出。
- 、存钱
case 2:
console.log(`>>>>请输入您要存入的金额:<<<<`);
let saveMoney = rs.question() - 0;
user[i + 2] += saveMoney;
console.log(`您当前账户余额为${user[i+2]}`);
break;
- 、取钱
要点是要判断取出的金额是否小于余额
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;
- 、转账
首先判断要转账的账户是否存在,其次判断转账的金额是否小于余额
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;
- 、切换用户
判断切换的用户名是否存在,若存在则将切换的名字下标赋值给原账户的下标
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;
这里也要注意在判断用户是否正确时,是否将所有数组都遍历了。
- 、修改密码
修改密码前,要让用户输入当前账号的密码,以防被盗用,增加用户体验感
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)的更多相关文章
- (初学JS)JS基础——ATM机终端程序编写<1.0>
初步学习了JS基础,为了更好地将所学知识熟练运用,我进行了银行ATM存取款机的模拟程序编写,主要通过VScode终端实现系列操作. 我的ATM程序包括6个主要功能:1.查询余额 2.存钱 3. 取钱 ...
- JS基础——ATM机终端程序编写(3.0)
利用函数进行代码实现,要点:将每一项操作单独写成一个函数,在需要时进行调用,弄清参数的传递. 创建模拟账户 使用数组创建账户 let user = ["xiaohei", 1234 ...
- 01、模拟ATM机界面程序
一.概述 设计一个简单的模拟自动取款机ATM界面的程序,实现用户登录及取款等功能. 二.需求分析 (1)模拟自动取款机ATM界面,有常用功能. (2)主要功能包括;用户输入密码登录主界面.取款功能.取 ...
- ATM机小程序
用规范化项目录的格式模拟一个ATM系统. 项目功能: 登录(可支持多个账户(非同时)登录) 注册 查看余额 存钱 转账(给其他用户转钱) 查看账户流水 退出 提供的思路:ATM直译就是取款机,但是咱们 ...
- 第一次尝试使用JAVA编写的ATM机程序
package study; import java.util.Scanner; public class ATM { private static int[] users = { 111111, 2 ...
- JAVA - ATM机程序
ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...
- 简单的小程序实现ATM机操作
简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- Web3D编程入门总结——WebGL与Three.js基础介绍
/*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...
随机推荐
- 开篇 | 揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?
本文为 Apache Flink 新版本重大功能特性解读之 Flink SQL 系列文章的开篇,Flink SQL 系列文章由其核心贡献者们分享,涵盖基础知识.实践.调优.内部实现等各个方面,带你由浅 ...
- HMaster/HRegion Server 工作原理
1.HBase系统架构 2. HRegion Sever架构图 0.94之前的版本 0.96+的版本 WAL: 即Write Ahead Log, 是HDFS上一个文件,早期版本中称为 ...
- 15.python变量,递归
原文:https://www.cnblogs.com/linhaifeng/articles/6113086.html#_label6 # 如果函数的内容有global关键字 # - 有声明局部变量 ...
- csredis-in-asp.net core理论实战-主从配置、哨兵模式
csredis GitHub https://github.com/2881099/csredis 看了github上的开源项目,上面真的只是单纯的使用文档,可能对于我这种人(菜鸟)就不太友好, 我知 ...
- IntelliJ IDEA+springboot+jdbctemplet+easyui+maven+oracle搭建简易开发框架(一)
前言: 这两天为了巩固easyui的各个控件用法,搭建了一个简易的框架用于开发,大家可以用来参考,如果发现文章中有哪些不正确不合理的地方,也请各位不吝赐教,感激不尽.文章最下面有源码,可以用于参考.整 ...
- appium+ios+macaca自动化测试环境部署
环境准备(供参考) mac v10.14.4 xcode v10.2 python v3.6 确保上述环境已满足,即可开始搭建appium+ios测试环境 1 jdk安装 下载mac版本的jdk并安装 ...
- 20191017-6 alpha week 2/2 Scrum立会报告+燃尽图 05
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9802 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐 ...
- ApacheHudi常见问题汇总
欢迎关注公众号:ApacheHudi 1. ApacheHudi对个人和组织何时有用 如果你希望将数据快速提取到HDFS或云存储中,Hudi可以提供帮助.另外,如果你的ETL /hive/spark作 ...
- postman 的基础使用篇(一)
简介 postman 是接口协作开发的优秀平台,可以用来进行接口设计.构建和调试,之前以chrome插件的形式,现在也有原生APP. 安装 Native app 通过链接 download page ...
- k8s(1.14.0)+etcd(3.3.10)+flanneld(0.10)
K8s(1.14) 几张比较不错的图 1.kubernetes 组件图 kubernetes 架构图 2.kubernetes 网络架构图 数据从源容器中发出后,经由所在主机的docker0虚拟网卡转 ...