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();
    }

}

猜你喜欢

转载自blog.csdn.net/ilovehua521/article/details/82663580