Java实现银行ATM系统项目

目录

 系统准备、首页设计

用户首页功能的实现

用户开户功能的实现 

用户登录功能实现 

用户操作页设计、查询账户、退出账户等功能

用户存款功能实现

用户取款功能实现

用户转账功能实现

用户修改密码和销户功能实现

完整代码

技术点分析
面向对象编程:
    每个用户账户都是一个对象:所以需要设计账户类Account用于创建账户对象封装账户信息
使用集合容器:
    系统需要提供一个容器用于存储这些账户对象的信息,选择用ArrayList集合
程序流程控制:
    结合分支、循环、跳转关键词等相关操作控制程序的业务逻辑
使用常见的API:
    登录信息比较,业务数据的分析,处理等都需要用到String等常用API解决

 系统准备、首页设计

package com.deng.hello;

/*账户类
* */
public class Account {
    private String carId;//卡号
    private String userName;//账户
    private String passWord;//密码
    private double money;//余额
    private double quotaMoney;//取款额度

    public Account() {
    }

    public Account(String carId, String userName, String passWord, double quotaMoney) {
        this.carId = carId;
        this.userName = userName;
        this.passWord = passWord;
        this.money = money;
        this.quotaMoney = quotaMoney;
    }

    public String getCarId() {
        return carId;
    }

    public void setCarId(String carId) {
        this.carId = carId;
    }

    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 double getMoney() {
        return money;
    }

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

    public double getQuotaMoney() {
        return quotaMoney;
    }

    public void setQuotaMoney(double quotaMoney) {
        this.quotaMoney = quotaMoney;
    }
}
准备内容分析:
    每个用户的账户信息都是一个对象,需要提供账户类
    需要准备一个容器,用于存储系统全部账户对象信息
    首页只需包含:登录和注册两个功能
实现步骤:
    定义账户类,用于后期创建账户对象封装用户的账户信息
    账户类中的信息至少需要包含(卡号、姓名、密码、余额、取款额度)
    需要准备一个ArrayList的集合,用于存储系统用户的账户对象
    需要展示首页包含的2个功能:开户功能、登录账户

用户首页功能的实现

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

public class Test {
    public static void main(String[] args) {
        //准备账户信息存储的对象集合
        ArrayList<Account> accounts = new ArrayList<>();
        //首页功能实现
        showMain(accounts);

    }

    public static void showMain(ArrayList<Account> accounts) {
        System.out.println("============欢迎进入首页=============");
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入您要进行的操作:");
            System.out.println("1、登录");
            System.out.println("2、开户");
            System.out.println("请输入您的指令:");
            int command = sc.nextInt();
            switch (command){
                case 1:
                    //登录
                    break;
                case 2:
                    //开户
                    break;
                default:
                    System.out.println("您输入的指令有误!");
                    break;
            }
        }

    }
}

用户开户功能的实现 

用户开户功能的实现
    定义方法完成开户
    键盘录入姓名、密码、确认密码(保证两次密码一致)
    生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号是唯一的)
    创建Account账户类对象用于封装账户信息(姓名、密码、卡号等)
    吧Account账户类对象存入集合accounts中
/**
     * 开户功能实现
     *
     * @param accounts
     * @param sc
     */
    public static void register(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("=============用户开户功能=============");
        String password;
        System.out.println("请输入您的开户名:");
        String name = sc.next();
        while (true) {
            System.out.println("请输入您的开户密码:");
            password = sc.next();
            System.out.println("请再次确认您的密码:");
            if (password.equals(sc.next())) {
                break;
            } else {
                System.out.println("两次输入的密码不一致!");
            }
        }
        //系统生成用户卡号,8位数字,账户id唯一
        String Id = createCarId(accounts);

        System.out.println("请您输入单次取款额度:");
        double quotaMoney = sc.nextDouble();

        //将用户的信息封装成对象放进集合
        //Account(String carId, String userName, String passWord, double quotaMoney)
        accounts.add(new Account(Id, name, password, quotaMoney));
        System.out.println("恭喜您开户成功!您的卡号是:" + Id);
    }

用户登录功能实现 

用户登录功能实现
    定义方法
    让用户键盘输入卡号,根据卡号查询账户对象
    如果没有找到账户对象,说明卡号不存在,提示继续输入卡号
    如果找到账户对象,说明卡号存在,继续输入密码
    如果密码不正确,提示继续输入密码
    如果密码正确,提示登录成功
/**
     * 登录功能的实现
     *
     * @param accounts
     * @param sc
     */
    public static void login(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("============登录页面=============");
        //先判断系统中是否有账户的存在
        if (accounts.size()==0){
            System.out.println("当前系统不存在账户,请先注册一个吧~~~");
            return;//直接结束方法
        }
        while (true) {
            System.out.println("请输入卡号:");
            String Id = sc.next();
            Account account = getAccountByCarId(accounts, Id);//查询卡号,返回账户对象
            //判断卡号是否正确
            if (account!=null){
                //判断密码是否正确
                while (true) {
                    System.out.println("请输入密码:");
                    if (account.getPassWord().equals(sc.next())){
                        System.out.println("登录成功!");
                    }
                    else {
                        System.out.println("密码错误!");
                    }
                }
            }
            else {
                System.out.println("当前卡号不存在!");
            }
        }
    }

用户操作页设计、查询账户、退出账户等功能

用户操作页设计、查询账户、退出账户等功能
    用户登录成功后,需要进入用户操作页
    查询就是直接展示当前登录成功的账户对象信息
    退出账户是需要返回首页的
功能页面
    1、查询
    2、存款
    3、取款
    4、转账
    5、修改密码
    6、退出
    7、销户
package com.deng.hello;

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

public class Test {
    public static void main(String[] args) {
        //准备账户信息存储的对象集合
        ArrayList<Account> accounts = new ArrayList<>();
        //首页功能实现
        showMain(accounts);

    }

    public static void showMain(ArrayList<Account> accounts) {
        System.out.println("============欢迎进入首页=============");
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入您要进行的操作:");
            System.out.println("1、登录");
            System.out.println("2、开户");
            System.out.println("请输入您的指令:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    //登录
                    login(accounts, sc);
                    break;
                case 2:
                    //开户
                    register(accounts, sc);
                    break;
                default:
                    System.out.println("您输入的指令有误!");
                    break;
            }
        }
    }

    /**
     * 登录功能的实现
     *
     * @param accounts
     * @param sc
     */
    public static void login(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("============登录页面=============");
        //先判断系统中是否有账户的存在
        if (accounts.size() == 0) {
            System.out.println("当前系统不存在账户,请先注册一个吧~~~");
            return;//直接结束方法
        }
        while (true) {
            System.out.println("请输入卡号:");
            String Id = sc.next();
            Account account = getAccountByCarId(accounts, Id);//查询卡号,返回账户对象
            //判断卡号是否正确
            if (account != null) {
                //判断密码是否正确
                while (true) {
                    System.out.println("请输入密码:");
                    if (account.getPassWord().equals(sc.next())) {
                        System.out.println("登录成功!");
                        //展示操作页面
                        showUserCommand(account, sc);//account是当前的账户对象
                        return;//继续结束方法
                    } else {
                        System.out.println("密码错误!");
                    }
                }
            } else {
                System.out.println("当前卡号不存在!");
            }
        }
    }

    /**
     * 功能页展示
     *
     * @param account
     */
    public static void showUserCommand(Account account, Scanner sc) {
        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.println("6、退出");
            System.out.println("7、销户");
            System.out.println("请输入您要进行的操作:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    //查询
                    showAccount(account);
                    break;
                case 2:
                    //存款
                    break;
                case 3:
                    //取款
                    break;
                case 4:
                    //转账
                    break;
                case 5:
                    //修改密码
                    break;
                case 6:
                    //退出
                    System.out.println("欢迎下次光临~~~");
                    return;//结束方法
                case 7:
                    //销户
                    break;
            }
        }
    }

    /**
     * 查询当前账户
     *
     * @param account
     */
    private static void showAccount(Account account) {
        System.out.println("=============当前账户信息============");
        System.out.println("账户名称:" + account.getUserName());
        System.out.println("卡号:" + account.getCarId());
        System.out.println("余额:" + account.getMoney());
        System.out.println("取款额度:" + account.getQuotaMoney());
    }

    /**
     * 开户功能实现
     *
     * @param accounts
     * @param sc
     */
    public static void register(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("=============用户开户功能=============");
        String password;
        System.out.println("请输入您的开户名:");
        String name = sc.next();
        while (true) {
            System.out.println("请输入您的开户密码:");
            password = sc.next();
            System.out.println("请再次确认您的密码:");
            if (password.equals(sc.next())) {
                break;
            } else {
                System.out.println("两次输入的密码不一致!");
            }
        }
        //系统生成用户卡号,8位数字,账户id唯一
        String Id = createCarId(accounts);

        System.out.println("请您输入单次取款额度:");
        double quotaMoney = sc.nextDouble();

        //将用户的信息封装成对象放进集合
        //Account(String carId, String userName, String passWord, double quotaMoney)
        accounts.add(new Account(Id, name, password, quotaMoney));
        System.out.println("恭喜您开户成功!您的卡号是:" + Id);
    }

    /**
     * 系统生成用户卡号
     *
     * @param accounts
     */
    public static String createCarId(ArrayList<Account> accounts) {
        Random r = new Random();
        while (true) {
            String numCar = "";
            //随机生成8位数字卡号
            for (int i = 0; i < 8; i++) {
                int num = r.nextInt(10);
                numCar += num;
            }
            //判断卡号是否唯一
            Account account = getAccountByCarId(accounts, numCar);
            if (account == null) {
                //证明卡号不重复
                return numCar;
            }
        }
    }


    /**
     * 根据卡号查询账户对象
     *
     * @param accounts
     * @param numCar
     */
    public static Account getAccountByCarId(ArrayList<Account> accounts, String numCar) {
        for (int i = 0; i < accounts.size(); i++) {
            if (accounts.get(i).getCarId().equals(numCar)) {
                return accounts.get(i);
            } 
        }
        return null;
    }
}

用户存款功能实现

存款就是拿当前的账户对象
然后让用户输入存款金额
调用setMoney方法将账户余额修改:当前账户对象.setMoney(存款金额)+ 余额
存钱后查询一下账户信息,确认是否存钱成功
/**
     * 存款功能实现
     * @param sc
     * @param account
     */
    public static void depositMoney(Scanner sc,Account account) {
        System.out.println("===============存款功能=================");
        System.out.println("请输入您要存款的金额:");
        double money = sc.nextDouble();
        //需要修改账户余额
        account.setMoney(account.getMoney()+money);
        //查询账户信息,确认是否存款成功
        showAccount(account);
    }

用户取款功能实现

取款先判断账户是否有钱
有钱则拿到自己的账户对象
然后让用户输入取款金额
判断取款是否超过取款额度,以及余额是否足够
满足要求则修改取款后的账户余额
/**
     * 取款功能的实现
     *
     * @param account
     * @param sc
     */
    public static void drawMoney(Account account, Scanner sc) {
        System.out.println("==========取款页面============");
        if (account.getMoney() < 100) {
            System.out.println("当前余额不足100元,取不了钱!");
        }
        else {
            while (true) {
                System.out.println("请输入需要取款的金额:");
                double money = sc.nextDouble();
                //余额够不够
                if (money > account.getMoney()) {
                    System.out.println("当前余额不足!");
                }
                //有没有超过取款额度
                else {
                    if (money > account.getQuotaMoney()) {
                        System.out.println("您取款的" + money + "超过了取款额度" + account.getQuotaMoney());
                    }
                    else {
                        System.out.println("取款成功!");
                        account.setMoney(account.getMoney()-money);
                        System.out.println("取款成功!"+"账户剩余:"+account.getMoney());
                        break;
                    }
                }
            }
        }
    }

用户转账功能实现

转账功能需要判断系统中是否有2个账户对象及以上
判断自己的账户是否有钱
输入对方卡号,判断账户是否存在
验证对方账户是否是自己要转账的账户(姓氏验证)
满足以上要求则进行转账,修改当前账户金额和对方账户金额
/**
     * 转账功能的实现
     *
     * @param accounts
     * @param account
     * @param sc
     */
    public static void transferMoney(ArrayList<Account> accounts, Account account, Scanner sc) {
        //先判断系统是否存在不少于两个的账户对象
        System.out.println("===============转账页面=================");
        if (accounts.size() < 2) {
            System.out.println("对不起,系统中没有其他账户,不可以转账!");
            return;
        }
        //判断自己的账户是否有钱
        if (account.getMoney() == 0) {
            System.out.println("对不起,你的账户没钱,不能进行转账!");
            return;
        }
        //开始转账
        while (true) {
            System.out.println("请输入您要转账给对方的卡号:");
            String Id = sc.next();
            Account account1 = getAccountByCarId(accounts, Id);//获取转账卡号的账户对象

            //判断此账户是否存在
            if (account1 != null) {
                //账户存在
                //不能转账给自己
                if (account.getCarId() == account1.getCarId()) {
                    System.out.println("对不起,您不能转账给自己!");
                } else {
                    //对方账户确认
                    String name = "*" + account1.getUserName().substring(1);
                    System.out.println("请输入[" +name+"]的姓氏:");
                    String preName = sc.next();

                    //判断开始的姓氏是否一样
                    if (account1.getUserName().startsWith(preName)){
                        System.out.println("请输入您要转账的金额:");
                        double money = sc.nextDouble();
                        //判断余额是否足够进行转账
                        if (money > account.getMoney()) {
                            System.out.println("当前账户余额不足,转账失败!您最多可以转"+account.getMoney()+"元!");
                        } else {
                            account.setMoney(account.getMoney()-money);
                            account1.setMoney(account1.getMoney()+money);
                            System.out.println("恭喜您成功转账"+money+"元给["+account1.getUserName()+"]账户");
                            showAccount(account);//查看当前账户信息
                            return;
                        }
                    }
                    else {
                        System.out.println("对不起,验证失败!");
                    }
                }
            } else {
                System.out.println("对不起,您输入的卡号有误!");
            }
        }
    }

用户修改密码和销户功能实现

修改密码就是把当前对象的密码使用set方法进行更新
修改完密码后退回首页
销户就是从集合中删除当前对象并返回首页
/**
     * 修改密码功能的实现
     * @param account
     * @param sc
     */
    public static void updatePassWord(Account account, Scanner sc) {
        System.out.println("===============修改密码=================");
        while (true) {
            System.out.println("请输入正确的密码:");
            String okPassword = sc.next();
            //判断密码是否正确
            if (okPassword.equals(account.getPassWord())){
                while (true) {
                    System.out.println("请输入新的密码:");
                    String newPassword = sc.next();
                    System.out.println("请再次输入新的密码:");
                    if (newPassword.equals(sc.next())){
                        account.setPassWord(newPassword);//修改密码
                        System.out.println("密码修改成功!");
                        return;//退出方法
                    }else {
                        System.out.println("两次输入的密码不一致!");
                    }
                }
            }else {
                System.out.println("当前输入的密码不正确!");
            }
        }
    }

完整代码

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

public class Test {
    public static void main(String[] args) {
        //准备账户信息存储的对象集合
        ArrayList<Account> accounts = new ArrayList<>();
        //首页功能实现
        showMain(accounts);

    }

    /**
     * 首页功能实现
     *
     * @param accounts
     */
    public static void showMain(ArrayList<Account> accounts) {
        System.out.println("============欢迎进入首页=============");
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入您要进行的操作:");
            System.out.println("1、登录");
            System.out.println("2、开户");
            System.out.println("请输入您的指令:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    //登录
                    login(accounts, sc);
                    break;
                case 2:
                    //开户
                    register(accounts, sc);
                    break;
                default:
                    System.out.println("您输入的指令有误!");
                    break;
            }
        }
    }

    /**
     * 登录功能的实现
     *
     * @param accounts
     * @param sc
     */
    public static void login(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("============登录页面=============");
        //先判断系统中是否有账户的存在
        if (accounts.size() == 0) {
            System.out.println("当前系统不存在账户,请先注册一个吧~~~");
            return;//直接结束方法
        }
        while (true) {
            System.out.println("请输入卡号:");
            String Id = sc.next();
            Account account = getAccountByCarId(accounts, Id);//查询卡号,返回账户对象
            //判断卡号是否正确
            if (account != null) {
                //判断密码是否正确
                while (true) {
                    System.out.println("请输入密码:");
                    if (account.getPassWord().equals(sc.next())) {
                        System.out.println("登录成功!");
                        //展示操作页面
                        showUserCommand(accounts, account, sc);//account是当前的账户对象
                        return;//继续结束方法
                    } else {
                        System.out.println("密码错误!");
                    }
                }
            } else {
                System.out.println("当前卡号不存在!");
            }
        }
    }

    /**
     * 功能页展示
     *
     * @param account
     */
    public static void showUserCommand(ArrayList<Account> accounts, Account account, Scanner sc) {
        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.println("6、退出");
            System.out.println("7、销户");
            System.out.println("请输入您要进行的操作:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    //查询
                    showAccount(account);
                    break;
                case 2:
                    //存款
                    depositMoney(sc, account);
                    break;
                case 3:
                    //取款
                    drawMoney(account, sc);
                    break;
                case 4:
                    transferMoney(accounts, account, sc);
                    //转账
                    break;
                case 5:
                    //修改密码
                    updatePassWord(account, sc);
                    return;//结束方法
                case 6:
                    //退出
                    System.out.println("欢迎下次光临~~~");
                    return;//结束方法
                case 7:
                    //销户
                    //抹去当前的账户对象
                    accounts.remove(account);
                    System.out.println("销户成功!");
                    return;
            }
        }
    }

    /**
     * 修改密码功能的实现
     *
     * @param account
     * @param sc
     */
    public static void updatePassWord(Account account, Scanner sc) {
        System.out.println("===============修改密码=================");
        while (true) {
            System.out.println("请输入正确的密码:");
            String okPassword = sc.next();
            //判断密码是否正确
            if (okPassword.equals(account.getPassWord())) {
                while (true) {
                    System.out.println("请输入新的密码:");
                    String newPassword = sc.next();
                    System.out.println("请再次输入新的密码:");
                    if (newPassword.equals(sc.next())) {
                        account.setPassWord(newPassword);//修改密码
                        System.out.println("密码修改成功!");
                        return;//退出方法
                    } else {
                        System.out.println("两次输入的密码不一致!");
                    }
                }
            } else {
                System.out.println("当前输入的密码不正确!");
            }
        }
    }

    /**
     * 转账功能的实现
     *
     * @param accounts
     * @param account
     * @param sc
     */
    public static void transferMoney(ArrayList<Account> accounts, Account account, Scanner sc) {
        //先判断系统是否存在不少于两个的账户对象
        System.out.println("===============转账页面=================");
        if (accounts.size() < 2) {
            System.out.println("对不起,系统中没有其他账户,不可以转账!");
            return;
        }
        //判断自己的账户是否有钱
        if (account.getMoney() == 0) {
            System.out.println("对不起,你的账户没钱,不能进行转账!");
            return;
        }
        //开始转账
        while (true) {
            System.out.println("请输入您要转账给对方的卡号:");
            String Id = sc.next();
            Account account1 = getAccountByCarId(accounts, Id);//获取转账卡号的账户对象

            //判断此账户是否存在
            if (account1 != null) {
                //账户存在
                //不能转账给自己
                if (account.getCarId() == account1.getCarId()) {
                    System.out.println("对不起,您不能转账给自己!");
                } else {
                    //对方账户确认
                    String name = "*" + account1.getUserName().substring(1);
                    System.out.println("请输入[" + name + "]的姓氏:");
                    String preName = sc.next();

                    //判断开始的姓氏是否一样
                    if (account1.getUserName().startsWith(preName)) {
                        System.out.println("请输入您要转账的金额:");
                        double money = sc.nextDouble();
                        //判断余额是否足够进行转账
                        if (money > account.getMoney()) {
                            System.out.println("当前账户余额不足,转账失败!您最多可以转" + account.getMoney() + "元!");
                        } else {
                            account.setMoney(account.getMoney() - money);
                            account1.setMoney(account1.getMoney() + money);
                            System.out.println("恭喜您成功转账" + money + "元给[" + account1.getUserName() + "]账户");
                            showAccount(account);//查看当前账户信息
                            return;
                        }
                    } else {
                        System.out.println("对不起,验证失败!");
                    }
                }
            } else {
                System.out.println("对不起,您输入的卡号有误!");
            }
        }
    }

    /**
     * 取款功能的实现
     *
     * @param account
     * @param sc
     */
    public static void drawMoney(Account account, Scanner sc) {
        System.out.println("==========取款页面============");
        if (account.getMoney() < 100) {
            System.out.println("当前余额不足100元,取不了钱!");
        } else {
            while (true) {
                System.out.println("请输入需要取款的金额:");
                double money = sc.nextDouble();
                //余额够不够
                if (money > account.getMoney()) {
                    System.out.println("当前余额不足!");
                }
                //有没有超过取款额度
                else {
                    if (money > account.getQuotaMoney()) {
                        System.out.println("您取款的" + money + "超过了取款额度" + account.getQuotaMoney());
                    } else {
                        System.out.println("取款成功!");
                        account.setMoney(account.getMoney() - money);
                        System.out.println("取款成功!" + "账户剩余:" + account.getMoney());
                        break;
                    }
                }
            }
        }
    }

    /**
     * 存款功能实现
     *
     * @param sc
     * @param account
     */
    public static void depositMoney(Scanner sc, Account account) {
        System.out.println("===============存款页面=================");
        System.out.println("请输入您要存款的金额:");
        double money = sc.nextDouble();
        //需要修改账户余额
        account.setMoney(account.getMoney() + money);
        //查询账户信息,确认是否存款成功
        showAccount(account);
    }

    /**
     * 查询当前账户
     *
     * @param account
     */
    private static void showAccount(Account account) {
        System.out.println("=============当前账户信息============");
        System.out.println("账户名称:" + account.getUserName());
        System.out.println("卡号:" + account.getCarId());
        System.out.println("余额:" + account.getMoney());
        System.out.println("取款额度:" + account.getQuotaMoney());
    }

    /**
     * 开户功能实现
     *
     * @param accounts
     * @param sc
     */
    public static void register(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("=============用户开户功能=============");
        String password;
        System.out.println("请输入您的开户名:");
        String name = sc.next();
        while (true) {
            System.out.println("请输入您的开户密码:");
            password = sc.next();
            System.out.println("请再次确认您的密码:");
            if (password.equals(sc.next())) {
                break;
            } else {
                System.out.println("两次输入的密码不一致!");
            }
        }
        //系统生成用户卡号,8位数字,账户id唯一
        String Id = createCarId(accounts);

        System.out.println("请您输入单次取款额度:");
        double quotaMoney = sc.nextDouble();

        //将用户的信息封装成对象放进集合
        //Account(String carId, String userName, String passWord, double quotaMoney)
        accounts.add(new Account(Id, name, password, quotaMoney));
        System.out.println("恭喜您开户成功!您的卡号是:" + Id);
    }

    /**
     * 系统生成用户卡号
     *
     * @param accounts
     */
    public static String createCarId(ArrayList<Account> accounts) {
        Random r = new Random();
        while (true) {
            String numCar = "";
            //随机生成8位数字卡号
            for (int i = 0; i < 8; i++) {
                int num = r.nextInt(10);
                numCar += num;
            }
            //判断卡号是否唯一
            Account account = getAccountByCarId(accounts, numCar);//根据卡号查询账户对象
            //如果账户对象不为空则证明系统已经存在该卡号了,需要重新生成随机卡号
            if (account == null) {
                //账户对象为证明卡号不存在系统,是唯一的卡号,返回系统随机生成的卡号
                return numCar;
            }
        }
    }

    /**
     * 根据卡号查询账户对象
     *
     * @param accounts
     * @param numCar
     */
    public static Account getAccountByCarId(ArrayList<Account> accounts, String numCar) {
        for (int i = 0; i < accounts.size(); i++) {
            if (accounts.get(i).getCarId().equals(numCar)) {
                return accounts.get(i);
            }
        }
        return null;
    }
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是用Java编写的一个简单的银行转账系统,包括取款,存款,转账等功能,其中用到了数据库的连接,采用Eclipse编写,包含数据库的设计文件。非常适合有一定基础的Java初学者使用。 package com.gujunjia.bank; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.sql.*; /** * * @author gujunjia */ public class DataBase { static Connection conn; static PreparedStatement st; static ResultSet rs; /** * 加载驱动 */ public static void loadDriver() { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("加载驱动失败"); } } /** * 创建数据库的连接 * * @param database * 需要访问的数据库的名字 */ public static void connectionDatabase(String database) { try { String url = "jdbc:mysql://localhost:3306/" + database; String username = "root"; String password = "gujunjia"; conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { System.out.println(e.getMessage()); } } /** * 关闭数据库连接 */ public static void closeConnection() { if (rs != null) { // 关闭记录集 try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { // 关闭声明 try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { // 关闭连接对象 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } package com.gujunjia.bank; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * 本类主要实现整个系统的界面 * * @author gujunjia */ public class MainFrame extends JFrame implements ActionListener, FocusListener { /** * */ private static final long serialVersionUID = 1L; public static String userId; JTextField userIdText; JPasswordField passwordText; JButton registerButton; JButton logInButton; public MainFrame() { super("个人银行系统"); this.setSize(400, 500); this.setLocation(getMidDimension(new Dimension(400, 500))); getAppearance(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * 获取屏幕的中间尺寸 * * @param d * Dimension类型 * @return 一个Point类型的参数 */ public static Point getMidDimension(Dimension d) { Point p = new Point(); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); p.setLocation((dim.width - d.width) / 2, (dim.height - d.height) / 2); return p; } /** * 布局 * * @return Container */ public Container getAppearance() { Container container = this.getContentPane(); container.setLayout(new GridLayout(4, 0)); JLabel label1 = new JLabel("个人银行系统"); label1.setFont(new Font("楷体", Font.BOLD, 40)); JLabel label2 = new JLabel("账号:"); label2.setFont(new Font("楷体", Font.PLAIN, 15)); JLabel label3 = new JLabel("密码:"); label3.setFont(new Font("楷体", Font.PLAIN, 15)); userIdText = new JTextField(20); userIdText.addFocusListener(this); passwordText = new JPasswordField(20); passwordText.addFocusListener(this); JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel(); JPanel jp3 = new JPanel(); JPanel jp4 = new JPanel(); jp1.add(label1); jp2.add(label2); jp2.add(userIdText); jp3.add(label3); jp3.add(passwordText); registerButton = new JButton("注册"); registerButton.addActionListener(this); registerButton.setFont(new Font("楷体", Font.BOLD, 15)); logInButton = new JButton("登录"); logInButton.addActionListener(this); logInButton.setFont(new Font("楷体", Font.BOLD, 15)); jp4.add(registerButton); jp4.add(logInButton); container.add(jp1); container.add(jp2); container.add(jp3); container.add(jp4); return container; } public void actionPerformed(ActionEvent e) { Object btn = e.getSource(); if (btn == registerButton) { new Register(); } else if (btn == logInButton) { String id = userIdText.getText().trim(); String password = new String(passwordText.getPassword()); Bank bank = new Bank(); if (id.equals("") || password.equals("")) { JOptionPane.showMessageDialog(null, "请输入账号和密码"); } else { String dPassword = bank.getPassword(id); if (password.equals(dPassword)) { userId = id; this.dispose(); new UserGUI(); } else { JOptionPane.showMessageDialog(this, "密码或用户名错误", "错误", JOptionPane.ERROR_MESSAGE); } } } } @Override public void focusGained(FocusEvent e) { Object text = e.getSource(); if (text == userIdText) { userIdText.setText(""); userIdText.setFont(new Font("宋体", Font.BOLD, 15)); } else if (text == passwordText) { passwordText.setText(""); } } @Override public void focusLost(FocusEvent e) { Object text = e.getSource(); if (text == userIdText) { if (userIdText.getText().equals("")) { userIdText.setText("请输入账号"); userIdText.setFont(new Font("楷体", Font.ITALIC, 15)); } } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值