let readline = require('readline-sync');
// 清屏函数
let clear = () => process.stdout.write(process.platform === 'win32' ? '\x1Bc' : '\x1B[2J\x1B[3J\x1B[H');
class Person {
constructor(userID, userName, userPwd) {
this.id = userID;
this.name = userName;
this.pwd = userPwd;
}
}
class ATM {
constructor() {
this.arr = [];
}
// 注册
signAccount(Person) {
let isflag = true;
for (let i of this.arr) {
if (i.id == Person.id) {
isflag = false;
break;
}
}
if (isflag) {
this.arr.push({ id: Person.id, name: Person.name, pwd: Person.pwd, totalMoney: 0 });
return true;
} else {
return false;
}
}
// 登录
loadAccount(userID, userPwd) {
let isflag = '';
for (let i of this.arr) {
if (i.id == userID && i.pwd == userPwd) {
isflag = i.name;
}
}
return isflag;
}
// 查询
searchMoneyFunc(userID) {
for (let i of this.arr) {
if (i.id == userID) {
return i.totalMoney;
}
}
}
// 取钱
outMoneyFunc(userID, outMoney) {
if (outMoney < 0) {
return `非法金额!`;
}
for (let i of this.arr) {
if (i.id == userID) {
if (i.totalMoney < outMoney) {
return `余额不足!`;
} else {
i.totalMoney -= outMoney;
return `钱已取出,当前余额为:${i.totalMoney}`;
}
}
}
}
// 存钱
saveMoneyFunc(userID, saveMoney) {
if (saveMoney < 0) {
return `非法金额`;
}
for (let i of this.arr) {
if (i.id == userID) {
i.totalMoney += saveMoney;
return `钱已存入,当前余额为:${i.totalMoney}`;
}
}
}
// 转账
transferMoneyFunc(userID, transferID, transferMoney) {
if (transferMoney < 0) {
return `非法金额`;
}
let userMoney = this.searchMoneyFunc(userID);
if (userMoney < transferMoney) {
return `余额不足!`;
}
let isflag = false;
for (let i of this.arr) {
if (i.id == transferID) {
isflag = true;
i.totalMoney += transferMoney;
break;
}
}
if (isflag) {
for (let i of this.arr) {
if (i.id == userID) {
i.totalMoney -= transferMoney;
return `转账成功,当前余额为${i.totalMoney}`;
}
}
} else {
return `没有此用户!`;
}
}
}
let atm = new ATM();
let action = true;
while (action) {
clear();
console.log('请输入您要进行的操作:1.用户登录 2.用户注册 0.退出');
let choose = ~~readline.question('');
switch (choose) {
// 用户登录
case 1: {
console.log('请输入您的账户:');
let account = readline.question('');
console.log('请输入您的密码:');
let password = ~~readline.question('');
let login = atm.loadAccount(account, password); // 登录
if (login != '') {
console.log(`欢迎您!${login}`);
let act = true;
while (act) {
clear();
console.log('请输入您要操作的程序:1、查询 2、取款 3、存款 4、转账 0、退出');
let chooseNum = ~~readline.question('');
switch (chooseNum) {
// 查询
case 1: {
let totalMoney = atm.searchMoneyFunc(account);
console.log(`当前余额为:${totalMoney}`);
console.log('按回车键继续~~');
readline.question('');
break;
}
// 取款
case 2: {
console.log('请输入您的取款金额:');
let outMoney = ~~readline.question('');
console.log(atm.outMoneyFunc(account, outMoney));
console.log('按回车键继续~~');
readline.question('');
break;
}
// 存款
case 3: {
console.log('请输入您的存款金额:');
let saveMoney = ~~readline.question('');
console.log(atm.saveMoneyFunc(account, saveMoney));
console.log('按回车键继续~~');
readline.question('');
break;
}
// 转账
case 4: {
console.log('请输入您要转入的账户ID:');
let transferID = readline.question('');
console.log('请输入您的转款金额:')
let transferMoney = ~~readline.question('');
console.log(atm.transferMoneyFunc(account, transferID, transferMoney));
console.log('按回车键继续~~');
readline.question('');
break;
}
// 退出
case 0: {
act = false;
break;
}
// 输入有误
default:
console.log('您的操作不符合规范');
console.log('按回车键继续~~');
readline.question('');
break;
}
}
} else {
console.log(`账户或密码错误!按回车键继续~~`);
readline.question('');
}
break;
}
// 用户注册
case 2: {
console.log('请输入您的姓名:');
let userName = readline.question('');
console.log('请输入您的ID:');
let userID = readline.question('');
console.log('请输入您的密码:');
let userPwd = readline.question('');
let person = new Person(userID, userName, userPwd);
let account = atm.signAccount(person);
if (account) {
console.log('账户创建成功!');
console.log('按回车键继续~~');
readline.question('');
// console.log(atm.arr);
} else {
console.log('该账户已被人抢先注册啦,账户创建失败了呢!');
console.log('按回车键继续~~');
readline.question('');
}
break;
}
// 退出
case 0: {
console.log('系统已退出,感谢使用!');
action = false;
break;
}
// 输入错误
default: {
console.log('输入有误!');
console.log('按回车键继续~~');
readline.question('');
break;
}
}
}

 在多用户ATM机这个案例中,功能比较复杂的算是转账了。用面向对象编程思想来写,思路是比较清晰的。本案例用了ES6的class类来实现。

多用户ATM机(面向对象编程)的更多相关文章

  1. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  2. Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系

    Atitit 面向对象编程(OOP).面向组件编程(COP).面向方面编程(AOP)和面向服务编程(SOP)的区别和联系 1. 面向组件编程(COP) 所以,组件比起对象来的进步就在于通用的规范的引入 ...

  3. [.net 面向对象编程基础] (18) 泛型

    [.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检 ...

  4. 模拟ATM机银行系统

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

  5. JAVA的面向对象编程--------课堂笔记

    面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...

  6. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

  7. 学习面向对象编程OOP 第一天

    面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...

  8. MVC实战之排球计分软件(深入了解面向对象编程)

    在此篇博客之前,我已经写了一个实战系列的博客,虽然不太成熟但是相对比较实用,在这篇博客我将继续使用mvc编程此软件. 此篇博客会在一定的时间内完成,此次完成的软件的一个需求是提供给运动员的使用.我将在 ...

  9. 铁乐学python_day22_面向对象编程4

    以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/ 封装 [封装]隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 将变化隔离: 便于使用: 提高复用性: 提 ...

随机推荐

  1. Nginx简介及配置介绍

    一.什么是Nginx Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发 ...

  2. ubuntu tftp server config

    1.安装tftp-server sudo apt-get install tftpd-hpa sudo apt-get install tftp-hpa(如果不需要客户端可以不安装) tftp-hpa ...

  3. 聊聊“现在学习MFC有用吗?”

    我用MFC做了4年多,后来转到WPF也做了快5年.对于二者,不敢说精通,但应该算入门.结合自己经历,如果不考虑项目需求,我认为新手学习WPF或许更好点.有3点: 1)大家都知道最近几年Motorola ...

  4. 蓝桥杯 基础练习 BASIC-22 FJ的字符串

    基础练习 FJ的字符串   时间限制:1.0s   内存限制:512.0MB 问题描述 FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = ...

  5. [转载]Linux驱动-SPI驱动-概述

    转载地址http://blog.csdn.net/droidphone SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口, ...

  6. Windows 7 下将 Tomcat Java 程序设置为 Windows Service

    方法: Windows key + r -> Run dialog cmd -> console cd apache-tomcat-[version]/bin service.bat in ...

  7. Python内置:items()方法

    文章转载于:https://www.cnblogs.com/wushuaishuai/p/7738118.html(博主:IT技术随笔) #Python3中已取消iteritems()方法 描述 Py ...

  8. MySQL mysqldump备份与恢复

    1 用户权限 grant select,RELOAD,PROCESS,SUPER, REPLICATION CLIENT ON *.* TO 'bak'@'192.168.%' IDENTIFIED ...

  9. app自动更新(android)

    更新插件代码:https://github.com/shixy/UpdateApp 来源:http://aspoems.iteye.com/blog/1897300 检查更新的时候,通过指定的URL获 ...

  10. jQuery选择器整理

    最使用近工作中常用到jQuery,在过滤器的使用方面生疏,所以本文整理了些有关知识点,以便于自己查找方便,或为朋友们提供方便! 一.基本选择器 $("#test") 选取id为te ...