学习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;

    }

}

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

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