学习Java的时候练习写了一个ATM模拟系统(实现了ATM系统的一些基本功能):

Account.java


package itmeima;

public class Account {

private StringcardNumber;    //卡号

    private Stringname;          //姓名

    private Stringsex;          //性别

    private Stringpassword;      //密码

    private double balance;          //余额

    private double quotaMoney;      //取现额度

    public StringgetCardNumber() {

return cardNumber;

    }

public void setCardNumber(String cordNumber) {

this.cardNumber = cordNumber;

    }

public StringgetName() {

return name;

    }

public void setName(String name) {

this.name = name;

    }

public StringgetSex() {

return sex;

    }

public void setSex(String sex) {

this.sex = sex;

    }

public StringgetPassword() {

return password;

    }

public void setPassword(String password) {

this.password = password;

    }

public double getBalance() {

return balance;

    }

public void setBalance(double balance) {

this.balance = balance;

    }

public double getQuotaMoney() {

return quotaMoney;

    }

public void setQuotaMoney(double quotaMoney) {

this.quotaMoney = quotaMoney;

    }

}





ATMSystem.java


package itmeima;

//系统入口

import java.util.ArrayList;

import java.util.Random;

import java.util.Scanner;

public class ATMSystem {

public static void main(String[] args) {

// 2、创建一个集合对象,用于后期存入账户对象。

        ArrayList accounts =new ArrayList<>();

        // 3、展示系统欢迎页面

        System.out.println("=========欢迎您进入到ATM系统===============");

        while (true) {

System.out.println("1、登录账户");

            System.out.println("2、注册账户");

            System.out.println("请您选择操作:");

            Scanner sc =new Scanner(System.in);

            int command = sc.nextInt();

            switch (command){

case 1:

// 登录操作

                    login(accounts, sc);

break;

                case 2:

// 注册账户

                    register(accounts, sc);

break;

                default:

System.out.println("当前输入的操作指令有误");

            }

}

}

/**

    用户登录功能

    */

    private static void login(ArrayList accounts, Scanner sc) {

System.out.println("==================欢迎您进入到登录操作======================");

        if(accounts.size() >0){

while (true) {

System.out.println("请您输入登录的卡号:");

                String cardNumber = sc.next();

                // 2、根据卡号去集合中查询是否存在账户对象

                Account acc =getAccountByCardId(cardNumber, accounts);

                // 判断账户对象是否存在,存在说明卡号正确

                if(acc !=null){

while (true) {

// 3、判断密码是否正确

                        System.out.println("请您输入登录的密码:");

                        String passWord = sc.next();

                        if(acc.getPassword().equals(passWord)){

// 登录成功了!

                            System.out.println("欢迎你:" + acc.getName() +acc.getSex()+"进入系统,您可开始办理你的业务了!");

                            // 展示登录成功后的操作界面。

                            showCommand(sc, acc, accounts);

return;

                        }else {

System.out.println("您的密码不正确!");

                        }

}

}else {

System.out.println("卡号不存在,请重新确认!");

                }

}

}else {

System.out.println("当前系统无任何账户,请先注册再登录!");

        }

}

/**

    登录后展示的界面

    */

    private static void showCommand(Scanner sc, Account acc, ArrayList accounts) {

while (true) {

System.out.println("==================欢迎您进入到操作界面======================");

            System.out.println("1、查询");

            System.out.println("2、存款");

            System.out.println("3、取款");

            System.out.println("4、转账");

            System.out.println("5、修改密码");

            System.out.println("6、退出");

            System.out.println("7、注销账户");

            System.out.println("请您输入操作命令:");

            int command = sc.nextInt();

            switch (command) {

case 1:

// 查询账户信息展示

                    showAccount(acc);

break;

                case 2:

// 存款

                    depositMoney(acc,sc);

break;

                case 3:

// 取款

                    drawMoney(acc,sc);

break;

                case 4:

// 转账

                    transferMoney(acc, accounts, sc);

break;

                case 5:

// 修改密码

                    updatePassWord(acc, sc);

                    return; // 跳出当前操作的方法,最终回到首页

                case 6:

// 退出 回到首页

                    System.out.println("欢迎下次继续光临!!");

                    return; // 结束登录后的全部操作

                case 7:

// 注销账户

                    accounts.remove(acc); // 从集合对象中删除当前账户对象。

                    System.out.println("您的账户已经完成了销毁,您将不可以进行登录了!");

return;

                default:

System.out.println("您的操作命令有误!");

            }

}

}

/**

    修改当前账户对象的密码

    * @param acc

    */

    private static void updatePassWord(Account acc, Scanner sc) {

// 1、判断旧密码是否正确

        while (true) {

System.out.println("请您输入当前密码认证:");

            String passWord = sc.next();

            if(acc.getPassword().equals(passWord)){

while (true) {

// 2、输入新密码

                    System.out.println("请您输入新密码:");

                    String newPassWord = sc.next();

                    System.out.println("请您确认新密码:");

                    String okPassWord = sc.next();

                    // 3、比对两次密码是否一致

                    if(newPassWord.equals(okPassWord)){

acc.setPassword(okPassWord);

                        System.out.println("密码已经修改成功,请重新登录!");

return;

                    }else {

System.out.println("两次密码不一致!");

                    }

}

}else {

System.out.println("您输入的密码有误。请重新确认密码!");

            }

}

}

/**

    * 从当前账户对象中把金额转给其他账户对象。

    * @param acc

    * @param accounts

    * @param sc

    */

    private static void transferMoney(Account acc, ArrayList accounts, Scanner sc) {

// 1、判断自己的账户中是否有钱

        if(acc.getBalance() <=0){

System.out.println("没有余额,当前转账无法继续进行!");

return;

        }

// 2、判断总账户数量是否大于等于2个。

        if(accounts.size() >=2){

while (true) {

// 3、让当前用户输入对方的账号进行转账

                System.out.println("请您输入对方卡号:");

                String cardNumber = sc.next();

                // 4、根据卡号查询出集合中的账户对象

                Account otherAcc =getAccountByCardId(cardNumber, accounts);

                // 5、判断账户对象是否存在,而且这个账户对象不能是自己。

                if(otherAcc !=null){

// 6、判断当前账户是否是自己。

                    if(acc.getCardNumber().equals(otherAcc.getCardNumber())){

System.out.println("不能给自己账户转账!");

                    }else {

// 7、正式进入到转账逻辑了

                        String rs ="*" + otherAcc.getName().substring(1);//去姓取名

                        System.out.println("请您确认["+rs +"]的姓氏来确认!");

                        System.out.println("请您输入对方的姓氏:");

                        String preName = sc.next();

                        if(otherAcc.getName().startsWith(preName)){

// 认证通过

                            while (true) {

System.out.println("请您输入转账的金额(您最多可以转账:" + acc.getBalance() +"元):");

                                double money = sc.nextDouble();

                                if(money > acc.getBalance()){

System.out.println("余额不足,当前转账无法继续!");

                                }else {

// 开始转账

                                    acc.setBalance(acc.getBalance() - money); // 更新自己账户

                                    otherAcc.setBalance(otherAcc.getBalance() + money);

                                    System.out.println("您已经完成转账!您当前还剩余:" + acc.getBalance());

return;

                                }

}

}else {

System.out.println("您输入对方的信息有误!");

                        }

}

}else {

System.out.println("您输入的转账卡号不存在!");

                }

}

}else {

System.out.println("当前系统中没有其他账户可以转账,去注册一个账户吧!");

        }

}

private static void drawMoney(Account acc, Scanner sc) {

System.out.println("==================欢迎进入账户取款操作======================");

        // 1、判断账户的余额是否大于等于100

        double money = acc.getBalance();

        if(money >=100) {

while (true) {

// 2、输入取钱的金额

                System.out.println("请您输入取钱的金额:");

                double drawMoney = sc.nextDouble();

                // 3、判断当前取钱金额是超过了账户的余额

                if(drawMoney > money){

System.out.println("当前余额不足!当前余额是:" + money);

                }else {

// 4、判断取钱金额是否超过了当次限额

                    if(drawMoney > acc.getQuotaMoney()){

System.out.println("您当前取款金额超过了每次限额!");

                    }else {

// 更新账户余额

                        acc.setBalance(money - drawMoney);

                        System.out.println("您当前取钱完成,剩余余额是:" + acc.getBalance());

break;

                    }

}

}

}else {

System.out.println("您当前账户余额不足100元,请先存钱!");

        }

}

private static void depositMoney(Account acc, Scanner sc) {

System.out.println("==================欢迎进入账户存款操作======================");

        System.out.println("请您输入存款金额:");

        double money = sc.nextDouble();

        acc.setBalance(acc.getBalance() + money);

        showAccount(acc);

    }

private static void showAccount(Account acc) {

System.out.println("==================您当前账户详情信息如下======================");

        System.out.println("卡号:" + acc.getCardNumber());

        System.out.println("户主:" + acc.getName());

        System.out.println("余额:" + acc.getBalance());

        System.out.println("当次取现额度:" + acc.getQuotaMoney());

    }

/**

    开户功能

    */

    private static void register(ArrayList accounts, Scanner sc) {

System.out.println("==================欢迎您进入到开户操作======================");

        // 2、创建一个账户对象封装账户信息

        Account acc =new Account();

        // 1、录入用户账户信息

        System.out.println("请您输入账户名称:");

        String userName =sc.next();

        acc.setName(userName);

        while (true) {

System.out.println("请您选择性别:1.男  2.女");

            int select = sc.nextInt();

          /* switch (select){

case 1:

                    String gender="先生";

acc.setSex(gender);

case 2:

                    String gender1="女士";

acc.setSex(gender1);

default:

                    System.out.println("您输入的指令有误!");

}*/

            int t=0;

            if (select==1){

String gender="先生";

                acc.setSex(gender);

            }else if (select==2){

String gender1="女士";

                acc.setSex(gender1);

            }else {

System.out.println("您输入的指令有误!");

            }

System.out.println("请您输入账户密码:");

            String passWord =sc.next();

            System.out.println("请您输入确认密码:");

            String okPassWord =sc.next();

            if(okPassWord.equals(passWord)){

// 密码没有问题

                acc.setPassword(okPassWord);

            }else {

System.out.println("两次输入的密码不一致!");

            }

if ((select==1||select==2)&&okPassWord.equals(passWord)){

break;

            }else {

System.out.println("您输入的性别指令有误,或者两次密码不一致,请重新输入:");

            }

}

System.out.println("请您设置当次取现额度:");

        double quotaMoney = sc.nextDouble();

        acc.setQuotaMoney(quotaMoney);

        // 关键点:为当前账户生成一个随机的8位数字作为卡号,卡号不能与其他用户的卡号重复。

        String cardId =createCardId(accounts);

        acc.setCardNumber(cardId);

        // 3、把账户对象存入到集合容器对象中去

        accounts.add(acc);

        System.out.println("恭喜您,"+acc.getName()+ acc.getSex()+"您开户完成,您的卡号是:" + acc.getCardNumber());

    }

public static StringcreateCardId(ArrayList accounts){

while (true) {

String cardId ="";

            // 随机生成8个数字

            Random r =new Random();

            for (int i =1; i <=8 ; i++) {

cardId += r.nextInt(10);

            }

// 判断这个卡号是否重复:根据卡号去查询账户对象

            Account account =getAccountByCardId(cardId, accounts);

            if(account ==null){

return cardId;

            }

}

}

public static AccountgetAccountByCardId(String cardId, ArrayList accounts){

for (int i =0; i < accounts.size(); i++) {

Account acc = accounts.get(i);

            if(acc.getCardNumber().equals(cardId)){

return acc;

            }

}

return null;

    }

}

**参考自黑马程序员教程教学

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容