1. 程式人生 > >Java 小練習—使用者註冊登入(含異常處理 )

Java 小練習—使用者註冊登入(含異常處理 )

需求:

A:
請選擇要使用的功能
1. 登入
    請輸入賬號
    請輸入密碼
        呼叫 B 的方法獲取登入結果
    登入成功/登入失敗
2. 註冊
    請輸入賬號
    請輸入密碼
        呼叫 B 的方法獲取註冊結果
    註冊成功/註冊失敗

B:
登入
    根據賬號獲取密碼
    比較輸入的密碼和儲存的密碼是否一致
    返回比較結果

註冊
    根據賬號獲取密碼
    判斷密碼是否存在
    如果存在返回註冊失敗
    如果不存在,儲存賬號密碼,返回註冊成功

新建一個 賬號 錯誤類:


//1.extends Exception
//2.生成5個構造方法(alt + shift + s) public class AccountNotExistsException extends Exception{ public AccountNotExistsException() { super(); // TODO Auto-generated constructor stub } public AccountNotExistsException(String arg0, Throwable arg1, boolean arg2, boolean arg3) { super
(arg0, arg1, arg2, arg3); // TODO Auto-generated constructor stub } public AccountNotExistsException(String arg0, Throwable arg1) { super(arg0, arg1); // TODO Auto-generated constructor stub } public AccountNotExistsException(String arg0) { super(arg0); // TODO Auto-generated constructor stub
} public AccountNotExistsException(Throwable arg0) { super(arg0); // TODO Auto-generated constructor stub } }

再建一個 密碼 錯誤類:


//密碼錯誤
public class PassswrodErrorException extends Exception{

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

    public PassswrodErrorException(String message, Throwable cause, boolean enableSuppression,
            boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
        // TODO Auto-generated constructor stub
    }

    public PassswrodErrorException(String message, Throwable cause) {
        super(message, cause);
        // TODO Auto-generated constructor stub
    }

    public PassswrodErrorException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

    public PassswrodErrorException(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }


}

新建一個介面:


public interface UserService {

    /**
     * 登入
     * @param account 賬號
     * @param password 密碼
     * @return 登入成功返回 true 否則 fallse
     * @throws AccountNotExistsException 可能出現賬號不存在的錯誤 
     * @throws PassswrodErrorException 可能出現密碼錯誤的錯誤 
     */
    boolean longin(String account, String password) throws AccountNotExistsException, PassswrodErrorException;

    /**
     * 註冊
     * @param account 賬號
     * @param password 密碼
     * @return 
     */
    boolean register(String account, String password);

}

新建一個實現介面的類:


import java.security.spec.PSSParameterSpec;
import java.util.HashMap;

public class UserServiceImpl implements UserService{

    //儲存使用者註冊的賬號和密碼
    private HashMap<String, String> users = new HashMap<String, String> ();

    @Override
    //該方法可能產生兩個錯誤
    public boolean longin(String account, String password) throws AccountNotExistsException, PassswrodErrorException{

        //1、根據 account 查詢儲存的 password
        String savedPassword = users.get(account);

        //2、判斷賬號是否存在
        if(savedPassword == null) {
            //登入失敗,賬號不存,丟擲異常,告訴使用者錯誤原因
            throw new AccountNotExistsException();
        }
        //3、比較兩個密碼是否一致
        if(savedPassword.equals(password)) {
            //密碼相同,登入成功
            return true;
        }else {
            //密碼不同,登入失敗,丟擲異常,告訴使用者錯誤原因,後續程式碼不再執行
            throw new PassswrodErrorException();
        }

    }

    @Override
    public boolean register(String account, String password) {
        //1、根據account查詢儲存的password
        String savedPassword = users.get(account);

        //2、判斷賬號是否存在
        if (savedPassword != null) {
            //註冊失敗
            return false;
        }
        //3、賬號不存在,可以註冊,儲存賬號和密碼
        users.put(account, password);
        return true;
    }

}

新建一個與使用者互動的類:


import java.util.Scanner;

public class UserController {

    private UserService userService;


    public UserService getUserService() {
        return userService;
    }


    public void setUserService(UserService userService) {
        this.userService = userService;
    }


    public void start() {
        Scanner sc = new Scanner(System.in);

        while(true) {
            System.out.println("請選擇要使用的功能");
            System.out.println("1.登入");
            System.out.println("2.註冊");

            //讀取使用者選擇的編號
            int systemNumber = sc.nextInt();

            switch(systemNumber) {
            case 1: {

                System.out.println("請輸入您的賬號");
                String account = sc.next();

                System.out.println("請輸入您的密碼");
                String password = sc.next();

                //呼叫login方法完成登入
                boolean result;
                try {
                    result = userService.longin(account, password);

                    System.out.println("登入成功");
                } catch (AccountNotExistsException e) {
                    System.out.println("賬號不存在,請註冊或重新輸入...\n");
                } catch (PassswrodErrorException e) {  
                    System.out.println("使用者名稱或密碼錯誤,請重新輸入...\n");
                }
                }
                break;
            case 2: {
                System.out.println("請輸入您的賬號");
                String account = sc.next();

                System.out.println("請輸入您的密碼");
                String password = sc.next();

                //呼叫login方法完成登入
                boolean result = userService.register(account, password);

                if (result) {
                    System.out.println("註冊成功");
                }else {
                    System.out.println("賬號已存在,註冊失敗");
                }
            }
                break;
            default: {
                System.out.println("請選擇正確的功能...");
            }
                break;
            }
        }

    }
}

新建一個執行類 :


public class Application {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        UserController controller = new UserController();

        UserServiceImpl service = new UserServiceImpl();

        controller.setUserService(service);

        controller.start();
    }

}