题目需求:
- 创建用户类(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();
}
}