Java 小練習—使用者註冊登入(含異常處理 )
阿新 • • 發佈:2018-11-01
需求:
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();
}
}