Java基础 练习 ATM机

创建Account类

public class Account {
    private String cardId;
    private String username;
    private char sex;
    private String password;
    private double money;
    private double limit;

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

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

    public void setUsername(String username) {
        this.username = username;
    }

    public char getSex() {
        return sex;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    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;
    }
}

其中 getusername 的返回值 被重写 增加了判断男女的后缀条件

char作为基本数据类型 可以 直接用 == 进行判断

编写ATM类 -  进入的欢迎界面

public class ATM {
    private ArrayList<Account> accounts = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);

    public void start() {
        while (true) {
            System.out.println("-------欢迎来到ATM系统------");
            System.out.println("请选择要办理的业务");
            System.out.println("1.登录");
            System.out.println("2.开户");
            int commend = sc.nextInt();
            switch (commend) {
                case 1:
                    login();
                    break;
                case 2:
                    creatAccount();
                    break;
                default:
                    System.out.println("您输入的数字有误,请重新输入");
            }
        }
    }
}

用户注册

private void creatAccount() {
        Account acc = new Account();
        System.out.println("---开户系统 ----");

        System.out.println("请输入您的用户名");
        String name = sc.next();
        acc.setUsername(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.nextDouble();
        acc.setLimit(limit);

        String cardid = creatNewCardId();
        acc.setCardId(cardid);

        accounts.add(acc);

        System.out.println("恭喜您," + acc.getUsername() + "开户成功,您的卡号是"+acc.getCardId());

    }

用户id 的随机生成

//    返回一个8位随机数字 - 且不能重复
    private String creatNewCardId() {
        while (true) {
            String id = "";
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                int num = r.nextInt(10);
                id += num;
            }
            Account acct = getAccountByCardId(id);
            if (acct == null) {
                return id;
            }
        }
    }

-- Random随机数生成的用法

判断用户是否已存在

private Account getAccountByCardId(String id) {
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if (acc.getCardId().equals(id)) {
                return acc;
            }
        }
        return null;//找不到
    }

用户登录

 private void login() {
        if(accounts.size()==0){
            System.out.println("系统中暂无账户");
            return;
        }
        System.out.println("----登录界面-----");
        while (true) {
            System.out.println("请输入您的卡号:");
            String cardid = sc.next();
            Account acc = getAccountByCardId(cardid);
            if (acc == null){
                System.out.println("您输入的账户不存在,请重新输入");
            }else{
                while (true) {
                    System.out.println("请输入您的密码");
                    String password = sc.next();
                    if(password.equals(acc.getPassword())){
                        System.out.println("恭喜您,登录成功");
                        LoginAccount = acc;
                        showUserCommend();
                        return;
                    }else{
                        System.out.println("密码输入错误,请重新输入");
                    }
                }
            }
        }
    }

用户登录后页面

private void showUserCommend() {
        while (true) {
            System.out.println(LoginAccount.getUsername()+"欢迎进入用户界面--");
            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:
                    depositMoney();
                    break;
                case 3:
                    drawMoney();
                    break;
                case 4:
                    transferMoney();
                    break;
                case 5:
                    updatePassword();
                    return;// 跳出并结束当前方法
                case 6:
                    System.out.println(LoginAccount.getUsername() + "您退出系统成功!");
                    return; // 跳出并结束当前方法
                case 7:
                    if(removeAccount()){
                        return;
                    }
                    break;
                default:
                    System.out.println("您当前选择的操作是不存在的,请确认~~");
            }
        }

    }

展示账户信息

  private void showLoginAccount() {
        System.out.println("==当前您的账户信息如下:==");
        System.out.println("卡号:" + LoginAccount.getCardId());
        System.out.println("户主:" + LoginAccount.getUsername());
        System.out.println("性别:" + LoginAccount.getSex());
        System.out.println("余额:" + LoginAccount.getMoney());
        System.out.println("每次取现额度:" + LoginAccount.getLimit());
    }

退出

case 6:
                    System.out.println(LoginAccount.getUsername() + "您退出系统成功!");
                    return; // 跳出并结束当前方法

存钱

  private void depositMoney() {
        System.out.println("---您已进入存款页面---");
        System.out.println("您当前的存款余额为:"+LoginAccount.getMoney());
        System.out.println("请输入您要存款的金额");
        double money = sc.nextDouble();
        LoginAccount.setMoney(LoginAccount.getMoney()+ money);
        System.out.println("存款成功,您当前的存款余额为:"+LoginAccount.getMoney());

    }

取钱

private void drawMoney() {
        double money = LoginAccount.getMoney();
        if(money < 100){
            System.out.println("您的余额小于100,无法取款");
            return;
        }

        while (true) {
            System.out.println("请输入您要取款的金额:");
            double m = sc.nextDouble();
            if(m > money){
                System.out.println("您的余额不足,当前余额为"+money+"请重新输入");
            }else {
                if(m>LoginAccount.getLimit()){
                    System.out.println("超出您设置的取款限额,您设定的取款限额为"+LoginAccount.getLimit()+"请重新输入");
                }else{
                    LoginAccount.setMoney(money-m);
                    System.out.println("取款"+m+"您当前的余额为"+LoginAccount.getMoney());
                    break;
                }
            }
        }
    }

转账

private void transferMoney() {
        //1.判断当前列表账户数是否大于2
        if(accounts.size()<2){
            System.out.println("当前账户数量小于2个,无法进行转账");
            return;
        }
        //2.判断当前账户是否有余额
        if(LoginAccount.getMoney()<=0){
            System.out.println("您的账户没钱,别转账了吧");
            return;
        }
        //3.开始转账
        while (true) {
            System.out.println("请输入你要转账的卡号:");
            String cardId = sc.next();
            //3.1判断转账卡号是否存在
            Account acc = getAccountByCardId(cardId);
            if(acc == null){
                System.out.println("您的卡号信息输入有误,请重新输入:");
            }else{
                //3.2进行名称验证
                String name = "*"+ acc.getUsername().substring(1);
                System.out.println("请补充完整姓名信息:"+name);
                String preName = sc.next();
                if(acc.getUsername().startsWith(preName)){
                    while (true) {
                        //3.3姓名验证成功,开始转账
                        System.out.println("请输入您要转账的金额:");
                        double v = sc.nextDouble();
                        //3.4判断金额是否超出当前余额
                        if(v>LoginAccount.getMoney()){
                            System.out.println("您要转的钱超出余额,您当前余额为:"+LoginAccount.getMoney()+"请重新输入");
                        }else{
                            //3.5进行转账
                            LoginAccount.setMoney(LoginAccount.getMoney()-v);
                            acc.setMoney(acc.getMoney()+v);
                            System.out.println("转账成功,您当前的余额为"+LoginAccount.getMoney());
                            return;
                        }
                    }
                }
                else {
                    System.out.println("您输入的姓氏有误,请重新输入");
                }
            }
        }
    }

修改密码

private void updatePassword() {
        System.out.println("---修改密码界面---");
        System.out.println("请输入您当前的登录密码");
        String pw = sc.next();
        if(pw.equals(LoginAccount.getPassword())){
            while (true) {
                System.out.println("请输入您要更新的密码");
                String npw= sc.next();
                System.out.println("请再次输入您要更新的密码");
                String oknpw= sc.next();
                if(oknpw.equals(npw)){
                    LoginAccount.setPassword(oknpw);
                    System.out.println("密码修改成功,请重新登录");
                    return;
                }else{
                    System.out.println("输入的两次密码不一致,请重新输入");
                }
            }
        }else {
            System.out.println("当前密码输入错误,无法修改密码");
            return;
        }
    }

注销账户

private boolean removeAccount() {
        System.out.println("---进入销户页面---");
        System.out.println("请问您确认要销户吗?y/n");
        String a = sc.next();
        if(a.equals("y")){
            //判断账户当前是否还有余额
            if(LoginAccount.getMoney()>0){
                System.out.println("您的账户当前还有余额,无法进行销户处理");
                return false;
            }else{
                accounts.remove(LoginAccount);
                return true;
            }
        }else{
            System.out.println("您的账号已保留");
            return false;
        }
    }

问题点:

Scanner的用法:

random的用法:

 

 == 和 equals的使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值