用Java实现ATM机功能(附带源码)

目录

一、题目要求

(1)注册功能

(2)登录功能

二、设计思路

(1)银行卡类——BankCard类

(2)银行类——Bank类

(3)ATM机类——ATM类

三、程序代码

(1)BankCard.java文件

(2)Bank.java文件

(3)ATM.java文件

(4)Main.java文件


一、题目要求

根据大家平时在ATM机上的操作,编写程序实现ATM机的常见功能。具体功能包括:

(1)注册功能

        根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户

(2)登录功能

登陆失败:重新登陆或注册
登陆成功:对登陆的这张银行卡可以进行以下操作:存款、取款、查余额、转账、退卡功能。

二、设计思路

根据题目要求,设置银行卡类、银行类和ATM机类三个类。

(1)银行卡类——BankCard类

属性:卡号、密码、余额

操作:获取卡号、重置卡号、获取密码、重置密码、存钱、取钱、查询余额

(2)银行类——Bank类

属性:银行卡数组、银行卡的数量、初始最大银行卡数(可以设为静态常量)

操作:查询银行卡是否存在、登录、添加银行卡、根据卡号密码返回对应银行卡、存款、取款、查余额、转账

(3)ATM机类——ATM类

属性:卡号、密码、银行、银行卡

操作:显示主界面的方法(无限循环)、注册、登录、具体的业务功能(插卡后的操作,包括查询、存取款、转账等)

三、程序代码

(1)BankCard.java文件

package package_ATM;

public class BankCard {
    private int cardnum;
    private int password;
    private double balance;
    
    //创建一个银行卡
    public BankCard(int cardnum, int password) {
        this.cardnum = cardnum;
        this.password = password;
    }
    
    //获取卡号
    public int GetCardnum() {
        return cardnum;
    }
    
    //重置卡号
    public void ResetCardnum(int cardnum) {
        this.cardnum = cardnum;
    }
    
    //获取密码
    public int GetPassword() {
        return password;
    }
    
    //重置密码
    public void ResetPassword(int password) {
        this.password = password;
    }
    
    //存钱
    public boolean SaveMoney(double money) {
        this.balance += money;
        return true;
    }
    
    //取钱
    public boolean DrawMoney(double money) {
        if(this.balance>=money){
            this.balance -= money;
            return true;
        }
        System.out.println("余额不足!");
        return false;
    }
    
    //获取余额
    public double GetBalance(){
        return this.balance;
    }
}

(2)Bank.java文件

package package_ATM;

public class Bank {
    private BankCard[] cardlist;
    private static int cardsnum = 0;
    private static final int Maxcardnum = 10;

    public Bank(){
        cardlist = new BankCard[Maxcardnum];
        System.out.println("银行开门了!");
    }
    
    //查询账号是否存在
    public boolean isExist(int cardnum) {
        for(int i=0;i<cardsnum;i++){
            if (cardlist[i].GetCardnum() == cardnum){
                return true;
            }
        }
        return false;
    }

    //登录函数
    public boolean Login(int cardnum,int password) {
        for(int i=0;i<cardsnum;i++){
        	//账号与密码都对的上则登录成功
            if (cardlist[i].GetCardnum() == cardnum && cardlist[i].GetPassword() == password){
                return true;
            }
        }
        return false;
    }

    //添加新的银行卡
    public boolean AddCard(BankCard card) {
        //判断数组cardlist是否已满
        if(cardsnum == Maxcardnum){
            System.out.println("存储空间不足!");
            return false;
        }
        else {
        	//将新卡存入银行卡类型数组
            cardlist[cardsnum] = card;
            //银行卡数加1
            cardsnum++;
            return true;
        }
    }
    
    //根据卡号密码返回银行卡
    public BankCard GetCardByPd(int cardnum, int password){
        for(int i=0;i<cardsnum;i++){
            if (cardlist[i].GetBalance() == cardnum && cardlist[i].GetPassword()== password){
                return cardlist[i];
            }
        }
        System.out.println("银行卡不存在!");
        return null;
    }

    //存款
    public boolean SaveMoney(BankCard card,double money){
        return card.SaveMoney(money);

    }

    //取款
    public boolean DrawMoney(BankCard card,double money){
        return card.DrawMoney(money);
    }

    //查余额
    public double GetBalance(BankCard card){
        return card.GetBalance();
    }
    
    //转账
    public boolean TransferAccounts(BankCard card, int aim_cardnum, double money){
        BankCard aim_card;
    	for(int i=0;i<cardsnum;i++) {
        	if(cardlist[i].GetCardnum()==aim_cardnum) {
        		aim_card=GetcardBynum(aim_cardnum);
        		if(card.DrawMoney(money)){
                    aim_card.SaveMoney(money);
                    return true;
                }
        		else {
        			return false;
        		}
        	}
        }
    	return false;
    }
    
  //根据卡号返回银行卡
    public BankCard GetcardBynum(int cardnum){
        for(int i=0;i<cardsnum;i++){
            if (cardlist[i].GetCardnum() == cardnum){
                return cardlist[i];
            }
        }
        System.out.println("目标银行卡不存在!");
        return null;
    }
}

(3)ATM.java文件

package package_ATM;
import java.util.Scanner;

public class ATM {
	private static boolean flag=true;
	private int cardnum;
	private int password;
	private BankCard bankcard;
	private Bank bank;
	
	Scanner sc = new Scanner(System.in);
	//创建一个ATM
	public ATM() {
		bank = new Bank();
		System.out.println("ATM开机了!");
	}
	
	//主窗口
	public void MainWindow() {
		int choice;
		while(flag==true) {
			try {
				System.out.println("请选择服务:1.注册 2.登录 3.退出");
				choice = sc.nextInt();
				switch(choice){
				
					case 1:
						System.out.println("请输入账号");
						cardnum=sc.nextInt();
						System.out.println("请输入密码");
						password=sc.nextInt();
						Enroll(cardnum,password);
						break;
						
					case 2:
						System.out.println("请输入账号");
						cardnum=sc.nextInt();
						System.out.println("请输入密码");
						password=sc.nextInt();
						Login(cardnum,password);
						break;
						
					case 3:
						flag=false;
						break;	
					
					default:
						break;
				}
			}catch(Exception e) {
				System.out.println("输入不符合要求!");
				sc=new Scanner(System.in);
			}
		}
	}
	
	//注册账号
	public void Enroll(int cardnum,int password) {
		//检查账号是否已经被注册
        if(bank.isExist(cardnum)){
            System.out.println("卡号已存在!");
        }
        else{
            //创建新卡
        	bankcard = new BankCard(cardnum,password);
            if(bank.AddCard(bankcard)) {
            	System.out.println("注册成功!");
            }
            else {
            	System.out.println("注册失败!");
            }
        }
	}	
	
	//登录账号
	public void Login(int cardnum,int password) {
		//检查账号是否存在
		if(bank.isExist(cardnum)) {
			if(bank.Login(cardnum, password)) {
				System.out.println("登录成功!");
				bankcard=bank.GetcardBynum(cardnum);
				function(bankcard);
			}
			else{
				System.out.println("密码不正确");
			}
		}
		else {
			System.out.println("账号不存在!");
		}
	}
	
	//ATM功能函数
	public void function(BankCard bankcard) {
		double money;
		int aim_cardnum;
		int choice;
		boolean flag1 = true;
		while(flag1==true) {
			try {
				System.out.println("请选择服务:1.查询余额 2.存款 3.取款 4.转账 5.重置卡号 6.重置密码 7.退出");
				choice = sc.nextInt();
				switch(choice) {
				case 1:
					System.out.println("本卡余额为:"+bank.GetBalance(bankcard));
					break;
					
				case 2:
					System.out.println("请输入存款金额:");
					money=sc.nextDouble();
					if(bankcard.SaveMoney(money)) {
						System.out.println("存款成功!");
						System.out.println("现有余额:"+bankcard.GetBalance()+"元");
					}
					break;
					
				case 3:
					System.out.println("请输入取款金额:");
					money=sc.nextDouble();
					if(bankcard.DrawMoney(money)) {
						System.out.println("取款成功!");
						System.out.println("现有余额:"+bankcard.GetBalance()+"元");
					}
					
					break;
					
				case 4:
					System.out.println("请输入目标卡号:");
					aim_cardnum=sc.nextInt();
					System.out.println("请输入转账金额:");
					money=sc.nextDouble();
					if(bank.TransferAccounts(bankcard, aim_cardnum, money)) {
						System.out.println("转账成功!");
						System.out.println("现有余额:"+bankcard.GetBalance()+"元");
					}
					else {
						System.out.println("转账失败!");
					}
					break;
					
				case 5:
					System.out.println("请输入新卡号:");
					int new_cardnum;
					new_cardnum=sc.nextInt();
					//检查账号是否存在
					if(bank.isExist(new_cardnum)) {
						System.out.println("账号已存在!");
					}
					else {
						bankcard.ResetCardnum(new_cardnum);
					}
					break;
				
				case 6:
					System.out.println("请输入新密码:");
					int new_password;
					new_password=sc.nextInt();
					bankcard.ResetPassword(new_password);
					break;
					
				case 7:
					flag1=false;
					break;
					
				default:
					break;
				}
			}catch(Exception e) {
				System.out.println("输入不符合要求!");
				sc=new Scanner(System.in);
			}
		}
	}
}

(4)Main.java文件

package package_ATM;

public class Main {
	public static void main(String[] args) {
		ATM atm=new ATM();
		atm.MainWindow();
	}
}

  • 8
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐喽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值