程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java-->IO流模擬實現用戶登錄以及登錄信息,java--io

Java-->IO流模擬實現用戶登錄以及登錄信息,java--io

編輯:JAVA綜合教程

Java-->IO流模擬實現用戶登錄以及登錄信息,java--io


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved