Java实现ATM银行系统

功能分析

需要实现的功能:
a). 登录账户
b). 注册账户

1、查询
2、存款
3、取款
4、转账
5、修改密码
6、退出
7、注销账户

代码实现

在这里插入图片描述

创建Account 账户类:

账户类(Account):

定义了账户的基本属性,包括卡号(cardId)、用户名(userName)、密码(passWord)、余额(money)和当次取现额度(quotaMoney)。

提供了相应的 getter 和 setter 方法。

public class Account {
    private String cardId;
    private String userName;
    private String passWord;
    private double money;
    private double quotaMoney;

    public String getCardId() {
        return cardId;
    }

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

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

创建ATM 类:

作为程序的入口,负责管理 ATM 系统的整体流程,包括登录、注册、查询、存款、取款、转账、修改密码和注销账户等操作。

登录(login):

允许用户输入卡号和密码进行登录。
如果卡号不存在,提示用户卡号不存在。
如果密码不正确,提示用户密码不正确。
如果登录成功,欢迎用户进入系统并显示操作命令。

private static void login(ArrayList<Account> accounts,Scanner sc){
        System.out.println("欢迎您进入到登录操作");
        if (accounts.size() > 0){
            while (true){
                System.out.println("请您输入登录的卡号:");
                String cardId = sc.next();
                Account acc = getAccountByCardId(cardId,accounts);
                if (acc != null ){
                    while (true){
                        System.out.println("请您输入登录的密码:");
                        String passWord = sc.next();
                        if (acc.getPassWord().equals(passWord)){
                            System.out.println("欢迎您:"+acc.getUserName()+"先生/女士进入系统,您可以开始办理你的业务了!");
                            showCommand(sc,acc,accounts);
                            return;
                        }else
                            System.out.println("您输入的密码不正确!");
                    }
                }else
                    System.out.println("卡号不存在,请进行确认!");
            }
        }else
            System.out.println("当前的系统无任何账户,请先注册后在进行登录!");
    }

注册(register):

允许用户输入用户名、密码、确认密码和当次取现额度进行注册。
如果两次输入的密码不一致,提示用户两次输入的密码不一致。
如果注册成功,恭喜用户开户成功并显示卡号。

private static void register(ArrayList<Account> accounts,Scanner sc){
        System.out.println("欢迎您进入到开户操作");
        Account acc = new Account();
        System.out.println("请您输入账户名称:");
        String userName = sc.next();
        acc.setUserName(userName);
        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 quataMoney = sc.nextDouble();
        acc.setQuotaMoney(quataMoney);
        String cardId = createCardId(accounts);
        acc.setCardId(cardId);
        accounts.add(acc);
        System.out.println("恭喜您,"+acc.getUserName()+"先生/女士,您开户完成,您的卡号是:"+acc.getCardId());
    }

查询(showAccount):

显示当前账户的详细信息,包括卡号、户主、余额和当次取现额度。

private static void showAccount(Account acc){
        System.out.println("您当前账户的详情信息如下:");
        System.out.println("卡号:"+acc.getCardId());
        System.out.println("户主:"+acc.getUserName());
        System.out.println("余额:"+acc.getMoney());
        System.out.println("当次取现的额度:"+acc.getQuotaMoney());
    }

存款(deposiMoney):

允许用户输入存款金额。
如果存款金额大于 0,将存款金额添加到账户余额中。
显示存款后的账户余额。

private static void deposiMoney(Account acc,Scanner sc){
        System.out.println("==========欢迎进入到账户存款操作==========");
        System.out.println("请您输入存款的金额:");
        double money=sc.nextDouble();
        acc.setMoney(acc.getMoney()+money);
        showAccount(acc);
    }

取款(drawMoney):

允许用户输入取款金额。
如果取款金额大于 0 且小于账户余额,将取款金额从账户余额中扣除。
如果取款金额大于账户余额,提示用户账户余额不足。
如果取款金额大于当次取现额度,提示用户取款金额超过了每次的限额。
显示取款后的账户余额。

 private static void drawMoney(Account acc,Scanner sc){
        System.out.println("==========欢迎进入到账户取款操作==========");
        double money=acc.getMoney();
        if (money>=100){
            while (true){
                System.out.println("请您输入取钱的金额:");
                double drawMoney=sc.nextDouble();
                if (drawMoney>acc.getQuotaMoney()){
                    System.out.println("您当前取款的金额超过了每次的限额!");
            }else {
                    if (drawMoney > money)
                        System.out.println("当前的余额不足!余额为:" + money);
                    else {
                        acc.setMoney(money - drawMoney);
                        System.out.println("您当前取钱完成,请拿走你的钱!剩余余额为:" + acc.getMoney());
                        break;
                    }
                }
            }
                }else
            System.out.println("您当前的账户余额不足100元,存钱去吧!");
    }

转账(transferMoney):

允许用户输入转账金额和对方卡号。
如果对方卡号不存在,提示用户对方卡号不存在
如果转账金额大于 0 且小于账户余额,将转账金额从账户余额中扣除并添加到对方账户余额中。
如果转账金额大于账户余额,提示用户账户余额不足。
如果转账金额大于当次取现额度,提示用户转账金额超过了每次的限额。
显示转账后的账户余额。

private static void transferMoney(Account acc,ArrayList<Account>accounts,Scanner sc){
        if (acc.getMoney()<=0){
            System.out.println("您自己都没钱,别转钱了!");
            return;
        }
        if (accounts.size()>=2){
            while(true){
                System.out.println("请您输入对方的卡号:");
                String cardId = sc.next();
                Account otherAcc = getAccountByCardId(cardId,accounts);
                if (otherAcc != null){
                    if (acc.getCardId().equals(otherAcc.getCardId())){
                        System.out.println("不能给自己的账户转账!");
                    }else {
                        String rs = "*" + otherAcc.getUserName().substring(1);
                        System.out.println("请您确认【" + rs + "】的姓氏来确认!");
                        System.out.println("请您确认对方的姓氏:");
                        String preName = sc.next();
                        if (otherAcc.getUserName().startsWith(preName)){
                            while(true){
                                System.out.println("请您输入转账的金额(您最多可以转账):" + acc.getMoney() + "元");
                                double money = sc.nextDouble();
                                if (money > acc.getMoney()){
                                    System.out.println("账户没这么多钱!");
                                }else{
                                    acc.setMoney(acc.getMoney() - money);
                                    otherAcc.setMoney(otherAcc.getMoney() + money);
                                    System.out.println("您已经完成了转账!当前还剩:" + acc.getMoney());
                                    return;
                                }
                            }
                        }else {
                            System.out.println("您输入的对方的信息有误!");
                        }
                    }
                }else{
                    System.out.println("您输入的转账卡号不存在!");
                }
            }
        }else {
            System.out.println("当前的系统中没有其他账户可以转账,去注册一个吧!");
        }
    }

修改密码(updatePassWord):

允许用户输入当前密码、新密码和确认密码。
如果当前密码不正确,提示用户密码不正确。
如果两次输入的新密码不一致,提示用户两次输入的密码不一致。
如果修改密码成功,提示用户密码修改成功并要求重新登录。

private static void updatePassWord(Account acc,Scanner sc){
        while (true){
            System.out.println("请您输入当前密码认证:");

            String passWord=sc.next();
            if (acc.getPassWord().equals(passWord)){
                System.out.println("请您输入新密码:");
                String newPassWord=sc.next();
                System.out.println("请您确认新密码:");
                String okPassWord= sc.next();
                if (newPassWord.equals(okPassWord)) {
                    acc.setPassWord(okPassWord);
                    System.out.println("密码已经修改成功,请重新登录!");
                    return;
                }else
                    System.out.println("两次的密码不一致!");
            }else
                System.out.println("您输入的密码有误,请重新确认密码!");
        }
    }

退出:

退出当前登录的账户,返回主页面。

case 6:
	System.out.println("感谢您使用ATM系统,欢迎下次光临!");
	return;

注销账户:

允许用户选择是否注销账户。
如果用户选择注销账户,将账户从账户列表中删除并提示用户注销成功。

case 7:
	while(true){
		System.out.println("您确定要注销账户吗?(y/n)");
		String choice  = sc.next();
		if (choice.equals("y")){
			accounts.remove(acc);
			System.out.println("您的账户已经成功注销,感谢您使用ATM系统!");
			return;
		}else if (choice.equals("n")){
			System.out.println("您已经取消注销账户的操作。");
			break;
		}else{
			System.out.println("您输入的选项不正确,请重新输入!");
		}
	}
	break;

完整代码:

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

public class ATM {
    public static void main(String[] args) {
        System.out.println("欢迎您进入ATM系统");
        ArrayList<Account> accounts = new ArrayList<>();
        while (true){
            System.out.println("1、登录账户");
            System.out.println("2、注册账户");
            System.out.println("请您选择操作:");
            Scanner sc = new Scanner(System.in);
            int com = sc.nextInt();
            switch (com){
                case 1:
                    login(accounts,sc);
                    break;
                case 2:
                    register(accounts,sc);
                    break;
                default:
                    System.out.println("当前输入的操作不存在!");
            }
        }
    }

    private static void login(ArrayList<Account> accounts,Scanner sc){
        System.out.println("欢迎您进入到登录操作");
        if (accounts.size() > 0){
            while (true){
                System.out.println("请您输入登录的卡号:");
                String cardId = sc.next();
                Account acc = getAccountByCardId(cardId,accounts);
                if (acc != null ){
                    while (true){
                        System.out.println("请您输入登录的密码:");
                        String passWord = sc.next();
                        if (acc.getPassWord().equals(passWord)){
                            System.out.println("欢迎您:"+acc.getUserName()+"先生/女士进入系统,您可以开始办理你的业务了!");
                            showCommand(sc,acc,accounts);
                            return;
                        }else
                            System.out.println("您输入的密码不正确!");
                    }
                }else
                    System.out.println("卡号不存在,请进行确认!");
            }
        }else
            System.out.println("当前的系统无任何账户,请先注册后在进行登录!");
    }

    private static void showCommand(Scanner sc , Account acc , ArrayList<Account> accounts){
        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(acc);
                    break;
                case 2:
                    deposiMoney(acc,sc);
                    break;
                case 3:
                    drawMoney(acc,sc);
                    break;
                case 4:
                    transferMoney(acc,accounts,sc);
                    break;
                case 5:
                    updatePassWord(acc,sc);
                    return;
                case 6:
                    System.out.println("感谢您使用ATM系统,欢迎下次光临!");
                    return;
                case 7:
                    while(true){
                        System.out.println("您确定要注销账户吗?(y/n)");
                        String choice  = sc.next();
                        if (choice.equals("y")){
                            accounts.remove(acc);
                            System.out.println("您的账户已经成功注销,感谢您使用ATM系统!");
                            return;
                        }else if (choice.equals("n")){
                            System.out.println("您已经取消注销账户的操作。");
                            break;
                        }else{
                            System.out.println("您输入的选项不正确,请重新输入!");
                        }
                    }
                    break;
            }
        }
    }
    private static void transferMoney(Account acc,ArrayList<Account>accounts,Scanner sc){
        if (acc.getMoney()<=0){
            System.out.println("您自己都没钱,别转钱了!");
            return;
        }
        if (accounts.size()>=2){
            while(true){
                System.out.println("请您输入对方的卡号:");
                String cardId = sc.next();
                Account otherAcc = getAccountByCardId(cardId,accounts);
                if (otherAcc != null){
                    if (acc.getCardId().equals(otherAcc.getCardId())){
                        System.out.println("不能给自己的账户转账!");
                    }else {
                        String rs = "*" + otherAcc.getUserName().substring(1);
                        System.out.println("请您确认【" + rs + "】的姓氏来确认!");
                        System.out.println("请您确认对方的姓氏:");
                        String preName = sc.next();
                        if (otherAcc.getUserName().startsWith(preName)){
                            while(true){
                                System.out.println("请您输入转账的金额(您最多可以转账):" + acc.getMoney() + "元");
                                double money = sc.nextDouble();
                                if (money > acc.getMoney()){
                                    System.out.println("账户没这么多钱!");
                                }else{
                                    acc.setMoney(acc.getMoney() - money);
                                    otherAcc.setMoney(otherAcc.getMoney() + money);
                                    System.out.println("您已经完成了转账!当前还剩:" + acc.getMoney());
                                    return;
                                }
                            }
                        }else {
                            System.out.println("您输入的对方的信息有误!");
                        }
                    }
                }else{
                    System.out.println("您输入的转账卡号不存在!");
                }
            }
        }else {
            System.out.println("当前的系统中没有其他账户可以转账,去注册一个吧!");
        }
    }

    private static void deposiMoney(Account acc,Scanner sc){
        System.out.println("==========欢迎进入到账户存款操作==========");
        System.out.println("请您输入存款的金额:");
        double money=sc.nextDouble();
        acc.setMoney(acc.getMoney()+money);
        showAccount(acc);
    }
    private static void drawMoney(Account acc,Scanner sc){
        System.out.println("==========欢迎进入到账户取款操作==========");
        double money=acc.getMoney();
        if (money>=100){
            while (true){
                System.out.println("请您输入取钱的金额:");
                double drawMoney=sc.nextDouble();
                if (drawMoney>acc.getQuotaMoney()){
                    System.out.println("您当前取款的金额超过了每次的限额!");
            }else {
                    if (drawMoney > money)
                        System.out.println("当前的余额不足!余额为:" + money);
                    else {
                        acc.setMoney(money - drawMoney);
                        System.out.println("您当前取钱完成,请拿走你的钱!剩余余额为:" + acc.getMoney());
                        break;
                    }
                }
            }
                }else
            System.out.println("您当前的账户余额不足100元,存钱去吧!");
    }
    private static void updatePassWord(Account acc,Scanner sc){
        while (true){
            System.out.println("请您输入当前密码认证:");

            String passWord=sc.next();
            if (acc.getPassWord().equals(passWord)){
                System.out.println("请您输入新密码:");
                String newPassWord=sc.next();
                System.out.println("请您确认新密码:");
                String okPassWord= sc.next();
                if (newPassWord.equals(okPassWord)) {
                    acc.setPassWord(okPassWord);
                    System.out.println("密码已经修改成功,请重新登录!");
                    return;
                }else
                    System.out.println("两次的密码不一致!");
            }else
                System.out.println("您输入的密码有误,请重新确认密码!");
        }
    }
    private static void showAccount(Account acc){
        System.out.println("您当前账户的详情信息如下:");
        System.out.println("卡号:"+acc.getCardId());
        System.out.println("户主:"+acc.getUserName());
        System.out.println("余额:"+acc.getMoney());
        System.out.println("当次取现的额度:"+acc.getQuotaMoney());
    }

    private static void register(ArrayList<Account> accounts,Scanner sc){
        System.out.println("欢迎您进入到开户操作");
        Account acc = new Account();
        System.out.println("请您输入账户名称:");
        String userName = sc.next();
        acc.setUserName(userName);
        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 quataMoney = sc.nextDouble();
        acc.setQuotaMoney(quataMoney);
        String cardId = createCardId(accounts);
        acc.setCardId(cardId);
        accounts.add(acc);
        System.out.println("恭喜您,"+acc.getUserName()+"先生/女士,您开户完成,您的卡号是:"+acc.getCardId());
    }
    public static String createCardId(ArrayList<Account> accounts){
        while (true){
            String cardId = "";
            Random r = new Random();
            for (int i = 1; i < 9; i++) {
                cardId += r.nextInt(10);
            }
            Account account = getAccountByCardId(cardId,accounts);
            if (account == null)
                return cardId;
        }
    }
    public static Account getAccountByCardId(String cardId,ArrayList<Account> accounts){
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if (acc.getCardId().equals(cardId))
                return acc;
        }
        return null;
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值