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