利用Scanner输入特性,来模拟一个自动取款机程序,定义ATM机类,在ATM中定义一个Account的数组对象,表示ATM中N个账户信息,每个账户保存用户名、密码、账户余额。ATM运行,可以查询余额

ATM机类

public class ATM {
    
    
	// 内部先保存三个账号的信息 私有外界不能访问,static,代表所有ATM对象所公用的账号信息!不是每个ATM对象所独有的一套!

	private static Account[] accounts = {
    
     new Account("zs", "123", 1000), new Account("ls", "123", 2000),
			new Account("ww", "123", 3000) };
	// 保存当前已经登录成功的那个活动账号信息,谁登录就赋值为谁!!1
	private Account activeAccount;

	// 设置一个已经登录的标志//不是必须,我们可以通过activeAccount是不是null来判断有无账号登录!
	private boolean isLogin = false;
	// ATM的编号!
	private String code;

	// 只提供有参,不提供无参,必须使用这个来构造对象,必须提供编号
	public ATM(String code) {
    
    
		this.code = code;
	}

	private Scanner sc = new Scanner(System.in);

	/**
	 * ATM机的启动方法,运行方法,这里是ATM机的主要逻辑!
	 * 
	 */
	public void run() {
    
    
		// 1:让用户登录
		customerLogin();
		if (isLogin == false) {
    
    // 客户没登录成功!
			System.out.println("三次失败!ATM将锁定你的账号10分钟!暂时无法使用");
			return;// 结束掉run() 结束ATM本次运行
		}
		// 2:根据用户登录的结果 A:登录失败 B:登录成功
		while (true) {
    
    //此循环是让ATM一直执行,直到用户选择5 退出系统!!!
			System.out.println("登录成功!欢迎使用本ATM!");
			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("____________操作____________");
			String choose = sc.next();
			switch (choose) {
    
    
			case "1":
				showBalance();
				break;
			case "2":
				add();
				break;
			case "3":
				draw();
				break;
			case "4":
				modifyPASS();
				break;
			case "5":
				System.out.println("本次使用结束!退出系统");
				return;
			default:
				System.out.println("无此选项");
				break;
			}
		}
	}

	private void modifyPASS() {
    
    
		System.out.println("输入旧密码:");
		String oldPASS = sc.next();
		if(oldPASS.equals(this.activeAccount.getPassword())) {
    
    //密码不对!
			System.out.println("旧密码错误!本次取消!");
			return;//结束此方法!
		}
		System.out.println("输入新密码:");
		String newPASS = sc.next();
		System.out.println("重复输入新密码:");
		String repeatPASS = sc.next();
		if(newPASS.equals(repeatPASS)) {
    
    
			System.out.println("两次输入新密码不一致!本次取消!");
			return;
		}
		this.activeAccount.setPassword(newPASS);
			System.out.println("修改密码成功!");
	}

	private void add() {
    
    
		System.out.println("放入要存入的钱:");
		int add = sc.nextInt();
		if(add>0) {
    
    
			int balance = this.activeAccount.getBalance();
			this.activeAccount.setBalance(add+balance);
			System.out.println("存钱成功!");
		}else {
    
    
			System.out.println("要存的钱有问题!本次存钱取消!");
		}
	}

	private void draw() {
    
    
		
		System.out.println("输入你要取出的钱:");
		int take = sc.nextInt();
		int balance = this.activeAccount.getBalance();//当前余额
		if(take > balance || take <= 0) {
    
    
			System.out.println("超出余额或要取出的数量有问题!本次取钱取消!");	
		}else {
    
    
			this.activeAccount.setBalance(balance - take);
			System.out.println("成功取出"+take+"元");
		}
	}

	private void showBalance() {
    
    
		System.out.println("你的余额:"+this.activeAccount.getBalance()+"元");

	}

	// 客户有三次登录机会
	private void customerLogin() {
    
    
		for (int i = 1; i <= 3; i++) {
    
    
			System.out.println("输入用户名:");
			String username = sc.next();
			System.out.println("输入密码:");
			String password = sc.next();
			// 拿着用户名和密码到accounts 数组里去逐个匹配!
			for (Account account : accounts) {
    
    
				if (username.equals(account.getUsername()) && password.equals(account.getPassword())) {
    
    
					// 修改登录标记,记录当前登录的账号
					isLogin = true;
					activeAccount = account;
					break;// 不需要再继续匹配余下的账号!
				}
			}
			if (isLogin == true) {
    
    // 循环匹配到了账号,登录成功,登录成功就不需要剩余的次数来登录了
				break;// 结束外循环,次数的循环
			} else {
    
    
				// 当前这一次外循环没有登录成功!打印!
				int times = 3 - i;
				System.out.println("本次登陆失败!还剩" + times + "次机会!");
			}
		}
	}

	public static void main(String[] args) {
    
    
		// 创建一个ATM机
		ATM atm = new ATM("城中村101号");
		atm.run();
	}
}

Account数组对象

/**
 * 本需求中的账号信息:封装了用户名 密码 余额
 * @author 86188
 *
 */
public class Account {
    
    
	
	private String username;
	private String password;
	private int balance;
	
	public Account() {
    
     
		// TODO Auto-generated constructor stub
	}

	public Account(String username, String password, int balance) {
    
    
		this.username = username;
		this.password = password;
		this.balance = balance;
	}

	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 int getBalance() {
    
    
		return balance;
	}

	public void setBalance(int balance) {
    
    
		this.balance = balance;
	}
}

所有的解析都写在了文字注释中,还请批评指正。
对我的博客或其他方面有任何见解或问题的话都可以私信我
或者联系本人QQ:3128909688
微信:DreamHerome
欢迎致电

猜你喜欢

转载自blog.csdn.net/RViewSonic/article/details/107727686