您的位置:首页 > 编程语言 > Java开发

Java-->IO流模拟实现用户登录以及登录信息

2016-08-17 13:42 495 查看
--> Test 测试类

package com.dragon.java.hwlogin;

import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

/*
* 模拟用户登陆,并记录登陆日志。
a:根据用户的选择是注册用户还是登陆用户。
b:如果是用户注册把用户注册的用户名和密码保存在文件中,文件可以记录多组用户名和密码。
c:每个用户每登陆一次都生产一个登陆记录,把登陆记录保存在文件中,形成登陆日志。登陆记录格式(用户名, 密码, 登陆时间): ==zhangsan, xxxxx, 2016年8月16日 13:20:20==
d:如果是用Admin管理员的身份登陆的,可以查看所有的用户的登陆记录。否则其他用户只可以查看自己的登陆记录。
*/
public class Test {
static Set<User> set = new HashSet<>();

@SuppressWarnings("resource")
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(System.in);
AdminUser adminUser = new AdminUser();
User thisUser = null;
// 首先将曾经的用户信息存入集合中
adminUser.splitFile(AdminUser.filePath2, set);
while (true) {
System.out.println("-----欢迎使用xxx系统-----");
System.out.println("1.注册用户           2.登录用户");
System.out.println("3.管理员登录       4.退出");
System.out.println("请输入序号:");
String name = null, password = null;
switch (scanner.nextInt()) {
case 1:
System.out.println("-----用户注册:-----");
System.out.println("请输入用户名:");
name = scanner.next();
System.out.println("请输入密码:");
password = scanner.next();
System.out.println("请确认密码:");
if (!scanner.next().equals(password)) {
System.out.println("两次输入的密码不相同!");
continue;
}
if (set.size() != 0) {
if (adminUser.userExist(name, set) != null) {
System.out.println("该用户已存在!");
break;
} else {
adminUser.userRegister(name, password, set);
}
} else {
adminUser.userRegister(name, password, set);
}
break;
case 2:
System.out.println("-----用户登录:-----");
if (set.size() != 0) {
System.out.println("请输入用户名:");
name = scanner.next();
System.out.println("请输入密码:");
password = scanner.next();
if ((thisUser = adminUser.userExist(name, set)) == null) {
System.out.println("该用户不存在!");
} else if (!password.equals(thisUser.getPassword())) {
System.out.println("密码错误!");
} else {
System.out.println("亲爱的" + thisUser.getName()
+ ",您的登录记录为:");
// 得到所有的用户曾登录信息并与当前用户进行比较
Set<User> setTime = new HashSet<>();
adminUser.splitFile(AdminUser.filePath, setTime);
for (User user : setTime) {
if (thisUser.getName().equals(user.getName())) {
System.out.println(user);
}
}
System.out.println("您现于" + adminUser.loginTime()
+ "登录!");
adminUser.userLogin(name, password,
adminUser.loginTime(), set);
}
} else {
System.out.println("还没有用户注册!");
continue;
}
break;
case 3:
adminUser.readUser();
break;
case 4:
System.out.println("已退出!");
System.exit(0);
default:
System.out.println("输入有误!...");
continue;
}
}
}
}


--> AdminUser 类对用户登录进行控制以及录入信息

package com.dragon.java.hwlogin;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Set;

class AdminUser {
@SuppressWarnings("unused")
private static InputStream in = System.in;
private static PrintStream out = System.out;
private static PrintStream ps = null;
private static BufferedReader br = null;
static String filePath = "D:/workspace/08-16/src/com/dragon/java/hwlogin/login.txt";
static String filePath2 = "D:/workspace/08-16/src/com/dragon/java/hwlogin/users.txt";

/**
* 判断user 是否存在
*
* @param name
* @param set
* @return
*/
public User userExist(String name, Set<User> set) {
for (User user : set) {
if (name.equals(user.getName())) {
return user;
}
}
return null;
}

/**
* 用户登录
*
* @param name
* @param password
* @param time
* @param set
*/
public void userLogin(String name, String password, String time,
Set<User> set) {
User user = new User(name, password, time);
writeUser(ps, user, filePath, set);
}

/**
* 用户注册
*
* @param name
* @param password
* @param set
*/
public void userRegister(String name, String password, Set<User> set) {
User user = new User(name, password);
writeUser(ps, user, filePath2, set);
}

/**
* 登录用的曾登录信息,通过读取当前的系统时间
*
* @return
*/
public String loginTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy年MM月dd日  hh:mm:ss", Locale.CHINA);
Date date = new Date(System.currentTimeMillis());
String time = simpleDateFormat.format(date); // 当前系统时间
return time;
}

/**
* 读取所有用户的登录信息
*/
public void readUser() {
try {
br = new BufferedReader(new FileReader(filePath));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println(e);
} finally {
try {
br.close();
} catch (IOException e) {
System.out.println(e);
}
}
}

/**
* 将用户信息(或登录信息)写入到文件中
*
* @param ps
* @param user
* @param file
* @param set
*/
public void writeUser(PrintStream ps, User user, String file, Set<User> set) {
set.add(user);
try {
// FileOutputStream(file,true) --> true表示确认文件追加 --> 即不刷新文件
ps = new PrintStream(new FileOutputStream(file, true), true);
System.setOut(ps);
System.out.println(user);
} catch (FileNotFoundException e) {
System.out.println(e);
} finally {
// 重新设置"标准"输出流到控制台
System.setOut(out);
}
}

/**
* 将存储信息的文件分割得到用户数据并存入集合
*
* @param file
* @param set
*/
public void splitFile(String file, Set<User> set) {
try {
br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null) {
String[] strings = line.split(",");
User user = new User(strings[0].substring(11,
strings[0].length()), strings[1].substring(10,
strings[1].length()), strings[2].substring(6,
strings[2].length()));
set.add(user);
}
} catch (IOException e) {
System.out.println(e);
} finally {
try {
br.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
}


--> User 类存放用户的属性

package com.dragon.java.hwlogin;

class User {
private String name;
private String password;
private String time;

User() {
super();
}

User(String name, String password) {
super();
this.name = name;
this.password = password;
}

User(String name, String password, String time) {
this(name, password);
this.time = time;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getTime() {
return time;
}

public void setTime(String time) {
this.time = time;
}

@Override
public String toString() {
return "User [name=" + name + ", password=" + password + ", time="
+ time + "]";
}

}


--> 重定向输入输出流之前要先保存系统默认的输入输出流(即System.in 和 System.out),以便恢复...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: