--> 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),以便恢復...