/**
 * User
 * @author Lenovo
 *
 */
public class User {
	private String cardId;		//卡号
	private String userName;	//用户名
	private String identity;	//身份证号
	private String passWord;	//密码
	private String phone;		//手机号
	private double balnace;		//余额
	
	//无叁构造
	public User() {
		// TODO Auto-generated constructor stub
	}

	//带叁构造方法
	public User(String cardId, String userName, String identity, String passWord, String phone, double balnace) {
		super();
		this.cardId = cardId;
		this.userName = userName;
		this.identity = identity;
		this.passWord = passWord;
		this.phone = phone;
		this.balnace = balnace;
	}
	
	//生成get和set方法
	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 getIdentity() {
		return identity;
	}

	public void setIdentity(String identity) {
		this.identity = identity;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public double getBalnace() {
		return balnace;
	}

	public void setBalnace(double balnace) {
		this.balnace = balnace;
	}	
	
}


import java.util.Scanner;

/**
 * 银行类
 * @author Lenovo
 *
 */
public class Bank {
	
	//保存用户的数据
	private User[] users = new User[5];
	//记录用户的个数,用于循环遍历
	private int size;
	//初始化方法
	public void initial() {
		
		//创建一个用户1
		User user1 = new User();
		user1.setCardId("31555555555550");  //卡号
		user1.setUserName("小小");           //用户名
		user1.setPassWord("123456");        //密码
//		user1.setPhone("155168852");		//手机号
		user1.setBalnace(1000);				//金额
		user1.setIdentity("4600051515151515151"); //身份证
		
		//创建用户2
		User user2 = new User("77888877", "大大", "4600991199000234", "654321", "15533120496", 100);
		
		//把用户的全部属性复制进入数组中
		users[0] = user1;
		users[1] = user2;
		//计算数组的长度
		size = users.length;
		
		
	}
	
	//无叁构造
	public Bank() {
		// TODO Auto-generated constructor stub
		//调用inintial()方法
		initial();
//		System.out.println("初始化完成");
	}
	//用户登录
	public void login() {
		Scanner input = new Scanner(System.in);
		System.out.println("===亲爱的用户你好,欢迎您使用xxx系统===");
		System.out.println("请输入您的账号:");
		String CardId = input.next();
		System.out.println("请输入您的密码:");
		String PassWorld = input.next();
		
		//遍历数组
		User u = null; //保存找到的用户
		for (int i = 0; i < size; i++) {  //size:记录数组的几个,所以循环要小于size 不然会有空指针异常
			//判断  原密码和用户输入的密码相等
			if(users[i].getCardId().equals(CardId)&&users[i].getPassWord().equals(PassWorld)) {
				//把用户全部的属性都赋值给u
				u = users[i];
				break;
				//账号正确但是密码不正确
			}else if(users[i].getCardId().equals(CardId)&&!users[i].getPassWord().equals(PassWorld)){
				System.out.println("您的密码错误,请您重新输入密码:");
				//有三次机会
				for (int j = 0; j < 4; j++) {
					//提示用户输入重新输入密码
					String PassWorld2 = input.next();
					//如果正确了,就继续循环
					if(users[i].getPassWord().equals(PassWorld2)) {
						u = users[i];
						break;
						//还有的机会
					}else {
						System.out.println("你还有"+(3-j)+"次机会");
					}
				}
				//机会用完了,就显示输入登陆失败 
				System.out.println("您的输入的密码以达到最大范围,登录失败");
				//退出
				break;
				//账户和密码都不正确,之久退出
			}else {
				System.out.println("登录失败,账号或者密码错误");
				break;
				}
		}
		//u的值不为空时 登录成功    也就是把登录的账号的全部属性都直接赋值给了u
		if(u!=null) {
			//成功
			//显示菜单
			//调用showMenu方法
			showMenu(u);
			
		}else {
//			System.out.println("账号或密码错误...");
		}
		
	}
	
	//显示菜单  传入叁数u
	public void showMenu(User u) {//账号密码正确的用户进入
		
		Scanner input = new Scanner(System.in);
		System.out.println("登录成功!!!");
		System.out.println("============欢迎进入xxx银行系统==================");
		
		//死循环   循环查询操作业务
		while(true) {
			System.out.println("请你选择你要操作的选项:");
			System.out.println("===1.存款 \t2.取款 \t3.转账\t4.查询余额\t5.修改密码\t0.退出=====");
			int choice = input.nextInt();
			//选择操作你要操作的业务
			switch (choice) {
			case 1:
				//调用存钱方法
				saveMoney(u);
				break;
			case 2:
				//调用取钱方法
				whitdrawMoney(u);
				break;
			case 3:
				//调用转账方法
				transfer(u);
				break;
			case 4:
				//调用查询余额方法
				Query(u);
				break;
			case 5:
				//调用修改密码方法
				changePassword(u);
				break;
			case 0:
				//直接退出整个系统
				System.out.println("===退出成功,欢迎您下次再来===");
				return;
	
			default:
				break;
			}
		}
	
	}
	//1.存钱
	public void saveMoney(User u) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入你要存的金额:");
		double m = input.nextDouble();
		//判断,如果钱小于0就存钱失败,大于0就存钱成功
		if(m>0) {
			//原来的钱加上存入的钱
			u.setBalnace(u.getBalnace()+m);
			//输出存入后的钱数
			System.out.println("存钱成功, 您的余额为:"+u.getBalnace());
		}else {
			System.out.println("存钱失败,金额必须大于0");
		}
		
	}
	
	//2.取钱
	public void whitdrawMoney(User u) {
		
		Scanner input = new Scanner(System.in);
		System.out.println("请你输入你要取款的金额:");
		//获取要取出的钱数
		double m = input.nextDouble();
		//取出的钱要小于原账户的钱数
		if(u.getBalnace()>=m) {
			//原来的钱减去取出来的钱
			u.setBalnace(u.getBalnace()-m);
			//输出取钱后的余额
			System.out.println("取钱成功!!! 您目前剩余的余额为:"+u.getBalnace());
			
			//余额不足,重新操作
		}else {
			System.out.println("取钱失败,你目前的余额不足,请从新输入...");

		}
		
	}
	
	//3.转账
	public void transfer(User u) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入对方的卡号");
		//获取对方的卡号
		String cardId = input.next();
		//遍历users是否有对方的卡号
		for (int i = 0; i < size; i++) {
			//判断输入的卡号是否存在
			if(users[i].getCardId().equals(cardId)) {
				System.out.println("请输入你要转账的金额:");
				//获取你要转账的金额
				double m = input.nextDouble();
				//原账户减去转账的金额
				u.setBalnace(u.getBalnace()-m);
				//对方账号加上转账的金额
				users[i].setBalnace(users[i].getBalnace()+m);
				//转账成功后,剩下的余额
				System.out.println("转账成功!!!,您的余额为:"+u.getBalnace());
				break;
				//卡号不正确,重新输入
			}else {
				System.out.println("你输入的卡号有误,请从新输入...");
				
			}
		}
	}
	
	//4.查询余额
	public void Query(User u) {
		
		System.out.println("您目前的余额为:"+u.getBalnace());
	}

	//5.修改密码
	public void changePassword(User u) {
		
		Scanner input = new Scanner(System.in);
		System.out.println("请输入你要修改的新密码");
		//获取新密码
		String newPassword = input.next();
		//如果密码小于6位数就提示修改失败
		if(newPassword.length()>=6) {
			//改变密码
		u.setPassWord(newPassword);
		System.out.println("修改密码成功!!!!");
		}else {
			System.out.println("修改失败!!你的新密码长度不够,必须要6个字符以上");
		}
	}
	
}

//测试类
public class TestBank {
	public static void main(String[] args) {
		Bank bank = new Bank();
		bank.login();
	}

}