Java学习09|ATM项目

目录

一、系统架构搭建、欢迎页设计

二、开户功能实现

三、登录功能实现

四、操作页展示、查询账户、退出账户

五、存款、取款功能实现

六、转账功能实现

七、销户功能实现

八、用户密码修改 

​九、实现代码


一、系统架构搭建、欢迎页设计

二、开户功能实现

三、登录功能实现

四、操作页展示、查询账户、退出账户

五、存款、取款功能实现

六、转账功能实现

七、销户功能实现

八、用户密码修改 

九、实现代码

Test.java

package com.itheima.ATM;

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

    }
}

Account.java

package com.itheima.ATM;

public class Account {
    private String cardId;
    private String userName;
    private String password;
    private char sex;
    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 String getPassword() {
        return password;
    }

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

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

ATM.java

package com.itheima.ATM;

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

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


    /** 启动ATM系统,展示欢迎界面 */
    public void start(){
        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:
                    creatAcount();
                    break;
                default:
                    System.out.println("您输入的命令不存在噢");
            }
        }
    }



    /** 用户登录 */

    private void login(){
        System.out.println("====用户登录====");

        if (accounts.size() == 0){
            System.out.println("当前系统没有任何账户,请先开户再登录噢");
            return;
        }

        while (true) {
            System.out.println("请输入账号卡号:");
            String cardId = sc.next();
            Account acc = getAccountById(cardId);
            if(acc == null){
                System.out.println("您输入的卡号不正确噢");
            }else{
                while (true) {
                    System.out.println("请输入您的密码:");
                    String passWord = sc.next();
                    if(acc.getPassword().equals(passWord)){
                        System.out.println(acc.getUserName()+",您登陆了您的卡号:"+ acc.getCardId());
                        loginACC = acc;
                        showUserCommand();
                        return;
                    }else{
                        System.out.println("您输入的密码不正确!!");
                    }
                }
            }
        }
    }


    /** 展示登录后的操作界面 */
     private void showUserCommand(){
         while (true) {
             System.out.println("===" + loginACC.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、注销当前账户");
             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(loginACC.getUserName() + "您退出系统成功!");
                     return;
                 case 7:
                     //销户
                     if(deleteAccount()){
                         return;
                     }
                     break;
                 default:
                     System.out.println("您输入的命令不对噢");
             }
         }


     }


    /** 修改密码 */
    private void updatePassWord() {
        System.out.println("===账户密码修改操作===");
        while (true) {
            System.out.println("请输入当前用户的密码:");
            String passWord = sc.next();
            if(loginACC.getPassword().equals(passWord)){
                while (true) {
                    System.out.println("请输入新的密码:");
                    String newPassWord1 = sc.next();
                    System.out.println("请再次输入新的密码:");
                    String newPassWord2 = sc.next();

                    if(newPassWord1.equals(newPassWord2)){
                        loginACC.setPassword(newPassWord1);
                        System.out.println("修改密码成功");
                        return;

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

                    }
                }
            }else{
                System.out.println("您输入的密码不正确!!!");
            }
        }
    }


    /** 销户 */
    private boolean deleteAccount() {
        System.out.println("===销户操作===");
        System.out.println("您真的要销户吗?y/n");
        String command = sc.next();
        switch (command){
            case "y":
                if (loginACC.getMoney() == 0){
                    // 可以销户了
                    accounts.remove(loginACC);
                    System.out.println("销户成功");
                    return true;
                }else{
                    System.out.println("您的账户还有余额,不可以销户!!!");
                    return false;
                }
            default:
                System.out.println("您的账户会被保留");
                return false;
        }
    }

    /** 转账 */
    private void transferMoney() {
        System.out.println("===用户转账===");
        if(accounts.size() < 2){
            System.out.println("当前系统里只有您一个账户,无法完成转账!!!");
            return;
        }
        if(loginACC.getMoney() == 0){
            System.out.println("您自己已经没钱了噢!!!");
            return;
        }

        while (true) {
            System.out.println("请输入对方卡号:");
            String cardId = sc.next();
            if (getAccountById(cardId) == null){
                System.out.println("您输入的卡号不正确噢!!!");
            }else {
                Account acc = getAccountById(cardId);
                String name = "*" + acc.getUserName().substring(1);
                System.out.println("您正在为" + name + "转账");
                while (true) {
                    System.out.println("请输入该用户的姓氏:");
                    String prename = sc.next();
                    if (acc.getUserName().startsWith(prename)){
                        //系统里账户至少两个,自己账户有钱,对方卡号、姓氏输入正确,可以开始转账了
                        while (true) {
                            System.out.println("请输入转账金额:");
                            Double money = sc.nextDouble();
                            if (loginACC.getMoney() >= money){

                                loginACC.setMoney(loginACC.getMoney() - money);
                                acc.setMoney(acc.getMoney() + money);
                                System.out.println("转账成功!!");
                                System.out.println("您的账户余额:" + loginACC.getMoney());
                                System.out.println("对方的账户余额:" + acc.getMoney());
                                return;

                            }else{
                                System.out.println("钱不够了啊,您现在最多转账:" + loginACC.getMoney());
                            }
                        }
                    }else{
                        System.out.println("姓氏输入错误!!!");
                    }
                }

            }
        }


    }


    /** 取钱 */
    private void drawMoney() {
        System.out.println("===取钱操作===");

        if(loginACC.getMoney()<100){
            System.out.println("当前账户余额不足100元,无法取钱");
            return;
        }

        while (true) {
            System.out.println("请输入取钱金额:");
            double money = sc.nextDouble();

            if(loginACC.getMoney() < money){
                System.out.println("当前账户余额不足,您的余额是:"+loginACC.getMoney());
            }else {
                if(loginACC.getLimit() < money){
                    System.out.println("超出取款限额");
                }else {
                    loginACC.setMoney(loginACC.getMoney() - money);
                    System.out.println("取钱" + money + "成功!您当前的余额是:" + loginACC.getMoney());
                    break;
                }
            }
        }

    }


    // 存钱
    private void depositMoney() {
        System.out.println("===存钱操作===");
        System.out.println("请输入存钱金额:");
        double money = sc.nextDouble();

        loginACC.setMoney(loginACC.getMoney() + money);
        System.out.println("存钱"+ money +"成功!您当前的余额是:" + loginACC.getMoney());
        return;

    }

    // 展示当前登录的账户信息
    private void showLoginAccount(){
        System.out.println("===当前您的账户信息如下:===");
        System.out.println("账户卡号:" + loginACC.getCardId());
        System.out.println("账户姓名:" + loginACC.getUserName());
        System.out.println("账户性别:" + loginACC.getSex());
        System.out.println("账户余额:" + loginACC.getMoney());
        System.out.println("账户额度:" + loginACC.getLimit());

    }



    /** 用户开户 */

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

        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 passWord1 = sc.next();
            System.out.println("请再次确认账户密码:");
            String passWord2 = sc.next();
            if( passWord1.equals(passWord2) ){
                acc.setPassword(passWord1);
                break;
            }else{
                System.out.println("您输入密码不一致!!!");
            }
        }

        System.out.println("请输入您的取现额度:");
        double limit = sc.nextDouble();
        acc.setLimit(limit);

        //为账户自动生成9位卡号,且不能和其他账户的卡号重复
        String cardId = creatCardId();
        acc.setCardId(cardId);

        accounts.add(acc);
        System.out.println(acc.getUserName() + "开户成功,您的卡号是:"+acc.getCardId());

    }

    //为账户自动生成9位卡号,且不能和其他账户的卡号重复
    private String creatCardId(){
        while (true) {
            String cardId = "";
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10);
                cardId += data;
            }
            if(getAccountById(cardId) == null){
                return cardId;
            }
        }
    }

    //根据卡号查找账户
    private Account getAccountById(String cardId){
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if(acc.getCardId().equals(cardId)){
                return acc;
            }
        }
        return null;
    }




}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值