题目需求:

- 创建用户类(User), 定义用户名(userName) 和密码(password)属性. 创建本地文件, 写入几个用户名密码,以"," 分割
- 模拟登录, 启动系统, 提示请您输入用户名密码, 如果成功,提示登录成功, 
- 如果用户名不存在,提示用户注册, 输入 y 进入注册, 请用户输入用户名密码,对比本地文件,如果用户名不重复则注册成功,否则提示失败,并重新注册
- 如果是密码错误,提示用户重置密码, 输入y, 进入修改密, 两次密码一致, 表示修改成功,并保存到本地文件

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Scanner;

/*分析
 * 1.键盘连接,创建存储用户名和密码的集合
 * 2.将本地文件(存取用户名和密码的)的数据加载进内存,要将字符串用","切割成字符串数组
 * 3.开始登陆有几种情况
 * 用户名存在=>输入密码正确=>进入系统
 * 用户名存在=>输入密码错误=>重置密码
 * 用户名不存在=>注册=>输入用户名密码
 * 4.将新的用户名密码更新输出到文件
 */
public class TestDemo5 {

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		
		HashMap<String,String> map = new HashMap<>();
		
		BufferedReader br = new BufferedReader(new FileReader("users.txt"));
		String str;
		while((str=br.readLine())!=null){
			String[] strs = str.split(",");
			map.put(strs[0], strs[1]);
		}
		br.close();
		//开始登陆
		System.out.println("欢迎进入登陆系统...");
		w:while(true){
			System.out.println("请输入用户名...");
			String userName = sc.next();
			if(map.containsKey(userName)){//用户名存在
				n:while(true){
					System.out.println("请输入密码...");
					String password = sc.next();
					if(map.get(userName).equals(password)){//密码正确
						System.out.println("登陆成功,欢迎回来");
						break w;
					}else{//密码不对
						System.out.println("密码不对,是否重置密码,输入y重置密码,输入其他任意字符再次输入密码");
						String code = sc.next();//判断用户是否重置密码
						if("y".equals(code)){
							System.out.println("欢迎进入密码重置系统");//有可能会有多次,要用while
							nn:while(true){
								System.out.println("请输入新密码...");
								password = sc.next();
								System.out.println("请再输入一次新密码...");
								String repassword=sc.next();
								if(repassword.equals(password)){//判断两次密码是否一致
									System.out.println("密码重置成功,已为您自动登入,欢迎回家...");
									map.put(userName, password);//因为重置密码了,所以要将用户名密码信息添加
									break w;
									
								}else{//两次密码不一致,再返回进入重置系统输入新密码,用continue停止本次循环进入下一次
									System.out.println("两次密码不一致");
									continue nn;
								}
							}
							
						}else{//用户表示不重置密码,返回重新输入密码
							continue n;
						}
						
					}
				}
				
			}else{//用户名不存在
				System.out.println("您输入的用户名不存在,是否注册,输入y注册,输入其他任意字符重新登录");
				String code = sc.next();
				if("y".equals(code)){//进入注册系统
					System.out.println("欢迎进入注册系统...");
					nu:while(true){
						System.out.println("请输入用户名...");
						userName = sc.next();
						if(map.containsKey(userName)){
							System.out.println("当前用户名已经存在,不可用,请重新输入");
							continue nu;
						}else{
							nn:while(true){
								System.out.println("请设置密码......");
								String password = sc.next();
								System.out.println("请再次输入密码......");
								String repassword = sc.next();
								
								if(password.equals(repassword)){
									System.out.println("恭喜您,注册成功");
									System.out.println("鉴于您新用户的身份,系统已您自动登录,请尽快升级到VIP");
									System.out.println("欢迎来到我们的大家庭");
									map.put(userName, password);//因为是新用户注册了,所以要将用户名密码信息添加
									break w;
								}else{
									System.out.println("两次密码不一致,请重新输入!!!");
									continue nn;
								}
							}
						}
					}
					
				}else{
					continue w;
				}
			}
		}
		//新的用户名密码写入本地文件
		BufferedWriter bw = new BufferedWriter(new FileWriter("users.txt"));
		for(String userName:map.keySet()){
			String password = map.get(userName);
			
			bw.write(userName+","+password);
			bw.newLine();
		}
		bw.close();
		sc.close();
		
	}
}