1. 程式人生 > >使用者註冊登入案例分析以及簡單實現

使用者註冊登入案例分析以及簡單實現

使用者註冊登入案例

功能分析

本案例主要是使用者註冊和登入功能。根據使用者輸入的使用者名稱和密碼判斷使用者能否登入進去。使用者的資訊儲存在userInformation.txt檔案中。
分析順序如下:
1. 分包和建類
2. 實現功能

分包

主要分為四個包:

    cn.edu.domain包,裡面定義一個User類,使用者有使用者名稱和密碼;

    cn.edu.dao,一個裡面的類為UserDao,UserDao寫一個操作介面,裡面定義登入和註冊功能;

    cn,edu.Impl包,UserDaoImpl用集合和檔案來實現,首先將檔案中的內容讀入到集合,然後利用集合的判斷功能判斷是否存在此使用者名稱和密碼,決定下一步是否將使用者名稱和密碼加入到檔案中;

    cn.edu.test包,主要是進行測試的類,UserTest類。

功能實現

使用者類實現:

package cn.edu.domain;

/*
 * User 寫一個標準的使用者類
 * 使用者名稱和密碼
 */
public class User {
    // 兩個私有變數,使用者名稱和密碼
    private String userName;
    private String password;

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(String userName, String password) {
        super
(); this.userName = userName; this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public
void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [userName=" + userName + ", password=" + password + "]"; } }
UserDao.java實現:
package cn.edu.dao;

import java.io.File;
import java.io.IOException;

/*
 * UserDao 寫一個操作介面,裡面定義登入和註冊功能
 */
public interface UserDao {
    // 定義登入介面
    public abstract boolean login(String userName, String password) throws IOException;

    // 定義註冊介面
    public abstract boolean register(String userName, String password) throws IOException;
}

UserDaoImpl主要功能的實現:


/*
 * UserDaoImpl 寫具體的實現,用集合實現
 */
package cn.edu.dao.impl;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;

import cn.edu.dao.UserDao;

/*
 * UserDaoImpl 寫具體的實現,用集合實現
 */
public class UserDaoImpl implements UserDao {

    public UserDaoImpl() {
    }

    public static File userInfo = new File("userInformation.txt");
    @Override
    public boolean login(String userName, String password) throws IOException {
        boolean flag = false;
        //使用者註冊的時候,如果檔案還沒有存在,則提醒使用者沒有此使用者
        if (!userInfo.exists()) {
            System.out.println("No such username.");
        } else {
            //通過將檔案中儲存的使用者資訊讀取到一個集合中;
            //通過遍歷集合裡面的內容,判斷集合中的內容是否與使用者輸入的使用者名稱和密碼相同;
            //如果有相同的,則提示登入成功,退出迴圈;
            //如果沒有相同的,則提示登入失敗。
            BufferedReader br = new BufferedReader(new FileReader(userInfo));
            HashSet<String> hs = new HashSet<String>();
            String username;
            while ((username = br.readLine()) != null) {
                hs.add(username);
            }
            br.close();

            for (String ur : hs) {
                if (hs.contains(userName + " " + password)) {
                    flag = true;
                    System.out.println("login successful");
                    break;
                }
            }
            if (!flag) {
                System.out.println("login fail");
            }
        }
        return flag;
    }

    @Override
    public boolean register(String userName, String password) throws IOException {
        boolean flag = false;
        //在註冊過程中,如果儲存使用者資訊的檔案沒有存在,則建立檔案;
        if (!userInfo.exists()) {
            userInfo.createNewFile();
        }
        /*
         * 如果檔案已經存在,則首先將檔案中的資訊讀取到一個集合
         * 然後迴圈遍歷集合中的內容,如果集合中沒有與使用者輸入的使用者名稱相同的,
         * 則將使用者名稱和密碼儲存到檔案中,並提示使用者註冊成功;
         * 如果已經有此使用者名稱存在,則提示使用者,該使用者名稱已經存在。
         */
        BufferedReader br = new BufferedReader(new FileReader(userInfo));
        BufferedWriter bw = new BufferedWriter(new FileWriter(userInfo, true));
        HashSet<String> hs = new HashSet<String>();
        String s;
        while ((s = br.readLine()) != null) {
            hs.add(s);
        }

        if (!hs.contains(userName + " " + password)) {
            flag = true;
            bw.write(userName + " " + password);
            bw.newLine();
            bw.flush();
            System.out.println("Register successful");
        } else {
            System.out.println("The username is already exist.");
        }
        bw.close();
        br.close();

        return flag;
    }
}

測試類:

package cn.edu.test;

import java.io.IOException;
import java.util.Scanner;
import cn.edu.dao.impl.UserDaoImpl;

/*
 * UserTest 在測試類中寫程式碼進行測試
 */
public class UserTest {
    public static void main(String[] args) throws IOException {
        while (true) {// 只有當用戶成功登陸進去才結束迴圈
            System.out.println("Please choose to login or register?");
            System.out.println("login---register");
            Scanner sc = new Scanner(System.in);
            String choose = sc.nextLine();
            UserDaoImpl udp = new UserDaoImpl();
            // 判斷使用者是選擇登陸還是選擇註冊
            if (choose.equals("login")) {// 使用者選擇登陸
                System.out.println("username is ");
                String user = sc.nextLine();
                System.out.println("password is ");
                String pass = sc.nextLine();
                // 使用者登陸
                boolean result = udp.login(user, pass);
                //輸出登入結果
                //System.out.println(result);
                if (result)// 使用者登陸成功,則退出迴圈
                    break;
            } else if (choose.equals("register")) {// 使用者選擇註冊
                System.out.println("username is ");
                String user = sc.nextLine();
                System.out.println("password is ");
                String pass = sc.nextLine();
                // 使用者註冊
                boolean isRegister = udp.register(user, pass);
                //輸出註冊的結果是成功還是失敗
                //System.out.println(isRegister);
            }
        }
    }
}

至此,該使用者登陸註冊案例結束。這裡是使用檔案儲存使用者資訊,以後可以使用資料庫儲存使用者資訊,更便於查詢和更改使用者資訊。