题目要求
1.创建一个User 类,包括:用户登录名(username)、密码(password)、用户真实姓 名(name)、电子邮件地址(email)属性和相应的构造方法及set/get 方法。
2.创建两个自定义异常类,一个LoginException,表示登录异常。一个RegisterException, 表示注册异常。自定义的两个异常,都要求有一个接受字符串类型参数的构造方法。
3.创建一个UserBiz 接口,该接口中定义两个方法:
void register(String username, String password, String password2, String name, String email) //用户注册
void login(String username, String password) //用户登录
其中register 方法接受两个password 参数,原因是:在用户注册时,需要输入两遍 password,只有两次输入的password 一致,才允许注册。
4.创建UserBiz 接口的实现类。其中,为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息(可能很多,模拟数据库中已存在数据的表)。Map 的键为用户登录名,值为登录名对应的User 对象。初始情况下,Map 中保存的对 象为以下两个:
用户名 密码 真实姓名 电子邮件
admin admin Administrator admin@123.com
tom cat tomcat tomcat@cat.com
register 方法在以下两种情况下抛出异常:
username 在Map 中已存在
两次输入的password 不一致
login 方法在以下两种情况下抛出异常:
username 不存在
username 和password 不匹配
5.写一个类。 该实现类的login 方法中:让用户输入用户名和密码,之后调用UserBiz 中的login 方法,完成登录的业务逻辑;该类的register 方法中,通过让用户输入注册时需要的信息,然后调用 UserBiz 中的register 方法。
6.编写测试代码
注意:异常的抛出与处理
解答如下:
-
User
package com.java10.demo; /** * @author: Mr.shan * @date: 2022/6/29 20:36 * @bz: */ public class User { private String username; private String password; private String name; private String email; public User(String username, String password, String name, String email) { this.username = username; this.password = password; this.name = name; this.email = email; } public User() { } 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; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", name='" + name + '\'' + ", email='" + email + '\'' + '}'; } } -
RegisterException 注册异常类
package com.java10.demo; /** * @author: Mr.shan * @date: 2022/6/29 20:38 * @bz: */ public class RegisterException extends Exception{ public RegisterException() { } public RegisterException(String message) { super(message); } } -
LoginException 登录异常类
package com.java10.demo; /** * @author: Mr.shan * @date: 2022/6/29 20:39 * @bz: */ public class LoginException extends Exception { public LoginException() { } public LoginException(String message) { super(message); } } -
UserBiz 用户服务接口
package com.java10.demo; public interface UserBiz { void register(String username,String password,String password2,String name,String email)throws RegisterException; void login(String username,String password)throws LoginException; void see(); } -
UserBizImpl 用户服务实现类
package com.java10.demo; import java.util.HashMap; import java.util.Map; /** * @author: Mr.shan * @date: 2022/6/29 20:42 * @bz: */ public class UserBizImpl implements UserBiz{ private Map<String,User> userMap; public UserBizImpl() { userMap = new HashMap<>(); userMap.put("admin",new User("admin","1","1","1")); userMap.put("js",new User("js","1","1","1")); } @Override public void register(String username, String password, String password2, String name, String email) throws RegisterException { User user = userMap.get(username); if (user!=null){ throw new RegisterException("用户名已存在"); }else if (!password2.equals(password)){ throw new RegisterException("两次输入密码不相等"); }else{ userMap.put(username,new User(username,password,name,email)); System.out.println("注册成功"); } } @Override public void login(String username, String password) throws LoginException { User user = userMap.get(username); if (user==null){ throw new LoginException("用户不存在"); }else if(!user.getPassword().equals(password)){ throw new LoginException("用户名和密码不匹配"); }else{ System.out.println("登陆成功"); } } @Override public void see() { System.out.println(userMap.values()); } } -
UserView 用户界面接口
package com.java10.demo; public interface UserView { void register(); void login(); } -
UserViewImpl 用户界面实现类
package com.java10.demo; import java.util.Scanner; /** * @author: Mr.shan * @date: 2022/6/29 20:55 * @bz: */ public class UserViewImpl implements UserView{ UserBiz userBiz=new UserBizImpl(); Scanner sc=new Scanner(System.in); @Override public void register() { System.out.println("请输入用户名"); String username = sc.next(); System.out.println("请输入密码"); String password=sc.next(); System.out.println("请再次输入密码"); String password2=sc.next(); System.out.println("请输入名字"); String name = sc.next(); System.out.println("请输入邮箱"); String email = sc.next(); try { userBiz.register(username,password,password2,name,email); } catch (RegisterException e) { e.printStackTrace(); } } @Override public void login() { System.out.println("请输入用户名"); String username = sc.next(); System.out.println("请输入密码"); String password=sc.next(); try { userBiz.login(username,password); } catch (LoginException e) { e.printStackTrace(); } } public void see(){ userBiz.see(); } } -
Test 测试类
package com.java10.demo; import java.util.Scanner; /** * @author: Mr.shan * @date: 2022/6/29 20:55 * @bz: */ public class UserViewImpl implements UserView{ UserBiz userBiz=new UserBizImpl(); Scanner sc=new Scanner(System.in); @Override public void register() { System.out.println("请输入用户名"); String username = sc.next(); System.out.println("请输入密码"); String password=sc.next(); System.out.println("请再次输入密码"); String password2=sc.next(); System.out.println("请输入名字"); String name = sc.next(); System.out.println("请输入邮箱"); String email = sc.next(); try { userBiz.register(username,password,password2,name,email); } catch (RegisterException e) { e.printStackTrace(); } } @Override public void login() { System.out.println("请输入用户名"); String username = sc.next(); System.out.println("请输入密码"); String password=sc.next(); try { userBiz.login(username,password); } catch (LoginException e) { e.printStackTrace(); } } public void see(){ userBiz.see(); } }