const rs = require("readline-sync");
//2020 9/19
// 创建多个账号
let users = [
{ name: "f70", pwd: "123a", blance: 1000 },
{ name: "f71", pwd: "123b", blance: 2000 },
{ name: "f72", pwd: "123c", blance: 3000 }
];
// 查找用户
function search(transAccount, qz) {//第二个形数 qh 判断切换是否失败
for (let index in users) {
if (transAccount == users[index].name) {
return index;
}
else if (index == users.length - 1) {
if (qz) {
console.log(`切换账户失败!!!!!!`);
} else {
console.log(`你输入的账号 不存在`);
}
return false;
}
}
}
// 系统
function system() {
while (true) {
console.log(`请选择以下功能: 1、登录 2、注册 0、退出`);
let option = rs.question() - 0;
switch (option) {
// 登录
case 1:
let index = islogin();
if (index || index === 0) {
let i = main(users, index);
if (i == 0) {
return;
}
}
return;
case 2:
//注册
reg();
break;
// 退出
case 0:
return false;
}
}
}
// 主程序
function main(users, index) {
console.log(`欢迎来到!!!中国银行!!!`);
let option;
while (true) {
console.log(`请输入您的选择:1、查询 2、存钱 3、取钱 4、转账 5、切换账户 6、 修改密码 0、退出`);
option = rs.question() - 0;
switch (option) {
// 查询
case 1:
console.log(`当前账户余额位${users[index].blance}`);
break;
// 存钱
case 2:
saveMoney(users, index);
break;
// 取钱
case 3:
dropMoney(users, index);
break;
//转账
case 4:
transMoney(users, index);
break;
//切换账户
case 5:
let stat = transName(users, index);
if (stat || stat === 0) { //返回下标或则下标为0的执行操作
index = stat;
}
break;
// 修改密码
case 6:
let state = changepwd(users, index);
if (state||state==0) { //返回下标或则下标为0的执行操作
index = islogin();
}
// 为假执行
else {
return false;
}
break;
// 退出
case 0:
console.log(`欢迎下次光临!!`);
return 0;
}
}
}
//注册
function reg() {
while (true) {
console.log(`请输入注册账号`);
let zhuce = rs.question();
for (let index in users) {
if (zhuce != users[index].name && index == users.length - 1) {
console.log(`请输入账户密码!!!`);
let newpwd = rs.question();
users.push({ name: zhuce, pwd: newpwd, balance: 0 });
console.log(`${users[index].name}注册成功!!!!`);
return;
}
// 如果注册账号与已有账号相等就输出该句子
else if (zhuce == users[index].name) {
console.log(`当前注册账号${users[index].name}已经存在`);
console.log(`1、继续注册 2、退出注册`);
let option = rs.question()-0;
if (option == 2) {
return;
}
}
}
}
}
// 判断登录是否成功
function islogin(qz, changeindex = 0) {
// //判断3次机会
let count = 3;
while (count) {
let inputName = users[changeindex].name;
if (!qz) {
console.log(`请用户输入账号!!!`);
inputName = rs.question();
}
for (let i in users) {
//判断账号是否存在
if (inputName == users[i].name) {
console.log(`请输入密码!!!`);
let inputpwd = rs.question()
//密码是否正确
if (inputpwd == users[i].pwd) {
return i;
}
//密码错误
else if (count == 1) {
console.log(`3次密码输入错误!!!冻结`);
return false;
}
else {
console.log(`密码输入错误!!!您还有${--count}次机会`);
break;
}
}
//判断多账户所有 账号是否都在
else if (i == users.length - 1 && count > 1) {
console.log(`输入账号有错误!!!您还有${--count}次机会`);
}
else if (count == 1) {
console.log(`3次机会已经用完!!!冻结`);
count = 0;
break;
}
}
}
}
// }
// 存钱
function saveMoney(users, index) {
console.log(`请输入存钱金额!!!`);
let saveMoney = rs.question() - 0;
if (!isNaN(saveMoney) && (saveMoney % 100 == 0)) {
users[index].blance += saveMoney;
console.log(`当前账户金额为${users[index].blance}`);
}
else {
console.log(`输入有误!!!`);
return false;
}
}
// 取钱
function dropMoney(users, index) {
console.log(`请输入取钱金额!!!`);
let dropMoney = rs.question() - 0;
if (!isNaN(dropMoney) && (dropMoney % 100 == 0)) {
if (dropMoney <= users[index].blance) {
users[index].blance -= dropMoney;
console.log(`当前账户金额为${users[index].blance}`);
}
else {
console.log(`账户金额不足!!!!`);
}
}
else {
console.log(`输入有误!!!`);
return false;
}
}
// 转账
function transMoney(users, index) {
console.log(`请输入转账账号!!!`);
let transAccount = rs.question();
// 如果不等于自己
if (transAccount != users[index].name) {
let transindex = search(transAccount);
// 获取下标 f70 f71 f72其中2个
if (transindex || transindex === 0) {
console.log(`请输入转账金额!!!`);
let transMoney = rs.question() - 0;
//转账相关操作
if (!isNaN(transMoney) && transMoney % 100 === 0 && transMoney > 0) {
if (transMoney <= users[index].blance) {
users[index].blance -= transMoney;
users[transindex].blance += transMoney;
console.log(`当前账户余额为${users[index].blance}`);
}
// 钱不够
else {
console.log(`转账金额不足`);
}
}
else {
console.log(`输入有误!!!!`);
return false;
}
}
}
else {
console.log(`你已经在${users[index].name}下,不能给自己转账`);
return false;
}
}
// 切换账户
function transName(users, index) {
console.log(`请输入切换账号!!!!`);
let transAccount = rs.question();
// 判断是不是切换自己的账号
if (transAccount != users[index].name) {
let tindex = search(transAccount, "qh"); //第二个参数 qh 判断切换是否失败
if (tindex || tindex === 0) { //下标或则下标为0时执行操作
return islogin("qh", tindex);
}
}
else {
console.log(`你已经在当前${users[index].name}账号下`);
return false;
}
}
// 修改密码
function changepwd(users, index) {
console.log(`请输入原密码:`);
let password = rs.question();
if (password == users[index].pwd) {
console.log(`请输入新密码!!!!`);
let newPWD = rs.question();
users[index].pwd = newPWD;
console.log(`原密码是${users[index].pwd},新密码${newPWD}`);
return true;
}
else {
console.log(`原密码输入错误!!!!`);
return false;
}
}
system();
相关推荐
ATM机模拟系统
经过对题目的分析,把本ATM模拟程序分为管理员端和用户模式两大模块。其中,管理员具有查询所有账户、导出所有账户信息到文件、注销功能。用户模块具有查询余额、ATM转账、ATM存款、ATM取款、修改密码、查询交易记录、导出记录、退卡等功能。 .........
ATM机简单对象版
创建账号 //创建账户(多账户) let users = [ { name: "F70", pwd: "123a", balance: 1000 }, { pwd: "123b", balance: 2000, name: "F71" }, { name: "F72", pwd: "123c", balance: 3000 }, ]; //判断账户是否存在 function serach(name, temp) { let i = 0; for (let i
ATM机领域类图
ATM机问题域及词汇表:https://blog.youkuaiyun.com/ashdkl/article/details/80510951ATM机用况图:tps://blog.youkuaiyun.com/ashdkl/article/details/80511045一.文字说明1. 类图综述类图是对系统所抽象出来的实体的属性行为的描述以及实体与实体间的关联关系。该分析类图说明了ATM机系统的概念模型,表现了...
java--面向对象(ATM)
package Lei; public class Store { public double money; public Store(double money) { this.money = money; } double totle=0.0; public double cq(double money){ if(money%10==0||money%5==0){
Python 实例详解:银行 ATM 等待时间分析
这是一道 Python 面向对象编程的实例,包含面向对象编程、Class 类相关知识,请读者先自行掌握。本文分析已有代码,主要理解其中逻辑,学习编程方法。代码乍看之下稍微复杂,拆解之后,弄通逻辑,还是很清晰明了的。 前部分为代码分析,可以重点看后面的程序运行部分哈,配合图文,便于理解。 这是笔者第一次写实例分析,内容详细,篇幅较长,仅用于学习与交流。若有疏漏,请多包涵,欢迎各位指点和讨论啊~ 【需...
ESP32-BLE学习1-建立简单的server
start 学习之前,我想尝试使用ESP32的demo建立一个简单的server与手机接进行最基本的数据通信。 这里有BLE的简单讲解BLE资料 因为BLE的连接是具有主从机特性的,就像SPI,USB一些请求只能由主机端发起,连接也需要主机端发起。所以手机要想连上ESP32,就得将ESP32设置为从机模式。 从资料上可以看到,从机端通过Notify通知主机,所以从机就是GATT Server。 在进行ESP32 的demo学习之前,得大体看下ESP32的蓝牙组成,ESP32支持经典蓝牙和低功耗蓝牙4.2,
ATM面向对象分析与设计之——设计类图
类图综述类图描述了ATM系统的全部类的关系和功能。类描述user 类是描述使用者的实体类,是client和administrator的父类,属于抽象类。 client类和administrator类继承自user类,cardNum和ID属性的数据类型不同,具有多态性。 card类是bankCard类和adCard类的父类,是实体类,有cardNum(卡号)、password(密码)、bank(所
NVIDIA NCCL 安装和测试实战教程
ibrary)是用于深度学习应用的高性能通信库,可加速多GPU通信和同步。它能够在多个GPU之间进行高效的数据传输和集体操作,显著提高了分布式GPU系统上深度学习训练和推理的性能。NVIDIA NCCL是加速多GPU系统上深度学习应用的必不可少的工具。其高效的通信原语和集体操作显著提高了分布式训练和推理的性能,使其成为现代深度学习基础架构的关键组成部分。
Js实现ATM机对象版
const readline = require('readline-sync'); //用户数据 let accArr = [ { name: "z3", pwd: "123", balance: 1000 }, { name: "l4", pwd: "234", balance: 1500 }, { name: "qzw", pwd: "777", balance: 2000 } ] //主程序 function atm() { //状态值 let st.
服务器AutoDL自己部署QWen3
说明:核心参数:30B 模型原精度权重文件约 60GB,单张 PRO 6000 拥有 48GB 显存,单卡塞不下原精度模型,2张 PRO 6000 = 96GB 总显存,这不仅能装下模型,还能留出约 30GB 显存给 KV Cache(上下文长度) 以及 Omni 多模态组件 处理图片/视频输入时的额外开销。1. 前提准备模型选择:直接下载到 AutoDL 服务器上=》原精度模型(BF16/FP16) 的 Qwen3-Omni-30B,选择的示例和环境如下。# 3. 正式执行模型下载。
Halcon深度学习实战:基于异常值检测的工业缺陷精准识别方案
本文详细介绍了Halcon深度学习中的异常值检测技术在工业缺陷识别中的应用。该方法仅需少量正常样本即可训练,能有效应对未知、多变的缺陷类型,显著降低项目启动门槛。文章提供了从数据准备、模型训练、参数调优到产线部署的完整实战指南,并分享了关键的性能优化与避坑经验。
js ATM机对象版
利用js数组存对象的方法写atm机的运行及功能(登录、注册、修改密码、查询余额、切换账户、存款取款...
避坑指南:ShardingSphere连接达梦/金仓数据库时SQL解析器的那些‘坑‘
本文深入探讨了ShardingSphere与国产数据库(如达梦、金仓)集成时遇到的SQL解析器差异问题,提供了详细的解决方案和优化策略。通过分析SQL方言差异、JDBC实现差异及解析器兼容性,帮助开发者有效避坑,提升分布式数据库架构设计的效率与稳定性。
ATM(对象版)
ATM(对象版) //ATM对象版1 const re = require('readline-sync'); /* let arr = [ 'z1', '1', 100, 'z2', '2', 200, 'z3', '3', 300 ]; */ let arr = [ { userName: 'z1', userPwd: 1, userMoney: 1000 }, { userName: 'z2',
高精地图语义分割标注
什么是语义分割?语义分割与目标检测的区别?语义分割的关键应用场景有哪些?高精地图语义分割标注的难点?
30天入门 SAP BTP 开发系列之四:SAP BTP 控制台里 Global Account 的常规操作介绍
笔者前一篇文章,介绍了 SAP BTP 中 Global Account 的概念。本文咱们一起来看看 SAP BTP 控制台里,给 Global Account 开放了哪些操作功能。
用c++模拟ATM机
**一.题目:**用c++模拟ATM机. 二.分析: 实现ATM机,首先要创建两个类,一个为用户类,用来存储用户个人信息。另一个为ATM类, 用来实现各种功能。用户类中用户个人信息只有用户本人可以查看,所以全部为私有数据成 员,包括用户的密码、用户的卡号、用户余额、用户名字。ATM机类主要是实现登录、存款、 取款、余额查询、修改密码、退出系统等基本功能。登录时要核对账户和密码是否正确,若 密码错误...
华为OD机试真题2025双机位C卷 Java&Go 实现【卡牌游戏】
小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。
C++实现ATM机
ATM机设计概要本案例涉及一个银行卡和ATM机之间的“对话”。需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
用Java简单实现ATM机主要功能
项目介绍 基于大家使用银行卡在ATM机取款操作,进行相对应ATM机操作流程的实现。 项目功能 注册功能: 根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户)。 登录功能: 登陆失败:重新登陆 或 注册 登陆成功:对登陆的这张银行卡可以进行一下操作:存款、取款、查余额、转账、退卡功能。 项目知识点 java基本语法的使用 一维数组 函数调用,封装 Java类和对象 项目实现思路 设计并实现系统的相关打印界面:注册、登陆、登陆后操作 登录系统必须输入正确的
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
面向对象程序设计——银行ATM机系统
文章目录针对于面向对象设计——做一个简单的银行ATM机系统ATM机需求分析用户类ATM机类银行类注册操作的大概流程登录操作的大概流程用户类代码ATM机类代码bank类代码(主类)总结 针对于面向对象设计——做一个简单的银行ATM机系统 ATM机需求分析 模拟用户注册,登录,修改密码,存钱,取钱 参与的事物有:用户,ATM机,银行(环境类) 用户类 账号 密码 余额 ATM机类 登录界面功能 注册 登录 登录成功后的界面功能 存钱 取钱 查询余额 转账 修改密码 退出 银行类 mai
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
【UML】- ATM机状态机图
1、状态机图的简介 一个状态机图是对一个单一对象进行建模,指定一个对象在它的生命周期中响应事件的顺序。图1是一个门的状态机图。门具有三个状态:open、closed和locked,响应不同的事件得到不同的状态。 状态用圆角矩形加状态名表示。初始状态用一个黑原点表示,终点用一个圆和他内部的一个黑实点表示。初始状态和终点分别为状态的进入点和退出点。一个状态还可以经过转换到自己的状态。 从一个状态向另一...
用Java实现ATM机功能(附带源码)
根据大家平时在ATM机上的操作,编写程序实现ATM机的常见功能。具体功能包括: 根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户登陆失败:重新登陆或注册 登陆成功:对登陆的这张银行卡可以进行以下操作:存款、取款、查余额、转账、退卡功能。根据题目要求,设置银行卡类、银行类和ATM机类三个类。属性:卡号、密码、余额操作:获取卡号、重置卡号、获取密码、重置密码、存钱、取钱、查询余额属性:银行卡数组、银行卡的数量、初始最大银行卡数(可以设为静态常量)操作:查询
java面向对象基础练习-模拟ATM机
模拟ATM机要求代码例子 要求 编写一个银行卡类:Card 属性:卡号,密码,余额; 方法:存款,取款,修改密码(修改密码需要验证原来的密码,符合才允许被修改) 代码例子 编写一个银行卡类:Card package com.duixiang.poji; public class Card { //定义属性 int cardNum;//定义卡号 String pw...
python ATM流程模拟
通过观察ATM机的主要业务为读卡验证、取款、存款、转账、汇款(无卡存款)、改密、余额查询等主要业务
5796



被折叠的 条评论
为什么被折叠?



