博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多用户ATM机(面向对象编程)
阅读量:4325 次
发布时间:2019-06-06

本文共 6981 字,大约阅读时间需要 23 分钟。

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类来实现。

转载于:https://www.cnblogs.com/smuwgeg/p/9787803.html

你可能感兴趣的文章
Codeforces 1110D. Jongmah 动态规划
查看>>
android驱动在win10系统上安装的心酸历程
查看>>
优雅的程序员
查看>>
oracle之三 自动任务调度
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
Java Web 常用在线api汇总(不定时更新)
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
[Python设计模式] 第25章 联合国维护世界和平——中介者模式
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
基于Lua插件化的Pcap流量监听代理
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>