J014_ATM系统

需求描述

用Java实现一个ATM系统,用于实现存款,取款、转账、修改密码等操作。

系统欢迎页面展示如下:

系统能够实现的功能有下面7种:

代码实现

Test类

package com.itheima.atm;

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

        atm.start();
    }
}

Account类

package com.itheima.atm;

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

ATM类

package com.itheima.atm;

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

public class ATM {
    ArrayList<Account> accounts = new ArrayList<>();
    Scanner sc = new Scanner(System.in);
    //记录当前登录的账户
    private Account loginAcc;

    //启动ATM机,进入ATM欢迎界面
    public void start(){
        while (true) {
            System.out.println("------欢迎您进入到了ATM系统------");
            System.out.println("1-用户登录");
            System.out.println("2-用户开户");
            System.out.println("3-退出");
            System.out.println("请输入您需要的操作:");

            int command = sc.nextInt();
            switch (command){
                case 1:
                    //用户登录
                    login();
                    break;
                case 2:
                    //用户开户
                    createAccount();
                    break;
                case 3:
                    //退出ATM系统
                    System.out.println("欢迎下次再来");
                    return;
                default:
                    System.out.println("您输入的命令不正确,请重新输入");
                    break;
            }
        }
    }

    //完成用户登录
    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 = getAccountByCardID(cardId);
            //判断用户输入的账户是否存在
            if (acc == null) {
                System.out.println("您输入的卡号不存在,请确认~~");
            } else {
                while (true) {
                    System.out.println("请您输入您的密码:");
                    String password = sc.next();
                    //如果密码正确
                    if (password.equals(acc.getPassWord())) {
                        loginAcc = acc;
                        System.out.println("恭喜您," + acc.getUserName() + "登录成功,您的卡号是:" + acc.getCardId());

                        //展示登录后的操作界面
                        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-注销当前账户");
            System.out.println("请选择:");
            int command = sc.nextInt();
            switch (command){
                case 1:
                    //查询账户信息
                    showLoginAccount();
                    break;
                case 2:
                    //存款
                    dipositMoney();
                    break;
                case 3:
                    //取款
                    drawMoney();
                    break;
                case 4:
                    //转账
                    transforMoney();
                    break;
                case 5:
                    //修改密码
                    modifyPassWord();
                    return;
                case 6:
                    //退出
                    System.out.println(loginAcc.getUserName() + "欢迎下次再来!!!");
                    return;
                case 7:
                    //注销当前账户
                    if (deleteAccount()) {
                        return;
                    }
                    break;
                default:
                    System.out.println("您输入的命令有误,请重新输入!!!");
            }
        }
    }

    //修改密码
    private void modifyPassWord() {
        System.out.println("您接下来进行修改密码操作!!!");

        while (true) {
            //提醒用户认证当前密码
            System.out.println("请您输入旧的密码:");
            String passWord = sc.next();

            //判断输入密码与旧密码是否一致
            if (loginAcc.getPassWord().equals(passWord)) {
                while (true) {
                    //开始修改密码
                    System.out.println("请输入新密码:");
                    String newPassWord = sc.next();

                    //确认新密码
                    System.out.println("请确认新密码:");
                    String okPassWord = sc.next();

                    //判断两次输入密码是否一致
                    if (newPassWord.equals(okPassWord)) {
                        loginAcc.setPassWord(okPassWord);
                        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) {
                    System.out.println("你当前账户中有钱,无法销户!!!");
                    return false;
                } else {
                    //确认销户
                    accounts.remove(loginAcc);
                    System.out.println("销户成功!!!");
                    return true;
                }
            default:
                System.out.println("保留您的账户!!!");
                return false;
        }
    }

    //转账
    private void transforMoney() {
        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();

            //判断卡号是否存在
            Account acc = getAccountByCardID(cardId);
            if (acc != null) {
                //卡号存在,认证对方账户的姓氏
                String name = "*" + loginAcc.getUserName().substring(1);
                System.out.println("请您输入【" + name + "】的姓:");
                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("转账成功");
                            return;
                        } else {
                            System.out.println("您余额不足,当前最多可转金额是:" + loginAcc.getMoney());
                        }
                    }
                } else {
                    System.out.println("您输入的姓氏有误,请确认!!!");
                }

            } else {
                System.out.println("您输入的卡号不存在,请确认!!!");
            }
        }
    }

    //取款
    private void drawMoney() {
        System.out.println("您接下来将进行取钱操作!!!");
        //判断账户金额是否大于等于100元,如果大于等于100元就能取,否则无法取款
        if (loginAcc.getMoney() < 100) {
            System.out.println("您的余额不足100元,不允许取款!!!");
            return;
        }

        while (true) {
            System.out.println("请输入您想要的取款金额:");
            double money = sc.nextDouble();

            //判断要取的金额是否小于等于账户金额,如果小于等于就能取,否则余额不足
            if (loginAcc.getMoney() > money) {
                //判断是否达到了取现额度,如果达到了取现额度,重新输入取现金额,否则取现成功
                if (loginAcc.getLimit() >= money) {
                    loginAcc.setMoney(loginAcc.getMoney() - money);
                    System.out.println("取款成功,当前余额是:" + loginAcc.getMoney());
                    break;
                } else {
                    System.out.println("您当前取款金额已达到了取现额度,请确认!!!当前取现额度为:" + loginAcc.getLimit());
                }
            } else {
                System.out.println("您的账户余额不足!!!当前余额是:" + loginAcc.getMoney());
            }
        }
    }


    //存款
    private void dipositMoney() {
        System.out.println("您接下来将进行存钱操作!!!");
        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.getCardId());
        System.out.println("户主:" + loginAcc.getUserName());
        System.out.println("性别:" + loginAcc.getSex());
        System.out.println("余额:" + loginAcc.getMoney());
        System.out.println("每次取现额度:" + loginAcc.getLimit());
    }


    //开户功能
    private void createAccount(){
        System.out.println("------欢迎进入开户系统------");
        //1、创建一个账户对象
        Account acc = new Account();

        //2、需要用户输入自己的账户信息,将账户信息封装在第一步创建的账户对象中
        //输入姓名
        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 (okpassword.equals(password)){
                acc.setPassWord(okpassword);
                break;
            } else {
                System.out.println("您两次输入的密码不一致,请您重新输入!!");
            }
        }

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

        //系统为用户自动生产卡号,用8位数字表示,且不能与其他账户的卡号重复
        String newCard = createCardId();
        acc.setCardId(newCard);

        //3、将账户对象存放到ATM的账户中
        accounts.add((acc));
        System.out.println("恭喜您" + acc.getUserName() + "开户成功,您的卡号是:" + acc.getCardId());
    }

    //系统为开户用户自动生成8位数字的卡号,且与其他卡号不重复
    private String createCardId() {
        while (true) {
            //定义一个变量,记录生成的卡号
            String cardId = "";
            Random r = new Random();

            //定义一个循环,随机生成8位数字
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10);
                cardId += data;
            }

            //判断生成的卡号在所有账户中有没有重复的,没有重复才可以返回,有重复需要重新生成没有重复的卡号
            Account acc = getAccountByCardID(cardId);
            if (acc == null) {
                //说明卡号没重复,可以返回
                return cardId;
            }
        }
    }

    //根据卡号查询账户返回
    private Account getAccountByCardID(String cardID){
        //遍历账户
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            //判断账户acc中的卡号是否是我们要找的卡号
            if (cardID.equals(acc.getCardId())) {
                return acc;
            }
        }
        //查无此类账户,该卡号不存在
        return null;
    }
}

非常感谢您的提问!以下是一个基于 Java 的学生 ATM 信息管理系统的示例代码: ``` import java.util.Scanner; public class StudentATM { public static void main(String[] args) { // 创建一个 Scanner 对象,用于接收用户输入 Scanner scanner = new Scanner(System.in); // 在程序启动时,提示用户输入初始密码 System.out.print("请输入初始密码:"); String password = scanner.nextLine(); // 定义一个数组,用于存储学生信息 String[][] students = new String[][] { { "1001", "张三", "男", "18", "计算机科学与技术" }, { "1002", "李四", "女", "19", "软件工程" }, { "1003", "王五", "男", "20", "信息安全" } }; // 进入主循环 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.print("请输入操作编号:"); int option = scanner.nextInt(); scanner.nextLine(); switch (option) { case 1: { // 查询学生信息 System.out.print("请输入学生 ID:"); String id = scanner.nextLine(); int index = findStudentIndex(students, id); if (index == -1) { System.out.println("找不到该学生!"); } else { printStudentInfo(students[index]); } break; } case 2: { // 修改学生信息 System.out.print("请输入学生 ID:"); String id = scanner.nextLine(); int index = findStudentIndex(students, id); if (index == -1) { System.out.println("找不到该学生!"); } else { System.out.print("请输入修改后的姓名:"); String name = scanner.nextLine(); System.out.print("请输入修改后的性别:"); String gender = scanner.nextLine(); System.out.print("请输入修改后的年龄:"); String age = scanner.nextLine(); System.out.print("请输入修改后的专业:"); String major = scanner.nextLine(); students[index][1] = name; students[index][2] = gender; students[index][3] = age; students[index][4] = major; System.out.println("修改成功!"); } break; } case 3: { // 添加学生信息 System.out.print("请输入学生 ID:"); String id = scanner.nextLine(); int index = findStudentIndex(students, id); if (index != -1) { System.out.println("该学生已存在!"); } else { System.out.print("请输入姓名:"); String name = scanner.nextLine(); System.out.print("请输入性别:"); String gender = scanner.nextLine(); System.out.print("请输入年龄:"); String age = scanner.nextLine(); System.out.print("请输入专业:"); String major = scanner.nextLine(); String[] newStudent = new String[] { id, name, gender, age, major }; students = addStudent(students, newStudent); System.out.println("添加成功!"); } break; } case 4: { // 删除学生信息 System.out.print("请输入学生 ID:"); String id = scanner.nextLine(); int index = findStudentIndex(students, id); if (index == -1) { System.out.println("找不到该学生!"); } else { students = removeStudent(students, index); System.out.println("删除成功!"); } break; } case 5: { // 退出程序 System.out.println("谢谢使用,再见!"); return; } default: { System.out.println("无效的操作编号,请重新输入!"); } } } } /** * 查找指定 ID 的学生在数组中的下标 */ private static int findStudentIndex(String[][] students, String id) { for (int i = 0; i < students.length; i++) { if (students[i][0].equals(id)) { return i; } } return -1; } /** * 打印学生信息 */ private static void printStudentInfo(String[] student) { System.out.println("学号:" + student[0]); System.out.println("姓名:" + student[1]); System.out.println("性别:" + student[2]); System.out.println("年龄:" + student[3]); System.out.println("专业:" + student[4]); } /** * 在数组末尾添加一个学生并返回新数组 */ private static String[][] addStudent(String[][] students, String[] newStudent) { String[][] newStudents = new String[students.length + 1][5]; for (int i = 0; i < students.length; i++) { newStudents[i] = students[i]; } newStudents[students.length] = newStudent; return newStudents; } /** * 从数组中移除指定下标的学生并返回新数组 */ private static String[][] removeStudent(String[][] students, int index) { String[][] newStudents = new String[students.length - 1][5]; for (int i = 0, j = 0; i < students.length; i++) { if (i != index) { newStudents[j++] = students[i]; } } return newStudents; } } ``` 希望这个程序能够帮助您实现学生 ATM 信息管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值