Java中国银行系统ATM机自助实现登录、开户、存款、取款、转账、查询余额、修改预留手机号、注销账号等功能(Ziph)

@Java

最全功能的银行ATM机自助(严谨)

大家好,我是Ziph!

此小项目的体会真是,为了实现功能是不择手段啊,为了实现和完善功能,码了一遍又一遍(找Bug),测试了N多次功能,测试好了发个博。OK,点个赞呗!哈哈,废话少说向下看吧!

题目:

中国银行系统ATM机自助实现登录、开户、存款、取款、转账、查询余额、修改预留手机号、注销账号等功能

此小项目主要是运用了增删改查知识、循环结构知识、数组的扩容、数组的元素移动、函数中的代参和函数与函数之间的互相调用等知识

因为是个简单的小项目没有具体划分多个包,请见谅!

大体分为三部分:User类(用户类)、TestBank(测试类)和Bank(逻辑运算核心)主体类

每个部分都标有注释,需要哪一部分直接找,不废话直接贴代码:

User类(用户类)

//类的组成:私有属性、公共访问方法、无参构造方法
//实体类:Entity,作用:存储数据

public class User {
    private int cardNo;                 //卡号
    private String identity;            //身份证号码
    private String userName;            //姓名
    private String passWord;            //密码
    private String phone;               //预留手机号
    private double balance;             //余额

    public User() {
    }

    public User(int cardNo, String identity, String userName, String passWord, String phone, double balance) {
        this.cardNo = cardNo;
        this.identity = identity;
        this.userName = userName;
        this.passWord = passWord;
        this.phone = phone;
        this.balance = balance;
    }

    public int getCardNo() {
        return cardNo;
    }

    public void setCardNo(int cardNo) {
        this.cardNo = cardNo;
    }

    public String getIdentity() {
        return identity;
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}

Bank(逻辑运算核心)主体类

import java.util.Arrays;
import java.util.Scanner;

//中国银行类
public class Bank {
    Scanner input = new Scanner(System.in);

    //保存已注册的用户数据
    User[] users = new User[3];

    int cardNo = 4;//卡号
    int size = 3;//数组中用户下标

    //初始方法(如果存在一些程序起始时必须要执行的代码,则写入初始化方法initial中)
    public Bank() {

        User user = new User();
        user.setCardNo(1);
        user.setIdentity("131000199811111234");
        user.setUserName("Ziph");
        user.setPassWord("12345678");
        user.setPhone("12345670000");
        user.setBalance(1000.00);
        users[0] = user;

        users[1] = new User();
        users[1].setCardNo(2);
        users[1].setIdentity("131000111111114567");
        users[1].setUserName("小王");
        users[1].setPassWord("12345678");
        users[1].setPhone("12345670001");
        users[1].setBalance(2000.00);

        users[2] = new User(3, "131000199811115678"
                , "小明", "12345678"
                , "12345670002", 3000.00);
    }

    //登录
    public void login() {
        System.out.print("请输入卡号:");
        int no = input.nextInt();
        System.out.print("请输入密码(8~16位):");
        String pwd = input.next();
        User check = loginCheck(no, pwd);

        if (check != null) {
            this.showMenu(check);
        } else {
            System.out.println("用户名或密码错误!请重新输入!");
            this.login();
        }
    }

    //开户
    public void register() {
        System.out.print("请输入姓名:");
        String userName = input.next();
        String identity;
        do {
            System.out.print("请输入身份证号码:");
            identity = input.next();
        } while (identity.length() != 18);
        String phone;
        do {
            System.out.print("请输入预存手机号码:");
            phone = input.next();
        } while (phone.length() != 11);
        String passWord;
        do {
            System.out.print("请输入密码:");
            passWord = input.next();
        } while (passWord.length() < 8 || passWord.length() > 16);//密码8~16位
        double money;
        do {
            System.out.print("请输入预存金额(大于等于10元):");
            money = input.nextInt();
        } while (money < 10);


        User user = new User();
        user.setCardNo(cardNo);
        user.setUserName(userName);
        user.setIdentity(identity);
        user.setPhone(phone);
        user.setPassWord(passWord);
        user.setBalance(money);
        System.out.println("开户成功!您的卡号为:" + cardNo);
        cardNo++;
        //将该对象存储到users数组中
        //扩容判断
        if (size > (users.length - 1)) {
            User[] newUsers = Arrays.copyOf(users, size + 1);
            users = newUsers;
            users[size] = user;
        }
        size++;
    }

    //登录验证
    public User loginCheck(int no, String pwd) {
        for (int i = 0; i < size; i++) {
            //验证卡号、密码
            if (users[i] != null) {//非空判断
                if ((no == users[i].getCardNo() && pwd.equals(users[i].getPassWord()))) {
                    return users[i];
                }
            }
        }
        return null;
    }

    //转账验证
    public User transferCheck(int no) {
        for (int i = 0; i < users.length; i++) {
            //校验卡号
            if (users[i] != null) {
                if (no == users[i].getCardNo()) {
                    return users[i];
                }
            }
        }
        return null;
    }

    //欢迎页面菜单
    public void welcomeMenu() {
        System.out.println("-------欢迎使用中国建设银行ATM自助服务-------");
        System.out.println("---      1.登录    2.开户    0.退出     ---");
        System.out.println("------------------------------------------");
        System.out.print("请输入操作编码:");
        int choice = input.nextInt();
        switch (choice) {
            case 1:
                this.login();
                break;
            case 2:
                this.register();
                this.welcomeMenu();
                break;
            case 0:
                exit();
            default:
                System.out.println("输入有误!请重新输入!");
        }
    }

    //退出
    public void exit() {
        System.exit(0);
    }

    //显示菜单
    public void showMenu(User user) {
        int choice;
        do {
            System.out.println("-------------------------欢迎使用中国建设银行ATM自助服务-------------------------");
            System.out.println("1.存款  2.取款  3.转账  4.查询余额  5.修改密码  6.修改预留手机号  7.注销账户  0.退出");
            System.out.println("------------------------------------------------------------------------------");
            System.out.print("请输入操作编码:");
            choice = input.nextInt();
            switch (choice) {
                case 1:
                    this.deposit(user);
                    break;
                case 2:
                    this.withdraw(user);
                    break;
                case 3:
                    this.transfer(user);
                    break;
                case 4:
                    this.inquire(user);
                    break;
                case 5:
                    this.changePwd(user);
                    break;
                case 6:
                    this.changePhone(user);
                    break;
                case 7:
                    this.cancel(user);
                    this.welcomeMenu();
                    break;
                case 0:
                    System.out.println("谢谢使用!");
                    //结束该方法,执行该方法以下的语句
                    this.welcomeMenu();
                default:
                    System.out.println("输入有误!请重新输入!");
            }
        } while (true);
    }

    //取款
    public void withdraw(User user) {
        System.out.print("请输入取款金额:");
        double money = input.nextDouble();
        if (money < users[0].getBalance()) {
            user.setBalance(user.getBalance() - money);
            System.out.println("取款成功!当前余额为:" + user.getBalance() + "元!");
        } else {
            System.out.println("余额不足!");
        }
    }

    //存款
    public void deposit(User user) {
        System.out.print("请输入存款金额:");
        double money = input.nextDouble();
        user.setBalance(user.getBalance() + money);
        System.out.println("存款成功!");
    }

    //转账
    public void transfer(User user) {
        System.out.print("请输入卡号:");
        int no = input.nextInt();
        User check = transferCheck(no);
        //对卡号校验
        if (check != null) {
            System.out.print("请输入转账金额:");
            Double money = input.nextDouble();
            if (user.getBalance() > money) {
                user.setBalance(user.getBalance() - money);
                for (int i = 0; i < size; i++) {
                    if (users[i].getCardNo() == no) {
                        users[i].setBalance(users[i].getBalance() + money);
                    }
                }
                System.out.println("转账成功!");
            } else {
                System.out.println("余额不足!");
            }
        } else {
            System.out.println("输入的卡号有误!");
        }
    }

    //查询余额
    public void inquire(User user) {
        System.out.println("账户余额为:" + user.getBalance() + "元!");
    }

    //修改密码
    public void changePwd(User user) {
        String newPwd1;
        do {
            System.out.print("请输入8~16位新密码:");
            newPwd1 = input.next();
        } while (newPwd1.length() < 8 || newPwd1.length() > 16);
        System.out.print("请再次输入新密码:");
        String newPwd2 = input.next();
        if (newPwd1.equals(newPwd2)) {
            user.setPassWord(newPwd2);
            System.out.println("修改成功!");
        } else {
            System.out.println("两次密码输入不同!");
        }
    }

    //修改预留手机号
    public void changePhone(User user) {
        System.out.print("请输入正确的原预留手机号:");
        String oldPhone = input.next();
        if (oldPhone.equals(user.getPhone())) {
            String newPhone;
            do {
                System.out.print("请输入正确的新手机号:");
                newPhone = input.next();
            } while (newPhone.length() != 11);
            user.setPhone(newPhone);
            System.out.println("预留手机号修改成功!");
        } else {
            System.out.println("原预留手机号不正确!");
        }
    }

    //注销账户
    public void cancel(User user) {
        int index = size + 1;
        for (int i = 0; i < size; i++) {
//            size不需要非空判断
//            if (users[i] != null) {
            if (users[i] == user) {
                index = i;
                break;
            }
//            }
        }
        //移动该元素之后的每个元素
        for (int i = index; i < size - 1; i++) {
            users[i] = users[i + 1];
        }
        size--;
        System.out.println("注销成功!");
    }
}

TestBank(测试类)

//银行案例的测试类

public class TestBank {
    public static void main(String[] args) {
        Bank bank = new Bank();//创建了一家中国银行网点
        bank.welcomeMenu();
    }
}

执行结果:

注意:第一张执行结果证明登录、取款、存款和查询余额没有问题
在这里插入图片描述
第二张执行结果修改密码、修改预留手机号正确
在这里插入图片描述
第三张执行结果证明转账功能OK(退出账户是0,我注销是为了第四张执行结果看是否还有1卡用户)
在这里插入图片描述
第五张执行结果证实了注销账户有效(刚才修改了密码登录过没有问题,注销后没有了账户登录失败)在这里插入图片描述
第六张执行结果那就是开户(输入的数值不符合实际,主要是为了证实控制号码的位数,请谅解!)
在这里插入图片描述

为了证实我自己的功能实现,只能贴了这么多图。看到最后的全是人才呀!哈哈。 不开玩笑了,谢谢大家!有错误请提出!!!请提出!

知识点持续更新…

有问题求留言回复!

拜拜

发布了17 篇原创文章 · 获赞 33 · 访问量 8194

猜你喜欢

转载自blog.csdn.net/weixin_44170221/article/details/104253055
今日推荐