简单实现ATM机功能(java)

思路

思路:

ATM机类:

import java.util.Scanner;

//一个ATM机对应一家银行
public class ATM {
	
	private Bank bank;//可通过它调用bank里的方法
	private int choice=0;
	private String id;
	private String passwd;
	private boolean flag=true;//关机标志

	public ATM() {// 初始化
		this.bank = new Bank("中国银行");//new ATM时通过ATM()把bank初始化,bank初始化里把bankCard也初始化了
	}
	
	//核心方法
	public void start() {// 开机

		System.out.println("欢迎使用中国银行ATM机");
		
		while(flag) {
	    	System.out.println(" 1.注册   2.登录  3.关机");// 界面
		    //重复部分可复用
			input(1);
			judge(choice);			
	    }
		
		System.out.println("正在关机...");
	}

	//私有方法 ,仅能在start()函数里自己调用 
	//输入判断
	private void judge(int choice) {
		switch (choice) {
		case 1:
			input(2);
			register();
			break;// 记得写以跳出case语句,不然顺序往下执行
		case 2:
			input(2);
			login();
			break;
		case 3:
			flag=false;//关机,不循环了
			break;
		default:// 不匹配才执行这里
			System.out.println("请输入正确数字(1或2或3)");// 界面
		}
	}
	
	//注册
	private void register() {//若为新用户,存用户信息到银行,提示成功
		// TODO Auto-generated method stub
		if (bank.find(id)) {
		//if (bank.search(id)==null) {
			System.out.println("用户已注册,请重试");//不应该输1重新进入注册
			judge(1);
		} else {
			bank.add(id, passwd);
			System.out.println("注册成功!");
		}
	}

	//登录
	private void login() {//账号 密码匹配,提示成功,输出卡信息
		// TODO Auto-generated method stub
		// 银行名和钱数???????????????????????????
		  if (!bank.find(id) ||  !passwd.equals(bank.getPassWd(id))) {
		//if (bank.search(id)==null ||  !passwd.equals(bank.getPassWd(id))) {
			System.out.println("账号或密码错误");
			judge(2);
		} else {
			bussiness(id);
		}
	}
	

	//登陆成功后业务         
	private void bussiness(String id) {
		
	       int index=bank.findIndex(id);//获取银行卡下标 
	       //也可以return BankCard类型的卡,下面程序用user代替userCards[i]
	       //  BankCard user=bank.search(id); 
	   
       do{
    	    System.out.println("1.取款2.存款3.转账 4.查余额 5.改密码 6.退卡");//每执行一遍给一个提示
        	input(1);
            switch (choice){
                case 1:
                	bank.withdraw(index);
                	//bank.withdraw(user);
                    break;
                case 2:
                	bank.deposit(index);
                	//bank.deposit(user);
                	break;
                case 3:
                	bank.transfer(index);
                	//bank.transfer(user);
                    break;
                case 4:
                	bank.inquire(index);
                	//bank.inquire(user);
                    break;
                case 5:
                	bank.setPasswd(index);
                	//bank.setPasswd(user);
                    break;
                case 6:
                	System.out.println("欢迎下次光临");
                    break;
                default:// 不匹配才执行这里
        			System.out.println("选择有误,请重新选择:");
            }
        }while(choice!=6);
	}
	
	private void  input(int num){//num,需要读入的参数个数
		Scanner scan = new Scanner(System.in);
		if(num==1) {
			choice = scan.nextInt();
		}else if(num==2) {
			System.out.println("请输入账号和密码:");
			id = scan.next();
			passwd = scan.next();
		}
		//scan.close();  //关闭输入流,不能再通过new Scanner(System.in)来创建Scnaner对象了 
	}
}

Bank类

import java.util.Arrays;
import java.util.Scanner;
//存信息
public class Bank {//每new一个Bank类,多有一份Bank类的成员变量
	private String bankName;
	private BankCard[] userCards;//卡类型的一维数组 可通过它调用卡信息
	private int size=0;//有效银行卡的个数  全局变量
	private int index=-1;//存放银行卡下标。免得每次遍历找
	
	//pubilc 可在ATM类里调用该方法
	public Bank(String bankName) {//初始化
		this.bankName=bankName;
		userCards=new BankCard[10];//先给10个,扩容参考MyArrayList
	}
	
	//尾插
	public void add(String id,String passwd ) {
		if(size == userCards.length) {
			userCards=Arrays.copyOf(userCards,userCards.length*2);
		}
		userCards[size++]=new BankCard(passwd,id);
	}
	
//	//也可以把find函数改进为return BankCard,有就不为空
//	public BankCard search(String id) {
//		for(int i=0;i<size;i++) {
//			if(id.equals(userCards[i].getId()))
//					return userCards[i];
//		}
//		return null;	
//	}
	
	//找用户,有就true
	public boolean find(String id) {
		boolean flag=false;//默认没有
		for(int i=0;i<size;i++) {
			if(id.equals(userCards[i].getId()))
					flag= true;
			break;
		}
		return flag;	
	}
	
	//找银行卡下标
	public int findIndex(String id) {
		for(int i=0;i<size;i++) {
			if(id.equals(userCards[i].getId()))
					index=i;
			break;
		}
		return index;	
	}
		
	
	public String getBankName() {
		return bankName;
	}
	
	public String getPassWd(String id) {//大写W,是银行的方法
		String Passwd=null;
		for(int i=0;i<size;i++) {//找到id对应的下标
			if(id.equals(userCards[i].getId())){
				Passwd=userCards[i].getPasswd();//小写w,是银行卡的方法
				break;
			}
		}
		return Passwd;
	}

	//取钱
	public void withdraw(int index) {
		double count=enter_Count();
		userCards[index].SetMoney(-count);//负数
		System.out.println("请取走您的现金");
	}
	
	//存钱
	public void deposit(int index) {
		System.out.println("请将钞票叠放整齐:");
		Scanner scan = new Scanner(System.in);
		double  tmp = scan.nextInt();//只认整钱
		userCards[index].SetMoney(tmp);
		System.out.println("正在点钞,请稍后。。。\n存款成功");
	}

	//转账
	public void transfer(int index) {   
		
		int select =0;
		//合法id 和 金额
		String account=enter_Account(index);
		double count=enter_Count();
		
		System.out.println("确认给"+account+"转账"+count+"元吗?\n输入:1:确认   2:退出");
		if(select==1) {
			userCards[index].SetMoney(-count);
			userCards[findIndex(account)].SetMoney(count);
		}	
	}

	//查余额
	public void inquire(int index) {//历史交易记录???????????
		double money=userCards[index].getMoney();
		System.out.println("余额为:"+money+"元");
	}
	

	//判断金额够就返回true
	public  boolean  analyze(double tmp) {
		boolean flag=true;
		if(tmp>userCards[index].getMoney())
			flag=false;	
		return flag;
	}
	
	//输入正确金额
	public  double enter_Count() {
		Scanner scan  = new Scanner(System.in);
		int select=0;
		double tmp=0;
		do {
			  System.out.println("请输入正确金额:");
			  tmp = scan.nextInt();//只认整钱
		}while(!analyze(tmp));//避免余额不足
		
		System.out.println("请再次确认金额数。输入1:确认  2:修改");
		select = scan.nextInt();
		if(select==2) {
			do {
				  System.out.println("请输入正确金额:");
				  tmp = scan.nextInt();
			}while(!analyze(tmp));
		}
			   
		return tmp;
	}

	// 输入正确账户
	public String enter_Account(int index) {
		Scanner scan = new Scanner(System.in);
		int select = 0;
		String tmp = null;
		
		do {
			System.out.println("请输入正确账户(id):");
			tmp = scan.next();
		} while (!find(tmp) && !tmp.equals(userCards[index].getId()));//有用户 且  不能是 自己

		System.out.println("请再次确认账户(id):"+tmp+"。输入1:确认  2:修改");
		select = scan.nextInt();
		if (select == 2) {
			do {
				System.out.println("请输入正确账户(id):");
				tmp = scan.next();
			} while (!find(tmp));
		}

		return tmp;
	}

	//修改密码
	public void setPasswd(int index) {
		
		Scanner scan = new Scanner(System.in);
		int select = 0;
		String tmp1 = null;
		String tmp2 = null;
		
		do {
			System.out.println("请输入新密码:");
			tmp1 = scan.next();
		} while (!tmp1.equals(userCards[index].getPasswd()));//不能是老密码

		
		System.out.println("请再次输入新密码以确认:");
		tmp2 = scan.next();
		while (!tmp1.equals(tmp2)) {
			System.out.println("两次密码不一致,请重新输入:");
			tmp2 = scan.next();
		}
		
		userCards[index].setPasswd(tmp1);
	}
	
}


BankCard 类

//银行卡
public class BankCard {//同一个BankCard,id和passwd是对应的
	private String passwd;//私有,在别的类中不能通过 如userCard[i].passwd的形式访问
	private String     id;//比int好
    //支付密码????????
	
	private double    money;
	
	public BankCard(String passwd,String id) {//初始化
		this.passwd=passwd;//即当前对象的属性 用 局部变量初始化
		this.id=id;	
	}
	
	public String getId() {
		return id;
	}

	
	public double getMoney() {
		return money;
	}
	
	public void SetMoney(double  tmp) {
		money+=tmp;
	}

	public String getPasswd() {
		return passwd;
	}

	public void setPasswd(String tmp) {
		 passwd=tmp;
	}
	
}

main函数内容

    ATM atm=new ATM();
   	atm.start();

备注:

 将ATM、Bank、BankCard、Test函数放在同一路径;
 运行main函数

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现ATM功能需要以下步骤: 1. 创建一个用户类,包含用户名、密码、余额等信息。 2. 创建一个ATM类,包含以下功能: a. 登录功能:输入用户名和密码,验证用户信息是否正确。 b. 查询余额功能:查询当前用户的余额。 c. 存款功能:输入存款金额,将金额加入当前用户的余额中。 d. 取款功能:输入取款金额,将金额从当前用户的余额中减去。 e. 转账功能:输入转账金额和对方账户名,将金额从当前用户的余额中减去,加入对方账户的余额中。 f. 修改密码功能:输入原密码和新密码,修改当前用户的密码。 g. 退出功能:退出ATM操作。 下面是一个简单Java代码实现: ```java import java.util.Scanner; public class ATM { private static User[] users = new User[10]; // 最多支持10个用户 private static int userCount = 0; // 用户数 private static User currentUser = null; // 当前用户 public static void main(String[] args) { initUsers(); // 初始化用户数据 System.out.println("欢迎使用ATM!"); login(); // 登录 System.out.println("登录成功,当前余额:" + currentUser.getBalance()); Scanner scanner = new Scanner(System.in); 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. 退出"); int choice = scanner.nextInt(); if (choice == 1) { queryBalance(); } else if (choice == 2) { deposit(); } else if (choice == 3) { withdraw(); } else if (choice == 4) { transfer(); } else if (choice == 5) { changePassword(); } else if (choice == 6) { System.out.println("退出成功,欢迎下次使用!"); break; } else { System.out.println("请选择正确的操作!"); } } } // 初始化用户数据 private static void initUsers() { users[0] = new User("张三", "123456", 1000); users[1] = new User("李四", "123456", 2000); userCount = 2; } // 登录 private static void login() { Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请输入用户名:"); String username = scanner.nextLine(); System.out.println("请输入密码:"); String password = scanner.nextLine(); for (int i = 0; i < userCount; i++) { if (users[i].getUsername().equals(username) && users[i].getPassword().equals(password)) { currentUser = users[i]; return; } } System.out.println("用户名或密码错误,请重新输入!"); } } // 查询余额 private static void queryBalance() { System.out.println("当前余额:" + currentUser.getBalance()); } // 存款 private static void deposit() { Scanner scanner = new Scanner(System.in); System.out.println("请输入存款金额:"); double amount = scanner.nextDouble(); if (amount < 0) { System.out.println("存款金额不能为负数!"); return; } currentUser.setBalance(currentUser.getBalance() + amount); System.out.println("存款成功,当前余额:" + currentUser.getBalance()); } // 取款 private static void withdraw() { Scanner scanner = new Scanner(System.in); System.out.println("请输入取款金额:"); double amount = scanner.nextDouble(); if (amount < 0) { System.out.println("取款金额不能为负数!"); return; } if (amount > currentUser.getBalance()) { System.out.println("余额不足!"); return; } currentUser.setBalance(currentUser.getBalance() - amount); System.out.println("取款成功,当前余额:" + currentUser.getBalance()); } // 转账 private static void transfer() { Scanner scanner = new Scanner(System.in); System.out.println("请输入转账金额:"); double amount = scanner.nextDouble(); if (amount < 0) { System.out.println("转账金额不能为负数!"); return; } if (amount > currentUser.getBalance()) { System.out.println("余额不足!"); return; } System.out.println("请输入对方账户名:"); String username = scanner.nextLine(); User otherUser = null; for (int i = 0; i < userCount; i++) { if (users[i].getUsername().equals(username)) { otherUser = users[i]; break; } } if (otherUser == null) { System.out.println("对方账户不存在!"); return; } currentUser.setBalance(currentUser.getBalance() - amount); otherUser.setBalance(otherUser.getBalance() + amount); System.out.println("转账成功,当前余额:" + currentUser.getBalance()); } // 修改密码 private static void changePassword() { Scanner scanner = new Scanner(System.in); System.out.println("请输入原密码:"); String oldPassword = scanner.nextLine(); if (!currentUser.getPassword().equals(oldPassword)) { System.out.println("原密码错误!"); return; } System.out.println("请输入新密码:"); String newPassword = scanner.nextLine(); currentUser.setPassword(newPassword); System.out.println("修改密码成功!"); } } class User { private String username; // 用户名 private String password; // 密码 private double balance; // 余额 public User(String username, String password, double balance) { this.username = username; this.password = password; this.balance = balance; } public String getUsername() { return username; } public String getPassword() { return password; } public double getBalance() { return balance; } public void setPassword(String password) { this.password = password; } public void setBalance(double balance) { this.balance = balance; } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值