ATM管理系统--java

public class test {
  public static void main(String[] args) {
   ATM atm=new ATM();
     atm.start();
    }
}

测试类

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class ATM {
    private ArrayList<Account> account = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);
    private Account loginAcc;//记住登录后的用户账户

    public void start() { //启动ATM欢迎界面

        while (true) {
            System.out.println("====欢迎您使用ATM机====");
            System.out.println("1.用户登录");
            System.out.println("2.用户开户");
            System.out.println("请选择:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    //用户登录
                    login();
                    break;
                case 2:
                    //用户开户
                    createAccount();
                    break;
                default:
                    System.out.println("您输入的有误");
            }
        }
    }


    /**完成用户登录*/
    private void login() {
        System.out.println("====进入用户登录界面====");
        if (account.size() == 0) {
            System.out.println("当前系统无账户,请先开户");
            return;
        }
        while (true) {
            System.out.println("请您输入您的卡号");
            String ID = sc.next();
            //判断卡号是否正确
            Account acc = getAccountByCardID(ID);
            if (acc == null) {
                System.out.println("您输入的卡号有误,请重新输入");
            } else {
                while (true) {
                    System.out.println("请输入您的登录密码");
                    String password = sc.next();
                    if (acc.getPassWord().equals(password)) {
                        System.out.println("恭喜您,登录成功");
                        loginAcc = acc;
                        //展示登录成功后的业务界面
                        showUserCommand();
                        return;
                    } else {
                        System.out.println("您的密码有误,请重新输入");
                    }
                }
            }
        }
    }

    private void showUserCommand() {
        while (true) {
            System.out.println(loginAcc.getName() + "您可以办理如下业务");
            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:
                    //查询账户
                    showLoginAccount();
                    break;
                case 2:
                    //存款
                    deposiMoney();
                    break;
                case 3:
                    //取款
                    drawMoney();
                    break;
                case 4:
                    //转款
                    transferMoney();
                    break;
                case 5:
                    //密码修改
                    updatePassWord();
                    return;
                case 6:
                    //退出
  System.out.println(loginAcc.getName() + "您退出系统成功");
                    return;//结束并退出当前方法
                case 7:
                    //注销当前账户
                    if (deleteAccount()) {
                        //为真则销户成功
                        return;
                    }
                 //销户失败
                    break;
                default:
                    System.out.println("您输入的选项不存在,请重新输入");
            }
        }
    }
//修改密码
    private void updatePassWord() {
        System.out.println("请您输入旧密码");
        while (true) {
            String PassWord= sc.next();
            if (PassWord.equals(loginAcc.getPassWord())){
                //设置新密码
                while (true) {
                System.out.println("请您输入新密码");
                String newPassWord= sc.next();
                System.out.println("请您再次输入新密码");
                    String oknewPassWord= sc.next();
                    if (newPassWord.equals(oknewPassWord)){
                        loginAcc.setPassWord(newPassWord);
                        System.out.println("您的密码修改成功");
                        return;
                    }
                    else {
                        System.out.println("您两次输入的密码不一致,请重新输入");
                    }
                }
            }
            else {
                System.out.println("您输入的密码有误,请重新输入");
            }
        }
    }

    //销户操作
    private boolean deleteAccount()
    {
        System.out.println("请您确认是否销户Y/N");
        String command = sc.next();
        while (true) {
            switch (command)
            {
                case "Y":
                    if (loginAcc.getMoney() == 0)
                    {
                        account.remove(loginAcc);
                        System.out.println("销户成功");
                        return true;
                    }
                    else
                    {
                        System.out.println("销户失败,您账户还有余额未取出");
                        return false;
                    }
                case "N":
                    System.out.println("已取消销户");
                    return false;
                default:{
                    System.out.println("您输入的有误,请重新输入");
                }
            }
        }
    }




    //转账操作
    private void transferMoney() {
    //1.判断系统中有无两个以上的用户
        if (account.size()==1){
            System.out.println("当前系统中只有您一个账户,无法转账");
            return;
        }
        //2.判断账户是否有钱
        if (loginAcc.getMoney()==0){
            System.out.println("您的账户余额不足,无法进行转账业务");
        return;
        }
        //3.开始转账操作
        System.out.println("请您输入对方的卡号");
        while (true) {
            String ID= sc.next();
            //判断卡号是否正确
            Account acc=getAccountByCardID(ID);
            if (acc==null){
                System.out.println("您输入的卡号不存在,请重新输入");
            }
            else{
                String name= "*"+acc.getName().substring(1);//将姓氏换为*
                System.out.println(name);
                System.out.println("请您验证并输入对方姓氏");
                while (true) {
                    String preName= sc.next();
                    if (acc.getName().startsWith(preName)) {
                        System.out.println("验证成功,请输入需要转账的金额");
                        while (true) {
                            double money= sc.nextDouble();
                            if (money>loginAcc.getMoney()){
                                System.out.println("您的账户余额为"+loginAcc.getMoney()+"无法转账");
                                System.out.println("请重新输入需要转账的金额");
                            }
                            else {
                                loginAcc.setMoney(loginAcc.getMoney()-money);
                                System.out.println("转账成功,转账后的账户余额为:"+loginAcc.getMoney());
                            }
                        }
                    }
                    else{
                        System.out.println("验证失败,请重新输入");
                    }
                }
            }
        }
    }

    //取款操作
    private void drawMoney() {
    if (loginAcc.getMoney()<100){
        System.out.println("您当前的余额不足,无法取款");
        return;
 }
        System.out.println("请输入您需要的取款金额");
        while (true) {
            double money= sc.nextDouble();
            if (money>loginAcc.getMoney()){
                System.out.println("您的余额不足,取款失败");
                System.out.println("您当前的余额为"+loginAcc.getMoney());
                System.out.println("请重新选择取款金额");
            }
            else {
                if (money>loginAcc.getLimit()){
                    System.out.println("取款失败,您账户的限额为:"+loginAcc.getLimit());
                    System.out.println("请重新选择取款金额");
                }
                else {
                    loginAcc.setMoney(loginAcc.getMoney()-money);
                    System.out.println("恭喜您,取款"+money+"取款后的余额为"+loginAcc.getMoney());
                    System.out.println("请继续选择您需要办理的业务");
                    break;
                }
            }
        }
    }

    //存款操作
    private void deposiMoney() {
        System.out.println("请输入您的存钱金额");
        double money= sc.nextDouble();
        //更新账户余额
        loginAcc.setMoney(loginAcc.getMoney()+money);
        System.out.println("您本次存款的金额为:"+money+"存款后账户余额为:"+loginAcc.getMoney());
    }
//账户信息
    private void showLoginAccount(){
    System.out.println("您的账户信息如下:");
    System.out.println("卡号:"+loginAcc.getID());
    System.out.println("户主:"+loginAcc.getName());
    System.out.println("性别:"+loginAcc.getSex());
    System.out.println("余额:"+loginAcc.getMoney());
    System.out.println("每次取现额度:"+loginAcc.getLimit());
    System.out.println("请继续选择您需要办理的业务");
}
    /**完成用户开户*/
    private void createAccount() {
        System.out.println("即将进行用户开户操作");
        //1.创建一个账户对象,用于封装用户的开户信息
        Account acc = new Account();
        //2.让用户输入自己的开户信息
        System.out.println("请您设置您的账户名");
        String name = sc.next();
        acc.setName(name);
        while (true) {
            System.out.println("请您输入您的性别");
            char sex = sc.next().charAt(0);
            if (sex == '男' || sex == '女') {
                acc.setSex(sex);
                break;
            } else
                System.out.println("您输入的有误,只能输入”男“或者”女“");
        }
        while (true) {
            System.out.println("请您设置您的密码");
            String passWord = sc.next();
            System.out.println("请您再次确认您的密码");
            String okPassWord = sc.next();
            if (passWord.equals(okPassWord)) {
                acc.setPassWord(passWord);
                break;
            } else
                System.out.println("您两次输入的密码不同,请重新输入");
        }
        System.out.println("请您设置您的单次取现额度");
        double limit = sc.nextInt();
        acc.setLimit(limit);
        //系统为用户自动生成一个八位数的卡号
        String newCardID=createCardID();
        acc.setID(newCardID);

        //3.把这个账户对象存到账户集合中
        account.add(acc);
        System.out.println("恭喜您" + acc.getName() + ",开户成功,"+"您的卡号是"+acc.getID());
    }


    /**返回一个八位数字且不重复的卡号*/
    private String createCardID(){
        while (true) {
            //1.定义一个String变量记住卡号
            String cardID="";
            //2.循环八次随机数
            Random r=new Random();
            for (int i = 0; i < 8; i++) {
                int data=r.nextInt(10);//0-9
                cardID+=data;
            }
            //3.判断生成的卡号是否已经存在
            Account acc=getAccountByCardID(cardID);
            if(acc==null){
                return cardID;
            }
        }
    }
    private Account getAccountByCardID(String CardID){
        //遍历集合中的全部对象
        for (int i = 0; i < account.size(); i++)
        {
            Account acc=account.get(i);
            if(acc.getID().equals(CardID))
            {
            return acc;
            }
        }
        return null;
    }
}

ATM类 

public class Account {
    private String ID;//20713299卡号
    private String Name;//账户名
    private char sex;//性别
    private String passWord;//密码
    private double money;//余额
    private double limit;//单次限额
    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }


    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return Name+(sex=='男'?"先生":"女士");
    }

    public void setName(String name) {
        Name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }
}

账户类 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.无聊人.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值